feat: added a dropDownCloseEffect component (#1621)

* feat: added a dropDownCloseEffect component

* Delete yarn.lock

* refactor: moved the DropdownCloseEffect inside the Dropdown button as a hook

* refactor: moved the DropdownCloseEffect to the DropdownButton jsx
This commit is contained in:
Chigala
2023-09-17 16:09:05 +01:00
committed by GitHub
parent fa7282ab4c
commit aaa63b3820
2 changed files with 29 additions and 0 deletions

View File

@ -9,6 +9,8 @@ import { useListenClickOutside } from '@/ui/utilities/pointer-event/hooks/useLis
import { useDropdownButton } from '../hooks/useDropdownButton';
import { useInternalHotkeyScopeManagement } from '../hooks/useInternalHotkeyScopeManagement';
import { DropdownCloseEffect } from './DropdownCloseEffect';
type OwnProps = {
buttonComponents: JSX.Element | JSX.Element[];
dropdownComponents: JSX.Element | JSX.Element[];
@ -20,6 +22,7 @@ type OwnProps = {
dropdownHotkeyScope?: HotkeyScope;
dropdownPlacement?: Placement;
onClickOutside?: () => void;
onClose?: () => void;
};
export const DropdownButton = ({
@ -30,6 +33,7 @@ export const DropdownButton = ({
dropdownHotkeyScope,
dropdownPlacement = 'bottom-end',
onClickOutside,
onClose,
}: OwnProps) => {
const containerRef = useRef<HTMLDivElement>(null);
@ -77,6 +81,10 @@ export const DropdownButton = ({
{dropdownComponents}
</div>
)}
<DropdownCloseEffect
dropdownId={dropdownId}
onDropdownClose={() => onClose?.()}
/>
</div>
);
};

View File

@ -0,0 +1,21 @@
import { useEffect } from 'react';
import { useDropdownButton } from '../hooks/useDropdownButton';
export const DropdownCloseEffect = ({
dropdownId,
onDropdownClose,
}: {
dropdownId: string;
onDropdownClose: () => void;
}) => {
const { isDropdownButtonOpen } = useDropdownButton({ dropdownId });
useEffect(() => {
if (!isDropdownButtonOpen) {
onDropdownClose();
}
}, [isDropdownButtonOpen]);
return null;
};