feat(tree): add flat and lazy modes for tree data handling
* Implement flat mode to transform flat data with parentId to nested structure. * Introduce lazy mode for on-demand loading of children. * Update tree rendering logic to accommodate new modes. * Enhance tree cell expansion logic to support lazy loading. * Add dark mode styles for improved UI experience. * Create comprehensive end-to-end tests for tree functionality.
This commit is contained in:
@@ -82,16 +82,16 @@ export interface GriddyStoreState extends GriddyUIState {
|
||||
setScrollRef: (el: HTMLDivElement | null) => void;
|
||||
// ─── Internal ref setters ───
|
||||
setTable: (table: Table<any>) => void;
|
||||
setVirtualizer: (virtualizer: Virtualizer<HTMLDivElement, Element>) => void;
|
||||
setTreeChildrenCache: (nodeId: string, children: any[]) => void;
|
||||
|
||||
setTreeLoadingNode: (nodeId: string, loading: boolean) => void;
|
||||
setVirtualizer: (virtualizer: Virtualizer<HTMLDivElement, Element>) => void;
|
||||
showToolbar?: boolean;
|
||||
sorting?: SortingState;
|
||||
// ─── Tree/Hierarchical Data ───
|
||||
tree?: TreeConfig<any>;
|
||||
treeLoadingNodes: Set<string>;
|
||||
treeChildrenCache: Map<string, any[]>;
|
||||
setTreeLoadingNode: (nodeId: string, loading: boolean) => void;
|
||||
setTreeChildrenCache: (nodeId: string, children: any[]) => void;
|
||||
treeLoadingNodes: Set<string>;
|
||||
// ─── Synced from GriddyProps (written by $sync) ───
|
||||
uniqueId?: string;
|
||||
}
|
||||
@@ -150,10 +150,12 @@ export const { Provider: GriddyProvider, useStore: useGriddyStore } = createSync
|
||||
setTable: (table) => set({ _table: table }),
|
||||
|
||||
setTotalRows: (count) => set({ totalRows: count }),
|
||||
setVirtualizer: (virtualizer) => set({ _virtualizer: virtualizer }),
|
||||
// ─── Tree State ───
|
||||
treeLoadingNodes: new Set(),
|
||||
treeChildrenCache: new Map(),
|
||||
setTreeChildrenCache: (nodeId, children) =>
|
||||
set((state) => {
|
||||
const newMap = new Map(state.treeChildrenCache);
|
||||
newMap.set(nodeId, children);
|
||||
return { treeChildrenCache: newMap };
|
||||
}),
|
||||
setTreeLoadingNode: (nodeId, loading) =>
|
||||
set((state) => {
|
||||
const newSet = new Set(state.treeLoadingNodes);
|
||||
@@ -164,12 +166,10 @@ export const { Provider: GriddyProvider, useStore: useGriddyStore } = createSync
|
||||
}
|
||||
return { treeLoadingNodes: newSet };
|
||||
}),
|
||||
setTreeChildrenCache: (nodeId, children) =>
|
||||
set((state) => {
|
||||
const newMap = new Map(state.treeChildrenCache);
|
||||
newMap.set(nodeId, children);
|
||||
return { treeChildrenCache: newMap };
|
||||
}),
|
||||
setVirtualizer: (virtualizer) => set({ _virtualizer: virtualizer }),
|
||||
// ─── Row Count ───
|
||||
totalRows: 0,
|
||||
treeChildrenCache: new Map(),
|
||||
// ─── Tree State ───
|
||||
treeLoadingNodes: new Set(),
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user