59 lines
2.0 KiB
TypeScript
59 lines
2.0 KiB
TypeScript
import { useEffect } from 'react';
|
|
|
|
import { TableRecoilScopeContext } from '@/ui/data/data-table/states/recoil-scope-contexts/TableRecoilScopeContext';
|
|
import { tableFiltersScopedState } from '@/ui/data/data-table/states/tableFiltersScopedState';
|
|
import { tableSortsScopedState } from '@/ui/data/data-table/states/tableSortsScopedState';
|
|
import { turnFiltersIntoWhereClauseV2 } from '@/ui/data/filter/utils/turnFiltersIntoWhereClauseV2';
|
|
import { turnSortsIntoOrderByV2 } from '@/ui/data/sort/utils/turnSortsIntoOrderByV2';
|
|
import { useRecoilScopedValue } from '@/ui/utilities/recoil-scope/hooks/useRecoilScopedValue';
|
|
|
|
import { useFindManyObjects } from '../hooks/useFindManyObjects';
|
|
import { useMetadataObjectInContext } from '../hooks/useMetadataObjectInContext';
|
|
import { useSetObjectDataTableData } from '../hooks/useSetDataTableData';
|
|
import { MetadataObjectIdentifier } from '../types/MetadataObjectIdentifier';
|
|
|
|
export type ObjectDataTableEffectProps = Pick<
|
|
MetadataObjectIdentifier,
|
|
'objectNamePlural'
|
|
>;
|
|
|
|
// This should be migrated to DataTable at some point
|
|
export const ObjectDataTableEffect = ({
|
|
objectNamePlural,
|
|
}: ObjectDataTableEffectProps) => {
|
|
const setDataTableData = useSetObjectDataTableData();
|
|
const { foundMetadataObject } = useMetadataObjectInContext();
|
|
|
|
const tableFilters = useRecoilScopedValue(
|
|
tableFiltersScopedState,
|
|
TableRecoilScopeContext,
|
|
);
|
|
|
|
const tableSorts = useRecoilScopedValue(
|
|
tableSortsScopedState,
|
|
TableRecoilScopeContext,
|
|
);
|
|
|
|
const { objects, loading } = useFindManyObjects({
|
|
objectNamePlural: objectNamePlural,
|
|
filter: turnFiltersIntoWhereClauseV2(
|
|
tableFilters,
|
|
foundMetadataObject?.fields ?? [],
|
|
),
|
|
orderBy: turnSortsIntoOrderByV2(
|
|
tableSorts,
|
|
foundMetadataObject?.fields ?? [],
|
|
),
|
|
});
|
|
|
|
useEffect(() => {
|
|
if (!loading) {
|
|
const entities = objects ?? [];
|
|
|
|
setDataTableData(entities);
|
|
}
|
|
}, [objects, setDataTableData, loading]);
|
|
|
|
return <></>;
|
|
};
|