7336 create contextstore (#7374)

Closes #7336

Create 3 states:
- `contextStoreCurrentObjectMetadataIdState`: is set when we change
object metadata
- `contextStoreCurrentViewIdState`: is set when we change view
- `contextStoreTargetedRecordIdsState`: is set when we select records
inside a table or a board or when a show page is opened. Is reset when
we change view.
This commit is contained in:
Raphaël Bosi
2024-10-08 18:40:35 +02:00
committed by GitHub
parent 1863636003
commit a8da0e2bc8
10 changed files with 146 additions and 11 deletions

View File

@ -1,3 +1,4 @@
import { contextStoreCurrentViewIdState } from '@/context-store/states/contextStoreCurrentViewIdState';
import { useLastVisitedObjectMetadataItem } from '@/navigation/hooks/useLastVisitedObjectMetadataItem';
import { useLastVisitedView } from '@/navigation/hooks/useLastVisitedView';
import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems';
@ -7,6 +8,7 @@ import { useGetCurrentView } from '@/views/hooks/useGetCurrentView';
import { currentViewIdComponentState } from '@/views/states/currentViewIdComponentState';
import { isUndefined } from '@sniptt/guards';
import { useEffect } from 'react';
import { useSetRecoilState } from 'recoil';
import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
import { isDefined } from '~/utils/isDefined';
@ -37,6 +39,9 @@ export const QueryParamsViewIdEffect = () => {
objectMetadataItemId?.id,
lastVisitedObjectMetadataItemId,
);
const setContextStoreCurrentViewId = useSetRecoilState(
contextStoreCurrentViewIdState,
);
// // TODO: scope view bar per view id if possible
// const { resetCurrentView } = useResetCurrentView();
@ -59,6 +64,7 @@ export const QueryParamsViewIdEffect = () => {
});
}
setCurrentViewId(lastVisitedViewId);
setContextStoreCurrentViewId(lastVisitedViewId);
return;
}
@ -73,6 +79,7 @@ export const QueryParamsViewIdEffect = () => {
});
}
setCurrentViewId(viewIdQueryParam);
setContextStoreCurrentViewId(viewIdQueryParam);
return;
}
@ -87,8 +94,13 @@ export const QueryParamsViewIdEffect = () => {
});
}
setCurrentViewId(indexView.id);
setContextStoreCurrentViewId(indexView.id);
return;
}
return () => {
setContextStoreCurrentViewId(null);
};
}, [
currentViewId,
getFiltersFromQueryParams,
@ -96,6 +108,7 @@ export const QueryParamsViewIdEffect = () => {
lastVisitedViewId,
objectMetadataItemId?.id,
objectNamePlural,
setContextStoreCurrentViewId,
setCurrentViewId,
setLastVisitedObjectMetadataItem,
setLastVisitedView,

View File

@ -1,19 +1,11 @@
import { useResetUnsavedViewStates } from '@/views/hooks/useResetUnsavedViewStates';
import { useSearchParams } from 'react-router-dom';
import { useSetViewInUrl } from '@/views/hooks/useSetViewInUrl';
export const useChangeView = (viewBarComponentId?: string) => {
const { resetUnsavedViewStates } =
useResetUnsavedViewStates(viewBarComponentId);
const [, setSearchParams] = useSearchParams();
const setViewInUrl = (viewId: string) => {
setSearchParams(() => {
const searchParams = new URLSearchParams();
searchParams.set('view', viewId);
return searchParams;
});
};
const { setViewInUrl } = useSetViewInUrl();
const changeView = async (viewId: string) => {
setViewInUrl(viewId);

View File

@ -0,0 +1,15 @@
import { useSearchParams } from 'react-router-dom';
export const useSetViewInUrl = () => {
const [, setSearchParams] = useSearchParams();
const setViewInUrl = (viewId: string) => {
setSearchParams(() => {
const searchParams = new URLSearchParams();
searchParams.set('view', viewId);
return searchParams;
});
};
return { setViewInUrl };
};