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

@ -12,6 +12,7 @@ import { PageTitle } from '@/ui/utilities/page-title/PageTitle';
import { RecordShowPageWorkflowHeader } from '@/workflow/components/RecordShowPageWorkflowHeader';
import { RecordShowPageWorkflowVersionHeader } from '@/workflow/components/RecordShowPageWorkflowVersionHeader';
import { RecordShowPageBaseHeader } from '~/pages/object-record/RecordShowPageBaseHeader';
import { RecordShowPageContextStoreEffect } from '~/pages/object-record/RecordShowPageContextStoreEffect';
import { RecordShowPageHeader } from '~/pages/object-record/RecordShowPageHeader';
export const RecordShowPage = () => {
@ -39,6 +40,7 @@ export const RecordShowPage = () => {
return (
<RecordFieldValueSelectorContextProvider>
<RecordValueSetterEffect recordId={objectRecordId} />
<RecordShowPageContextStoreEffect recordId={objectRecordId} />
<PageContainer>
<PageTitle title={pageTitle} />
<RecordShowPageHeader

View File

@ -0,0 +1,43 @@
import { contextStoreCurrentObjectMetadataIdState } from '@/context-store/states/contextStoreCurrentObjectMetadataIdState';
import { contextStoreTargetedRecordIdsState } from '@/context-store/states/contextStoreTargetedRecordIdsState';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { useEffect } from 'react';
import { useParams } from 'react-router-dom';
import { useSetRecoilState } from 'recoil';
export const RecordShowPageContextStoreEffect = ({
recordId,
}: {
recordId: string;
}) => {
const setContextStoreTargetedRecordIds = useSetRecoilState(
contextStoreTargetedRecordIdsState,
);
const setContextStoreCurrentObjectMetadataId = useSetRecoilState(
contextStoreCurrentObjectMetadataIdState,
);
const { objectNameSingular } = useParams();
const { objectMetadataItem } = useObjectMetadataItem({
objectNameSingular: objectNameSingular ?? '',
});
useEffect(() => {
setContextStoreTargetedRecordIds([recordId]);
setContextStoreCurrentObjectMetadataId(objectMetadataItem?.id);
return () => {
setContextStoreTargetedRecordIds([]);
setContextStoreCurrentObjectMetadataId(null);
};
}, [
recordId,
setContextStoreTargetedRecordIds,
setContextStoreCurrentObjectMetadataId,
objectMetadataItem?.id,
]);
return null;
};