Skip to content

Commit 642a691

Browse files
authored
Merge pull request #394 from clerkinc/user_button_open_prop
feat(clerk-js): Add open prop in user button
2 parents 241d033 + 1d7b0a9 commit 642a691

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ import { UserButtonPopover } from './UserButtonPopover';
1010
import { UserButtonTrigger } from './UserButtonTrigger';
1111

1212
const _UserButton = () => {
13+
const { defaultOpen } = useUserButtonContext();
1314
const { floating, reference, styles, toggle, isOpen } = usePopover({
14-
defaultOpen: false,
15+
defaultOpen,
1516
placement: 'bottom-end',
1617
offset: 8,
1718
});

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

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

1212
type UsePopoverProps = {
1313
defaultOpen?: boolean;
@@ -18,13 +18,20 @@ type UsePopoverProps = {
1818

1919
export const usePopover = (props: UsePopoverProps = {}) => {
2020
const [isOpen, setIsOpen] = React.useState(props.defaultOpen || false);
21-
const { reference, floating, strategy, x, y, context } = useFloating({
21+
const { update, reference, floating, strategy, x, y, context } = useFloating({
2222
open: isOpen,
2323
onOpenChange: setIsOpen,
2424
whileElementsMounted: props.autoUpdate === false ? undefined : autoUpdate,
2525
placement: props.placement || 'bottom-start',
2626
middleware: [offset(props.offset || 6), flip(), shift()],
2727
});
28+
29+
useEffect(() => {
30+
if (props.defaultOpen) {
31+
update();
32+
}
33+
}, []);
34+
2835
useDismiss(context);
2936

3037
const toggle = React.useCallback(() => setIsOpen(o => !o), [setIsOpen]);

packages/types/src/clerk.ts

+4
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,10 @@ export type UserButtonProps = {
445445
* Controls if the username is displayed next to the trigger button
446446
*/
447447
showName?: boolean;
448+
/**
449+
Controls the default state of the UserButton
450+
*/
451+
defaultOpen?: boolean;
448452
/**
449453
* Full URL or path to navigate after sign out is complete
450454
*/

0 commit comments

Comments
 (0)