dishui 0.0.84 → 0.0.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Input/index.js +52 -62
- package/dist/components/Input/index.js.map +1 -1
- package/dist/components/LayoutSuite/index.d.ts +10 -0
- package/dist/components/LayoutSuite/index.js +27 -18
- package/dist/components/LayoutSuite/index.js.map +1 -1
- package/dist/components/Markdown/markdownComponents.js +1 -0
- package/dist/components/Markdown/markdownComponents.js.map +1 -1
- package/dist/components/Markdown/useMarkdownSource.js +46 -31
- package/dist/components/Markdown/useMarkdownSource.js.map +1 -1
- package/dist/components/Markdown/useMarkmapRenderer.js +44 -31
- package/dist/components/Markdown/useMarkmapRenderer.js.map +1 -1
- package/dist/components/Markdown/useMermaidRenderer.js +49 -31
- package/dist/components/Markdown/useMermaidRenderer.js.map +1 -1
- package/dist/components/ProtectedRoute/index.d.ts +2 -1
- package/dist/components/ProtectedRoute/index.js +16 -6
- package/dist/components/ProtectedRoute/index.js.map +1 -1
- package/dist/components/Select/index.d.ts +6 -0
- package/dist/components/Select/index.js +166 -136
- package/dist/components/Select/index.js.map +1 -1
- package/dist/components/Table/index.d.ts +23 -2
- package/dist/components/Table/index.js +153 -101
- package/dist/components/Table/index.js.map +1 -1
- package/dist/components/Tabs/index.d.ts +12 -1
- package/dist/components/Tabs/index.js +42 -17
- package/dist/components/Tabs/index.js.map +1 -1
- package/dist/components/pro/ArticleContextMenu/index.js +7 -7
- package/dist/components/pro/CodeEditor/editors/CodeEditor.js +200 -189
- package/dist/components/pro/CodeEditor/editors/CodeEditor.js.map +1 -1
- package/dist/components/pro/CodeEditor/types.d.ts +3 -0
- package/dist/components/pro/DataTable/DataTable.d.ts +1 -1
- package/dist/components/pro/DataTable/DataTable.js +124 -247
- package/dist/components/pro/DataTable/DataTable.js.map +1 -1
- package/dist/components/pro/DataTable/components/TableBody.d.ts +3 -1
- package/dist/components/pro/DataTable/components/TableBody.js +41 -41
- package/dist/components/pro/DataTable/components/TableBody.js.map +1 -1
- package/dist/components/pro/DataTable/components/TablePagination.d.ts +3 -9
- package/dist/components/pro/DataTable/components/TablePagination.js +29 -25
- package/dist/components/pro/DataTable/components/TablePagination.js.map +1 -1
- package/dist/components/pro/DataTable/components/TableToolbar.d.ts +2 -1
- package/dist/components/pro/DataTable/components/TableToolbar.js +25 -19
- package/dist/components/pro/DataTable/components/TableToolbar.js.map +1 -1
- package/dist/components/pro/DataTable/index.d.ts +1 -1
- package/dist/components/pro/DataTable/rowDetailExtension.js +1 -1
- package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
- package/dist/components/pro/DataTable/tanstack-table.d.ts +2 -2
- package/dist/components/pro/DataTable/tanstack-table.js +29 -21
- package/dist/components/pro/DataTable/tanstack-table.js.map +1 -1
- package/dist/components/pro/DataTable/treeDataUtils.d.ts +2 -0
- package/dist/components/pro/DataTable/treeDataUtils.js +18 -19
- package/dist/components/pro/DataTable/treeDataUtils.js.map +1 -1
- package/dist/components/pro/DataTable/types.d.ts +43 -0
- package/dist/components/pro/DataTable/useDataTableModel.d.ts +16 -0
- package/dist/components/pro/DataTable/useDataTableModel.js +148 -0
- package/dist/components/pro/DataTable/useDataTableModel.js.map +1 -0
- package/dist/components/pro/FileExplorer/Breadcrumb.js +12 -12
- package/dist/components/pro/Flow/nodes/DataNodeView.js +87 -82
- package/dist/components/pro/Flow/nodes/DataNodeView.js.map +1 -1
- package/dist/components/pro/Flow/nodes/MediaContent.js +1 -1
- package/dist/components/pro/Flow/nodes/MediaContent.js.map +1 -1
- package/dist/components/pro/Flow/nodes/MediaOverlay.js +1 -1
- package/dist/components/pro/Flow/nodes/MediaOverlay.js.map +1 -1
- package/dist/components/pro/Flow/nodes/Model3DView.js +69 -63
- package/dist/components/pro/Flow/nodes/Model3DView.js.map +1 -1
- package/dist/components/pro/Flow/nodes/chartGeometryBudget.d.ts +14 -0
- package/dist/components/pro/Flow/nodes/chartGeometryBudget.js +76 -0
- package/dist/components/pro/Flow/nodes/chartGeometryBudget.js.map +1 -0
- package/dist/components/pro/Flow/nodes/demandRender.d.ts +11 -0
- package/dist/components/pro/Flow/nodes/demandRender.js +26 -0
- package/dist/components/pro/Flow/nodes/demandRender.js.map +1 -0
- package/dist/components/pro/RichTextEditor/SlashMenu.js +68 -58
- package/dist/components/pro/RichTextEditor/SlashMenu.js.map +1 -1
- package/dist/contexts/AppContext.d.ts +1 -0
- package/dist/contexts/AppContext.js +144 -145
- package/dist/contexts/AppContext.js.map +1 -1
- package/dist/contexts/authentication.d.ts +7 -0
- package/dist/contexts/authentication.js +22 -0
- package/dist/contexts/authentication.js.map +1 -0
- package/dist/data-table.js.map +1 -1
- package/dist/dishui.css +1 -1
- package/dist/hooks/useControllableState.d.ts +6 -14
- package/dist/hooks/useControllableState.js +21 -15
- package/dist/hooks/useControllableState.js.map +1 -1
- package/dist/hooks/useTableColumns.d.ts +3 -3
- package/dist/hooks/useTableColumns.js +2 -2
- package/dist/hooks/useTableColumns.js.map +1 -1
- package/dist/hooks/useTableData.d.ts +11 -4
- package/dist/hooks/useTableData.js +44 -26
- package/dist/hooks/useTableData.js.map +1 -1
- package/dist/index-nostyled.d.ts +2 -2
- package/dist/index.d.ts +4 -4
- package/dist/index.js +97 -97
- package/dist/lite.d.ts +2 -0
- package/dist/lite.js +22 -21
- package/dist/utils/i18n.js +1 -1
- package/dist/utils/i18n.js.map +1 -1
- package/dist/utils/routerBuilder.d.ts +7 -5
- package/dist/utils/routerBuilder.js +11 -15
- package/dist/utils/routerBuilder.js.map +1 -1
- package/dist/utils/safeStorage.d.ts +8 -0
- package/dist/utils/safeStorage.js +45 -0
- package/dist/utils/safeStorage.js.map +1 -0
- package/package.json +22 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tanstack-table.js","names":[],"sources":["../../../../src/components/pro/DataTable/tanstack-table.ts"],"sourcesContent":["/**\n * TanStack Table v9 适配层(全面使用 v9 原生 API)。\n *\n * DishUI 的 DataTable 现已全面迁移到 TanStack Table v9 的原生 API:\n * - `useTable` + `tableFeatures({...})` 显式注册特性与 row model 工厂;\n * - row model 通过 `createCoreRowModel()` / `createSortedRowModel()` 等工厂注册;\n * - 使用 `table.state`(而非 v8 的 `table.getState()`)读取状态;\n * - 列定义的自定义排序使用 `sortFn`(v8 为 `sortingFn`)。\n *\n * 本模块把 v9 的多泛型类型(`<TFeatures, TData, TValue>`)用 `StockFeatures`\n * 预绑定成单泛型别名(`ColumnDef<T>`、`Row<T>`、`Table<T>` 等),让上层代码\n * 保持简洁;同时保留一个 v8 命名习惯的 `useReactTable` 包装器,内部把\n * 「row model 工厂」组装进 v9 的 `features`,从而对调用方屏蔽 v9 的 `features`\n * 组装细节。请始终从本模块导入表格相关类型与工具,而不要直接依赖\n * `@tanstack/react-table`。\n */\nimport {\n useTable,\n flexRender,\n tableFeatures,\n type ReactTable,\n // 核心特性\n coreFeatures,\n // 各功能特性\n columnFilteringFeature,\n columnOrderingFeature,\n columnVisibilityFeature,\n globalFilteringFeature,\n rowSortingFeature,\n rowPaginationFeature,\n rowSelectionFeature,\n rowExpandingFeature,\n // row model 工厂\n createCoreRowModel,\n createFilteredRowModel,\n createSortedRowModel,\n createPaginatedRowModel,\n createExpandedRowModel,\n} from '@tanstack/react-table';\nimport type {\n RowData,\n OnChangeFn,\n Updater,\n CellContext as CoreCellContext,\n HeaderContext as CoreHeaderContext,\n // 状态类型\n SortingState,\n ColumnFiltersState,\n RowSelectionState,\n PaginationState,\n ColumnOrderState,\n ExpandedState,\n ColumnVisibilityState,\n // 多泛型类型(用 StockFeatures 预绑定为单泛型别名)\n StockFeatures,\n Column as CoreColumn,\n ColumnDef as CoreColumnDef,\n Row as CoreRow,\n Cell as CoreCell,\n Header as CoreHeader,\n HeaderGroup as CoreHeaderGroup,\n SortFnOption,\n SortFn as CoreSortFn,\n FilterFn as CoreFilterFn,\n ColumnMeta as CoreColumnMeta,\n TableOptions,\n} from '@tanstack/react-table';\nimport { useMemo } from 'react';\n\nexport { flexRender, useTable, tableFeatures };\n\n/**\n * 一个包含全部常用特性 + row model 工厂的默认 features 预设。\n * `useReactTable` 会用它作为默认 `features`,因此调用方无需手动组装。\n * (内部常量:其推断类型引用了 table-core 的内部路径,不对外导出以避免\n * 声明文件的可移植性问题;对外通过 `DishUITableFeatures` 类型别名暴露。)\n */\nconst dishuiTableFeatures = tableFeatures({\n ...coreFeatures,\n columnFilteringFeature,\n columnOrderingFeature,\n columnVisibilityFeature,\n globalFilteringFeature,\n rowSortingFeature,\n rowPaginationFeature,\n rowSelectionFeature,\n rowExpandingFeature,\n coreRowModel: createCoreRowModel(),\n filteredRowModel: createFilteredRowModel(),\n sortedRowModel: createSortedRowModel(),\n paginatedRowModel: createPaginatedRowModel(),\n expandedRowModel: createExpandedRowModel(),\n});\n\nexport type DishUITableFeatures = StockFeatures;\n\n// v9 原生 row model 工厂再导出(供需要精细控制 features 的调用方使用)。\nexport {\n coreFeatures,\n columnFilteringFeature,\n columnOrderingFeature,\n columnVisibilityFeature,\n globalFilteringFeature,\n rowSortingFeature,\n rowPaginationFeature,\n rowSelectionFeature,\n rowExpandingFeature,\n createCoreRowModel,\n createFilteredRowModel,\n createSortedRowModel,\n createPaginatedRowModel,\n createExpandedRowModel,\n};\n\n// 单泛型(StockFeatures 预绑定)类型别名,保持上层简洁。\n// `Table` 映射到 `useTable` 返回的 ReactTable(具备 `.state` / `.FlexRender`)。\nexport type Table<TData extends RowData> = ReactTable<DishUITableFeatures, TData>;\nexport type Column<TData extends RowData, TValue = unknown> = CoreColumn<DishUITableFeatures, TData, TValue>;\nexport type ColumnDef<TData extends RowData, TValue = unknown> = CoreColumnDef<DishUITableFeatures, TData, TValue>;\nexport type Row<TData extends RowData> = CoreRow<DishUITableFeatures, TData>;\nexport type Cell<TData extends RowData, TValue = unknown> = CoreCell<DishUITableFeatures, TData, TValue>;\nexport type Header<TData extends RowData, TValue = unknown> = CoreHeader<DishUITableFeatures, TData, TValue>;\nexport type HeaderGroup<TData extends RowData> = CoreHeaderGroup<DishUITableFeatures, TData>;\nexport type CellContext<TData extends RowData, TValue = unknown> = CoreCellContext<DishUITableFeatures, TData, TValue>;\nexport type HeaderContext<TData extends RowData, TValue = unknown> = CoreHeaderContext<DishUITableFeatures, TData, TValue>;\n\n// 状态类型(沿用 v8 惯用命名)。\nexport type {\n SortingState,\n ColumnFiltersState,\n RowSelectionState,\n PaginationState,\n ColumnOrderState,\n ExpandedState,\n OnChangeFn,\n Updater,\n RowData,\n};\n\n/** v8 `VisibilityState` -> v9 `ColumnVisibilityState`。 */\nexport type VisibilityState = ColumnVisibilityState;\n\n/** 列的自定义排序函数(v9:`sortFn`)。 */\nexport type SortingFnOption<TData extends RowData> = SortFnOption<DishUITableFeatures, TData>;\nexport type SortingFn<TData extends RowData> = CoreSortFn<DishUITableFeatures, TData>;\nexport type FilterFn<TData extends RowData> = CoreFilterFn<DishUITableFeatures, TData>;\nexport type ColumnMeta<TData extends RowData, TValue = unknown> = CoreColumnMeta<DishUITableFeatures, TData, TValue>;\n\n/**\n * v8 命名习惯的表格 hook 包装器。\n *\n * 接收「已经组装好的」表格选项(不含 `features`),自动注入 DishUI 的默认\n * `features` 预设(含 core + 全部常用特性 + row model 工厂),返回 v9 原生\n * 的 `useTable` 实例。若需自定义排序/筛选函数注册表,可通过 `sortFns` /\n * `filterFns` 传入(会并入 features)。\n */\nexport function useReactTable<TData extends RowData>(\n options: Omit<TableOptions<DishUITableFeatures, TData>, 'features'> & {\n /** 自定义排序函数注册表(v9:合入 features 的 sortFns)。 */\n sortFns?: Record<string, SortingFn<TData>>;\n /** 自定义筛选函数注册表(v9:合入 features 的 filterFns)。 */\n filterFns?: Record<string, FilterFn<TData>>;\n },\n): Table<TData> {\n const { sortFns, filterFns, ...rest } = options;\n\n const features = useMemo(() => {\n if (!sortFns && !filterFns) return dishuiTableFeatures;\n const merged: Record<string, unknown> = {\n ...coreFeatures,\n columnFilteringFeature,\n columnOrderingFeature,\n columnVisibilityFeature,\n globalFilteringFeature,\n rowSortingFeature,\n rowPaginationFeature,\n rowSelectionFeature,\n rowExpandingFeature,\n coreRowModel: createCoreRowModel(),\n filteredRowModel: createFilteredRowModel(),\n sortedRowModel: createSortedRowModel(),\n paginatedRowModel: createPaginatedRowModel(),\n expandedRowModel: createExpandedRowModel(),\n };\n
|
|
1
|
+
{"version":3,"file":"tanstack-table.js","names":[],"sources":["../../../../src/components/pro/DataTable/tanstack-table.ts"],"sourcesContent":["/**\n * TanStack Table v9 适配层(全面使用 v9 原生 API)。\n *\n * DishUI 的 DataTable 现已全面迁移到 TanStack Table v9 的原生 API:\n * - `useTable` + `tableFeatures({...})` 显式注册特性与 row model 工厂;\n * - row model 通过 `createCoreRowModel()` / `createSortedRowModel()` 等工厂注册;\n * - 使用 `table.state`(而非 v8 的 `table.getState()`)读取状态;\n * - 列定义的自定义排序使用 `sortFn`(v8 为 `sortingFn`)。\n *\n * 本模块把 v9 的多泛型类型(`<TFeatures, TData, TValue>`)用 `StockFeatures`\n * 预绑定成单泛型别名(`ColumnDef<T>`、`Row<T>`、`Table<T>` 等),让上层代码\n * 保持简洁;同时保留一个 v8 命名习惯的 `useReactTable` 包装器,内部把\n * 「row model 工厂」组装进 v9 的 `features`,从而对调用方屏蔽 v9 的 `features`\n * 组装细节。请始终从本模块导入表格相关类型与工具,而不要直接依赖\n * `@tanstack/react-table`。\n */\nimport {\n useTable,\n flexRender,\n sortFns as builtInSortFns,\n filterFns as builtInFilterFns,\n tableFeatures,\n type ReactTable,\n // 核心特性\n coreFeatures,\n // 各功能特性\n columnFilteringFeature,\n columnOrderingFeature,\n columnVisibilityFeature,\n globalFilteringFeature,\n rowSortingFeature,\n rowPaginationFeature,\n rowSelectionFeature,\n rowExpandingFeature,\n // row model 工厂\n createCoreRowModel,\n createFilteredRowModel,\n createSortedRowModel,\n createPaginatedRowModel,\n createExpandedRowModel,\n} from '@tanstack/react-table';\nimport type {\n RowData,\n OnChangeFn,\n Updater,\n CellContext as CoreCellContext,\n HeaderContext as CoreHeaderContext,\n // 状态类型\n SortingState,\n ColumnFiltersState,\n RowSelectionState,\n PaginationState,\n ColumnOrderState,\n ExpandedState,\n ColumnVisibilityState,\n // 多泛型类型(用 StockFeatures 预绑定为单泛型别名)\n StockFeatures,\n Column as CoreColumn,\n ColumnDef as CoreColumnDef,\n Row as CoreRow,\n Cell as CoreCell,\n Header as CoreHeader,\n HeaderGroup as CoreHeaderGroup,\n SortFnOption,\n SortFn as CoreSortFn,\n FilterFn as CoreFilterFn,\n ColumnMeta as CoreColumnMeta,\n TableOptions,\n} from '@tanstack/react-table';\nimport { useMemo } from 'react';\n\nexport { flexRender, useTable, tableFeatures, builtInSortFns };\n\n/**\n * 一个包含全部常用特性 + row model 工厂的默认 features 预设。\n * `useReactTable` 会用它作为默认 `features`,因此调用方无需手动组装。\n * (内部常量:其推断类型引用了 table-core 的内部路径,不对外导出以避免\n * 声明文件的可移植性问题;对外通过 `DishUITableFeatures` 类型别名暴露。)\n */\nconst dishuiTableFeatures = tableFeatures({\n ...coreFeatures,\n columnFilteringFeature,\n columnOrderingFeature,\n columnVisibilityFeature,\n globalFilteringFeature,\n rowSortingFeature,\n rowPaginationFeature,\n rowSelectionFeature,\n rowExpandingFeature,\n sortFns: builtInSortFns,\n filterFns: builtInFilterFns,\n coreRowModel: createCoreRowModel(),\n filteredRowModel: createFilteredRowModel(),\n sortedRowModel: createSortedRowModel(),\n paginatedRowModel: createPaginatedRowModel(),\n expandedRowModel: createExpandedRowModel(),\n});\n\nexport type DishUITableFeatures = StockFeatures;\n\n// v9 原生 row model 工厂再导出(供需要精细控制 features 的调用方使用)。\nexport {\n coreFeatures,\n columnFilteringFeature,\n columnOrderingFeature,\n columnVisibilityFeature,\n globalFilteringFeature,\n rowSortingFeature,\n rowPaginationFeature,\n rowSelectionFeature,\n rowExpandingFeature,\n createCoreRowModel,\n createFilteredRowModel,\n createSortedRowModel,\n createPaginatedRowModel,\n createExpandedRowModel,\n};\n\n// 单泛型(StockFeatures 预绑定)类型别名,保持上层简洁。\n// `Table` 映射到 `useTable` 返回的 ReactTable(具备 `.state` / `.FlexRender`)。\nexport type Table<TData extends RowData> = ReactTable<DishUITableFeatures, TData>;\nexport type Column<TData extends RowData, TValue = unknown> = CoreColumn<DishUITableFeatures, TData, TValue>;\nexport type ColumnDef<TData extends RowData, TValue = unknown> = CoreColumnDef<DishUITableFeatures, TData, TValue>;\nexport type Row<TData extends RowData> = CoreRow<DishUITableFeatures, TData>;\nexport type Cell<TData extends RowData, TValue = unknown> = CoreCell<DishUITableFeatures, TData, TValue>;\nexport type Header<TData extends RowData, TValue = unknown> = CoreHeader<DishUITableFeatures, TData, TValue>;\nexport type HeaderGroup<TData extends RowData> = CoreHeaderGroup<DishUITableFeatures, TData>;\nexport type CellContext<TData extends RowData, TValue = unknown> = CoreCellContext<DishUITableFeatures, TData, TValue>;\nexport type HeaderContext<TData extends RowData, TValue = unknown> = CoreHeaderContext<DishUITableFeatures, TData, TValue>;\n\n// 状态类型(沿用 v8 惯用命名)。\nexport type {\n SortingState,\n ColumnFiltersState,\n RowSelectionState,\n PaginationState,\n ColumnOrderState,\n ExpandedState,\n OnChangeFn,\n Updater,\n RowData,\n};\n\n/** v8 `VisibilityState` -> v9 `ColumnVisibilityState`。 */\nexport type VisibilityState = ColumnVisibilityState;\n\n/** 列的自定义排序函数(v9:`sortFn`)。 */\nexport type SortingFnOption<TData extends RowData> = SortFnOption<DishUITableFeatures, TData>;\nexport type SortingFn<TData extends RowData> = CoreSortFn<DishUITableFeatures, TData>;\nexport type FilterFn<TData extends RowData> = CoreFilterFn<DishUITableFeatures, TData>;\nexport type ColumnMeta<TData extends RowData, TValue = unknown> = CoreColumnMeta<DishUITableFeatures, TData, TValue>;\n\n/**\n * v8 命名习惯的表格 hook 包装器。\n *\n * 接收「已经组装好的」表格选项(不含 `features`),自动注入 DishUI 的默认\n * `features` 预设(含 core + 全部常用特性 + row model 工厂),返回 v9 原生\n * 的 `useTable` 实例。若需自定义排序/筛选函数注册表,可通过 `sortFns` /\n * `filterFns` 传入(会并入 features)。\n */\nexport function useReactTable<TData extends RowData>(\n options: Omit<TableOptions<DishUITableFeatures, TData>, 'features'> & {\n /** 自定义排序函数注册表(v9:合入 features 的 sortFns)。 */\n sortFns?: Record<string, SortingFn<TData>>;\n /** 自定义筛选函数注册表(v9:合入 features 的 filterFns)。 */\n filterFns?: Record<string, FilterFn<TData>>;\n },\n): Table<TData> {\n const { sortFns, filterFns, ...rest } = options;\n\n const features = useMemo(() => {\n if (!sortFns && !filterFns) return dishuiTableFeatures;\n const merged: Record<string, unknown> = {\n ...coreFeatures,\n columnFilteringFeature,\n columnOrderingFeature,\n columnVisibilityFeature,\n globalFilteringFeature,\n rowSortingFeature,\n rowPaginationFeature,\n rowSelectionFeature,\n rowExpandingFeature,\n coreRowModel: createCoreRowModel(),\n filteredRowModel: createFilteredRowModel(),\n sortedRowModel: createSortedRowModel(),\n paginatedRowModel: createPaginatedRowModel(),\n expandedRowModel: createExpandedRowModel(),\n };\n merged.sortFns = { ...builtInSortFns, ...sortFns };\n merged.filterFns = { ...builtInFilterFns, ...filterFns };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return tableFeatures(merged as any);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sortFns, filterFns]);\n\n return useTable<DishUITableFeatures, TData>({\n features,\n ...rest,\n } as TableOptions<DishUITableFeatures, TData>) as unknown as Table<TData>;\n}\n"],"mappings":";;;AA+EA,IAAM,IAAsB,EAAc;CACxC,GAAG;CACH;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,SAAS;CACE;CACX,cAAc,EAAmB;CACjC,kBAAkB,EAAuB;CACzC,gBAAgB,EAAqB;CACrC,mBAAmB,EAAwB;CAC3C,kBAAkB,EAAuB;AAC3C,CAAC;AAgED,SAAgB,EACd,GAMc;CACd,IAAM,EAAE,YAAS,WAAA,GAAW,GAAG,MAAS,GAElC,IAAW,QAAc;EAC7B,IAAI,CAAC,KAAW,CAAC,GAAW,OAAO;EACnC,IAAM,IAAkC;GACtC,GAAG;GACH;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,cAAc,EAAmB;GACjC,kBAAkB,EAAuB;GACzC,gBAAgB,EAAqB;GACrC,mBAAmB,EAAwB;GAC3C,kBAAkB,EAAuB;EAC3C;EAIA,OAHA,EAAO,UAAU;GAAE,GAAG;GAAgB,GAAG;EAAQ,GACjD,EAAO,YAAY;GAAE,GAAG;GAAkB,GAAG;EAAU,GAEhD,EAAc,CAAa;CAEpC,GAAG,CAAC,GAAS,CAAS,CAAC;CAEvB,OAAO,EAAqC;EAC1C;EACA,GAAG;CACL,CAA6C;AAC/C"}
|
|
@@ -2,6 +2,8 @@ import { Row } from './tanstack-table';
|
|
|
2
2
|
export declare const treeRowAnimationStyles = "\n.tree-row-icon {\n transition: transform 0.3s ease;\n}\n\n.tree-row-expanded .tree-row-icon {\n transform: rotate(90deg);\n}\n";
|
|
3
3
|
export declare function findAllChildRowIds<T>(row: any, parentId: string, subDataKey: string, getRowId?: (row: T, index: number) => string, prefix?: string): string[];
|
|
4
4
|
export declare function flattenTreeData<T extends object>(items: T[], expandedRowsState: Record<string, boolean>, subDataKey: string, getRowId?: (row: T, index: number) => string, depth?: number, parentId?: string, isParentExpanded?: boolean, result?: any[], onlyTopLevel?: boolean): any[];
|
|
5
|
+
/** Keep the hierarchy intact for TanStack's filter → sort → root-page → expand pipeline. */
|
|
6
|
+
export declare function prepareTreeData<T extends object>(items: T[], expanded: Record<string, boolean>, subDataKey: string, getRowId?: (row: T, index: number) => string, depth?: number, parentId?: string): T[];
|
|
5
7
|
export declare function createTreeSortingFns<T extends object>(): {
|
|
6
8
|
treeSortAsc: (rowA: Row<T>, rowB: Row<T>, columnId: string) => number;
|
|
7
9
|
};
|
|
@@ -2,32 +2,31 @@
|
|
|
2
2
|
var e = "\n.tree-row-icon {\n transition: transform 0.3s ease;\n}\n\n.tree-row-expanded .tree-row-icon {\n transform: rotate(90deg);\n}\n";
|
|
3
3
|
function t(e, n, r, i, a = "") {
|
|
4
4
|
let o = [], s = e[r];
|
|
5
|
-
return Array.isArray(s) && s.length > 0 && s.forEach((e,
|
|
6
|
-
let
|
|
7
|
-
o.push(
|
|
8
|
-
let
|
|
9
|
-
o.push(...
|
|
5
|
+
return Array.isArray(s) && s.length > 0 && s.forEach((e, a) => {
|
|
6
|
+
let s = i ? i(e, a) : `${n}_${a}`;
|
|
7
|
+
o.push(s);
|
|
8
|
+
let c = t(e, s, r, i);
|
|
9
|
+
o.push(...c);
|
|
10
10
|
}), o;
|
|
11
11
|
}
|
|
12
|
-
function n(e, t, r, i, a = 0, o = ""
|
|
13
|
-
return e.
|
|
14
|
-
let
|
|
12
|
+
function n(e, t, r, i, a = 0, o = "") {
|
|
13
|
+
return e.map((e, s) => {
|
|
14
|
+
let c = i ? i(e, s) : a > 0 ? `${o}_${s}` : String(s), l = e[r], u = Array.isArray(l) ? l : [];
|
|
15
|
+
return {
|
|
15
16
|
...e,
|
|
16
|
-
|
|
17
|
-
__id:
|
|
17
|
+
[r]: n(u, t, r, i, a + 1, c),
|
|
18
|
+
__id: c,
|
|
18
19
|
__parentId: o,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
__childCount:
|
|
20
|
+
__depth: a,
|
|
21
|
+
__hasChildren: u.length > 0,
|
|
22
|
+
__childCount: u.length,
|
|
23
|
+
__isExpanded: t[c] || !1
|
|
22
24
|
};
|
|
23
|
-
|
|
24
|
-
let p = t[d] || !1;
|
|
25
|
-
Array.isArray(e[r]) && e[r].length > 0 && p && !l && n(e[r], t, r, i, a + 1, d, s && p, c, l);
|
|
26
|
-
}), c;
|
|
25
|
+
});
|
|
27
26
|
}
|
|
28
27
|
function r() {
|
|
29
28
|
return { treeSortAsc: (e, t, n) => {
|
|
30
|
-
let r = e.original, i = t.original, a = r.__depth
|
|
29
|
+
let r = e.original, i = t.original, a = e.depth ?? r.__depth ?? 0, o = t.depth ?? i.__depth ?? 0;
|
|
31
30
|
if (a !== o) return 0;
|
|
32
31
|
if (a === 0 && o === 0) {
|
|
33
32
|
let r = e.getValue(n), i = t.getValue(n);
|
|
@@ -37,6 +36,6 @@ function r() {
|
|
|
37
36
|
} };
|
|
38
37
|
}
|
|
39
38
|
//#endregion
|
|
40
|
-
export { r as createTreeSortingFns, t as findAllChildRowIds, n as
|
|
39
|
+
export { r as createTreeSortingFns, t as findAllChildRowIds, n as prepareTreeData, e as treeRowAnimationStyles };
|
|
41
40
|
|
|
42
41
|
//# sourceMappingURL=treeDataUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treeDataUtils.js","names":[],"sources":["../../../../src/components/pro/DataTable/treeDataUtils.ts"],"sourcesContent":["import { Row } from './tanstack-table';\n\nexport const treeRowAnimationStyles = `\n.tree-row-icon {\n transition: transform 0.3s ease;\n}\n\n.tree-row-expanded .tree-row-icon {\n transform: rotate(90deg);\n}\n`;\n\nexport function findAllChildRowIds<T>(\n row: any,\n parentId: string,\n subDataKey: string,\n getRowId?: (row: T, index: number) => string,\n prefix: string = '',\n): string[] {\n const childIds: string[] = [];\n const subs = row[subDataKey];\n\n if (Array.isArray(subs) && subs.length > 0) {\n subs.forEach((subRow: any, index: number) => {\n const childId = getRowId\n ? getRowId(subRow, index)\n : `${
|
|
1
|
+
{"version":3,"file":"treeDataUtils.js","names":[],"sources":["../../../../src/components/pro/DataTable/treeDataUtils.ts"],"sourcesContent":["import { Row } from './tanstack-table';\n\nexport const treeRowAnimationStyles = `\n.tree-row-icon {\n transition: transform 0.3s ease;\n}\n\n.tree-row-expanded .tree-row-icon {\n transform: rotate(90deg);\n}\n`;\n\nexport function findAllChildRowIds<T>(\n row: any,\n parentId: string,\n subDataKey: string,\n getRowId?: (row: T, index: number) => string,\n prefix: string = '',\n): string[] {\n const childIds: string[] = [];\n const subs = row[subDataKey];\n\n if (Array.isArray(subs) && subs.length > 0) {\n subs.forEach((subRow: any, index: number) => {\n const childId = getRowId\n ? getRowId(subRow, index)\n : `${parentId}_${index}`;\n\n childIds.push(childId);\n\n const subChildIds = findAllChildRowIds(\n subRow, childId, subDataKey, getRowId,\n );\n childIds.push(...subChildIds);\n });\n }\n\n return childIds;\n}\n\nexport function flattenTreeData<T extends object>(\n items: T[],\n expandedRowsState: Record<string, boolean>,\n subDataKey: string,\n getRowId?: (row: T, index: number) => string,\n depth: number = 0,\n parentId: string = '',\n isParentExpanded: boolean = true,\n result: any[] = [],\n onlyTopLevel: boolean = false,\n) {\n items.forEach((item: any, index: number) => {\n const rowId = getRowId\n ? getRowId(item, index)\n : parentId ? `${parentId}_${index}` : `${index}`;\n\n const rowWithMeta = {\n ...item,\n __depth: depth,\n __id: rowId,\n __parentId: parentId,\n __hasChildren: Array.isArray(item[subDataKey]) && item[subDataKey].length > 0,\n __isExpanded: expandedRowsState[rowId] || false,\n __childCount: Array.isArray(item[subDataKey]) ? item[subDataKey].length : 0,\n };\n\n if (onlyTopLevel) {\n if (depth === 0) result.push(rowWithMeta);\n } else {\n if (depth === 0 || isParentExpanded) result.push(rowWithMeta);\n }\n\n const isExpanded = expandedRowsState[rowId] || false;\n if (Array.isArray(item[subDataKey]) && item[subDataKey].length > 0 && isExpanded && !onlyTopLevel) {\n flattenTreeData(\n item[subDataKey], expandedRowsState, subDataKey, getRowId,\n depth + 1, rowId, isParentExpanded && isExpanded, result, onlyTopLevel,\n );\n }\n });\n\n return result;\n}\n\n/** Keep the hierarchy intact for TanStack's filter → sort → root-page → expand pipeline. */\nexport function prepareTreeData<T extends object>(\n items: T[],\n expanded: Record<string, boolean>,\n subDataKey: string,\n getRowId?: (row: T, index: number) => string,\n depth = 0,\n parentId = '',\n): T[] {\n return items.map((item, index) => {\n const id = getRowId ? getRowId(item, index) : depth > 0 ? `${parentId}_${index}` : String(index);\n const children = (item as Record<string, unknown>)[subDataKey];\n const subs = Array.isArray(children) ? children as T[] : [];\n return {\n ...item,\n [subDataKey]: prepareTreeData(subs, expanded, subDataKey, getRowId, depth + 1, id),\n __id: id,\n __parentId: parentId,\n __depth: depth,\n __hasChildren: subs.length > 0,\n __childCount: subs.length,\n __isExpanded: expanded[id] || false,\n };\n });\n}\n\nexport function createTreeSortingFns<T extends object>() {\n return {\n treeSortAsc: (rowA: Row<T>, rowB: Row<T>, columnId: string) => {\n const valueA = rowA.original as any;\n const valueB = rowB.original as any;\n\n const depthA = rowA.depth ?? valueA.__depth ?? 0;\n const depthB = rowB.depth ?? valueB.__depth ?? 0;\n\n if (depthA !== depthB) return 0;\n\n if (depthA === 0 && depthB === 0) {\n const colA = rowA.getValue(columnId);\n const colB = rowB.getValue(columnId);\n\n if (colA === colB) return 0;\n if (colA == null) return -1;\n if (colB == null) return 1;\n\n if (typeof colA === 'number' && typeof colB === 'number') {\n return colA - colB;\n }\n if (colA instanceof Date && colB instanceof Date) {\n return colA.getTime() - colB.getTime();\n }\n return String(colA).localeCompare(String(colB));\n }\n\n return 0;\n },\n };\n}\n"],"mappings":";AAEA,IAAa,IAAyB;AAUtC,SAAgB,EACd,GACA,GACA,GACA,GACA,IAAiB,IACP;CACV,IAAM,IAAqB,CAAC,GACtB,IAAO,EAAI;CAiBjB,OAfI,MAAM,QAAQ,CAAI,KAAK,EAAK,SAAS,KACvC,EAAK,SAAS,GAAa,MAAkB;EAC3C,IAAM,IAAU,IACZ,EAAS,GAAQ,CAAK,IACtB,GAAG,EAAS,GAAG;EAEnB,EAAS,KAAK,CAAO;EAErB,IAAM,IAAc,EAClB,GAAQ,GAAS,GAAY,CAC/B;EACA,EAAS,KAAK,GAAG,CAAW;CAC9B,CAAC,GAGI;AACT;AA+CA,SAAgB,EACd,GACA,GACA,GACA,GACA,IAAQ,GACR,IAAW,IACN;CACL,OAAO,EAAM,KAAK,GAAM,MAAU;EAChC,IAAM,IAAK,IAAW,EAAS,GAAM,CAAK,IAAI,IAAQ,IAAI,GAAG,EAAS,GAAG,MAAU,OAAO,CAAK,GACzF,IAAY,EAAiC,IAC7C,IAAO,MAAM,QAAQ,CAAQ,IAAI,IAAkB,CAAC;EAC1D,OAAO;GACL,GAAG;IACF,IAAa,EAAgB,GAAM,GAAU,GAAY,GAAU,IAAQ,GAAG,CAAE;GACjF,MAAM;GACN,YAAY;GACZ,SAAS;GACT,eAAe,EAAK,SAAS;GAC7B,cAAc,EAAK;GACnB,cAAc,EAAS,MAAO;EAChC;CACF,CAAC;AACH;AAEA,SAAgB,IAAyC;CACvD,OAAO,EACL,cAAc,GAAc,GAAc,MAAqB;EAC7D,IAAM,IAAS,EAAK,UACd,IAAS,EAAK,UAEd,IAAS,EAAK,SAAS,EAAO,WAAW,GACzC,IAAS,EAAK,SAAS,EAAO,WAAW;EAE/C,IAAI,MAAW,GAAQ,OAAO;EAE9B,IAAI,MAAW,KAAK,MAAW,GAAG;GAChC,IAAM,IAAO,EAAK,SAAS,CAAQ,GAC7B,IAAO,EAAK,SAAS,CAAQ;GAYnC,OAVI,MAAS,IAAa,IACtB,KAAQ,OAAa,KACrB,KAAQ,OAAa,IAErB,OAAO,KAAS,YAAY,OAAO,KAAS,WACvC,IAAO,IAEZ,aAAgB,QAAQ,aAAgB,OACnC,EAAK,QAAQ,IAAI,EAAK,QAAQ,IAEhC,OAAO,CAAI,CAAC,CAAC,cAAc,OAAO,CAAI,CAAC;EAChD;EAEA,OAAO;CACT,EACF;AACF"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { ColumnDef, ColumnFiltersState, SortingState, VisibilityState, RowSelectionState, Column } from './tanstack-table';
|
|
3
3
|
import type { DataTableExtension } from './extension';
|
|
4
|
+
import type { TableCardOptions } from '../../Table';
|
|
5
|
+
export type DataTableViewMode = 'table' | 'card';
|
|
6
|
+
export interface DataTableCardOptions extends TableCardOptions {
|
|
7
|
+
/** 覆盖卡片字段标签;默认使用字符串列标题,否则使用列 ID。null 隐藏标签。 */
|
|
8
|
+
fieldLabels?: Record<string, React.ReactNode>;
|
|
9
|
+
}
|
|
4
10
|
export type CellEventHandler = (row: any, column: any, event: React.MouseEvent) => void;
|
|
5
11
|
export type RowEventHandler = (row: any, event: React.MouseEvent) => void;
|
|
6
12
|
export type ColumnEventHandler = (column: any, event: React.MouseEvent) => void;
|
|
@@ -40,20 +46,40 @@ export interface DataTableProps<T extends object> {
|
|
|
40
46
|
data: T[];
|
|
41
47
|
columns: ColumnDef<T, any>[];
|
|
42
48
|
className?: string;
|
|
49
|
+
/** 传入即受控;未提供 onViewModeChange 时只读。 */
|
|
50
|
+
viewMode?: DataTableViewMode;
|
|
51
|
+
/** 默认 table,仅用于初始化非受控视图。 */
|
|
52
|
+
defaultViewMode?: DataTableViewMode;
|
|
53
|
+
onViewModeChange?: (viewMode: DataTableViewMode) => void;
|
|
54
|
+
/** 默认 false;独立于 toolbar.enabled,扩展接管主体时不显示。 */
|
|
55
|
+
enableViewSwitcher?: boolean;
|
|
56
|
+
viewSwitcherLabels?: {
|
|
57
|
+
label?: string;
|
|
58
|
+
table?: string;
|
|
59
|
+
card?: string;
|
|
60
|
+
};
|
|
61
|
+
cardOptions?: DataTableCardOptions;
|
|
43
62
|
enableSorting?: boolean;
|
|
44
63
|
enableFiltering?: boolean;
|
|
45
64
|
enablePagination?: boolean;
|
|
46
65
|
enableSelection?: boolean;
|
|
47
66
|
enableColumnReordering?: boolean;
|
|
48
67
|
enableColumnResizing?: boolean;
|
|
68
|
+
/** 跳过本地筛选;服务端分页时始终跳过。 */
|
|
49
69
|
manualFiltering?: boolean;
|
|
70
|
+
/** 跳过本地排序;服务端分页时始终跳过。 */
|
|
71
|
+
manualSorting?: boolean;
|
|
72
|
+
/** 按根节点分页,展开后代不占页大小。默认仅对根节点筛选,保留匹配根的整个子树。 */
|
|
50
73
|
enableExpanding?: boolean;
|
|
51
74
|
subDataKey?: string;
|
|
52
75
|
onRowExpand?: ExpandRowHandler;
|
|
53
76
|
expandedRows?: Record<string, boolean>;
|
|
77
|
+
defaultExpandedRows?: Record<string, boolean>;
|
|
54
78
|
onExpandedRowsChange?: (expandedRows: Record<string, boolean>) => void;
|
|
79
|
+
/** 必须全表唯一;服务端分页/数据重排时应提供稳定业务 ID。默认 ID 是输入索引(子行用父 ID_index)。 */
|
|
55
80
|
getRowId?: (row: T, index: number) => string;
|
|
56
81
|
indentSize?: number;
|
|
82
|
+
/** 默认 true:只排序根节点,后代保持输入顺序。false:逐层排序同级节点,仍保持树结构。 */
|
|
57
83
|
enableTreeSort?: boolean;
|
|
58
84
|
toolbar?: ToolbarOptions;
|
|
59
85
|
customFilterPanel?: React.ComponentType<CustomFilterPanelProps>;
|
|
@@ -71,19 +97,36 @@ export interface DataTableProps<T extends object> {
|
|
|
71
97
|
onTableClick?: TableEventHandler;
|
|
72
98
|
onTableMouseEnter?: TableEventHandler;
|
|
73
99
|
onTableMouseLeave?: TableEventHandler;
|
|
100
|
+
/** 默认 false:data 是完整客户端数据,先筛选/排序再分页。
|
|
101
|
+
* true:data 已由服务端完成筛选/排序/分页,不再做本地转换;需提供 rowCount 或 pageCount。
|
|
102
|
+
* enablePagination=false 只关闭本地切片和分页控件,不取消 manual* 的含义。
|
|
103
|
+
*/
|
|
104
|
+
manualPagination?: boolean;
|
|
105
|
+
/** 服务端筛选后的根节点总数;仅 manualPagination 时使用。 */
|
|
106
|
+
rowCount?: number;
|
|
107
|
+
/** 服务端总页数,优先于 rowCount;必须是非负整数(不支持未知总页数 -1)。 */
|
|
108
|
+
pageCount?: number;
|
|
74
109
|
pageSize?: number;
|
|
110
|
+
defaultPageSize?: number;
|
|
111
|
+
/** 从 0 开始。客户端非受控页码在数据缩短时夹到最后一页;受控页码由父组件负责保持有效。 */
|
|
75
112
|
pageIndex?: number;
|
|
113
|
+
defaultPageIndex?: number;
|
|
76
114
|
onPageChange?: (page: number) => void;
|
|
77
115
|
onPageSizeChange?: (pageSize: number) => void;
|
|
78
116
|
selectedRows?: RowSelectionState;
|
|
117
|
+
defaultSelectedRows?: RowSelectionState;
|
|
79
118
|
onRowSelectionChange?: (selectedRows: RowSelectionState) => void;
|
|
80
119
|
sortingState?: SortingState;
|
|
120
|
+
defaultSortingState?: SortingState;
|
|
81
121
|
onSortingChange?: (sortingState: SortingState) => void;
|
|
82
122
|
columnFilters?: ColumnFiltersState;
|
|
123
|
+
defaultColumnFilters?: ColumnFiltersState;
|
|
83
124
|
onColumnFiltersChange?: (columnFilters: ColumnFiltersState) => void;
|
|
84
125
|
columnVisibility?: VisibilityState;
|
|
126
|
+
defaultColumnVisibility?: VisibilityState;
|
|
85
127
|
onColumnVisibilityChange?: (columnVisibility: VisibilityState) => void;
|
|
86
128
|
columnOrder?: string[];
|
|
129
|
+
defaultColumnOrder?: string[];
|
|
87
130
|
onColumnOrderChange?: (columnOrder: string[]) => void;
|
|
88
131
|
extensions?: DataTableExtension<T>[];
|
|
89
132
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type PaginationState, type Updater } from './tanstack-table';
|
|
2
|
+
import type { DataTableProps } from './types';
|
|
3
|
+
/** Shared by the view and executable row-model regression tests. */
|
|
4
|
+
export declare function useDataTableModel<T extends object>(props: DataTableProps<T>): {
|
|
5
|
+
table: import("./tanstack-table").Table<T>;
|
|
6
|
+
rowSelection: import("@tanstack/table-core").RowSelectionState;
|
|
7
|
+
visibilityState: import("@tanstack/table-core").ColumnVisibilityState;
|
|
8
|
+
columnOrderState: string[];
|
|
9
|
+
setColumnOrderState: import("react").Dispatch<import("react").SetStateAction<string[]>>;
|
|
10
|
+
expandedRowsState: Record<string, boolean>;
|
|
11
|
+
handleRowExpand: (rowId: string, row: T) => void;
|
|
12
|
+
resolveRowId: (row: T, index: number) => string;
|
|
13
|
+
internalPageIndex: number;
|
|
14
|
+
internalPageSize: number;
|
|
15
|
+
handlePaginationChange: (updater: Updater<PaginationState>) => void;
|
|
16
|
+
};
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { builtInSortFns as e, useReactTable as t } from "./tanstack-table.js";
|
|
2
|
+
import { createTreeSortingFns as n, findAllChildRowIds as r, prepareTreeData as i } from "./treeDataUtils.js";
|
|
3
|
+
import { deepEqual as a, useControllableState as o } from "../../../hooks/useControllableState.js";
|
|
4
|
+
import { useCallback as s, useEffect as c, useLayoutEffect as l, useMemo as u, useRef as d } from "react";
|
|
5
|
+
//#region src/components/pro/DataTable/useDataTableModel.ts
|
|
6
|
+
function f(e, t, n = 0) {
|
|
7
|
+
if (!Number.isSafeInteger(t) || t < n) throw RangeError(`DataTable: ${e} must be an integer >= ${n}.`);
|
|
8
|
+
}
|
|
9
|
+
function p(p) {
|
|
10
|
+
let { data: m, columns: h, getRowId: g, subDataKey: _ = "subs", enableExpanding: v = !1, enableTreeSort: y = !0, enablePagination: b = !0, manualPagination: x = !1, enableSorting: S = !0, enableFiltering: C = !0, enableSelection: w = !0, manualSorting: T = !1, manualFiltering: E = !1, rowCount: D, pageCount: O } = p, [k, A] = o(p.sortingState, p.onSortingChange, a, p.defaultSortingState ?? []), [j, M] = o(p.selectedRows, p.onRowSelectionChange, a, p.defaultSelectedRows ?? {}), [N, P] = o(p.columnFilters, p.onColumnFiltersChange, a, p.defaultColumnFilters ?? []), [F, I] = o(p.columnVisibility, p.onColumnVisibilityChange, a, p.defaultColumnVisibility ?? {}), [L, R] = o(p.columnOrder, p.onColumnOrderChange, a, p.defaultColumnOrder ?? []), [z, B] = o(p.expandedRows, p.onExpandedRowsChange, a, p.defaultExpandedRows ?? {}), [V, H] = o(p.pageIndex, p.onPageChange, Object.is, p.defaultPageIndex ?? 0), [U, W] = o(p.pageSize, p.onPageSizeChange, Object.is, p.defaultPageSize ?? 10);
|
|
11
|
+
if (f("pageIndex", V), f("pageSize", U, 1), x && (D !== void 0 && f("rowCount", D), O !== void 0 && f("pageCount", O), b && D === void 0 && O === void 0)) throw Error("DataTable: manualPagination requires rowCount or pageCount.");
|
|
12
|
+
let G = u(() => v ? i(m, z, _, g) : m, [
|
|
13
|
+
m,
|
|
14
|
+
v,
|
|
15
|
+
z,
|
|
16
|
+
_,
|
|
17
|
+
g
|
|
18
|
+
]), K = u(() => {
|
|
19
|
+
if (!v || !y) return h;
|
|
20
|
+
let t = n().treeSortAsc, r = (n) => n.map((n) => {
|
|
21
|
+
if ("columns" in n) return {
|
|
22
|
+
...n,
|
|
23
|
+
columns: r(n.columns ?? [])
|
|
24
|
+
};
|
|
25
|
+
if (n.enableSorting === !1) return n;
|
|
26
|
+
let i = n.sortFn, a = typeof i == "function" ? i : i && i !== "auto" ? e[i] : t;
|
|
27
|
+
return {
|
|
28
|
+
...n,
|
|
29
|
+
sortUndefined: !1,
|
|
30
|
+
sortFn: (e, n, r) => e.depth > 0 || n.depth > 0 ? 0 : (a ?? t)(e, n, r)
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
return r(h);
|
|
34
|
+
}, [
|
|
35
|
+
h,
|
|
36
|
+
v,
|
|
37
|
+
y
|
|
38
|
+
]), q = {
|
|
39
|
+
pageIndex: V,
|
|
40
|
+
pageSize: U
|
|
41
|
+
}, J = d(q);
|
|
42
|
+
l(() => {
|
|
43
|
+
J.current = q;
|
|
44
|
+
});
|
|
45
|
+
let Y = s((e) => {
|
|
46
|
+
let t = J.current, n = typeof e == "function" ? e(t) : e;
|
|
47
|
+
f("pageIndex", n.pageIndex), f("pageSize", n.pageSize, 1), J.current = {
|
|
48
|
+
pageIndex: p.pageIndex === void 0 ? n.pageIndex : t.pageIndex,
|
|
49
|
+
pageSize: p.pageSize === void 0 ? n.pageSize : t.pageSize
|
|
50
|
+
}, W(n.pageSize), H(n.pageIndex);
|
|
51
|
+
}, [
|
|
52
|
+
p.pageIndex,
|
|
53
|
+
p.pageSize,
|
|
54
|
+
H,
|
|
55
|
+
W
|
|
56
|
+
]), X = t({
|
|
57
|
+
data: G,
|
|
58
|
+
columns: K,
|
|
59
|
+
getRowId: (e, t) => v ? String(e.__id) : g?.(e, t) ?? String(t),
|
|
60
|
+
getSubRows: v ? (e) => e[_] : void 0,
|
|
61
|
+
manualPagination: x || !b,
|
|
62
|
+
manualSorting: x || T || !S,
|
|
63
|
+
manualFiltering: x || E || !C,
|
|
64
|
+
pageCount: x ? O : void 0,
|
|
65
|
+
rowCount: x ? D : void 0,
|
|
66
|
+
paginateExpandedRows: !1,
|
|
67
|
+
maxLeafRowFilterDepth: v ? 0 : void 0,
|
|
68
|
+
enableSorting: S,
|
|
69
|
+
enableFilters: C,
|
|
70
|
+
enableRowSelection: w,
|
|
71
|
+
enableSubRowSelection: !1,
|
|
72
|
+
autoResetPageIndex: !1,
|
|
73
|
+
autoResetExpanded: !1,
|
|
74
|
+
state: {
|
|
75
|
+
sorting: k,
|
|
76
|
+
rowSelection: j,
|
|
77
|
+
columnFilters: N,
|
|
78
|
+
columnVisibility: F,
|
|
79
|
+
columnOrder: L,
|
|
80
|
+
expanded: z,
|
|
81
|
+
pagination: {
|
|
82
|
+
pageIndex: V,
|
|
83
|
+
pageSize: U
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
onSortingChange: A,
|
|
87
|
+
onRowSelectionChange: M,
|
|
88
|
+
onColumnFiltersChange: P,
|
|
89
|
+
onColumnVisibilityChange: I,
|
|
90
|
+
onColumnOrderChange: R,
|
|
91
|
+
onExpandedChange: (e) => B((t) => {
|
|
92
|
+
let n = typeof e == "function" ? e(t) : e;
|
|
93
|
+
return n === !0 ? Object.fromEntries(X.getCoreRowModel().flatRows.map((e) => [e.id, !0])) : n;
|
|
94
|
+
}),
|
|
95
|
+
onPaginationChange: Y
|
|
96
|
+
}), Z = X.getPageCount(), Q = d({
|
|
97
|
+
sorting: k,
|
|
98
|
+
columnFilters: N,
|
|
99
|
+
size: U
|
|
100
|
+
});
|
|
101
|
+
c(() => {
|
|
102
|
+
let e = Q.current;
|
|
103
|
+
Q.current = {
|
|
104
|
+
sorting: k,
|
|
105
|
+
columnFilters: N,
|
|
106
|
+
size: U
|
|
107
|
+
}, b && !x && p.pageIndex === void 0 && (!a(e.sorting, k) || !a(e.columnFilters, N) || e.size !== U ? H(0) : V >= Z && H(Math.max(0, Z - 1)));
|
|
108
|
+
}, [
|
|
109
|
+
k,
|
|
110
|
+
N,
|
|
111
|
+
U,
|
|
112
|
+
V,
|
|
113
|
+
Z,
|
|
114
|
+
b,
|
|
115
|
+
x,
|
|
116
|
+
p.pageIndex,
|
|
117
|
+
H
|
|
118
|
+
]);
|
|
119
|
+
let $ = (e, t) => {
|
|
120
|
+
let n = !z[e];
|
|
121
|
+
B((i) => {
|
|
122
|
+
let a = {
|
|
123
|
+
...i,
|
|
124
|
+
[e]: n
|
|
125
|
+
};
|
|
126
|
+
return n || r(t, e, _, g).forEach((e) => {
|
|
127
|
+
a[e] = !1;
|
|
128
|
+
}), a;
|
|
129
|
+
}), p.onRowExpand?.(t, n);
|
|
130
|
+
}, ee = new Map(X.getCoreRowModel().flatRows.map((e) => [e.original, e.id]));
|
|
131
|
+
return {
|
|
132
|
+
table: X,
|
|
133
|
+
rowSelection: j,
|
|
134
|
+
visibilityState: F,
|
|
135
|
+
columnOrderState: X.getAllLeafColumns().map((e) => e.id),
|
|
136
|
+
setColumnOrderState: R,
|
|
137
|
+
expandedRowsState: z,
|
|
138
|
+
handleRowExpand: $,
|
|
139
|
+
resolveRowId: (e, t) => ee.get(e) ?? g?.(e, t) ?? String(t),
|
|
140
|
+
internalPageIndex: V,
|
|
141
|
+
internalPageSize: U,
|
|
142
|
+
handlePaginationChange: Y
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
//#endregion
|
|
146
|
+
export { p as useDataTableModel };
|
|
147
|
+
|
|
148
|
+
//# sourceMappingURL=useDataTableModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDataTableModel.js","names":[],"sources":["../../../../src/components/pro/DataTable/useDataTableModel.ts"],"sourcesContent":["import { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';\nimport { useControllableState, deepEqual } from '../../../hooks/useControllableState';\nimport {\n useReactTable, builtInSortFns,\n type ColumnDef, type SortingFn, type PaginationState, type Updater,\n} from './tanstack-table';\nimport type { DataTableProps } from './types';\nimport { createTreeSortingFns, findAllChildRowIds, prepareTreeData } from './treeDataUtils';\n\nfunction assertInteger(name: string, value: number, minimum = 0) {\n if (!Number.isSafeInteger(value) || value < minimum) {\n throw new RangeError(`DataTable: ${name} must be an integer >= ${minimum}.`);\n }\n}\n\n/** Shared by the view and executable row-model regression tests. */\nexport function useDataTableModel<T extends object>(props: DataTableProps<T>) {\n const {\n data, columns, getRowId, subDataKey = 'subs', enableExpanding = false,\n enableTreeSort = true, enablePagination = true, manualPagination = false,\n enableSorting = true, enableFiltering = true, enableSelection = true,\n manualSorting = false, manualFiltering = false, rowCount, pageCount,\n } = props;\n const [sorting, setSorting] = useControllableState(\n props.sortingState, props.onSortingChange, deepEqual, props.defaultSortingState ?? [],\n );\n const [rowSelection, setRowSelection] = useControllableState(\n props.selectedRows, props.onRowSelectionChange, deepEqual, props.defaultSelectedRows ?? {},\n );\n const [columnFilters, setColumnFilters] = useControllableState(\n props.columnFilters, props.onColumnFiltersChange, deepEqual, props.defaultColumnFilters ?? [],\n );\n const [visibilityState, setVisibilityState] = useControllableState(\n props.columnVisibility, props.onColumnVisibilityChange, deepEqual, props.defaultColumnVisibility ?? {},\n );\n const [columnOrder, setColumnOrderState] = useControllableState(\n props.columnOrder, props.onColumnOrderChange, deepEqual, props.defaultColumnOrder ?? [],\n );\n const [expandedRowsState, setExpandedRowsState] = useControllableState(\n props.expandedRows, props.onExpandedRowsChange, deepEqual, props.defaultExpandedRows ?? {},\n );\n const [internalPageIndex, setInternalPageIndex] = useControllableState(\n props.pageIndex, props.onPageChange, Object.is, props.defaultPageIndex ?? 0,\n );\n const [internalPageSize, setInternalPageSize] = useControllableState(\n props.pageSize, props.onPageSizeChange, Object.is, props.defaultPageSize ?? 10,\n );\n assertInteger('pageIndex', internalPageIndex);\n assertInteger('pageSize', internalPageSize, 1);\n if (manualPagination) {\n if (rowCount !== undefined) assertInteger('rowCount', rowCount);\n if (pageCount !== undefined) assertInteger('pageCount', pageCount);\n if (enablePagination && rowCount === undefined && pageCount === undefined) {\n throw new Error('DataTable: manualPagination requires rowCount or pageCount.');\n }\n }\n\n const tableData = useMemo(() => enableExpanding\n ? prepareTreeData(data, expandedRowsState, subDataKey, getRowId)\n : data, [data, enableExpanding, expandedRowsState, subDataKey, getRowId]);\n\n const processedColumns = useMemo(() => {\n if (!enableExpanding || !enableTreeSort) return columns;\n const defaultSort = createTreeSortingFns<T>().treeSortAsc;\n const wrap = (defs: readonly ColumnDef<T, any>[]): ColumnDef<T, any>[] => defs.map(column => {\n if ('columns' in column) return { ...column, columns: wrap(column.columns ?? []) };\n if (column.enableSorting === false) return column;\n const originalSort = column.sortFn;\n const sort = typeof originalSort === 'function' ? originalSort\n : originalSort && originalSort !== 'auto'\n ? builtInSortFns[originalSort as keyof typeof builtInSortFns] as SortingFn<T>\n : defaultSort;\n return {\n ...column,\n // TanStack handles undefined before invoking sortFn. Disable that shortcut\n // so an undefined child value cannot reorder an otherwise unsorted subtree.\n sortUndefined: false,\n sortFn: (a, b, id) => a.depth > 0 || b.depth > 0 ? 0 : (sort ?? defaultSort)(a, b, id),\n };\n });\n return wrap(columns);\n }, [columns, enableExpanding, enableTreeSort]);\n\n const pagination = { pageIndex: internalPageIndex, pageSize: internalPageSize };\n const paginationRef = useRef(pagination);\n useLayoutEffect(() => { paginationRef.current = pagination; });\n const handlePaginationChange = useCallback((updater: Updater<PaginationState>) => {\n const current = paginationRef.current;\n const next = typeof updater === 'function' ? updater(current) : updater;\n assertInteger('pageIndex', next.pageIndex);\n assertInteger('pageSize', next.pageSize, 1);\n // Preserve pending uncontrolled slices across batched TanStack updaters,\n // while controlled slices continue to use the parent's committed values.\n paginationRef.current = {\n pageIndex: props.pageIndex === undefined ? next.pageIndex : current.pageIndex,\n pageSize: props.pageSize === undefined ? next.pageSize : current.pageSize,\n };\n setInternalPageSize(next.pageSize);\n setInternalPageIndex(next.pageIndex);\n }, [props.pageIndex, props.pageSize, setInternalPageIndex, setInternalPageSize]);\n\n const table = useReactTable<T>({\n data: tableData,\n columns: processedColumns,\n getRowId: (row, index) => enableExpanding\n ? String((row as Record<string, unknown>).__id)\n : getRowId?.(row, index) ?? String(index),\n getSubRows: enableExpanding\n ? row => (row as Record<string, unknown>)[subDataKey] as T[]\n : undefined,\n // Local pipeline sees the full hierarchy. Only server mode bypasses all\n // processing; hiding pagination alone still permits local sort/filter.\n manualPagination: manualPagination || !enablePagination,\n manualSorting: manualPagination || manualSorting || !enableSorting,\n manualFiltering: manualPagination || manualFiltering || !enableFiltering,\n pageCount: manualPagination ? pageCount : undefined,\n rowCount: manualPagination ? rowCount : undefined,\n paginateExpandedRows: false,\n maxLeafRowFilterDepth: enableExpanding ? 0 : undefined,\n enableSorting,\n enableFilters: enableFiltering,\n enableRowSelection: enableSelection,\n enableSubRowSelection: false,\n autoResetPageIndex: false,\n autoResetExpanded: false,\n state: {\n sorting, rowSelection, columnFilters, columnVisibility: visibilityState,\n columnOrder, expanded: expandedRowsState,\n pagination: { pageIndex: internalPageIndex, pageSize: internalPageSize },\n },\n onSortingChange: setSorting,\n onRowSelectionChange: setRowSelection,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setVisibilityState,\n onColumnOrderChange: setColumnOrderState,\n onExpandedChange: updater => setExpandedRowsState(previous => {\n const next = typeof updater === 'function' ? updater(previous) : updater;\n return next === true\n ? Object.fromEntries(table.getCoreRowModel().flatRows.map(row => [row.id, true]))\n : next;\n }),\n onPaginationChange: handlePaginationChange,\n });\n\n const localPageCount = table.getPageCount();\n const previousQuery = useRef({ sorting, columnFilters, size: internalPageSize });\n useEffect(() => {\n const previous = previousQuery.current;\n previousQuery.current = { sorting, columnFilters, size: internalPageSize };\n // Never rewrite a controlled page or a server request. Their owner must\n // reset/clamp the page along with the query and remote total.\n if (!enablePagination || manualPagination || props.pageIndex !== undefined) return;\n if (!deepEqual(previous.sorting, sorting) || !deepEqual(previous.columnFilters, columnFilters)\n || previous.size !== internalPageSize) {\n setInternalPageIndex(0);\n } else if (internalPageIndex >= localPageCount) {\n setInternalPageIndex(Math.max(0, localPageCount - 1));\n }\n }, [sorting, columnFilters, internalPageSize, internalPageIndex, localPageCount,\n enablePagination, manualPagination, props.pageIndex, setInternalPageIndex]);\n\n const handleRowExpand = (rowId: string, row: T) => {\n const expanded = !expandedRowsState[rowId];\n setExpandedRowsState(previous => {\n const next = { ...previous, [rowId]: expanded };\n if (!expanded) {\n findAllChildRowIds(row, rowId, subDataKey, getRowId).forEach(id => { next[id] = false; });\n }\n return next;\n });\n props.onRowExpand?.(row, expanded);\n };\n\n // TanStack owns mutable row models; snapshot IDs per render rather than\n // caching by flatRows identity, which does not guarantee unchanged contents.\n const rowIds = new Map(table.getCoreRowModel().flatRows.map(row => [row.original, row.id]));\n const resolveRowId = (row: T, index: number) =>\n rowIds.get(row) ?? getRowId?.(row, index) ?? String(index);\n\n // Derive the default order instead of notifying the parent on mount.\n const columnOrderState = table.getAllLeafColumns().map(column => column.id);\n return {\n table, rowSelection, visibilityState, columnOrderState, setColumnOrderState,\n expandedRowsState, handleRowExpand, resolveRowId,\n internalPageIndex, internalPageSize, handlePaginationChange,\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import t from "
|
|
1
|
+
import e from "../../Tree/Tree.js";
|
|
2
|
+
import { useClickOutside as t } from "../../../hooks/useClickOutside.js";
|
|
3
3
|
import n, { useCallback as r, useEffect as i, useRef as a, useState as o } from "react";
|
|
4
4
|
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
5
5
|
//#region src/components/pro/FileExplorer/Breadcrumb.tsx
|
|
@@ -43,7 +43,7 @@ var l = { root: "Root" }, u = () => /* @__PURE__ */ s("svg", {
|
|
|
43
43
|
d: "M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm2 6a1 1 0 011-1h6a1 1 0 110 2H7a1 1 0 01-1-1zm1 3a1 1 0 100 2h6a1 1 0 100-2H7z",
|
|
44
44
|
clipRule: "evenodd"
|
|
45
45
|
})
|
|
46
|
-
}), m = ({ path:
|
|
46
|
+
}), m = ({ path: t, adapter: n, onNavigate: a }) => {
|
|
47
47
|
let [c, l] = o([]), [u, d] = o(!1), m = r(async (e) => {
|
|
48
48
|
try {
|
|
49
49
|
return (await n.list(e)).sort((e, t) => e.type === t.type ? String(e.name).localeCompare(String(t.name)) : e.type === "folder" ? -1 : 1).map((e) => ({
|
|
@@ -61,13 +61,13 @@ var l = { root: "Root" }, u = () => /* @__PURE__ */ s("svg", {
|
|
|
61
61
|
}
|
|
62
62
|
}, [n]);
|
|
63
63
|
i(() => {
|
|
64
|
-
let
|
|
65
|
-
return d(!0), m(
|
|
66
|
-
|
|
64
|
+
let e = !0;
|
|
65
|
+
return d(!0), m(t).then((t) => {
|
|
66
|
+
e && (l(t), d(!1));
|
|
67
67
|
}), () => {
|
|
68
|
-
|
|
68
|
+
e = !1;
|
|
69
69
|
};
|
|
70
|
-
}, [
|
|
70
|
+
}, [t, m]);
|
|
71
71
|
let h = r(async (e, t) => {
|
|
72
72
|
if (!t) return;
|
|
73
73
|
let n = String(e), r = (e, t) => {
|
|
@@ -104,7 +104,7 @@ var l = { root: "Root" }, u = () => /* @__PURE__ */ s("svg", {
|
|
|
104
104
|
children: "Empty Folder"
|
|
105
105
|
}) : /* @__PURE__ */ s("div", {
|
|
106
106
|
className: "p-1 w-64 max-h-[300px] overflow-y-auto sm:min-w-[200px] max-w-[80vw]",
|
|
107
|
-
children: /* @__PURE__ */ s(
|
|
107
|
+
children: /* @__PURE__ */ s(e, {
|
|
108
108
|
data: c,
|
|
109
109
|
onNodeClick: g,
|
|
110
110
|
onNodeToggle: h,
|
|
@@ -117,9 +117,9 @@ var l = { root: "Root" }, u = () => /* @__PURE__ */ s("svg", {
|
|
|
117
117
|
indent: 12
|
|
118
118
|
})
|
|
119
119
|
});
|
|
120
|
-
}, h = ({ path:
|
|
120
|
+
}, h = ({ path: e, adapter: n, onNavigate: r }) => {
|
|
121
121
|
let [i, l] = o(!1), u = a(null);
|
|
122
|
-
return
|
|
122
|
+
return t(u, () => l(!1), i), /* @__PURE__ */ c("div", {
|
|
123
123
|
className: "relative flex items-center",
|
|
124
124
|
ref: u,
|
|
125
125
|
children: [n ? /* @__PURE__ */ s("button", {
|
|
@@ -135,7 +135,7 @@ var l = { root: "Root" }, u = () => /* @__PURE__ */ s("svg", {
|
|
|
135
135
|
className: "absolute top-full left-1/2 -translate-x-1/2 mt-1 bg-base-100 shadow-2xl border border-base-200 rounded-xl z-[9999]",
|
|
136
136
|
onClick: (e) => e.stopPropagation(),
|
|
137
137
|
children: /* @__PURE__ */ s(m, {
|
|
138
|
-
path:
|
|
138
|
+
path: e,
|
|
139
139
|
adapter: n,
|
|
140
140
|
onNavigate: (e) => {
|
|
141
141
|
r(e), l(!1);
|