111 lines
4.4 KiB
TypeScript
111 lines
4.4 KiB
TypeScript
import { GridRowEntry, GridRowId, GridRowTreeConfig, GridValidRowModel } from '../../../models/gridRows';
|
|
import type { DataGridProcessedProps } from '../../../models/props/DataGridProps';
|
|
export interface GridRowsInternalCache {
|
|
/**
|
|
* The rows as they were the last time all the rows have been updated at once
|
|
* It is used to avoid processing several time the same set of rows
|
|
*/
|
|
rowsBeforePartialUpdates: DataGridProcessedProps['rows'];
|
|
/**
|
|
* The value of the `loading` prop since the last time that the rows state was updated.
|
|
*/
|
|
loadingPropBeforePartialUpdates: DataGridProcessedProps['loading'];
|
|
/**
|
|
* The value of the `rowCount` prop since the last time that the rows state was updated.
|
|
*/
|
|
rowCountPropBeforePartialUpdates: DataGridProcessedProps['rowCount'];
|
|
/**
|
|
* Lookup containing the latest model at all time (even those not stored in the state yet).
|
|
*/
|
|
dataRowIdToModelLookup: GridRowIdToModelLookup;
|
|
/**
|
|
* Lookup containing the latest ids at all time (even those not stored in the state yet).
|
|
*/
|
|
dataRowIdToIdLookup: GridRowIdToIdLookup;
|
|
/**
|
|
* List of updates (partial or full) applied since the last time the state was synced with the cache.
|
|
* It is used to build the tree.
|
|
* If the update is a full update, we rebuild the tree from scratch.
|
|
* If the update is a partial update, we only modify the impacted nodes.
|
|
*/
|
|
updates: GridRowsPartialUpdates | GridRowsFullUpdate;
|
|
}
|
|
export interface GridRowsState {
|
|
/**
|
|
* Name of the algorithm used to group the rows
|
|
* It is useful to decide which filtering / sorting algorithm to apply, to avoid applying tree-data filtering on a grouping-by-column dataset for instance.
|
|
*/
|
|
groupingName: string;
|
|
tree: GridRowTreeConfig;
|
|
/**
|
|
* Amount of nodes at each depth (including auto-generated ones)
|
|
*/
|
|
treeDepths: GridTreeDepths;
|
|
dataRowIds: GridRowId[];
|
|
/**
|
|
* Matches the value of the `loading` prop.
|
|
*/
|
|
loading?: boolean;
|
|
/**
|
|
* Amount of data rows provided to the grid.
|
|
* Includes the filtered and collapsed rows.
|
|
* Does not include the auto-generated rows (auto generated groups and footers).
|
|
*/
|
|
totalRowCount: number;
|
|
/**
|
|
* Amount of top level rows.
|
|
* Includes the filtered rows and the auto-generated root footer if any.
|
|
* Does not include the rows of depth > 0 (rows inside a group).
|
|
*/
|
|
totalTopLevelRowCount: number;
|
|
dataRowIdToModelLookup: GridRowIdToModelLookup;
|
|
dataRowIdToIdLookup: GridRowIdToIdLookup;
|
|
additionalRowGroups?: {
|
|
pinnedRows?: GridPinnedRowsState;
|
|
};
|
|
}
|
|
export interface GridRowTreeCreationParams {
|
|
previousTree: GridRowTreeConfig | null;
|
|
previousTreeDepths: GridTreeDepths | null;
|
|
updates: GridRowsPartialUpdates | GridRowsFullUpdate;
|
|
dataRowIdToIdLookup: GridRowIdToIdLookup;
|
|
dataRowIdToModelLookup: GridRowIdToModelLookup;
|
|
}
|
|
export type GridRowTreeUpdateGroupAction = 'removeChildren' | 'insertChildren' | 'modifyChildren';
|
|
export type GridRowTreeUpdatedGroupsValue = {
|
|
[groupId: GridRowId]: {
|
|
[action in GridRowTreeUpdateGroupAction]?: boolean;
|
|
};
|
|
};
|
|
export type GridRowTreeUpdatedGroupsManager = {
|
|
value: GridRowTreeUpdatedGroupsValue;
|
|
addAction: (groupId: GridRowId, action: GridRowTreeUpdateGroupAction) => void;
|
|
};
|
|
export type GridRowTreeCreationValue = Pick<GridRowsState, 'groupingName' | 'tree' | 'treeDepths' | 'dataRowIds'> & {
|
|
updatedGroupsManager?: GridRowTreeUpdatedGroupsManager;
|
|
};
|
|
export type GridHydrateRowsValue = Pick<GridRowsState, 'tree' | 'treeDepths' | 'dataRowIds' | 'dataRowIdToIdLookup' | 'dataRowIdToModelLookup' | 'additionalRowGroups'>;
|
|
export type GridRowsPartialUpdateAction = 'insert' | 'modify' | 'remove';
|
|
export type GridRowIdToModelLookup<R extends GridValidRowModel = GridValidRowModel> = Record<string, R>;
|
|
export type GridRowIdToIdLookup = Record<string, GridRowId>;
|
|
export type GridTreeDepths = {
|
|
[depth: number]: number;
|
|
};
|
|
export interface GridRowsFullUpdate {
|
|
type: 'full';
|
|
rows: GridRowId[];
|
|
}
|
|
export interface GridRowsPartialUpdates {
|
|
type: 'partial';
|
|
actions: {
|
|
[action in GridRowsPartialUpdateAction]: GridRowId[];
|
|
};
|
|
idToActionLookup: {
|
|
[id: GridRowId]: GridRowsPartialUpdateAction | undefined;
|
|
};
|
|
}
|
|
export interface GridPinnedRowsState {
|
|
top?: GridRowEntry[];
|
|
bottom?: GridRowEntry[];
|
|
}
|