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

@ -1,5 +1,4 @@
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
import { lastVisitedObjectMetadataItemIdStateSelector } from '@/navigation/states/selectors/lastVisitedObjectMetadataItemIdStateSelector';
import { lastVisitedViewPerObjectMetadataItemStateSelector } from '@/navigation/states/selectors/lastVisitedViewPerObjectMetadataItemStateSelector';
import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems';
import { extractComponentState } from '@/ui/utilities/state/component-state/utils/extractComponentState';
@ -10,20 +9,11 @@ export const useLastVisitedView = () => {
const currentWorkspace = useRecoilValue(currentWorkspaceState);
const scopeId = currentWorkspace?.id ?? '';
const lastVisitedObjectMetadataItemIdState = extractComponentState(
lastVisitedObjectMetadataItemIdStateSelector,
scopeId,
);
const lastVisitedViewPerObjectMetadataItemState = extractComponentState(
lastVisitedViewPerObjectMetadataItemStateSelector,
scopeId,
);
const lastVisitedObjectMetadataItemId = useRecoilValue(
lastVisitedObjectMetadataItemIdState,
);
const [
lastVisitedViewPerObjectMetadataItem,
setLastVisitedViewPerObjectMetadataItem,
@ -35,6 +25,7 @@ export const useLastVisitedView = () => {
const setFallbackForLastVisitedView = (objectMetadataItemId: string) => {
/* ...{} allows us to pass value as undefined to remove that particular key
even though param type is of type Record<string,string> */
setLastVisitedViewPerObjectMetadataItem({
...{},
[objectMetadataItemId]: undefined,
@ -48,22 +39,12 @@ export const useLastVisitedView = () => {
objectNamePlural: string;
viewId: string;
}) => {
const fallbackObjectMetadataItem =
const objectMetadataItem =
findActiveObjectMetadataItemByNamePlural(objectNamePlural);
if (isDefined(fallbackObjectMetadataItem)) {
/* when both are equal meaning there was change in view else
there was a object page change from nav
*/
const fallbackViewId =
lastVisitedObjectMetadataItemId === fallbackObjectMetadataItem.id
? viewId
: (lastVisitedViewPerObjectMetadataItem?.[
fallbackObjectMetadataItem.id
] ?? viewId);
if (isDefined(objectMetadataItem)) {
setLastVisitedViewPerObjectMetadataItem({
[fallbackObjectMetadataItem.id]: fallbackViewId,
[objectMetadataItem.id]: viewId,
});
}
};