121788c42f
## 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`).
51 lines
2.0 KiB
TypeScript
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,
|
|
};
|
|
};
|