diff --git a/web/app/components/base/portal-to-follow-elem/index.spec.tsx b/web/app/components/base/portal-to-follow-elem/index.spec.tsx index 74790d7846..80cd1ddd76 100644 --- a/web/app/components/base/portal-to-follow-elem/index.spec.tsx +++ b/web/app/components/base/portal-to-follow-elem/index.spec.tsx @@ -14,7 +14,7 @@ describe('PortalToFollowElem', () => { expect(() => { render( - Trigger , + Trigger, ) }).toThrow('PortalToFollowElem components must be wrapped in ') @@ -25,7 +25,7 @@ describe('PortalToFollowElem', () => { expect(() => { render( - Trigger + Trigger , ) }).not.toThrow() @@ -36,7 +36,7 @@ describe('PortalToFollowElem', () => { test('should render children correctly', () => { const { getByText } = render( - Trigger Text + Trigger Text , ) expect(getByText('Trigger Text')).toBeInTheDocument() @@ -46,7 +46,7 @@ describe('PortalToFollowElem', () => { const { getByRole } = render( - + , ) @@ -59,8 +59,8 @@ describe('PortalToFollowElem', () => { test('should not render content when closed', () => { const { queryByText } = render( - Trigger - Popup Content + Trigger + Popup Content , ) @@ -71,7 +71,7 @@ describe('PortalToFollowElem', () => { const { getByText } = render( Trigger - Popup Content + Popup Content , ) @@ -85,8 +85,8 @@ describe('PortalToFollowElem', () => { const { getByText } = render( - Hover Me - Content + Hover Me + Content , ) @@ -104,8 +104,8 @@ describe('PortalToFollowElem', () => { const useFloatingMock = jest.spyOn(require('@floating-ui/react'), 'useFloating') render( - - Trigger + + Trigger , ) diff --git a/web/app/components/base/portal-to-follow-elem/index.tsx b/web/app/components/base/portal-to-follow-elem/index.tsx index 55891bd8d2..abecaf62a2 100644 --- a/web/app/components/base/portal-to-follow-elem/index.tsx +++ b/web/app/components/base/portal-to-follow-elem/index.tsx @@ -41,6 +41,7 @@ export function usePortalToFollowElem({ }: PortalToFollowElemOptions = {}) { const [localOpen, setLocalOpen] = useState(false) const open = controlledOpen ?? localOpen + const isControlled = controlledOpen !== undefined const handleOpenChange = useCallback((newOpen: boolean) => { setLocalOpen(newOpen) setControlledOpen?.(newOpen) @@ -72,10 +73,10 @@ export function usePortalToFollowElem({ const hover = useHover(context, { move: false, - enabled: open == null, + enabled: !isControlled, }) const focus = useFocus(context, { - enabled: open == null, + enabled: !isControlled, }) const dismiss = useDismiss(context) const role = useRole(context, { role: 'tooltip' }) @@ -85,10 +86,10 @@ export function usePortalToFollowElem({ const interactionsArray = useMemo(() => { const result = [hover, focus, dismiss, role] - if (!setControlledOpen) + if (!isControlled) result.push(click) return result - }, [setControlledOpen, hover, focus, dismiss, role, click]) + }, [isControlled, hover, focus, dismiss, role, click]) const interactions = useInteractions(interactionsArray) return React.useMemo( @@ -148,7 +149,7 @@ export const PortalToFollowElemTrigger = ( context.getReferenceProps({ ref, ...props, - ...children.props, + ...(children.props || {}), 'data-state': context.open ? 'open' : 'closed', } as React.HTMLProps), )