Fix latest visited view (#10158)

Fixes https://github.com/twentyhq/twenty/issues/9772

In this PR:
- the root cause of the issue that the ContextStoreViewIdEffect was not
filtering the views on objectMetadata properly
- I'm also deleting some over complex in the latestVisited view logic
- Duplicated logic between ContextStoreViewIdEffect and
ViewBarViewIdEffect, see my comment
This commit is contained in:
Charles Bochet
2025-02-13 00:52:04 +01:00
committed by GitHub
parent 8f69352d17
commit 466f8c733f
9 changed files with 237 additions and 290 deletions

View File

@ -0,0 +1,96 @@
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 { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { useRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentStateV2';
import { useEffect } from 'react';
import { useRecoilState } from 'recoil';
export const MainContextStoreProviderEffect = ({
mainContextStoreComponentInstanceIdToSet,
viewId,
objectMetadataItem,
}: {
mainContextStoreComponentInstanceIdToSet: string;
viewId: string;
objectMetadataItem: ObjectMetadataItem;
}) => {
const [
mainContextStoreComponentInstanceId,
setMainContextStoreComponentInstanceId,
] = useRecoilState(mainContextStoreComponentInstanceIdState);
const { getLastVisitedViewIdFromObjectNamePlural, setLastVisitedView } =
useLastVisitedView();
const { lastVisitedObjectMetadataItemId, setLastVisitedObjectMetadataItem } =
useLastVisitedObjectMetadataItem();
const lastVisitedViewId = getLastVisitedViewIdFromObjectNamePlural(
objectMetadataItem.namePlural,
);
const [contextStoreCurrentViewId, setContextStoreCurrentViewId] =
useRecoilComponentStateV2(
contextStoreCurrentViewIdComponentState,
mainContextStoreComponentInstanceId,
);
const [
contextStoreCurrentObjectMetadataId,
setContextStoreCurrentObjectMetadataId,
] = useRecoilComponentStateV2(
contextStoreCurrentObjectMetadataIdComponentState,
mainContextStoreComponentInstanceId,
);
useEffect(() => {
if (contextStoreCurrentObjectMetadataId !== objectMetadataItem.id) {
setContextStoreCurrentObjectMetadataId(objectMetadataItem.id);
}
if (
mainContextStoreComponentInstanceIdToSet !==
mainContextStoreComponentInstanceId
) {
setMainContextStoreComponentInstanceId(
mainContextStoreComponentInstanceIdToSet,
);
}
if (viewId !== lastVisitedViewId) {
setLastVisitedView({
objectNamePlural: objectMetadataItem.namePlural,
viewId: viewId,
});
}
if (objectMetadataItem.id !== lastVisitedObjectMetadataItemId) {
setLastVisitedObjectMetadataItem(objectMetadataItem.namePlural);
}
if (contextStoreCurrentViewId !== viewId) {
console.log('contextStoreCurrentViewId', contextStoreCurrentViewId);
setContextStoreCurrentViewId(viewId);
}
}, [
contextStoreCurrentObjectMetadataId,
contextStoreCurrentViewId,
lastVisitedObjectMetadataItemId,
lastVisitedViewId,
mainContextStoreComponentInstanceId,
mainContextStoreComponentInstanceIdToSet,
objectMetadataItem,
objectMetadataItem.namePlural,
setContextStoreCurrentObjectMetadataId,
setContextStoreCurrentViewId,
setLastVisitedObjectMetadataItem,
setLastVisitedView,
setMainContextStoreComponentInstanceId,
viewId,
]);
return null;
};