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
|
@@ -3,63 +3,63 @@ import { flexRender as t } from "../tanstack-table.js";
|
|
|
3
3
|
import n from "react";
|
|
4
4
|
import { Fragment as r, jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
5
5
|
//#region src/components/pro/DataTable/components/TableBody.tsx
|
|
6
|
-
function o({ table: o,
|
|
7
|
-
let
|
|
6
|
+
function o({ table: o, card: s = !1, fieldLabels: c, expandedRowsState: l, onRowClick: u, onRowDoubleClick: d, onRowMouseEnter: f, onRowMouseLeave: p, onCellClick: m, onCellDoubleClick: h, onCellMouseEnter: g, onCellMouseLeave: _, enableExpanding: v, indentSize: y, handleRowExpand: b, extensions: x = [], extensionApi: S, getRowId: C, onCellContextMenu: w }) {
|
|
7
|
+
let T = x.length > 0 && !!S;
|
|
8
8
|
return /* @__PURE__ */ i(e.Body, { children: o.getRowModel().rows.length === 0 ? /* @__PURE__ */ i(e.Row, { children: /* @__PURE__ */ i(e.Cell, {
|
|
9
9
|
colSpan: o.getAllColumns().length,
|
|
10
10
|
className: "text-center py-4",
|
|
11
11
|
children: "没有数据"
|
|
12
|
-
}) }) : o.getRowModel().rows.map((o,
|
|
13
|
-
let
|
|
12
|
+
}) }) : o.getRowModel().rows.map((o, E) => {
|
|
13
|
+
let D = o.depth, O = o.subRows.length > 0, k = o.id, A = O && l[k] || !1, j = `
|
|
14
14
|
${o.getIsSelected() ? "bg-primary/10" : ""}
|
|
15
|
-
${
|
|
16
|
-
|
|
17
|
-
if (A && !M) return null;
|
|
18
|
-
let P = x ? x(o.original, w) : String(O ?? w), F = {
|
|
15
|
+
${O && A ? "tree-row-expanded" : ""}
|
|
16
|
+
`, M = C ? C(o.original, E) : o.id, N = {
|
|
19
17
|
row: o.original,
|
|
20
|
-
rowId:
|
|
21
|
-
rowIndex:
|
|
18
|
+
rowId: M,
|
|
19
|
+
rowIndex: E,
|
|
22
20
|
selected: o.getIsSelected()
|
|
23
|
-
},
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
21
|
+
}, P = T ? x.reduce((e, t) => Object.assign(e, t.rowProps?.(N, S) ?? {}), {}) : {}, F = /* @__PURE__ */ i(e.Row, {
|
|
22
|
+
selected: o.getIsSelected(),
|
|
23
|
+
className: j,
|
|
24
|
+
onClick: u ? (e) => u(o.original, e) : void 0,
|
|
25
|
+
onDoubleClick: d ? (e) => d(o.original, e) : void 0,
|
|
26
|
+
onMouseEnter: f ? (e) => f(o.original, e) : void 0,
|
|
27
|
+
onMouseLeave: p ? (e) => p(o.original, e) : void 0,
|
|
28
|
+
...P,
|
|
29
|
+
children: o.getVisibleCells().map((n, l) => {
|
|
30
|
+
let u = l === 0, d;
|
|
31
|
+
if (T) {
|
|
33
32
|
let e = {
|
|
34
33
|
value: n.getValue(),
|
|
35
34
|
row: o.original,
|
|
36
|
-
rowId:
|
|
37
|
-
rowIndex:
|
|
35
|
+
rowId: M,
|
|
36
|
+
rowIndex: E,
|
|
38
37
|
columnId: n.column.id
|
|
39
38
|
};
|
|
40
|
-
for (let t of
|
|
41
|
-
let n = t.cell?.(e,
|
|
39
|
+
for (let t of x) {
|
|
40
|
+
let n = t.cell?.(e, S);
|
|
42
41
|
if (n !== void 0) {
|
|
43
|
-
|
|
42
|
+
d = n;
|
|
44
43
|
break;
|
|
45
44
|
}
|
|
46
45
|
}
|
|
47
46
|
}
|
|
48
|
-
return
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
return d === void 0 && (d = t(n.column.columnDef.cell, n.getContext())), /* @__PURE__ */ i(e.Cell, {
|
|
48
|
+
label: s ? c && Object.prototype.hasOwnProperty.call(c, n.column.id) ? c[n.column.id] : typeof n.column.columnDef.header == "string" ? n.column.columnDef.header : n.column.id : void 0,
|
|
49
|
+
onClick: m ? (e) => {
|
|
50
|
+
e.stopPropagation(), m(o.original, n.column, e);
|
|
51
51
|
} : void 0,
|
|
52
|
-
onDoubleClick:
|
|
53
|
-
e.stopPropagation(),
|
|
52
|
+
onDoubleClick: h ? (e) => {
|
|
53
|
+
e.stopPropagation(), h(o.original, n.column, e);
|
|
54
54
|
} : void 0,
|
|
55
|
-
onMouseEnter:
|
|
56
|
-
onMouseLeave:
|
|
55
|
+
onMouseEnter: g ? (e) => g(o.original, n.column, e) : void 0,
|
|
56
|
+
onMouseLeave: _ ? (e) => _(o.original, n.column, e) : void 0,
|
|
57
57
|
children: /* @__PURE__ */ a("div", {
|
|
58
58
|
className: "flex items-center",
|
|
59
|
-
onContextMenu:
|
|
60
|
-
children: [
|
|
59
|
+
onContextMenu: w ? (e) => w(e, o.original, n.column, E) : void 0,
|
|
60
|
+
children: [u && v && /* @__PURE__ */ a(r, { children: [/* @__PURE__ */ i("div", { style: { width: `${D * y}px` } }), O ? /* @__PURE__ */ i("button", {
|
|
61
61
|
onClick: (e) => {
|
|
62
|
-
e.stopPropagation(),
|
|
62
|
+
e.stopPropagation(), b(k, o.original);
|
|
63
63
|
},
|
|
64
64
|
className: "mr-2 focus:outline-none",
|
|
65
65
|
children: /* @__PURE__ */ i("svg", {
|
|
@@ -70,7 +70,7 @@ function o({ table: o, expandedRowsState: s, onRowClick: c, onRowDoubleClick: l,
|
|
|
70
70
|
stroke: "currentColor",
|
|
71
71
|
style: {
|
|
72
72
|
transition: "transform 0.3s ease",
|
|
73
|
-
transform:
|
|
73
|
+
transform: A ? "rotate(90deg)" : "rotate(0deg)"
|
|
74
74
|
},
|
|
75
75
|
children: /* @__PURE__ */ i("path", {
|
|
76
76
|
strokeLinecap: "round",
|
|
@@ -79,16 +79,16 @@ function o({ table: o, expandedRowsState: s, onRowClick: c, onRowDoubleClick: l,
|
|
|
79
79
|
d: "M9 5l7 7-7 7"
|
|
80
80
|
})
|
|
81
81
|
})
|
|
82
|
-
}) : /* @__PURE__ */ i("div", { className: "w-6" })] }),
|
|
82
|
+
}) : /* @__PURE__ */ i("div", { className: "w-6" })] }), d]
|
|
83
83
|
})
|
|
84
84
|
}, n.id);
|
|
85
85
|
})
|
|
86
86
|
}, o.id);
|
|
87
|
-
if (
|
|
88
|
-
let e =
|
|
89
|
-
if (e !==
|
|
87
|
+
if (T) {
|
|
88
|
+
let e = x.reduce((e, t) => t.wrapRow?.(e, N, S) ?? e, F);
|
|
89
|
+
if (e !== F) return /* @__PURE__ */ i(n.Fragment, { children: e }, o.id);
|
|
90
90
|
}
|
|
91
|
-
return
|
|
91
|
+
return F;
|
|
92
92
|
}) });
|
|
93
93
|
}
|
|
94
94
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableBody.js","names":[],"sources":["../../../../../src/components/pro/DataTable/components/TableBody.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as TanStackTable, flexRender } from '../tanstack-table';\nimport Table from '../../../Table';\nimport { RowEventHandler, CellEventHandler } from '../types';\nimport type {\n DataTableApi,\n DataTableCellContext,\n DataTableExtension,\n DataTableRowContext,\n} from '../extension';\n\ninterface TableBodyProps<T extends object> {\n table: TanStackTable<T>;\n expandedRowsState: Record<string, boolean>;\n onRowClick?: RowEventHandler;\n onRowDoubleClick?: RowEventHandler;\n onRowMouseEnter?: RowEventHandler;\n onRowMouseLeave?: RowEventHandler;\n onCellClick?: CellEventHandler;\n onCellDoubleClick?: CellEventHandler;\n onCellMouseEnter?: CellEventHandler;\n onCellMouseLeave?: CellEventHandler;\n enableExpanding: boolean;\n indentSize: number;\n handleRowExpand: (rowId: string, row: T) => void;\n // 扩展系统\n extensions?: DataTableExtension<T>[];\n extensionApi?: DataTableApi<T>;\n getRowId?: (row: T, index: number) => string;\n onCellContextMenu?: (\n e: React.MouseEvent,\n row: T,\n column: any,\n rowIndex: number,\n ) => void;\n}\n\nexport function TableBody<T extends object>({\n table,\n expandedRowsState,\n onRowClick,\n onRowDoubleClick,\n onRowMouseEnter,\n onRowMouseLeave,\n onCellClick,\n onCellDoubleClick,\n onCellMouseEnter,\n onCellMouseLeave,\n enableExpanding,\n indentSize,\n handleRowExpand,\n extensions = [],\n extensionApi,\n getRowId,\n onCellContextMenu,\n}: TableBodyProps<T>) {\n const hasExtensions = extensions.length > 0 && !!extensionApi;\n\n return (\n <Table.Body>\n {table.getRowModel().rows.length === 0 ? (\n <Table.Row>\n <Table.Cell colSpan={table.getAllColumns().length} className=\"text-center py-4\">\n 没有数据\n </Table.Cell>\n </Table.Row>\n ) : (\n table.getRowModel().rows.map((row, rowIndex) => {\n const rowData = row.original as any;\n const depth = rowData.__depth || 0;\n const hasChildren = rowData.__hasChildren || false;\n const rowId = rowData.__id;\n const isExpanded = hasChildren && expandedRowsState[rowId] || false;\n const isChildRow = depth > 0;\n const parentId = rowData.__parentId;\n const parentExpanded = parentId ? expandedRowsState[parentId] || false : true;\n\n // 根据层级和展开状态应用不同的CSS类\n const rowClassName = `\n ${row.getIsSelected() ? 'bg-primary/10' : ''}\n ${hasChildren ? (isExpanded ? 'tree-row-expanded' : '') : ''}\n `;\n\n // 如果是子行且父行未展开,则不显示\n if (isChildRow && !parentExpanded) {\n return null;\n }\n\n // 扩展的行级上下文与注入属性\n const resolvedRowId = getRowId\n ? getRowId(row.original, rowIndex)\n : String(rowId ?? rowIndex);\n const rowCtx: DataTableRowContext<T> = {\n row: row.original,\n rowId: resolvedRowId,\n rowIndex,\n selected: row.getIsSelected(),\n };\n const extraRowProps = hasExtensions\n ? extensions.reduce<React.HTMLAttributes<HTMLTableRowElement>>(\n (acc, ext) =>\n Object.assign(acc, ext.rowProps?.(rowCtx, extensionApi!) ?? {}),\n {},\n )\n : {};\n\n const rowElement = (\n <Table.Row\n key={row.id}\n className={rowClassName}\n onClick={onRowClick ? e => onRowClick(row.original, e) : undefined}\n onDoubleClick={onRowDoubleClick ? e => onRowDoubleClick(row.original, e) : undefined}\n onMouseEnter={onRowMouseEnter ? e => onRowMouseEnter(row.original, e) : undefined}\n onMouseLeave={onRowMouseLeave ? e => onRowMouseLeave(row.original, e) : undefined}\n {...(extraRowProps as any)}\n >\n {row.getVisibleCells().map((cell, cellIndex) => {\n // 为第一列添加缩进和展开/折叠控件\n const isFirstColumn = cellIndex === 0;\n\n // 扩展可覆写单元格渲染。\n let cellContent: React.ReactNode | undefined;\n if (hasExtensions) {\n const cellCtx: DataTableCellContext<T> = {\n value: cell.getValue(),\n row: row.original,\n rowId: resolvedRowId,\n rowIndex,\n columnId: cell.column.id,\n };\n for (const ext of extensions) {\n const out = ext.cell?.(cellCtx, extensionApi!);\n if (out !== undefined) {\n cellContent = out;\n break;\n }\n }\n }\n if (cellContent === undefined) {\n cellContent = flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n );\n }\n\n return (\n <Table.Cell\n key={cell.id}\n onClick={onCellClick ? e => {\n e.stopPropagation(); // 防止触发行点击事件\n onCellClick(row.original, cell.column, e);\n } : undefined}\n onDoubleClick={onCellDoubleClick ? e => {\n e.stopPropagation(); // 防止触发行双击事件\n onCellDoubleClick(row.original, cell.column, e);\n } : undefined}\n onMouseEnter={onCellMouseEnter ? e => onCellMouseEnter(row.original, cell.column, e) : undefined}\n onMouseLeave={onCellMouseLeave ? e => onCellMouseLeave(row.original, cell.column, e) : undefined}\n >\n <div\n className=\"flex items-center\"\n onContextMenu={\n onCellContextMenu\n ? e =>\n onCellContextMenu(\n e,\n row.original,\n cell.column,\n rowIndex,\n )\n : undefined\n }\n >\n {isFirstColumn && enableExpanding && (\n <>\n <div style={{ width: `${depth * indentSize}px` }} />\n {hasChildren ? (\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleRowExpand(rowId, row.original);\n }}\n className=\"mr-2 focus:outline-none\"\n >\n {/* 完全重写箭头图标部分,使用内联样式控制方向 */}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n style={{\n transition: 'transform 0.3s ease',\n transform: isExpanded ? 'rotate(90deg)' : 'rotate(0deg)'\n }}\n >\n {/* 使用右箭头,通过旋转变为下箭头 */}\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </button>\n ) : (\n <div className=\"w-6\"></div>\n )}\n </>\n )}\n {cellContent}\n </div>\n </Table.Cell>\n );\n })}\n </Table.Row>\n );\n\n // 让扩展包裹整行(如在行下方追加 detail 面板)。\n if (hasExtensions) {\n const wrapped = extensions.reduce<React.ReactNode>(\n (node, ext) => ext.wrapRow?.(node, rowCtx, extensionApi!) ?? node,\n rowElement,\n );\n if (wrapped !== rowElement) {\n return <React.Fragment key={row.id}>{wrapped}</React.Fragment>;\n }\n }\n\n return rowElement;\n })\n )}\n </Table.Body>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TableBody.js","names":[],"sources":["../../../../../src/components/pro/DataTable/components/TableBody.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as TanStackTable, flexRender } from '../tanstack-table';\nimport Table from '../../../Table';\nimport { RowEventHandler, CellEventHandler } from '../types';\nimport type {\n DataTableApi,\n DataTableCellContext,\n DataTableExtension,\n DataTableRowContext,\n} from '../extension';\n\ninterface TableBodyProps<T extends object> {\n table: TanStackTable<T>;\n card?: boolean;\n fieldLabels?: Record<string, React.ReactNode>;\n expandedRowsState: Record<string, boolean>;\n onRowClick?: RowEventHandler;\n onRowDoubleClick?: RowEventHandler;\n onRowMouseEnter?: RowEventHandler;\n onRowMouseLeave?: RowEventHandler;\n onCellClick?: CellEventHandler;\n onCellDoubleClick?: CellEventHandler;\n onCellMouseEnter?: CellEventHandler;\n onCellMouseLeave?: CellEventHandler;\n enableExpanding: boolean;\n indentSize: number;\n handleRowExpand: (rowId: string, row: T) => void;\n // 扩展系统\n extensions?: DataTableExtension<T>[];\n extensionApi?: DataTableApi<T>;\n getRowId?: (row: T, index: number) => string;\n onCellContextMenu?: (\n e: React.MouseEvent,\n row: T,\n column: any,\n rowIndex: number,\n ) => void;\n}\n\nexport function TableBody<T extends object>({\n table,\n card = false,\n fieldLabels,\n expandedRowsState,\n onRowClick,\n onRowDoubleClick,\n onRowMouseEnter,\n onRowMouseLeave,\n onCellClick,\n onCellDoubleClick,\n onCellMouseEnter,\n onCellMouseLeave,\n enableExpanding,\n indentSize,\n handleRowExpand,\n extensions = [],\n extensionApi,\n getRowId,\n onCellContextMenu,\n}: TableBodyProps<T>) {\n const hasExtensions = extensions.length > 0 && !!extensionApi;\n\n return (\n <Table.Body>\n {table.getRowModel().rows.length === 0 ? (\n <Table.Row>\n <Table.Cell colSpan={table.getAllColumns().length} className=\"text-center py-4\">\n 没有数据\n </Table.Cell>\n </Table.Row>\n ) : (\n table.getRowModel().rows.map((row, rowIndex) => {\n const depth = row.depth;\n const hasChildren = row.subRows.length > 0;\n const rowId = row.id;\n const isExpanded = hasChildren && expandedRowsState[rowId] || false;\n\n // 根据层级和展开状态应用不同的CSS类\n const rowClassName = `\n ${row.getIsSelected() ? 'bg-primary/10' : ''}\n ${hasChildren ? (isExpanded ? 'tree-row-expanded' : '') : ''}\n `;\n\n\n // 扩展的行级上下文与注入属性\n const resolvedRowId = getRowId\n ? getRowId(row.original, rowIndex)\n : row.id;\n const rowCtx: DataTableRowContext<T> = {\n row: row.original,\n rowId: resolvedRowId,\n rowIndex,\n selected: row.getIsSelected(),\n };\n const extraRowProps = hasExtensions\n ? extensions.reduce<React.HTMLAttributes<HTMLTableRowElement>>(\n (acc, ext) =>\n Object.assign(acc, ext.rowProps?.(rowCtx, extensionApi!) ?? {}),\n {},\n )\n : {};\n\n const rowElement = (\n <Table.Row\n key={row.id}\n selected={row.getIsSelected()}\n className={rowClassName}\n onClick={onRowClick ? e => onRowClick(row.original, e) : undefined}\n onDoubleClick={onRowDoubleClick ? e => onRowDoubleClick(row.original, e) : undefined}\n onMouseEnter={onRowMouseEnter ? e => onRowMouseEnter(row.original, e) : undefined}\n onMouseLeave={onRowMouseLeave ? e => onRowMouseLeave(row.original, e) : undefined}\n {...(extraRowProps as any)}\n >\n {row.getVisibleCells().map((cell, cellIndex) => {\n // 为第一列添加缩进和展开/折叠控件\n const isFirstColumn = cellIndex === 0;\n\n // 扩展可覆写单元格渲染。\n let cellContent: React.ReactNode | undefined;\n if (hasExtensions) {\n const cellCtx: DataTableCellContext<T> = {\n value: cell.getValue(),\n row: row.original,\n rowId: resolvedRowId,\n rowIndex,\n columnId: cell.column.id,\n };\n for (const ext of extensions) {\n const out = ext.cell?.(cellCtx, extensionApi!);\n if (out !== undefined) {\n cellContent = out;\n break;\n }\n }\n }\n if (cellContent === undefined) {\n cellContent = flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n );\n }\n\n return (\n <Table.Cell\n key={cell.id}\n label={card ? (\n fieldLabels && Object.prototype.hasOwnProperty.call(fieldLabels, cell.column.id)\n ? fieldLabels[cell.column.id]\n : typeof cell.column.columnDef.header === 'string'\n ? cell.column.columnDef.header\n : cell.column.id\n ) : undefined}\n onClick={onCellClick ? e => {\n e.stopPropagation(); // 防止触发行点击事件\n onCellClick(row.original, cell.column, e);\n } : undefined}\n onDoubleClick={onCellDoubleClick ? e => {\n e.stopPropagation(); // 防止触发行双击事件\n onCellDoubleClick(row.original, cell.column, e);\n } : undefined}\n onMouseEnter={onCellMouseEnter ? e => onCellMouseEnter(row.original, cell.column, e) : undefined}\n onMouseLeave={onCellMouseLeave ? e => onCellMouseLeave(row.original, cell.column, e) : undefined}\n >\n <div\n className=\"flex items-center\"\n onContextMenu={\n onCellContextMenu\n ? e =>\n onCellContextMenu(\n e,\n row.original,\n cell.column,\n rowIndex,\n )\n : undefined\n }\n >\n {isFirstColumn && enableExpanding && (\n <>\n <div style={{ width: `${depth * indentSize}px` }} />\n {hasChildren ? (\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleRowExpand(rowId, row.original);\n }}\n className=\"mr-2 focus:outline-none\"\n >\n {/* 完全重写箭头图标部分,使用内联样式控制方向 */}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n style={{\n transition: 'transform 0.3s ease',\n transform: isExpanded ? 'rotate(90deg)' : 'rotate(0deg)'\n }}\n >\n {/* 使用右箭头,通过旋转变为下箭头 */}\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </button>\n ) : (\n <div className=\"w-6\"></div>\n )}\n </>\n )}\n {cellContent}\n </div>\n </Table.Cell>\n );\n })}\n </Table.Row>\n );\n\n // 让扩展包裹整行(如在行下方追加 detail 面板)。\n if (hasExtensions) {\n const wrapped = extensions.reduce<React.ReactNode>(\n (node, ext) => ext.wrapRow?.(node, rowCtx, extensionApi!) ?? node,\n rowElement,\n );\n if (wrapped !== rowElement) {\n return <React.Fragment key={row.id}>{wrapped}</React.Fragment>;\n }\n }\n\n return rowElement;\n })\n )}\n </Table.Body>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { Table as TanStackTable } from '../tanstack-table';
|
|
2
|
+
import { Table as TanStackTable, PaginationState } from '../tanstack-table';
|
|
3
3
|
interface TablePaginationProps<T extends object> {
|
|
4
4
|
enablePagination: boolean;
|
|
5
5
|
table: TanStackTable<T>;
|
|
6
|
-
|
|
7
|
-
internalPageSize: number;
|
|
8
|
-
handlePageChange: (newPage: number) => void;
|
|
9
|
-
setInternalPageSize: (newSize: number) => void;
|
|
10
|
-
setInternalPageIndex: (page: number) => void;
|
|
11
|
-
onPageSizeChange?: (pageSize: number) => void;
|
|
12
|
-
onPageChange?: (page: number) => void;
|
|
6
|
+
onPaginationChange: (pagination: PaginationState) => void;
|
|
13
7
|
}
|
|
14
|
-
export declare function TablePagination<T extends object>({ enablePagination, table,
|
|
8
|
+
export declare function TablePagination<T extends object>({ enablePagination, table, onPaginationChange, }: TablePaginationProps<T>): React.JSX.Element | null;
|
|
15
9
|
export {};
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
import "react";
|
|
2
2
|
import { jsx as e, jsxs as t } from "react/jsx-runtime";
|
|
3
3
|
//#region src/components/pro/DataTable/components/TablePagination.tsx
|
|
4
|
-
function n({ enablePagination: n, table: r,
|
|
4
|
+
function n({ enablePagination: n, table: r, onPaginationChange: i }) {
|
|
5
5
|
if (!n) return null;
|
|
6
|
-
let { pageIndex:
|
|
6
|
+
let { pageIndex: a, pageSize: o } = r.state.pagination, s = r.getPageCount(), c = (e) => i({
|
|
7
|
+
pageIndex: e,
|
|
8
|
+
pageSize: o
|
|
9
|
+
}), l = [.../* @__PURE__ */ new Set([
|
|
10
|
+
5,
|
|
11
|
+
10,
|
|
12
|
+
15,
|
|
13
|
+
20,
|
|
14
|
+
25,
|
|
15
|
+
o
|
|
16
|
+
])].sort((e, t) => e - t);
|
|
7
17
|
return /* @__PURE__ */ t("div", {
|
|
8
18
|
className: "mt-4 flex justify-between items-center",
|
|
9
19
|
children: [
|
|
@@ -11,9 +21,9 @@ function n({ enablePagination: n, table: r, internalPageIndex: i, internalPageSi
|
|
|
11
21
|
className: "text-sm",
|
|
12
22
|
children: [
|
|
13
23
|
"第 ",
|
|
14
|
-
|
|
24
|
+
s === 0 ? 0 : a + 1,
|
|
15
25
|
" 页,共 ",
|
|
16
|
-
|
|
26
|
+
s,
|
|
17
27
|
" 页"
|
|
18
28
|
]
|
|
19
29
|
}) }),
|
|
@@ -22,33 +32,33 @@ function n({ enablePagination: n, table: r, internalPageIndex: i, internalPageSi
|
|
|
22
32
|
children: [
|
|
23
33
|
/* @__PURE__ */ e("button", {
|
|
24
34
|
className: "join-item btn btn-sm",
|
|
25
|
-
onClick: () =>
|
|
35
|
+
onClick: () => c(0),
|
|
26
36
|
disabled: !r.getCanPreviousPage(),
|
|
27
37
|
children: "<<"
|
|
28
38
|
}),
|
|
29
39
|
/* @__PURE__ */ e("button", {
|
|
30
40
|
className: "join-item btn btn-sm",
|
|
31
|
-
onClick: () =>
|
|
41
|
+
onClick: () => c(a - 1),
|
|
32
42
|
disabled: !r.getCanPreviousPage(),
|
|
33
43
|
children: "<"
|
|
34
44
|
}),
|
|
35
|
-
Array.from({ length: Math.min(5,
|
|
36
|
-
let r =
|
|
37
|
-
return r < 0 && (r = n), r >=
|
|
38
|
-
className: `join-item btn btn-sm ${r ===
|
|
39
|
-
onClick: () =>
|
|
45
|
+
Array.from({ length: Math.min(5, s) }).map((t, n) => {
|
|
46
|
+
let r = a - 2 + n;
|
|
47
|
+
return r < 0 && (r = n), r >= s && (r = s - 5 + n), s <= 5 && (r = n), r < 0 || r >= s ? null : /* @__PURE__ */ e("button", {
|
|
48
|
+
className: `join-item btn btn-sm ${r === a ? "btn-active" : ""}`,
|
|
49
|
+
onClick: () => c(r),
|
|
40
50
|
children: r + 1
|
|
41
51
|
}, r);
|
|
42
52
|
}),
|
|
43
53
|
/* @__PURE__ */ e("button", {
|
|
44
54
|
className: "join-item btn btn-sm",
|
|
45
|
-
onClick: () =>
|
|
55
|
+
onClick: () => c(a + 1),
|
|
46
56
|
disabled: !r.getCanNextPage(),
|
|
47
57
|
children: ">"
|
|
48
58
|
}),
|
|
49
59
|
/* @__PURE__ */ e("button", {
|
|
50
60
|
className: "join-item btn btn-sm",
|
|
51
|
-
onClick: () =>
|
|
61
|
+
onClick: () => c(s - 1),
|
|
52
62
|
disabled: !r.getCanNextPage(),
|
|
53
63
|
children: ">>"
|
|
54
64
|
})
|
|
@@ -56,18 +66,12 @@ function n({ enablePagination: n, table: r, internalPageIndex: i, internalPageSi
|
|
|
56
66
|
}),
|
|
57
67
|
/* @__PURE__ */ e("div", { children: /* @__PURE__ */ e("select", {
|
|
58
68
|
className: "select select-sm select-bordered",
|
|
59
|
-
value:
|
|
60
|
-
onChange: (e) => {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
},
|
|
64
|
-
children:
|
|
65
|
-
5,
|
|
66
|
-
10,
|
|
67
|
-
15,
|
|
68
|
-
20,
|
|
69
|
-
25
|
|
70
|
-
].map((e) => /* @__PURE__ */ t("option", {
|
|
69
|
+
value: o,
|
|
70
|
+
onChange: (e) => i({
|
|
71
|
+
pageIndex: 0,
|
|
72
|
+
pageSize: Number(e.target.value)
|
|
73
|
+
}),
|
|
74
|
+
children: l.map((e) => /* @__PURE__ */ t("option", {
|
|
71
75
|
value: e,
|
|
72
76
|
children: [e, " 条/页"]
|
|
73
77
|
}, e))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TablePagination.js","names":[],"sources":["../../../../../src/components/pro/DataTable/components/TablePagination.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as TanStackTable } from '../tanstack-table';\n\ninterface TablePaginationProps<T extends object> {\n enablePagination: boolean;\n table: TanStackTable<T>;\n
|
|
1
|
+
{"version":3,"file":"TablePagination.js","names":[],"sources":["../../../../../src/components/pro/DataTable/components/TablePagination.tsx"],"sourcesContent":["import React from 'react';\nimport { Table as TanStackTable, PaginationState } from '../tanstack-table';\n\ninterface TablePaginationProps<T extends object> {\n enablePagination: boolean;\n table: TanStackTable<T>;\n onPaginationChange: (pagination: PaginationState) => void;\n}\n\nexport function TablePagination<T extends object>({\n enablePagination,\n table,\n onPaginationChange,\n}: TablePaginationProps<T>) {\n if (!enablePagination) return null;\n\n const { pageIndex, pageSize } = table.state.pagination;\n const pageCount = table.getPageCount();\n const handlePageChange = (next: number) => onPaginationChange({ pageIndex: next, pageSize });\n const pageSizes = [...new Set([5, 10, 15, 20, 25, pageSize])].sort((a, b) => a - b);\n\n return (\n <div className=\"mt-4 flex justify-between items-center\">\n <div>\n <span className=\"text-sm\">\n 第 {pageCount === 0 ? 0 : pageIndex + 1} 页,共 {pageCount} 页\n </span>\n </div>\n <div className=\"join\">\n <button\n className=\"join-item btn btn-sm\"\n onClick={() => handlePageChange(0)}\n disabled={!table.getCanPreviousPage()}\n >\n {'<<'}\n </button>\n <button\n className=\"join-item btn btn-sm\"\n onClick={() => handlePageChange(pageIndex - 1)}\n disabled={!table.getCanPreviousPage()}\n >\n {'<'}\n </button>\n {Array.from({ length: Math.min(5, pageCount) }).map((_, i) => {\n // 显示当前页前后两页\n let pageNum = pageIndex - 2 + i;\n\n // 确保页码在合法范围内\n if (pageNum < 0) pageNum = i;\n if (pageNum >= pageCount) pageNum = pageCount - 5 + i;\n\n // 如果总页数小于5,直接显示全部页码\n if (pageCount <= 5) {\n pageNum = i;\n }\n\n // 如果页码超出范围,不显示\n if (pageNum < 0 || pageNum >= pageCount) return null;\n\n return (\n <button\n key={pageNum}\n className={`join-item btn btn-sm ${pageNum === pageIndex ? 'btn-active' : ''}`}\n onClick={() => handlePageChange(pageNum)}\n >\n {pageNum + 1}\n </button>\n );\n })}\n <button\n className=\"join-item btn btn-sm\"\n onClick={() => handlePageChange(pageIndex + 1)}\n disabled={!table.getCanNextPage()}\n >\n {'>'}\n </button>\n <button\n className=\"join-item btn btn-sm\"\n onClick={() => handlePageChange(pageCount - 1)}\n disabled={!table.getCanNextPage()}\n >\n {'>>'}\n </button>\n </div>\n <div>\n <select\n className=\"select select-sm select-bordered\"\n value={pageSize}\n onChange={(e) => onPaginationChange({ pageIndex: 0, pageSize: Number(e.target.value) })}\n >\n {pageSizes.map((pageSize) => (\n <option key={pageSize} value={pageSize}>\n {pageSize} 条/页\n </option>\n ))}\n </select>\n </div>\n </div>\n );\n}\n"],"mappings":";;;AASA,SAAgB,EAAkC,EAC9C,qBACA,UACA,yBACwB;CACxB,IAAI,CAAC,GAAkB,OAAO;CAE9B,IAAM,EAAE,cAAW,gBAAa,EAAM,MAAM,YACtC,IAAY,EAAM,aAAa,GAC/B,KAAoB,MAAiB,EAAmB;EAAE,WAAW;EAAM;CAAS,CAAC,GACrF,IAAY,CAAC,mBAAG,IAAI,IAAI;EAAC;EAAG;EAAI;EAAI;EAAI;EAAI;CAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC;CAElF,OACI,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACI,kBAAC,OAAD,EAAA,UACI,kBAAC,QAAD;IAAM,WAAU;IAAhB,UAAA;KAA0B;KACnB,MAAc,IAAI,IAAI,IAAY;KAAE;KAAM;KAAU;IACrD;GACL,CAAA,EAAA,CAAA;GACL,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACI,kBAAC,UAAD;MACI,WAAU;MACV,eAAe,EAAiB,CAAC;MACjC,UAAU,CAAC,EAAM,mBAAmB;MAEnC,UAAA;KACG,CAAA;KACR,kBAAC,UAAD;MACI,WAAU;MACV,eAAe,EAAiB,IAAY,CAAC;MAC7C,UAAU,CAAC,EAAM,mBAAmB;MAEnC,UAAA;KACG,CAAA;KACP,MAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,CAAS,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM;MAE1D,IAAI,IAAU,IAAY,IAAI;MAc9B,OAXI,IAAU,MAAG,IAAU,IACvB,KAAW,MAAW,IAAU,IAAY,IAAI,IAGhD,KAAa,MACb,IAAU,IAIV,IAAU,KAAK,KAAW,IAAkB,OAG5C,kBAAC,UAAD;OAEI,WAAW,wBAAwB,MAAY,IAAY,eAAe;OAC1E,eAAe,EAAiB,CAAO;OAEtC,UAAA,IAAU;MACP,GALC,CAKD;KAEhB,CAAC;KACD,kBAAC,UAAD;MACI,WAAU;MACV,eAAe,EAAiB,IAAY,CAAC;MAC7C,UAAU,CAAC,EAAM,eAAe;MAE/B,UAAA;KACG,CAAA;KACR,kBAAC,UAAD;MACI,WAAU;MACV,eAAe,EAAiB,IAAY,CAAC;MAC7C,UAAU,CAAC,EAAM,eAAe;MAE/B,UAAA;KACG,CAAA;IACP;;GACL,kBAAC,OAAD,EAAA,UACI,kBAAC,UAAD;IACI,WAAU;IACV,OAAO;IACP,WAAW,MAAM,EAAmB;KAAE,WAAW;KAAG,UAAU,OAAO,EAAE,OAAO,KAAK;IAAE,CAAC;IAErF,UAAA,EAAU,KAAK,MACZ,kBAAC,UAAD;KAAuB,OAAO;KAA9B,UAAA,CACK,GAAS,MACN;IAFK,GAAA,CAEL,CACX;GACG,CAAA,EACP,CAAA;EACJ;;AAEb"}
|
|
@@ -3,6 +3,7 @@ import { Table, VisibilityState, RowSelectionState } from '../tanstack-table';
|
|
|
3
3
|
import { ToolbarOptions, CustomFilterPanelProps, DataTableProps } from '../types';
|
|
4
4
|
interface TableToolbarProps<T extends object> {
|
|
5
5
|
toolbar: ToolbarOptions;
|
|
6
|
+
viewSwitcher?: React.ReactNode;
|
|
6
7
|
table: Table<T>;
|
|
7
8
|
columns: DataTableProps<T>['columns'];
|
|
8
9
|
columnOrderState: string[];
|
|
@@ -18,5 +19,5 @@ interface TableToolbarProps<T extends object> {
|
|
|
18
19
|
enableColumnReordering: boolean;
|
|
19
20
|
handleDrop: (e: React.DragEvent, targetColumnId: string) => void;
|
|
20
21
|
}
|
|
21
|
-
export declare function TableToolbar<T extends object>({ toolbar, table, columns, columnOrderState, visibilityState, activeFilter, setActiveFilter, customFilterPanel, draggedColumnId, handleDragStart, toggleColumnVisibility, rowSelection, data, enableColumnReordering, handleDrop, }: TableToolbarProps<T>): React.JSX.Element | null;
|
|
22
|
+
export declare function TableToolbar<T extends object>({ toolbar, viewSwitcher, table, columns, columnOrderState, visibilityState, activeFilter, setActiveFilter, customFilterPanel, draggedColumnId, handleDragStart, toggleColumnVisibility, rowSelection, data, enableColumnReordering, handleDrop, }: TableToolbarProps<T>): React.JSX.Element | null;
|
|
22
23
|
export {};
|
|
@@ -4,38 +4,44 @@ import { BulkActions as n } from "./BulkActions.js";
|
|
|
4
4
|
import "react";
|
|
5
5
|
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
6
6
|
//#region src/components/pro/DataTable/components/TableToolbar.tsx
|
|
7
|
-
function a({ toolbar: a,
|
|
7
|
+
function a({ toolbar: a, viewSwitcher: o, table: s, columns: c, columnOrderState: l, visibilityState: u, activeFilter: d, setActiveFilter: f, customFilterPanel: p, draggedColumnId: m, handleDragStart: h, toggleColumnVisibility: g, rowSelection: _, data: v, enableColumnReordering: y, handleDrop: b }) {
|
|
8
8
|
return a.enabled ? /* @__PURE__ */ i("div", {
|
|
9
9
|
className: "flex flex-wrap justify-between gap-4 mb-4",
|
|
10
10
|
children: [/* @__PURE__ */ i("div", {
|
|
11
11
|
className: "flex flex-wrap gap-2 items-center",
|
|
12
12
|
children: [
|
|
13
13
|
a.enableColumnSelector && /* @__PURE__ */ r(e, {
|
|
14
|
-
table:
|
|
15
|
-
columns:
|
|
16
|
-
columnOrderState:
|
|
17
|
-
visibilityState:
|
|
18
|
-
toggleColumnVisibility:
|
|
19
|
-
enableColumnReordering:
|
|
20
|
-
handleDragStart:
|
|
21
|
-
handleDrop:
|
|
22
|
-
draggedColumnId:
|
|
14
|
+
table: s,
|
|
15
|
+
columns: c,
|
|
16
|
+
columnOrderState: l,
|
|
17
|
+
visibilityState: u,
|
|
18
|
+
toggleColumnVisibility: g,
|
|
19
|
+
enableColumnReordering: y,
|
|
20
|
+
handleDragStart: h,
|
|
21
|
+
handleDrop: b,
|
|
22
|
+
draggedColumnId: m
|
|
23
23
|
}),
|
|
24
24
|
a.enableFiltering && /* @__PURE__ */ r(t, {
|
|
25
|
-
table:
|
|
26
|
-
columns:
|
|
27
|
-
activeFilter:
|
|
28
|
-
setActiveFilter:
|
|
29
|
-
customFilterPanel:
|
|
25
|
+
table: s,
|
|
26
|
+
columns: c,
|
|
27
|
+
activeFilter: d,
|
|
28
|
+
setActiveFilter: f,
|
|
29
|
+
customFilterPanel: p,
|
|
30
30
|
filterConfig: a.filterConfig
|
|
31
31
|
}),
|
|
32
32
|
a.customComponents
|
|
33
33
|
]
|
|
34
|
-
}),
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
}), /* @__PURE__ */ i("div", {
|
|
35
|
+
className: "flex flex-wrap items-center gap-2",
|
|
36
|
+
children: [o, a.enableBulkActions && a.bulkActions && /* @__PURE__ */ r(n, {
|
|
37
|
+
bulkActions: a.bulkActions,
|
|
38
|
+
rowSelection: _,
|
|
39
|
+
data: v
|
|
40
|
+
})]
|
|
38
41
|
})]
|
|
42
|
+
}) : o ? /* @__PURE__ */ r("div", {
|
|
43
|
+
className: "flex justify-end mb-4",
|
|
44
|
+
children: o
|
|
39
45
|
}) : null;
|
|
40
46
|
}
|
|
41
47
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableToolbar.js","names":[],"sources":["../../../../../src/components/pro/DataTable/components/TableToolbar.tsx"],"sourcesContent":["import React from 'react';\nimport { Table, VisibilityState, RowSelectionState } from '../tanstack-table';\nimport { ToolbarOptions, CustomFilterPanelProps, DataTableProps } from '../types';\nimport { ColumnSelector } from './ColumnSelector';\nimport { FilterBar } from './FilterBar';\nimport { BulkActions } from './BulkActions';\n\ninterface TableToolbarProps<T extends object> {\n toolbar: ToolbarOptions;\n table: Table<T>;\n columns: DataTableProps<T>['columns'];\n columnOrderState: string[];\n visibilityState: VisibilityState;\n activeFilter: string | null;\n setActiveFilter: (filter: string | null) => void;\n customFilterPanel?: React.ComponentType<CustomFilterPanelProps>;\n draggedColumnId: string | null;\n handleDragStart: (e: React.DragEvent, columnId: string) => void;\n toggleColumnVisibility: (columnId: string) => void;\n rowSelection: RowSelectionState;\n data: T[];\n enableColumnReordering: boolean;\n handleDrop: (e: React.DragEvent, targetColumnId: string) => void;\n}\n\nexport function TableToolbar<T extends object>({\n toolbar,\n table,\n columns,\n columnOrderState,\n visibilityState,\n activeFilter,\n setActiveFilter,\n customFilterPanel,\n draggedColumnId,\n handleDragStart,\n toggleColumnVisibility,\n rowSelection,\n data,\n enableColumnReordering,\n handleDrop,\n}: TableToolbarProps<T>) {\n if (!toolbar.enabled) return null;\n\n return (\n <div className=\"flex flex-wrap justify-between gap-4 mb-4\">\n <div className=\"flex flex-wrap gap-2 items-center\">\n {toolbar.enableColumnSelector && (\n <ColumnSelector\n table={table}\n columns={columns}\n columnOrderState={columnOrderState}\n visibilityState={visibilityState}\n toggleColumnVisibility={toggleColumnVisibility}\n enableColumnReordering={enableColumnReordering}\n handleDragStart={handleDragStart}\n handleDrop={handleDrop}\n draggedColumnId={draggedColumnId}\n />\n )}\n\n {toolbar.enableFiltering && (\n <FilterBar\n table={table}\n columns={columns}\n activeFilter={activeFilter}\n setActiveFilter={setActiveFilter}\n customFilterPanel={customFilterPanel}\n filterConfig={toolbar.filterConfig}\n />\n )}\n\n {toolbar.customComponents}\n </div>\n\n {toolbar.enableBulkActions && toolbar.bulkActions && (\n
|
|
1
|
+
{"version":3,"file":"TableToolbar.js","names":[],"sources":["../../../../../src/components/pro/DataTable/components/TableToolbar.tsx"],"sourcesContent":["import React from 'react';\nimport { Table, VisibilityState, RowSelectionState } from '../tanstack-table';\nimport { ToolbarOptions, CustomFilterPanelProps, DataTableProps } from '../types';\nimport { ColumnSelector } from './ColumnSelector';\nimport { FilterBar } from './FilterBar';\nimport { BulkActions } from './BulkActions';\n\ninterface TableToolbarProps<T extends object> {\n toolbar: ToolbarOptions;\n viewSwitcher?: React.ReactNode;\n table: Table<T>;\n columns: DataTableProps<T>['columns'];\n columnOrderState: string[];\n visibilityState: VisibilityState;\n activeFilter: string | null;\n setActiveFilter: (filter: string | null) => void;\n customFilterPanel?: React.ComponentType<CustomFilterPanelProps>;\n draggedColumnId: string | null;\n handleDragStart: (e: React.DragEvent, columnId: string) => void;\n toggleColumnVisibility: (columnId: string) => void;\n rowSelection: RowSelectionState;\n data: T[];\n enableColumnReordering: boolean;\n handleDrop: (e: React.DragEvent, targetColumnId: string) => void;\n}\n\nexport function TableToolbar<T extends object>({\n toolbar,\n viewSwitcher,\n table,\n columns,\n columnOrderState,\n visibilityState,\n activeFilter,\n setActiveFilter,\n customFilterPanel,\n draggedColumnId,\n handleDragStart,\n toggleColumnVisibility,\n rowSelection,\n data,\n enableColumnReordering,\n handleDrop,\n}: TableToolbarProps<T>) {\n if (!toolbar.enabled) {\n return viewSwitcher ? <div className=\"flex justify-end mb-4\">{viewSwitcher}</div> : null;\n }\n\n return (\n <div className=\"flex flex-wrap justify-between gap-4 mb-4\">\n <div className=\"flex flex-wrap gap-2 items-center\">\n {toolbar.enableColumnSelector && (\n <ColumnSelector\n table={table}\n columns={columns}\n columnOrderState={columnOrderState}\n visibilityState={visibilityState}\n toggleColumnVisibility={toggleColumnVisibility}\n enableColumnReordering={enableColumnReordering}\n handleDragStart={handleDragStart}\n handleDrop={handleDrop}\n draggedColumnId={draggedColumnId}\n />\n )}\n\n {toolbar.enableFiltering && (\n <FilterBar\n table={table}\n columns={columns}\n activeFilter={activeFilter}\n setActiveFilter={setActiveFilter}\n customFilterPanel={customFilterPanel}\n filterConfig={toolbar.filterConfig}\n />\n )}\n\n {toolbar.customComponents}\n </div>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n {viewSwitcher}\n {toolbar.enableBulkActions && toolbar.bulkActions && (\n <BulkActions\n bulkActions={toolbar.bulkActions}\n rowSelection={rowSelection}\n data={data}\n />\n )}\n </div>\n </div>\n );\n}\n\n"],"mappings":";;;;;;AA0BA,SAAgB,EAA+B,EAC3C,YACA,iBACA,UACA,YACA,qBACA,oBACA,iBACA,oBACA,sBACA,oBACA,oBACA,2BACA,iBACA,SACA,2BACA,iBACqB;CAKrB,OAJK,EAAQ,UAKT,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACI,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACK,EAAQ,wBACL,kBAAC,GAAD;KACW;KACE;KACS;KACD;KACO;KACA;KACP;KACL;KACK;IACpB,CAAA;IAGJ,EAAQ,mBACL,kBAAC,GAAD;KACW;KACE;KACK;KACG;KACE;KACnB,cAAc,EAAQ;IACzB,CAAA;IAGJ,EAAQ;GACR;EAEL,CAAA,GAAA,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACK,GACA,EAAQ,qBAAqB,EAAQ,eAClC,kBAAC,GAAD;IACI,aAAa,EAAQ;IACP;IACR;GACT,CAAA,CAEJ;EACJ,CAAA,CAAA;MA5CE,IAAe,kBAAC,OAAD;EAAK,WAAU;EAAyB,UAAA;CAAkB,CAAA,IAAI;AA8C5F"}
|
|
@@ -25,7 +25,7 @@ export { PivotPanel } from './PivotPanel';
|
|
|
25
25
|
export type { PivotPanelProps } from './PivotPanel';
|
|
26
26
|
export { computePivot } from './pivotEngine';
|
|
27
27
|
export type { PivotAggFn, PivotConfig, PivotResult, PivotRowNode, } from './pivotEngine';
|
|
28
|
-
export type { DataTableProps, CellEventHandler, RowEventHandler, ColumnEventHandler, TableEventHandler } from './DataTable';
|
|
28
|
+
export type { DataTableProps, DataTableViewMode, DataTableCardOptions, CellEventHandler, RowEventHandler, ColumnEventHandler, TableEventHandler } from './DataTable';
|
|
29
29
|
export type { FilterPanelProps, TextFilterProps, NumberFilterProps, SelectFilterProps, BooleanFilterProps, DateRangeFilterProps } from './Filters';
|
|
30
30
|
export type { TreeDataRow } from './utils';
|
|
31
31
|
export type { ColumnDef, ColumnFiltersState, SortingState, VisibilityState, RowSelectionState, PaginationState } from './tanstack-table';
|
|
@@ -6,7 +6,7 @@ function a({ render: a }) {
|
|
|
6
6
|
return e(() => ({
|
|
7
7
|
name: "row-detail",
|
|
8
8
|
wrapRow: (e, t) => o[t.rowId] ? /* @__PURE__ */ i(n, { children: [e, /* @__PURE__ */ r("tr", {
|
|
9
|
-
className: "table-row",
|
|
9
|
+
className: "table-row blade-table-card__detail",
|
|
10
10
|
children: /* @__PURE__ */ r("td", {
|
|
11
11
|
className: "table-cell p-0",
|
|
12
12
|
colSpan: 9999,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rowDetailExtension.js","names":[],"sources":["../../../../src/components/pro/DataTable/rowDetailExtension.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport type { DataTableExtension, DataTableRowContext } from './extension';\n\nexport interface RowDetailOptions<T extends object> {\n /** 渲染展开后的行详情面板。 */\n render: (ctx: DataTableRowContext<T>) => React.ReactNode;\n}\n\n/**\n * 行详情(master/detail)扩展。\n *\n * 由于扩展是普通对象无法持有 React 状态,这里以 hook 工厂的形式返回一个绑定了\n * 展开状态的扩展。为每一行的第一列注入一个展开按钮(通过 `cell` 覆写),点击后\n * 在该行下方渲染一个详情面板(通过 `wrapRow`)。\n *\n * 使用方式:\n * ```tsx\n * const detail = useRowDetailExtension<Row>({\n * render: ({ row }) => <pre>{JSON.stringify(row, null, 2)}</pre>,\n * });\n * <DataTable data={data} columns={columns} extensions={[detail]} />\n * ```\n */\nexport function useRowDetailExtension<T extends object>({\n render,\n}: RowDetailOptions<T>): DataTableExtension<T> {\n const [open, setOpen] = useState<Record<string, boolean>>({});\n\n return useMemo<DataTableExtension<T>>(\n () => ({\n name: 'row-detail',\n wrapRow: (children, ctx) => {\n if (!open[ctx.rowId]) return children;\n return (\n <>\n {children}\n <tr className=\"table-row\">\n <td className=\"table-cell p-0\" colSpan={9999}>\n <div className=\"bg-base-200/60 p-4 border-l-4 border-primary\">\n {render(ctx)}\n </div>\n </td>\n </tr>\n </>\n );\n },\n rowProps: (ctx) =>\n ({\n 'data-detail-open': open[ctx.rowId] ? 'true' : undefined,\n }) as React.HTMLAttributes<HTMLTableRowElement>,\n // 通过右键菜单切换详情面板,避免占用列布局。\n contextMenu: (ctx) => [\n {\n key: 'toggle-detail',\n label: open[ctx.rowId] ? '收起详情' : '展开详情',\n onSelect: () =>\n setOpen((s) => ({ ...s, [ctx.rowId]: !s[ctx.rowId] })),\n },\n ],\n }),\n [open, render],\n );\n}\n"],"mappings":";;;AAuBA,SAAgB,EAAwC,EACpD,aAC2C;CAC3C,IAAM,CAAC,GAAM,KAAW,EAAkC,CAAC,CAAC;CAE5D,OAAO,SACI;EACH,MAAM;EACN,UAAU,GAAU,MACX,EAAK,EAAI,SAEV,kBAAA,GAAA,EAAA,UAAA,CACK,GACD,kBAAC,MAAD;GAAI,WAAU;GACV,UAAA,kBAAC,MAAD;IAAI,WAAU;IAAiB,SAAS;IACpC,UAAA,kBAAC,OAAD;KAAK,WAAU;KACV,UAAA,EAAO,CAAG;IACV,CAAA;GACL,CAAA;EACJ,CAAA,CACN,EAAA,CAAA,IAXuB;EAcjC,WAAW,OACN,EACG,oBAAoB,EAAK,EAAI,SAAS,SAAS,KAAA,EACnD;EAEJ,cAAc,MAAQ,CAClB;GACI,KAAK;GACL,OAAO,EAAK,EAAI,SAAS,SAAS;GAClC,gBACI,GAAS,OAAO;IAAE,GAAG;KAAI,EAAI,QAAQ,CAAC,EAAE,EAAI;GAAO,EAAE;EAC7D,CACJ;CACJ,IACA,CAAC,GAAM,CAAM,CACjB;AACJ"}
|
|
1
|
+
{"version":3,"file":"rowDetailExtension.js","names":[],"sources":["../../../../src/components/pro/DataTable/rowDetailExtension.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport type { DataTableExtension, DataTableRowContext } from './extension';\n\nexport interface RowDetailOptions<T extends object> {\n /** 渲染展开后的行详情面板。 */\n render: (ctx: DataTableRowContext<T>) => React.ReactNode;\n}\n\n/**\n * 行详情(master/detail)扩展。\n *\n * 由于扩展是普通对象无法持有 React 状态,这里以 hook 工厂的形式返回一个绑定了\n * 展开状态的扩展。为每一行的第一列注入一个展开按钮(通过 `cell` 覆写),点击后\n * 在该行下方渲染一个详情面板(通过 `wrapRow`)。\n *\n * 使用方式:\n * ```tsx\n * const detail = useRowDetailExtension<Row>({\n * render: ({ row }) => <pre>{JSON.stringify(row, null, 2)}</pre>,\n * });\n * <DataTable data={data} columns={columns} extensions={[detail]} />\n * ```\n */\nexport function useRowDetailExtension<T extends object>({\n render,\n}: RowDetailOptions<T>): DataTableExtension<T> {\n const [open, setOpen] = useState<Record<string, boolean>>({});\n\n return useMemo<DataTableExtension<T>>(\n () => ({\n name: 'row-detail',\n wrapRow: (children, ctx) => {\n if (!open[ctx.rowId]) return children;\n return (\n <>\n {children}\n <tr className=\"table-row blade-table-card__detail\">\n <td className=\"table-cell p-0\" colSpan={9999}>\n <div className=\"bg-base-200/60 p-4 border-l-4 border-primary\">\n {render(ctx)}\n </div>\n </td>\n </tr>\n </>\n );\n },\n rowProps: (ctx) =>\n ({\n 'data-detail-open': open[ctx.rowId] ? 'true' : undefined,\n }) as React.HTMLAttributes<HTMLTableRowElement>,\n // 通过右键菜单切换详情面板,避免占用列布局。\n contextMenu: (ctx) => [\n {\n key: 'toggle-detail',\n label: open[ctx.rowId] ? '收起详情' : '展开详情',\n onSelect: () =>\n setOpen((s) => ({ ...s, [ctx.rowId]: !s[ctx.rowId] })),\n },\n ],\n }),\n [open, render],\n );\n}\n"],"mappings":";;;AAuBA,SAAgB,EAAwC,EACpD,aAC2C;CAC3C,IAAM,CAAC,GAAM,KAAW,EAAkC,CAAC,CAAC;CAE5D,OAAO,SACI;EACH,MAAM;EACN,UAAU,GAAU,MACX,EAAK,EAAI,SAEV,kBAAA,GAAA,EAAA,UAAA,CACK,GACD,kBAAC,MAAD;GAAI,WAAU;GACV,UAAA,kBAAC,MAAD;IAAI,WAAU;IAAiB,SAAS;IACpC,UAAA,kBAAC,OAAD;KAAK,WAAU;KACV,UAAA,EAAO,CAAG;IACV,CAAA;GACL,CAAA;EACJ,CAAA,CACN,EAAA,CAAA,IAXuB;EAcjC,WAAW,OACN,EACG,oBAAoB,EAAK,EAAI,SAAS,SAAS,KAAA,EACnD;EAEJ,cAAc,MAAQ,CAClB;GACI,KAAK;GACL,OAAO,EAAK,EAAI,SAAS,SAAS;GAClC,gBACI,GAAS,OAAO;IAAE,GAAG;KAAI,EAAI,QAAQ,CAAC,EAAE,EAAI;GAAO,EAAE;EAC7D,CACJ;CACJ,IACA,CAAC,GAAM,CAAM,CACjB;AACJ"}
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
* 组装细节。请始终从本模块导入表格相关类型与工具,而不要直接依赖
|
|
15
15
|
* `@tanstack/react-table`。
|
|
16
16
|
*/
|
|
17
|
-
import { useTable, flexRender, tableFeatures, type ReactTable, coreFeatures, columnFilteringFeature, columnOrderingFeature, columnVisibilityFeature, globalFilteringFeature, rowSortingFeature, rowPaginationFeature, rowSelectionFeature, rowExpandingFeature, createCoreRowModel, createFilteredRowModel, createSortedRowModel, createPaginatedRowModel, createExpandedRowModel } from '@tanstack/react-table';
|
|
17
|
+
import { useTable, flexRender, sortFns as builtInSortFns, tableFeatures, type ReactTable, coreFeatures, columnFilteringFeature, columnOrderingFeature, columnVisibilityFeature, globalFilteringFeature, rowSortingFeature, rowPaginationFeature, rowSelectionFeature, rowExpandingFeature, createCoreRowModel, createFilteredRowModel, createSortedRowModel, createPaginatedRowModel, createExpandedRowModel } from '@tanstack/react-table';
|
|
18
18
|
import type { RowData, OnChangeFn, Updater, CellContext as CoreCellContext, HeaderContext as CoreHeaderContext, SortingState, ColumnFiltersState, RowSelectionState, PaginationState, ColumnOrderState, ExpandedState, ColumnVisibilityState, StockFeatures, Column as CoreColumn, ColumnDef as CoreColumnDef, Row as CoreRow, Cell as CoreCell, Header as CoreHeader, HeaderGroup as CoreHeaderGroup, SortFnOption, SortFn as CoreSortFn, FilterFn as CoreFilterFn, ColumnMeta as CoreColumnMeta, TableOptions } from '@tanstack/react-table';
|
|
19
|
-
export { flexRender, useTable, tableFeatures };
|
|
19
|
+
export { flexRender, useTable, tableFeatures, builtInSortFns };
|
|
20
20
|
export type DishUITableFeatures = StockFeatures;
|
|
21
21
|
export { coreFeatures, columnFilteringFeature, columnOrderingFeature, columnVisibilityFeature, globalFilteringFeature, rowSortingFeature, rowPaginationFeature, rowSelectionFeature, rowExpandingFeature, createCoreRowModel, createFilteredRowModel, createSortedRowModel, createPaginatedRowModel, createExpandedRowModel, };
|
|
22
22
|
export type Table<TData extends RowData> = ReactTable<DishUITableFeatures, TData>;
|
|
@@ -1,49 +1,57 @@
|
|
|
1
1
|
import { useMemo as e } from "react";
|
|
2
|
-
import { columnFilteringFeature as t, columnOrderingFeature as n, columnVisibilityFeature as r, coreFeatures as i, createCoreRowModel as a, createExpandedRowModel as o, createFilteredRowModel as s, createPaginatedRowModel as c, createSortedRowModel as l,
|
|
2
|
+
import { columnFilteringFeature as t, columnOrderingFeature as n, columnVisibilityFeature as r, coreFeatures as i, createCoreRowModel as a, createExpandedRowModel as o, createFilteredRowModel as s, createPaginatedRowModel as c, createSortedRowModel as l, filterFns as u, flexRender as d, globalFilteringFeature as f, rowExpandingFeature as p, rowPaginationFeature as m, rowSelectionFeature as h, rowSortingFeature as g, sortFns as _, tableFeatures as v, useTable as y } from "@tanstack/react-table";
|
|
3
3
|
//#region src/components/pro/DataTable/tanstack-table.ts
|
|
4
|
-
var
|
|
4
|
+
var b = v({
|
|
5
5
|
...i,
|
|
6
6
|
columnFilteringFeature: t,
|
|
7
7
|
columnOrderingFeature: n,
|
|
8
8
|
columnVisibilityFeature: r,
|
|
9
|
-
globalFilteringFeature:
|
|
10
|
-
rowSortingFeature:
|
|
11
|
-
rowPaginationFeature:
|
|
12
|
-
rowSelectionFeature:
|
|
13
|
-
rowExpandingFeature:
|
|
9
|
+
globalFilteringFeature: f,
|
|
10
|
+
rowSortingFeature: g,
|
|
11
|
+
rowPaginationFeature: m,
|
|
12
|
+
rowSelectionFeature: h,
|
|
13
|
+
rowExpandingFeature: p,
|
|
14
|
+
sortFns: _,
|
|
15
|
+
filterFns: u,
|
|
14
16
|
coreRowModel: a(),
|
|
15
17
|
filteredRowModel: s(),
|
|
16
18
|
sortedRowModel: l(),
|
|
17
19
|
paginatedRowModel: c(),
|
|
18
20
|
expandedRowModel: o()
|
|
19
21
|
});
|
|
20
|
-
function
|
|
21
|
-
let { sortFns:
|
|
22
|
-
if (!
|
|
22
|
+
function x(d) {
|
|
23
|
+
let { sortFns: x, filterFns: S, ...C } = d, w = e(() => {
|
|
24
|
+
if (!x && !S) return b;
|
|
23
25
|
let e = {
|
|
24
26
|
...i,
|
|
25
27
|
columnFilteringFeature: t,
|
|
26
28
|
columnOrderingFeature: n,
|
|
27
29
|
columnVisibilityFeature: r,
|
|
28
|
-
globalFilteringFeature:
|
|
29
|
-
rowSortingFeature:
|
|
30
|
-
rowPaginationFeature:
|
|
31
|
-
rowSelectionFeature:
|
|
32
|
-
rowExpandingFeature:
|
|
30
|
+
globalFilteringFeature: f,
|
|
31
|
+
rowSortingFeature: g,
|
|
32
|
+
rowPaginationFeature: m,
|
|
33
|
+
rowSelectionFeature: h,
|
|
34
|
+
rowExpandingFeature: p,
|
|
33
35
|
coreRowModel: a(),
|
|
34
36
|
filteredRowModel: s(),
|
|
35
37
|
sortedRowModel: l(),
|
|
36
38
|
paginatedRowModel: c(),
|
|
37
39
|
expandedRowModel: o()
|
|
38
40
|
};
|
|
39
|
-
return
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
return e.sortFns = {
|
|
42
|
+
..._,
|
|
43
|
+
...x
|
|
44
|
+
}, e.filterFns = {
|
|
45
|
+
...u,
|
|
46
|
+
...S
|
|
47
|
+
}, v(e);
|
|
48
|
+
}, [x, S]);
|
|
49
|
+
return y({
|
|
50
|
+
features: w,
|
|
51
|
+
...C
|
|
44
52
|
});
|
|
45
53
|
}
|
|
46
54
|
//#endregion
|
|
47
|
-
export { t as columnFilteringFeature, n as columnOrderingFeature, r as columnVisibilityFeature, i as coreFeatures, a as createCoreRowModel, o as createExpandedRowModel, s as createFilteredRowModel, c as createPaginatedRowModel, l as createSortedRowModel,
|
|
55
|
+
export { _ as builtInSortFns, t as columnFilteringFeature, n as columnOrderingFeature, r as columnVisibilityFeature, i as coreFeatures, a as createCoreRowModel, o as createExpandedRowModel, s as createFilteredRowModel, c as createPaginatedRowModel, l as createSortedRowModel, d as flexRender, f as globalFilteringFeature, p as rowExpandingFeature, m as rowPaginationFeature, h as rowSelectionFeature, g as rowSortingFeature, v as tableFeatures, x as useReactTable, y as useTable };
|
|
48
56
|
|
|
49
57
|
//# sourceMappingURL=tanstack-table.js.map
|