diff --git a/packages/twenty-front/src/modules/action-menu/hooks/useActionMenuEntries.ts b/packages/twenty-front/src/modules/action-menu/hooks/useActionMenuEntries.ts index 5f375eca1..61a165ccd 100644 --- a/packages/twenty-front/src/modules/action-menu/hooks/useActionMenuEntries.ts +++ b/packages/twenty-front/src/modules/action-menu/hooks/useActionMenuEntries.ts @@ -1,25 +1,45 @@ import { actionMenuEntriesComponentState } from '@/action-menu/states/actionMenuEntriesComponentState'; import { ActionMenuEntry } from '@/action-menu/types/ActionMenuEntry'; -import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2'; +import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2'; +import { useRecoilCallback } from 'recoil'; export const useActionMenuEntries = () => { - const setActionMenuEntries = useSetRecoilComponentStateV2( + const actionMenuEntryState = useRecoilComponentCallbackStateV2( actionMenuEntriesComponentState, ); - const addActionMenuEntry = (entry: ActionMenuEntry) => { - setActionMenuEntries( - (prevEntries) => new Map([...prevEntries, [entry.key, entry]]), - ); - }; + const addActionMenuEntry = useRecoilCallback( + ({ snapshot, set }) => + async (entryToAdd: ActionMenuEntry) => { + const currentEntries = snapshot + .getLoadable(actionMenuEntryState) + .getValue(); - const removeActionMenuEntry = (key: string) => { - setActionMenuEntries((prevEntries) => { - const newMap = new Map(prevEntries); - newMap.delete(key); - return newMap; - }); - }; + const newEntries = new Map([ + ...currentEntries, + [entryToAdd.key, entryToAdd], + ]); + set(actionMenuEntryState, newEntries); + }, + [actionMenuEntryState], + ); + + const removeActionMenuEntry = useRecoilCallback( + ({ snapshot, set }) => + async (entryKeyToRemove: string) => { + const currentEntries = snapshot + .getLoadable(actionMenuEntryState) + .getValue(); + + if (!currentEntries.has(entryKeyToRemove)) { + return; + } + const newEntries = new Map(currentEntries); + newEntries.delete(entryKeyToRemove); + set(actionMenuEntryState, newEntries); + }, + [actionMenuEntryState], + ); return { addActionMenuEntry,