Simplify last visited (#10259)

In this PR, I'm simplifying the lastVisitedView / Object logic:
- removing fallback logic as it's not useful
- splitting hooks into smaller hooks (to avoir re-renders)
- removing componentState on those states that are global
This commit is contained in:
Charles Bochet
2025-02-17 17:27:28 +01:00
committed by GitHub
parent a526472ddc
commit 5b4cb4bd2c
22 changed files with 249 additions and 278 deletions

View File

@ -48,6 +48,7 @@ export const MainContextStoreProvider = () => {
const [searchParams] = useSearchParams();
const viewIdQueryParam = searchParams.get('viewId');
// Todo: this is triggering a lot of re-renders as we update the viewFields, we should introduce a state here
const { records: views } = usePrefetchedData<View>(PrefetchKey.AllViews);
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);

View File

@ -1,8 +1,8 @@
import { contextStoreCurrentObjectMetadataIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataIdComponentState';
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
import { mainContextStoreComponentInstanceIdState } from '@/context-store/states/mainContextStoreComponentInstanceId';
import { useLastVisitedObjectMetadataItem } from '@/navigation/hooks/useLastVisitedObjectMetadataItem';
import { useLastVisitedView } from '@/navigation/hooks/useLastVisitedView';
import { useSetLastVisitedObjectMetadataId } from '@/navigation/hooks/useSetLastVisitedObjectMetadataId';
import { useSetLastVisitedViewForObjectMetadataNamePlural } from '@/navigation/hooks/useSetLastVisitedViewForObjectMetadataNamePlural';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { useRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentStateV2';
import { useEffect } from 'react';
@ -22,15 +22,11 @@ export const MainContextStoreProviderEffect = ({
setMainContextStoreComponentInstanceId,
] = useRecoilState(mainContextStoreComponentInstanceIdState);
const { getLastVisitedViewIdFromObjectNamePlural, setLastVisitedView } =
useLastVisitedView();
const { setLastVisitedViewForObjectMetadataNamePlural } =
useSetLastVisitedViewForObjectMetadataNamePlural();
const { lastVisitedObjectMetadataItemId, setLastVisitedObjectMetadataItem } =
useLastVisitedObjectMetadataItem();
const lastVisitedViewId = getLastVisitedViewIdFromObjectNamePlural(
objectMetadataItem.namePlural,
);
const { setLastVisitedObjectMetadataId } =
useSetLastVisitedObjectMetadataId();
const [contextStoreCurrentViewId, setContextStoreCurrentViewId] =
useRecoilComponentStateV2(
@ -60,16 +56,14 @@ export const MainContextStoreProviderEffect = ({
);
}
if (viewId !== lastVisitedViewId) {
setLastVisitedView({
objectNamePlural: objectMetadataItem.namePlural,
viewId: viewId,
});
}
setLastVisitedViewForObjectMetadataNamePlural({
objectNamePlural: objectMetadataItem.namePlural,
viewId: viewId,
});
if (objectMetadataItem.id !== lastVisitedObjectMetadataItemId) {
setLastVisitedObjectMetadataItem(objectMetadataItem.namePlural);
}
setLastVisitedObjectMetadataId({
objectMetadataItemId: objectMetadataItem.id,
});
if (contextStoreCurrentViewId !== viewId) {
setContextStoreCurrentViewId(viewId);
@ -77,16 +71,14 @@ export const MainContextStoreProviderEffect = ({
}, [
contextStoreCurrentObjectMetadataId,
contextStoreCurrentViewId,
lastVisitedObjectMetadataItemId,
lastVisitedViewId,
mainContextStoreComponentInstanceId,
mainContextStoreComponentInstanceIdToSet,
objectMetadataItem,
objectMetadataItem.namePlural,
setContextStoreCurrentObjectMetadataId,
setContextStoreCurrentViewId,
setLastVisitedObjectMetadataItem,
setLastVisitedView,
setLastVisitedObjectMetadataId,
setLastVisitedViewForObjectMetadataNamePlural,
setMainContextStoreComponentInstanceId,
viewId,
]);