* feat: change column visibility on add * refactor: extract views business logic from table
56 lines
1.9 KiB
TypeScript
56 lines
1.9 KiB
TypeScript
import { useRecoilCallback } from 'recoil';
|
|
|
|
import { availableFiltersScopedState } from '@/ui/filter-n-sort/states/availableFiltersScopedState';
|
|
import { FilterDefinition } from '@/ui/filter-n-sort/types/FilterDefinition';
|
|
import { useResetTableRowSelection } from '@/ui/table/hooks/useResetTableRowSelection';
|
|
import { TableContext } from '@/ui/table/states/TableContext';
|
|
import { tableEntitiesFamilyState } from '@/ui/table/states/tableEntitiesFamilyState';
|
|
import { tableRowIdsState } from '@/ui/table/states/tableRowIdsState';
|
|
import { useContextScopeId } from '@/ui/utilities/recoil-scope/hooks/useContextScopeId';
|
|
|
|
import { isFetchingEntityTableDataState } from '../states/isFetchingEntityTableDataState';
|
|
import { numberOfTableRowsState } from '../states/numberOfTableRowsState';
|
|
|
|
export function useSetEntityTableData() {
|
|
const resetTableRowSelection = useResetTableRowSelection();
|
|
|
|
const tableContextScopeId = useContextScopeId(TableContext);
|
|
|
|
return useRecoilCallback(
|
|
({ set, snapshot }) =>
|
|
<T extends { id: string }>(
|
|
newEntityArray: T[],
|
|
filters: FilterDefinition[],
|
|
) => {
|
|
for (const entity of newEntityArray) {
|
|
const currentEntity = snapshot
|
|
.getLoadable(tableEntitiesFamilyState(entity.id))
|
|
.valueOrThrow();
|
|
|
|
if (JSON.stringify(currentEntity) !== JSON.stringify(entity)) {
|
|
set(tableEntitiesFamilyState(entity.id), entity);
|
|
}
|
|
}
|
|
|
|
const entityIds = newEntityArray.map((entity) => entity.id);
|
|
|
|
set(tableRowIdsState, (currentRowIds) => {
|
|
if (JSON.stringify(currentRowIds) !== JSON.stringify(entityIds)) {
|
|
return entityIds;
|
|
}
|
|
|
|
return currentRowIds;
|
|
});
|
|
|
|
resetTableRowSelection();
|
|
|
|
set(numberOfTableRowsState, entityIds.length);
|
|
|
|
set(availableFiltersScopedState(tableContextScopeId), filters);
|
|
|
|
set(isFetchingEntityTableDataState, false);
|
|
},
|
|
[],
|
|
);
|
|
}
|