Improve Jotai work (#18205)

This commit is contained in:
Charles Bochet
2026-02-24 20:38:30 +01:00
committed by GitHub
parent b339c93699
commit eaf9fe27b2
210 changed files with 1714 additions and 1662 deletions
@@ -1,6 +1,5 @@
import { currentUserState } from '@/auth/states/currentUserState';
import { lastVisitedObjectMetadataItemIdState } from '@/navigation/states/lastVisitedObjectMetadataItemIdState';
import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore';
import { type ObjectPathInfo } from '@/navigation/types/ObjectPathInfo';
import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems';
import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions';
@@ -12,8 +11,10 @@ import isEmpty from 'lodash.isempty';
import { useCallback, useMemo } from 'react';
import { AppPath, SettingsPath } from 'twenty-shared/types';
import { getAppPath, getSettingsPath, isDefined } from 'twenty-shared/utils';
import { useStore } from 'jotai';
export const useDefaultHomePagePath = () => {
const store = useStore();
const currentUser = useRecoilValueV2(currentUserState);
const { objectPermissionsByObjectMetadataId } = useObjectPermissions();
@@ -69,7 +70,7 @@ export const useDefaultHomePagePath = () => {
}, [getFirstView, readableAlphaSortedActiveNonSystemObjectMetadataItems]);
const getDefaultObjectPathInfo = useCallback(() => {
const lastVisitedObjectMetadataItemId = jotaiStore.get(
const lastVisitedObjectMetadataItemId = store.get(
lastVisitedObjectMetadataItemIdState.atom,
);
@@ -91,6 +92,7 @@ export const useDefaultHomePagePath = () => {
firstObjectPathInfo,
getActiveObjectMetadataItemMatchingId,
getFirstView,
store,
]);
const defaultHomePagePath = useMemo(() => {
@@ -1,19 +1,20 @@
import { lastVisitedObjectMetadataItemIdState } from '@/navigation/states/lastVisitedObjectMetadataItemIdState';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore';
import { useCallback } from 'react';
import { isDefined } from 'twenty-shared/utils';
import { useStore } from 'jotai';
export const useSetLastVisitedObjectMetadataId = () => {
const store = useStore();
const setLastVisitedObjectMetadataId = useCallback(
({ objectMetadataItemId }: { objectMetadataItemId: string }) => {
const objectMetadataItems = jotaiStore.get(objectMetadataItemsState.atom);
const objectMetadataItems = store.get(objectMetadataItemsState.atom);
const objectMetadataItem = objectMetadataItems.find(
(item) => item.id === objectMetadataItemId,
);
const lastVisitedObjectMetadataItemId = jotaiStore.get(
const lastVisitedObjectMetadataItemId = store.get(
lastVisitedObjectMetadataItemIdState.atom,
);
@@ -21,13 +22,13 @@ export const useSetLastVisitedObjectMetadataId = () => {
isDefined(objectMetadataItem) &&
lastVisitedObjectMetadataItemId !== objectMetadataItemId
) {
jotaiStore.set(
store.set(
lastVisitedObjectMetadataItemIdState.atom,
objectMetadataItemId,
);
}
},
[],
[store],
);
return {
@@ -1,12 +1,13 @@
import { lastVisitedViewPerObjectMetadataItemState } from '@/navigation/states/lastVisitedViewPerObjectMetadataItemState';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore';
import { coreViewsState } from '@/views/states/coreViewState';
import { type CoreViewWithRelations } from '@/views/types/CoreViewWithRelations';
import { useCallback } from 'react';
import { isDefined } from 'twenty-shared/utils';
import { useStore } from 'jotai';
export const useSetLastVisitedViewForObjectMetadataNamePlural = () => {
const store = useStore();
const setLastVisitedViewForObjectMetadataNamePlural = useCallback(
async ({
objectNamePlural,
@@ -15,13 +16,13 @@ export const useSetLastVisitedViewForObjectMetadataNamePlural = () => {
objectNamePlural: string;
viewId: string;
}) => {
const views = jotaiStore.get(coreViewsState.atom);
const views = store.get(coreViewsState.atom);
const view = views.find(
(view: CoreViewWithRelations) => view.id === viewId,
);
const objectMetadataItems = jotaiStore.get(objectMetadataItemsState.atom);
const objectMetadataItems = store.get(objectMetadataItemsState.atom);
const objectMetadataItem = objectMetadataItems.find(
(item) => item.namePlural === objectNamePlural,
@@ -35,7 +36,7 @@ export const useSetLastVisitedViewForObjectMetadataNamePlural = () => {
return;
}
const lastVisitedViewPerObjectMetadataItem = jotaiStore.get(
const lastVisitedViewPerObjectMetadataItem = store.get(
lastVisitedViewPerObjectMetadataItemState.atom,
);
@@ -43,13 +44,13 @@ export const useSetLastVisitedViewForObjectMetadataNamePlural = () => {
lastVisitedViewPerObjectMetadataItem?.[objectMetadataItem?.id];
if (isDefined(objectMetadataItem) && lastVisitedViewId !== viewId) {
jotaiStore.set(lastVisitedViewPerObjectMetadataItemState.atom, {
store.set(lastVisitedViewPerObjectMetadataItemState.atom, {
...lastVisitedViewPerObjectMetadataItem,
[objectMetadataItem.id]: viewId,
});
}
},
[],
[store],
);
return {