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

@ -2,6 +2,8 @@ import { useCallback, useEffect } from 'react';
import { useLocation, useNavigate } from 'react-router-dom';
import { useRecoilValue, useSetRecoilState } from 'recoil';
import { contextStoreCurrentObjectMetadataIdState } from '@/context-store/states/contextStoreCurrentObjectMetadataIdState';
import { contextStoreTargetedRecordIdsState } from '@/context-store/states/contextStoreTargetedRecordIdsState';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { getObjectSlug } from '@/object-metadata/utils/getObjectSlug';
import { useRecordActionBar } from '@/object-record/record-action-bar/hooks/useRecordActionBar';
@ -129,10 +131,33 @@ export const RecordIndexBoardDataLoaderEffect = ({
callback: resetRecordSelection,
});
const setContextStoreTargetedRecordIds = useSetRecoilState(
contextStoreTargetedRecordIdsState,
);
const setContextStoreCurrentObjectMetadataItem = useSetRecoilState(
contextStoreCurrentObjectMetadataIdState,
);
useEffect(() => {
setActionBarEntries?.();
setContextMenuEntries?.();
}, [setActionBarEntries, setContextMenuEntries]);
useEffect(() => {
setContextStoreTargetedRecordIds(selectedRecordIds);
setContextStoreCurrentObjectMetadataItem(objectMetadataItem?.id);
return () => {
setContextStoreTargetedRecordIds([]);
setContextStoreCurrentObjectMetadataItem(null);
};
}, [
objectMetadataItem?.id,
selectedRecordIds,
setContextStoreCurrentObjectMetadataItem,
setContextStoreTargetedRecordIds,
]);
return <></>;
};

View File

@ -1,6 +1,8 @@
import { useEffect } from 'react';
import { useRecoilValue } from 'recoil';
import { useRecoilValue, useSetRecoilState } from 'recoil';
import { contextStoreCurrentObjectMetadataIdState } from '@/context-store/states/contextStoreCurrentObjectMetadataIdState';
import { contextStoreTargetedRecordIdsState } from '@/context-store/states/contextStoreTargetedRecordIdsState';
import { useColumnDefinitionsFromFieldMetadata } from '@/object-metadata/hooks/useColumnDefinitionsFromFieldMetadata';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { useRecordActionBar } from '@/object-record/record-action-bar/hooks/useRecordActionBar';
@ -34,6 +36,14 @@ export const RecordIndexTableContainerEffect = ({
recordTableId,
});
const setContextStoreTargetedRecordIds = useSetRecoilState(
contextStoreTargetedRecordIdsState,
);
const setContextStoreCurrentObjectMetadataItem = useSetRecoilState(
contextStoreCurrentObjectMetadataIdState,
);
const { objectMetadataItem } = useObjectMetadataItem({
objectNameSingular,
});
@ -111,5 +121,20 @@ export const RecordIndexTableContainerEffect = ({
);
}, [setRecordCountInCurrentView, setOnEntityCountChange]);
useEffect(() => {
setContextStoreTargetedRecordIds(selectedRowIds);
setContextStoreCurrentObjectMetadataItem(objectMetadataItem?.id);
return () => {
setContextStoreTargetedRecordIds([]);
setContextStoreCurrentObjectMetadataItem(null);
};
}, [
objectMetadataItem?.id,
selectedRowIds,
setContextStoreCurrentObjectMetadataItem,
setContextStoreTargetedRecordIds,
]);
return <></>;
};