Closes #7665 - Handle select all - Handle Filters --------- Co-authored-by: Charles Bochet <charles@twenty.com>
47 lines
1.8 KiB
TypeScript
47 lines
1.8 KiB
TypeScript
import { useActionMenu } from '@/action-menu/hooks/useActionMenu';
|
|
import { ActionMenuComponentInstanceContext } from '@/action-menu/states/contexts/ActionMenuComponentInstanceContext';
|
|
import { contextStoreNumberOfSelectedRecordsState } from '@/context-store/states/contextStoreNumberOfSelectedRecordsState';
|
|
import { isDropdownOpenComponentState } from '@/ui/layout/dropdown/states/isDropdownOpenComponentState';
|
|
import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow';
|
|
import { extractComponentState } from '@/ui/utilities/state/component-state/utils/extractComponentState';
|
|
import { useEffect } from 'react';
|
|
import { useRecoilValue } from 'recoil';
|
|
|
|
export const ActionMenuEffect = () => {
|
|
const contextStoreNumberOfSelectedRecords = useRecoilValue(
|
|
contextStoreNumberOfSelectedRecordsState,
|
|
);
|
|
|
|
const actionMenuId = useAvailableComponentInstanceIdOrThrow(
|
|
ActionMenuComponentInstanceContext,
|
|
);
|
|
|
|
const { openActionBar, closeActionBar } = useActionMenu(actionMenuId);
|
|
|
|
const isDropdownOpen = useRecoilValue(
|
|
extractComponentState(
|
|
isDropdownOpenComponentState,
|
|
`action-menu-dropdown-${actionMenuId}`,
|
|
),
|
|
);
|
|
|
|
useEffect(() => {
|
|
if (contextStoreNumberOfSelectedRecords > 0 && !isDropdownOpen) {
|
|
// We only handle opening the ActionMenuBar here, not the Dropdown.
|
|
// The Dropdown is already managed by sync handlers for events like
|
|
// right-click to open and click outside to close.
|
|
openActionBar();
|
|
}
|
|
if (contextStoreNumberOfSelectedRecords === 0 && isDropdownOpen) {
|
|
closeActionBar();
|
|
}
|
|
}, [
|
|
contextStoreNumberOfSelectedRecords,
|
|
openActionBar,
|
|
closeActionBar,
|
|
isDropdownOpen,
|
|
]);
|
|
|
|
return null;
|
|
};
|