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:
@ -1,54 +1,15 @@
|
||||
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
|
||||
import { lastVisitedViewPerObjectMetadataItemStateSelector } from '@/navigation/states/selectors/lastVisitedViewPerObjectMetadataItemStateSelector';
|
||||
import { lastVisitedViewPerObjectMetadataItemState } from '@/navigation/states/lastVisitedViewPerObjectMetadataItemState';
|
||||
import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems';
|
||||
import { extractComponentState } from '@/ui/utilities/state/component-state/utils/extractComponentState';
|
||||
import { useRecoilState, useRecoilValue } from 'recoil';
|
||||
import { isDefined } from 'twenty-shared';
|
||||
import { useRecoilValue } from 'recoil';
|
||||
|
||||
export const useLastVisitedView = () => {
|
||||
const currentWorkspace = useRecoilValue(currentWorkspaceState);
|
||||
const scopeId = currentWorkspace?.id ?? '';
|
||||
|
||||
const lastVisitedViewPerObjectMetadataItemState = extractComponentState(
|
||||
lastVisitedViewPerObjectMetadataItemStateSelector,
|
||||
scopeId,
|
||||
const lastVisitedViewPerObjectMetadataItem = useRecoilValue(
|
||||
lastVisitedViewPerObjectMetadataItemState,
|
||||
);
|
||||
|
||||
const [
|
||||
lastVisitedViewPerObjectMetadataItem,
|
||||
setLastVisitedViewPerObjectMetadataItem,
|
||||
] = useRecoilState(lastVisitedViewPerObjectMetadataItemState);
|
||||
|
||||
const { findActiveObjectMetadataItemByNamePlural } =
|
||||
useFilteredObjectMetadataItems();
|
||||
|
||||
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,
|
||||
});
|
||||
};
|
||||
|
||||
const setLastVisitedView = ({
|
||||
objectNamePlural,
|
||||
viewId,
|
||||
}: {
|
||||
objectNamePlural: string;
|
||||
viewId: string;
|
||||
}) => {
|
||||
const objectMetadataItem =
|
||||
findActiveObjectMetadataItemByNamePlural(objectNamePlural);
|
||||
|
||||
if (isDefined(objectMetadataItem)) {
|
||||
setLastVisitedViewPerObjectMetadataItem({
|
||||
[objectMetadataItem.id]: viewId,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const getLastVisitedViewIdFromObjectNamePlural = (
|
||||
objectNamePlural: string,
|
||||
) => {
|
||||
@ -65,9 +26,7 @@ export const useLastVisitedView = () => {
|
||||
return lastVisitedViewPerObjectMetadataItem?.[objectMetadataItemId];
|
||||
};
|
||||
return {
|
||||
setLastVisitedView,
|
||||
getLastVisitedViewIdFromObjectNamePlural,
|
||||
getLastVisitedViewIdFromObjectMetadataItemId,
|
||||
setFallbackForLastVisitedView,
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user