Shared:Components:DropDown: fix item click

This commit is contained in:
Timofey Boyko 2023-12-20 17:44:46 +03:00
parent 754cc9e39c
commit eaed4e0de1
3 changed files with 19 additions and 5 deletions

View File

@ -113,7 +113,12 @@ const ContextMenuButtonPure = ({
[],
);
const toggle = (isOpen: boolean) => setState((s) => ({ ...s, isOpen }));
const toggle = (o?: boolean) => {
setState((s) => ({
...s,
isOpen: typeof o === "boolean" ? o : !s.isOpen,
}));
};
const onCloseAction = React.useCallback(() => {
setState((s) => ({ ...s, isOpen: !s.isOpen }));
@ -133,7 +138,7 @@ const ContextMenuButtonPure = ({
}, [popstate]);
React.useEffect(() => {
toggle(opened || false);
toggle(opened);
}, [opened]);
React.useEffect(() => {
@ -152,7 +157,7 @@ const ContextMenuButtonPure = ({
return;
}
setState((s) => ({ ...s, data: getData(), isOpen: !state.isOpen }));
setState((s) => ({ ...s, data: getData(), isOpen: !s.isOpen }));
if (!isDisabled && state.isOpen) onClick?.(e);
};
@ -174,8 +179,8 @@ const ContextMenuButtonPure = ({
if ("onClick" in item) {
const open = state.displayType === "dropdown";
item.onClick?.(e, open, item);
toggle(!state.isOpen);
}
toggle();
};
const callNewMenu = (e: React.MouseEvent) => {

View File

@ -427,10 +427,19 @@ const DropDown = ({
const listener = (evt: Event) => {
const target = evt.target as HTMLElement;
if (dropDownRef.current && dropDownRef.current.contains(target)) return;
clickOutsideAction?.(evt, !open);
};
if (!open) {
eventTypes?.forEach((type) => {
window.removeEventListener(type, listener);
});
return;
}
eventTypes?.forEach((type) => {
window.addEventListener(type, listener);
});

View File

@ -16,7 +16,7 @@ const DropDown = (props: DropDownProps) => {
isAside,
withBackground,
eventTypes,
eventTypes = ["click"],
forceCloseClickOutside,
withoutBackground,
} = props;