Closes #7499 - Modifies context store states to be component states - Introduces the concept of `mainContextStore` which will dictate the available actions inside the command K - Adds contextual actions inside the right drawer - Creates a new type of modal variant
121 lines
4.2 KiB
TypeScript
121 lines
4.2 KiB
TypeScript
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
|
|
import { useLastVisitedObjectMetadataItem } from '@/navigation/hooks/useLastVisitedObjectMetadataItem';
|
|
import { useLastVisitedView } from '@/navigation/hooks/useLastVisitedView';
|
|
import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems';
|
|
import { useRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentStateV2';
|
|
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';
|
|
import { useViewFromQueryParams } from '@/views/hooks/internal/useViewFromQueryParams';
|
|
import { useGetCurrentView } from '@/views/hooks/useGetCurrentView';
|
|
import { currentViewIdComponentState } from '@/views/states/currentViewIdComponentState';
|
|
import { isUndefined } from '@sniptt/guards';
|
|
import { useEffect } from 'react';
|
|
import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
|
|
import { isDefined } from '~/utils/isDefined';
|
|
|
|
export const QueryParamsViewIdEffect = () => {
|
|
const { getFiltersFromQueryParams, viewIdQueryParam } =
|
|
useViewFromQueryParams();
|
|
|
|
// TODO: fix this implicit hack
|
|
const { instanceId: objectNamePlural } = useGetCurrentView();
|
|
|
|
const [currentViewId, setCurrentViewId] = useRecoilComponentStateV2(
|
|
currentViewIdComponentState,
|
|
);
|
|
|
|
const { viewsOnCurrentObject } = useGetCurrentView();
|
|
const { findObjectMetadataItemByNamePlural } =
|
|
useFilteredObjectMetadataItems();
|
|
const objectMetadataItemId =
|
|
findObjectMetadataItemByNamePlural(objectNamePlural);
|
|
const { getLastVisitedViewIdFromObjectNamePlural, setLastVisitedView } =
|
|
useLastVisitedView();
|
|
const { lastVisitedObjectMetadataItemId, setLastVisitedObjectMetadataItem } =
|
|
useLastVisitedObjectMetadataItem();
|
|
|
|
const lastVisitedViewId =
|
|
getLastVisitedViewIdFromObjectNamePlural(objectNamePlural);
|
|
const isLastVisitedObjectMetadataItemDifferent = !isDeeplyEqual(
|
|
objectMetadataItemId?.id,
|
|
lastVisitedObjectMetadataItemId,
|
|
);
|
|
const setContextStoreCurrentViewId = useSetRecoilComponentStateV2(
|
|
contextStoreCurrentViewIdComponentState,
|
|
);
|
|
|
|
// // TODO: scope view bar per view id if possible
|
|
// const { resetCurrentView } = useResetCurrentView();
|
|
|
|
// useEffect(() => {
|
|
// if (isDefined(currentViewId)) {
|
|
// resetCurrentView();
|
|
// }
|
|
// }, [resetCurrentView, currentViewId]);
|
|
|
|
useEffect(() => {
|
|
const indexView = viewsOnCurrentObject.find((view) => view.key === 'INDEX');
|
|
|
|
if (isUndefined(viewIdQueryParam) && isDefined(lastVisitedViewId)) {
|
|
if (isLastVisitedObjectMetadataItemDifferent) {
|
|
setLastVisitedObjectMetadataItem(objectNamePlural);
|
|
setLastVisitedView({
|
|
objectNamePlural,
|
|
viewId: lastVisitedViewId,
|
|
});
|
|
}
|
|
setCurrentViewId(lastVisitedViewId);
|
|
setContextStoreCurrentViewId(lastVisitedViewId);
|
|
return;
|
|
}
|
|
|
|
if (isDefined(viewIdQueryParam)) {
|
|
if (isLastVisitedObjectMetadataItemDifferent) {
|
|
setLastVisitedObjectMetadataItem(objectNamePlural);
|
|
}
|
|
if (!isDeeplyEqual(viewIdQueryParam, lastVisitedViewId)) {
|
|
setLastVisitedView({
|
|
objectNamePlural,
|
|
viewId: viewIdQueryParam,
|
|
});
|
|
}
|
|
setCurrentViewId(viewIdQueryParam);
|
|
setContextStoreCurrentViewId(viewIdQueryParam);
|
|
return;
|
|
}
|
|
|
|
if (isDefined(indexView)) {
|
|
if (isLastVisitedObjectMetadataItemDifferent) {
|
|
setLastVisitedObjectMetadataItem(objectNamePlural);
|
|
}
|
|
if (!isDeeplyEqual(indexView.id, lastVisitedViewId)) {
|
|
setLastVisitedView({
|
|
objectNamePlural,
|
|
viewId: indexView.id,
|
|
});
|
|
}
|
|
setCurrentViewId(indexView.id);
|
|
setContextStoreCurrentViewId(indexView.id);
|
|
return;
|
|
}
|
|
|
|
return () => {
|
|
setContextStoreCurrentViewId(null);
|
|
};
|
|
}, [
|
|
currentViewId,
|
|
getFiltersFromQueryParams,
|
|
isLastVisitedObjectMetadataItemDifferent,
|
|
lastVisitedViewId,
|
|
objectMetadataItemId?.id,
|
|
objectNamePlural,
|
|
setContextStoreCurrentViewId,
|
|
setCurrentViewId,
|
|
setLastVisitedObjectMetadataItem,
|
|
setLastVisitedView,
|
|
viewIdQueryParam,
|
|
viewsOnCurrentObject,
|
|
]);
|
|
|
|
return <></>;
|
|
};
|