Files
twenty/packages/twenty-front/src/modules/navigation-menu-item/hooks/usePrefetchedNavigationMenuItemsData.ts
T
Charles Bochet 121788c42f Fully deprecate old recoil (#18210)
## Summary

Removes the `recoil` dependency entirely from `package.json` and
`twenty-front/package.json`, completing the migration to Jotai as the
sole state management library.

Removes all Recoil infrastructure: `RecoilRoot` wrapper from `App.tsx`
and test decorators, `RecoilDebugObserver`, Recoil-specific ESLint rules
(`use-getLoadable-and-getValue-to-get-atoms`,
`useRecoilCallback-has-dependency-array`), and legacy Recoil utility
hooks/types (`useRecoilComponentState`, `useRecoilComponentValue`,
`createComponentState`, `createFamilyState`, `getSnapshotValue`,
`cookieStorageEffect`, `localStorageEffect`, etc.).

Renames all `V2`-suffixed Jotai state files and types to their canonical
names (e.g., `ComponentStateV2` -> `ComponentState`,
`agentChatInputStateV2` -> `agentChatInputState`, `SelectorCallbacksV2`
-> `SelectorCallbacks`), and removes the now-redundant V1 counterparts.

Updates ~433 files across the codebase to use the renamed Jotai imports,
remove Recoil imports, and clean up test wrappers (`RecoilRootDecorator`
-> `JotaiRootDecorator`).
2026-02-25 12:26:42 +01:00

51 lines
2.0 KiB
TypeScript

import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState';
import { isNavigationMenuInEditModeState } from '@/navigation-menu-item/states/isNavigationMenuInEditModeState';
import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/navigationMenuItemsDraftState';
import { filterWorkspaceNavigationMenuItems } from '@/navigation-menu-item/utils/filterWorkspaceNavigationMenuItems';
import { prefetchNavigationMenuItemsState } from '@/prefetch/states/prefetchNavigationMenuItemsState';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { isDefined } from 'twenty-shared/utils';
import { type NavigationMenuItem } from '~/generated-metadata/graphql';
type PrefetchedNavigationMenuItemsData = {
navigationMenuItems: NavigationMenuItem[];
workspaceNavigationMenuItems: NavigationMenuItem[];
currentWorkspaceMemberId: string | undefined;
};
export const usePrefetchedNavigationMenuItemsData =
(): PrefetchedNavigationMenuItemsData => {
const currentWorkspaceMember = useAtomStateValue(
currentWorkspaceMemberState,
);
const currentWorkspaceMemberId = currentWorkspaceMember?.id;
const prefetchNavigationMenuItems = useAtomStateValue(
prefetchNavigationMenuItemsState,
);
const isNavigationMenuInEditMode = useAtomStateValue(
isNavigationMenuInEditModeState,
);
const navigationMenuItemsDraft = useAtomStateValue(
navigationMenuItemsDraftState,
);
const navigationMenuItems = prefetchNavigationMenuItems.filter((item) =>
isDefined(item.userWorkspaceId),
);
const workspaceNavigationMenuItemsFromPrefetch =
filterWorkspaceNavigationMenuItems(prefetchNavigationMenuItems);
const workspaceNavigationMenuItems =
isNavigationMenuInEditMode && isDefined(navigationMenuItemsDraft)
? navigationMenuItemsDraft
: workspaceNavigationMenuItemsFromPrefetch;
return {
navigationMenuItems,
workspaceNavigationMenuItems,
currentWorkspaceMemberId,
};
};