Skip to content

Commit 1d7b0a9

Browse files
committed
fix(clerk-js): Refactor defaultOpen prop
1 parent 044860f commit 1d7b0a9

File tree

4 files changed

+13
-15
lines changed

4 files changed

+13
-15
lines changed

packages/clerk-js/src/ui/UserButton/UserButton.tsx

+5-6
Original file line numberDiff line numberDiff line change
@@ -10,31 +10,30 @@ import { UserButtonPopover } from './UserButtonPopover';
1010
import { UserButtonTrigger } from './UserButtonTrigger';
1111

1212
const _UserButton = () => {
13-
const { isOpen: isOpenProp } = useUserButtonContext();
13+
const { defaultOpen } = useUserButtonContext();
1414
const { floating, reference, styles, toggle, isOpen } = usePopover({
15-
defaultOpen: false,
15+
defaultOpen,
1616
placement: 'bottom-end',
1717
offset: 8,
18-
isOpenProp,
1918
});
2019

2120
return (
2221
<Flow.Root flow='userButton'>
2322
<Flex
2423
elementDescriptor={descriptors.userButtonBox}
25-
isOpen={isOpenProp || isOpen}
24+
isOpen={isOpen}
2625
align='center'
2726
gap={2}
2827
>
2928
<UserButtonTopLevelIdentifier />
3029
<UserButtonTrigger
3130
ref={reference}
3231
onClick={toggle}
33-
isOpen={isOpenProp || isOpen}
32+
isOpen={isOpen}
3433
/>
3534
<Portal>
3635
<UserButtonPopover
37-
isOpen={isOpenProp || isOpen}
36+
isOpen={isOpen}
3837
close={toggle}
3938
ref={floating}
4039
style={{ ...styles }}

packages/clerk-js/src/ui/hooks/usePopover.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,28 @@ import {
77
useFloating,
88
UseFloatingProps,
99
} from '@floating-ui/react-dom-interactions';
10-
import React, { useLayoutEffect } from 'react';
10+
import React, { useEffect } from 'react';
1111

1212
type UsePopoverProps = {
1313
defaultOpen?: boolean;
1414
placement?: UseFloatingProps['placement'];
1515
offset?: Parameters<typeof offset>[0];
1616
autoUpdate?: boolean;
17-
isOpenProp?: boolean;
1817
};
1918

2019
export const usePopover = (props: UsePopoverProps = {}) => {
2120
const [isOpen, setIsOpen] = React.useState(props.defaultOpen || false);
22-
const { reference, floating, strategy, x, y, context } = useFloating({
21+
const { update, reference, floating, strategy, x, y, context } = useFloating({
2322
open: isOpen,
2423
onOpenChange: setIsOpen,
2524
whileElementsMounted: props.autoUpdate === false ? undefined : autoUpdate,
2625
placement: props.placement || 'bottom-start',
2726
middleware: [offset(props.offset || 6), flip(), shift()],
2827
});
2928

30-
useLayoutEffect(() => {
31-
if (props.isOpenProp) {
32-
toggle();
29+
useEffect(() => {
30+
if (props.defaultOpen) {
31+
update();
3332
}
3433
}, []);
3534

packages/react/src/components/uiComponents.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class Portal extends React.PureComponent<MountProps, {}> {
3636
private portalRef = React.createRef<HTMLDivElement>();
3737

3838
componentDidUpdate(prevProps: Readonly<MountProps>) {
39-
if (prevProps.props.appearance !== this.props.props.appearance || prevProps.props !== this.props.props) {
39+
if (prevProps.props.appearance !== this.props.props.appearance) {
4040
this.props.updateProps({ node: this.portalRef.current, props: this.props.props });
4141
}
4242
}

packages/types/src/clerk.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -446,9 +446,9 @@ export type UserButtonProps = {
446446
*/
447447
showName?: boolean;
448448
/**
449-
Controls programmatically if the UserButton component is open or not
449+
Controls the default state of the UserButton
450450
*/
451-
isOpen?: boolean;
451+
defaultOpen?: boolean;
452452
/**
453453
* Full URL or path to navigate after sign out is complete
454454
*/

0 commit comments

Comments
 (0)