@hkyhy/marsun-components-core 0.1.30 → 0.1.31
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/Filter/FilterCascader/index.d.ts +40 -0
- package/dist/components/Filter/FilterCascader/index.js +318 -0
- package/dist/components/Filter/FilterCascader/index.js.map +1 -0
- package/dist/components/Filter/FilterCascader/style.module.scss.js +14 -0
- package/dist/components/Filter/FilterCascader/style.module.scss.js.map +1 -0
- package/dist/components/Filter/FilterPopover/index.d.ts +2 -0
- package/dist/components/Filter/FilterPopover/index.js +22 -21
- package/dist/components/Filter/FilterPopover/index.js.map +1 -1
- package/dist/components/Filter/FilterSelect/index.d.ts +6 -0
- package/dist/components/Filter/FilterSelect/index.js +201 -197
- package/dist/components/Filter/FilterSelect/index.js.map +1 -1
- package/dist/components/Filter/FilterSelect/style.module.scss.js +16 -15
- package/dist/components/Filter/FilterSelect/style.module.scss.js.map +1 -1
- package/dist/components/Filter/FilterTreeSelect/index.d.ts +6 -0
- package/dist/components/Filter/FilterTreeSelect/index.js +220 -203
- package/dist/components/Filter/FilterTreeSelect/index.js.map +1 -1
- package/dist/components/Filter/FilterTreeSelect/style.module.scss.js +15 -14
- package/dist/components/Filter/FilterTreeSelect/style.module.scss.js.map +1 -1
- package/dist/components/Filter/FilterTrigger/index.d.ts +3 -0
- package/dist/components/Filter/FilterTrigger/index.js +57 -44
- package/dist/components/Filter/FilterTrigger/index.js.map +1 -1
- package/dist/components/Filter/FilterTrigger/style.module.scss.js +5 -4
- package/dist/components/Filter/FilterTrigger/style.module.scss.js.map +1 -1
- package/dist/components/Filter/index.d.ts +3 -0
- package/dist/components/Table/ColumnConfigPanel.d.ts +13 -0
- package/dist/components/Table/ColumnConfigPanel.js +260 -0
- package/dist/components/Table/ColumnConfigPanel.js.map +1 -0
- package/dist/components/Table/Table.d.ts +16 -2
- package/dist/components/Table/Table.js +106 -28
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Table/columnConfig.module.scss.js +38 -0
- package/dist/components/Table/columnConfig.module.scss.js.map +1 -0
- package/dist/components/Table/columnConfigTypes.d.ts +22 -0
- package/dist/components/Table/columnConfigUtils.d.ts +25 -0
- package/dist/components/Table/columnConfigUtils.js +141 -0
- package/dist/components/Table/columnConfigUtils.js.map +1 -0
- package/dist/components/Table/index.d.ts +2 -1
- package/dist/index.js +258 -251
- package/dist/index.js.map +1 -1
- package/dist/marsun-components-core.css +1 -1
- package/dist/styles/global.css +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { jsx as a, jsxs as C, Fragment as z } from "react/jsx-runtime";
|
|
2
|
+
import { useState as N, useCallback as x, useMemo as A } from "react";
|
|
3
|
+
import { Popover as G, Tooltip as K, Collapse as U, Input as E, Space as W, Button as P, Empty as I, Checkbox as J } from "antd";
|
|
4
|
+
import { Settings as Q, Undo2 as X } from "../Icons/index.js";
|
|
5
|
+
import { mergePanelWithConfig as Y, splitVisibleHidden as Z, panelItemsToConfig as $ } from "./columnConfigUtils.js";
|
|
6
|
+
import c from "./columnConfig.module.scss.js";
|
|
7
|
+
function B(t, n) {
|
|
8
|
+
if (!n) return !0;
|
|
9
|
+
const r = n.toLowerCase();
|
|
10
|
+
return t.some(
|
|
11
|
+
(e) => e.label.toLowerCase().includes(r) || e.id.toLowerCase().includes(r) || (e.children ? B(e.children, n) : !1)
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
const L = ({ items: t, search: n, onChange: r, onToggle: e, depth: d = 0 }) => {
|
|
15
|
+
const [h, u] = N(null), m = A(() => n.trim() ? t.map((l, s) => ({ it: l, i: s })).filter(({ it: l }) => B([l], n.trim())) : t.map((l, s) => ({ it: l, i: s })), [t, n]), D = (l, s) => {
|
|
16
|
+
u(s), l.dataTransfer.effectAllowed = "move", l.dataTransfer.setData("text/plain", String(s));
|
|
17
|
+
}, S = (l, s) => {
|
|
18
|
+
l.preventDefault();
|
|
19
|
+
const v = h ?? Number(l.dataTransfer.getData("text/plain"));
|
|
20
|
+
if (u(null), !Number.isFinite(v) || v === s) return;
|
|
21
|
+
const i = [...t], [p] = i.splice(v, 1);
|
|
22
|
+
p && (i.splice(s, 0, p), r(i));
|
|
23
|
+
};
|
|
24
|
+
return m.length ? /* @__PURE__ */ a("ul", { className: c.list, style: { paddingLeft: d ? 12 : 0 }, children: m.map(({ it: l, i: s }) => {
|
|
25
|
+
var v;
|
|
26
|
+
return /* @__PURE__ */ C("li", { className: c.listItem, children: [
|
|
27
|
+
/* @__PURE__ */ C(
|
|
28
|
+
"div",
|
|
29
|
+
{
|
|
30
|
+
className: c.row,
|
|
31
|
+
draggable: !n.trim(),
|
|
32
|
+
onDragStart: (i) => D(i, s),
|
|
33
|
+
onDragOver: (i) => i.preventDefault(),
|
|
34
|
+
onDrop: (i) => S(i, s),
|
|
35
|
+
children: [
|
|
36
|
+
/* @__PURE__ */ a("span", { className: c.grip, "aria-hidden": !0, children: "⠿" }),
|
|
37
|
+
/* @__PURE__ */ a(J, { checked: !l.hidden, onChange: (i) => e(l.id, !i.target.checked), children: /* @__PURE__ */ a("span", { className: c.label, children: l.label || l.id }) })
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
),
|
|
41
|
+
(v = l.children) != null && v.length ? /* @__PURE__ */ a(
|
|
42
|
+
L,
|
|
43
|
+
{
|
|
44
|
+
items: l.children,
|
|
45
|
+
search: n,
|
|
46
|
+
depth: d + 1,
|
|
47
|
+
onChange: (i) => {
|
|
48
|
+
const p = t.map((b) => b.id === l.id ? { ...b, children: i } : b);
|
|
49
|
+
r(p);
|
|
50
|
+
},
|
|
51
|
+
onToggle: (i, p) => {
|
|
52
|
+
const b = t.map((g) => {
|
|
53
|
+
if (g.id !== l.id || !g.children) return g;
|
|
54
|
+
const y = g.children.map(
|
|
55
|
+
(f) => f.id === i ? { ...f, hidden: p } : f.children ? {
|
|
56
|
+
...f,
|
|
57
|
+
children: M(f.children, i, p)
|
|
58
|
+
} : f
|
|
59
|
+
), w = y.every((f) => f.hidden);
|
|
60
|
+
return { ...g, children: y, hidden: w ? !0 : p ? g.hidden : !1 };
|
|
61
|
+
});
|
|
62
|
+
r(b);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
) : null
|
|
66
|
+
] }, l.id);
|
|
67
|
+
}) }) : /* @__PURE__ */ a(I, { image: I.PRESENTED_IMAGE_SIMPLE, description: "暂无数据" });
|
|
68
|
+
};
|
|
69
|
+
function M(t, n, r) {
|
|
70
|
+
return t.map((e) => {
|
|
71
|
+
if (e.id === n) return { ...e, hidden: r };
|
|
72
|
+
if (e.children) {
|
|
73
|
+
const d = M(e.children, n, r);
|
|
74
|
+
return {
|
|
75
|
+
...e,
|
|
76
|
+
children: d,
|
|
77
|
+
hidden: d.every((h) => h.hidden) ? !0 : e.hidden && r
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
return e;
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function R(t, n, r) {
|
|
84
|
+
return t.map((e) => {
|
|
85
|
+
var d;
|
|
86
|
+
if (e.id === n) {
|
|
87
|
+
const h = (d = e.children) == null ? void 0 : d.map((u) => j(u, r));
|
|
88
|
+
return { ...e, hidden: r, children: h };
|
|
89
|
+
}
|
|
90
|
+
if (e.children) {
|
|
91
|
+
const h = R(e.children, n, r), u = h.every((m) => m.hidden);
|
|
92
|
+
return {
|
|
93
|
+
...e,
|
|
94
|
+
children: h,
|
|
95
|
+
hidden: u ? !0 : !r && e.id !== n ? !1 : e.hidden
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return e;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
function j(t, n) {
|
|
102
|
+
var r;
|
|
103
|
+
return {
|
|
104
|
+
...t,
|
|
105
|
+
hidden: n,
|
|
106
|
+
children: (r = t.children) == null ? void 0 : r.map((e) => j(e, n))
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function V(t, n) {
|
|
110
|
+
return [...t, ...n];
|
|
111
|
+
}
|
|
112
|
+
const q = ({
|
|
113
|
+
open: t,
|
|
114
|
+
onOpenChange: n,
|
|
115
|
+
defaultItems: r,
|
|
116
|
+
savedConfig: e,
|
|
117
|
+
onConfirm: d,
|
|
118
|
+
children: h
|
|
119
|
+
}) => {
|
|
120
|
+
const [u, m] = N([]), [D, S] = N(""), [l, s] = N(""), [v, i] = N(!1), p = x(() => {
|
|
121
|
+
m(Y(r, e)), S(""), s("");
|
|
122
|
+
}, [r, e]), b = (o) => {
|
|
123
|
+
o && p(), n(o);
|
|
124
|
+
}, { visible: g, hidden: y } = A(() => Z(u), [u]), w = (o) => {
|
|
125
|
+
m(V(o, y));
|
|
126
|
+
}, f = (o) => {
|
|
127
|
+
m(V(g, o));
|
|
128
|
+
}, H = (o, k) => {
|
|
129
|
+
m((T) => R(T, o, k));
|
|
130
|
+
}, F = () => {
|
|
131
|
+
m(r.map((o) => {
|
|
132
|
+
var k;
|
|
133
|
+
return { ...o, children: (k = o.children) == null ? void 0 : k.map((T) => ({ ...T })) };
|
|
134
|
+
}));
|
|
135
|
+
}, O = async () => {
|
|
136
|
+
i(!0);
|
|
137
|
+
try {
|
|
138
|
+
await d($(u)), n(!1);
|
|
139
|
+
} finally {
|
|
140
|
+
i(!1);
|
|
141
|
+
}
|
|
142
|
+
}, _ = /* @__PURE__ */ C("div", { className: c.panel, "data-ui": "table-column-config", children: [
|
|
143
|
+
/* @__PURE__ */ C("div", { className: c.header, children: [
|
|
144
|
+
/* @__PURE__ */ a("span", { className: c.title, children: "编辑表格" }),
|
|
145
|
+
/* @__PURE__ */ a(K, { title: "恢复默认", children: /* @__PURE__ */ a("button", { type: "button", className: c.resetBtn, onClick: F, "aria-label": "恢复默认", children: /* @__PURE__ */ a(X, { size: 16 }) }) })
|
|
146
|
+
] }),
|
|
147
|
+
/* @__PURE__ */ a(
|
|
148
|
+
U,
|
|
149
|
+
{
|
|
150
|
+
className: c.collapse,
|
|
151
|
+
defaultActiveKey: ["visible", "hidden"],
|
|
152
|
+
ghost: !0,
|
|
153
|
+
items: [
|
|
154
|
+
{
|
|
155
|
+
key: "visible",
|
|
156
|
+
label: "显示的信息",
|
|
157
|
+
children: /* @__PURE__ */ C(z, { children: [
|
|
158
|
+
/* @__PURE__ */ a(
|
|
159
|
+
E,
|
|
160
|
+
{
|
|
161
|
+
allowClear: !0,
|
|
162
|
+
size: "small",
|
|
163
|
+
className: c.search,
|
|
164
|
+
placeholder: "搜索",
|
|
165
|
+
value: D,
|
|
166
|
+
onChange: (o) => S(o.target.value)
|
|
167
|
+
}
|
|
168
|
+
),
|
|
169
|
+
/* @__PURE__ */ a(
|
|
170
|
+
L,
|
|
171
|
+
{
|
|
172
|
+
items: g,
|
|
173
|
+
search: D,
|
|
174
|
+
onChange: w,
|
|
175
|
+
onToggle: H
|
|
176
|
+
}
|
|
177
|
+
)
|
|
178
|
+
] })
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
key: "hidden",
|
|
182
|
+
label: "隐藏的信息",
|
|
183
|
+
children: /* @__PURE__ */ C(z, { children: [
|
|
184
|
+
/* @__PURE__ */ a(
|
|
185
|
+
E,
|
|
186
|
+
{
|
|
187
|
+
allowClear: !0,
|
|
188
|
+
size: "small",
|
|
189
|
+
className: c.search,
|
|
190
|
+
placeholder: "搜索",
|
|
191
|
+
value: l,
|
|
192
|
+
onChange: (o) => s(o.target.value)
|
|
193
|
+
}
|
|
194
|
+
),
|
|
195
|
+
/* @__PURE__ */ a(
|
|
196
|
+
L,
|
|
197
|
+
{
|
|
198
|
+
items: y,
|
|
199
|
+
search: l,
|
|
200
|
+
onChange: f,
|
|
201
|
+
onToggle: H
|
|
202
|
+
}
|
|
203
|
+
)
|
|
204
|
+
] })
|
|
205
|
+
}
|
|
206
|
+
]
|
|
207
|
+
}
|
|
208
|
+
),
|
|
209
|
+
/* @__PURE__ */ a("div", { className: c.footer, children: /* @__PURE__ */ C(W, { children: [
|
|
210
|
+
/* @__PURE__ */ a(P, { size: "small", onClick: () => n(!1), children: "取消" }),
|
|
211
|
+
/* @__PURE__ */ a(P, { type: "primary", size: "small", loading: v, onClick: () => void O(), children: "确定" })
|
|
212
|
+
] }) })
|
|
213
|
+
] });
|
|
214
|
+
return /* @__PURE__ */ a(
|
|
215
|
+
G,
|
|
216
|
+
{
|
|
217
|
+
trigger: "click",
|
|
218
|
+
placement: "bottomRight",
|
|
219
|
+
open: t,
|
|
220
|
+
onOpenChange: b,
|
|
221
|
+
content: _,
|
|
222
|
+
overlayClassName: c.overlay,
|
|
223
|
+
arrow: !1,
|
|
224
|
+
children: h
|
|
225
|
+
}
|
|
226
|
+
);
|
|
227
|
+
};
|
|
228
|
+
function ie({
|
|
229
|
+
open: t,
|
|
230
|
+
onOpenChange: n,
|
|
231
|
+
defaultItems: r,
|
|
232
|
+
savedConfig: e,
|
|
233
|
+
onConfirm: d
|
|
234
|
+
}) {
|
|
235
|
+
return /* @__PURE__ */ a(
|
|
236
|
+
q,
|
|
237
|
+
{
|
|
238
|
+
open: t,
|
|
239
|
+
onOpenChange: n,
|
|
240
|
+
defaultItems: r,
|
|
241
|
+
savedConfig: e,
|
|
242
|
+
onConfirm: d,
|
|
243
|
+
children: /* @__PURE__ */ a(
|
|
244
|
+
"button",
|
|
245
|
+
{
|
|
246
|
+
type: "button",
|
|
247
|
+
className: c.gearBtn,
|
|
248
|
+
"aria-label": "编辑表格",
|
|
249
|
+
onClick: (h) => h.stopPropagation(),
|
|
250
|
+
children: /* @__PURE__ */ a(Q, { size: 14 })
|
|
251
|
+
}
|
|
252
|
+
)
|
|
253
|
+
}
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
export {
|
|
257
|
+
q as ColumnConfigPopover,
|
|
258
|
+
ie as ColumnConfigTrigger
|
|
259
|
+
};
|
|
260
|
+
//# sourceMappingURL=ColumnConfigPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColumnConfigPanel.js","sources":["../../../src/components/Table/ColumnConfigPanel.tsx"],"sourcesContent":["import { useCallback, useMemo, useState, type DragEvent, type FC, type ReactNode } from 'react';\nimport { Button, Checkbox, Collapse, Empty, Input, Popover, Space, Tooltip } from 'antd';\nimport { Settings, Undo2 } from '../Icons';\nimport type { ColumnConfigPanelItem, TableColumnConfigItem } from './columnConfigTypes';\nimport { mergePanelWithConfig, panelItemsToConfig, splitVisibleHidden } from './columnConfigUtils';\nimport styles from './columnConfig.module.scss';\n\ntype ColumnConfigPanelProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n defaultItems: ColumnConfigPanelItem[];\n savedConfig: TableColumnConfigItem[] | null;\n onConfirm: (items: TableColumnConfigItem[]) => void | Promise<void>;\n children: ReactNode;\n};\n\nfunction flattenSearch(items: ColumnConfigPanelItem[], q: string): boolean {\n if (!q) return true;\n const lower = q.toLowerCase();\n return items.some(\n (it) =>\n it.label.toLowerCase().includes(lower) ||\n it.id.toLowerCase().includes(lower) ||\n (it.children ? flattenSearch(it.children, q) : false),\n );\n}\n\nconst DragList: FC<{\n items: ColumnConfigPanelItem[];\n search: string;\n onChange: (next: ColumnConfigPanelItem[]) => void;\n onToggle: (id: string, hidden: boolean) => void;\n depth?: number;\n}> = ({ items, search, onChange, onToggle, depth = 0 }) => {\n const [dragIndex, setDragIndex] = useState<number | null>(null);\n\n const filtered = useMemo(() => {\n if (!search.trim()) return items.map((it, i) => ({ it, i }));\n return items.map((it, i) => ({ it, i })).filter(({ it }) => flattenSearch([it], search.trim()));\n }, [items, search]);\n\n const onDragStart = (e: DragEvent, index: number) => {\n setDragIndex(index);\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('text/plain', String(index));\n };\n\n const onDrop = (e: DragEvent, toIndex: number) => {\n e.preventDefault();\n const from = dragIndex ?? Number(e.dataTransfer.getData('text/plain'));\n setDragIndex(null);\n if (!Number.isFinite(from) || from === toIndex) return;\n const next = [...items];\n const [moved] = next.splice(from, 1);\n if (!moved) return;\n next.splice(toIndex, 0, moved);\n onChange(next);\n };\n\n if (!filtered.length) {\n return <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description=\"暂无数据\" />;\n }\n\n return (\n <ul className={styles.list} style={{ paddingLeft: depth ? 12 : 0 }}>\n {filtered.map(({ it, i }) => (\n <li key={it.id} className={styles.listItem}>\n <div\n className={styles.row}\n draggable={!search.trim()}\n onDragStart={(e) => onDragStart(e, i)}\n onDragOver={(e) => e.preventDefault()}\n onDrop={(e) => onDrop(e, i)}\n >\n <span className={styles.grip} aria-hidden>\n ⠿\n </span>\n <Checkbox checked={!it.hidden} onChange={(e) => onToggle(it.id, !e.target.checked)}>\n <span className={styles.label}>{it.label || it.id}</span>\n </Checkbox>\n </div>\n {it.children?.length ? (\n <DragList\n items={it.children}\n search={search}\n depth={depth + 1}\n onChange={(childNext) => {\n const next = items.map((x) => (x.id === it.id ? { ...x, children: childNext } : x));\n onChange(next);\n }}\n onToggle={(cid, hidden) => {\n const next = items.map((x) => {\n if (x.id !== it.id || !x.children) return x;\n const children = x.children.map((c) =>\n c.id === cid\n ? { ...c, hidden }\n : c.children\n ? {\n ...c,\n children: toggleDeep(c.children, cid, hidden),\n }\n : c,\n );\n const allHidden = children.every((c) => c.hidden);\n return { ...x, children, hidden: allHidden ? true : hidden ? x.hidden : false };\n });\n onChange(next);\n }}\n />\n ) : null}\n </li>\n ))}\n </ul>\n );\n};\n\nfunction toggleDeep(\n items: ColumnConfigPanelItem[],\n id: string,\n hidden: boolean,\n): ColumnConfigPanelItem[] {\n return items.map((it) => {\n if (it.id === id) return { ...it, hidden };\n if (it.children) {\n const children = toggleDeep(it.children, id, hidden);\n return {\n ...it,\n children,\n hidden: children.every((c) => c.hidden) ? true : it.hidden && hidden,\n };\n }\n return it;\n });\n}\n\nfunction toggleInTree(\n items: ColumnConfigPanelItem[],\n id: string,\n hidden: boolean,\n): ColumnConfigPanelItem[] {\n return items.map((it) => {\n if (it.id === id) {\n const children = it.children?.map((c) => setHiddenDeep(c, hidden));\n return { ...it, hidden, children };\n }\n if (it.children) {\n const children = toggleInTree(it.children, id, hidden);\n const allHidden = children.every((c) => c.hidden);\n return {\n ...it,\n children,\n hidden: allHidden ? true : !hidden && it.id !== id ? false : it.hidden,\n };\n }\n return it;\n });\n}\n\nfunction setHiddenDeep(item: ColumnConfigPanelItem, hidden: boolean): ColumnConfigPanelItem {\n return {\n ...item,\n hidden,\n children: item.children?.map((c) => setHiddenDeep(c, hidden)),\n };\n}\n\n/** 将显隐两区合并回完整顺序:visible 在前,hidden 在后(保持各自内部拖拽序) */\nfunction mergeSections(\n visible: ColumnConfigPanelItem[],\n hidden: ColumnConfigPanelItem[],\n): ColumnConfigPanelItem[] {\n return [...visible, ...hidden];\n}\n\nexport const ColumnConfigPopover: FC<ColumnConfigPanelProps> = ({\n open,\n onOpenChange,\n defaultItems,\n savedConfig,\n onConfirm,\n children,\n}) => {\n const [draft, setDraft] = useState<ColumnConfigPanelItem[]>([]);\n const [searchVisible, setSearchVisible] = useState('');\n const [searchHidden, setSearchHidden] = useState('');\n const [saving, setSaving] = useState(false);\n\n const syncDraft = useCallback(() => {\n setDraft(mergePanelWithConfig(defaultItems, savedConfig));\n setSearchVisible('');\n setSearchHidden('');\n }, [defaultItems, savedConfig]);\n\n const handleOpenChange = (next: boolean) => {\n if (next) syncDraft();\n onOpenChange(next);\n };\n\n const { visible, hidden } = useMemo(() => splitVisibleHidden(draft), [draft]);\n\n const setVisibleList = (list: ColumnConfigPanelItem[]) => {\n setDraft(mergeSections(list, hidden));\n };\n const setHiddenList = (list: ColumnConfigPanelItem[]) => {\n setDraft(mergeSections(visible, list));\n };\n\n const onToggle = (id: string, nextHidden: boolean) => {\n setDraft((prev) => toggleInTree(prev, id, nextHidden));\n };\n\n const onReset = () => {\n setDraft(defaultItems.map((d) => ({ ...d, children: d.children?.map((c) => ({ ...c })) })));\n };\n\n const onOk = async () => {\n setSaving(true);\n try {\n await onConfirm(panelItemsToConfig(draft));\n onOpenChange(false);\n } finally {\n setSaving(false);\n }\n };\n\n const content = (\n <div className={styles.panel} data-ui=\"table-column-config\">\n <div className={styles.header}>\n <span className={styles.title}>编辑表格</span>\n <Tooltip title=\"恢复默认\">\n <button type=\"button\" className={styles.resetBtn} onClick={onReset} aria-label=\"恢复默认\">\n <Undo2 size={16} />\n </button>\n </Tooltip>\n </div>\n <Collapse\n className={styles.collapse}\n defaultActiveKey={['visible', 'hidden']}\n ghost\n items={[\n {\n key: 'visible',\n label: '显示的信息',\n children: (\n <>\n <Input\n allowClear\n size=\"small\"\n className={styles.search}\n placeholder=\"搜索\"\n value={searchVisible}\n onChange={(e) => setSearchVisible(e.target.value)}\n />\n <DragList\n items={visible}\n search={searchVisible}\n onChange={setVisibleList}\n onToggle={onToggle}\n />\n </>\n ),\n },\n {\n key: 'hidden',\n label: '隐藏的信息',\n children: (\n <>\n <Input\n allowClear\n size=\"small\"\n className={styles.search}\n placeholder=\"搜索\"\n value={searchHidden}\n onChange={(e) => setSearchHidden(e.target.value)}\n />\n <DragList\n items={hidden}\n search={searchHidden}\n onChange={setHiddenList}\n onToggle={onToggle}\n />\n </>\n ),\n },\n ]}\n />\n <div className={styles.footer}>\n <Space>\n <Button size=\"small\" onClick={() => onOpenChange(false)}>\n 取消\n </Button>\n <Button type=\"primary\" size=\"small\" loading={saving} onClick={() => void onOk()}>\n 确定\n </Button>\n </Space>\n </div>\n </div>\n );\n\n return (\n <Popover\n trigger=\"click\"\n placement=\"bottomRight\"\n open={open}\n onOpenChange={handleOpenChange}\n content={content}\n overlayClassName={styles.overlay}\n arrow={false}\n >\n {children}\n </Popover>\n );\n};\n\nexport function ColumnConfigTrigger({\n open,\n onOpenChange,\n defaultItems,\n savedConfig,\n onConfirm,\n}: Omit<ColumnConfigPanelProps, 'children'>) {\n return (\n <ColumnConfigPopover\n open={open}\n onOpenChange={onOpenChange}\n defaultItems={defaultItems}\n savedConfig={savedConfig}\n onConfirm={onConfirm}\n >\n <button\n type=\"button\"\n className={styles.gearBtn}\n aria-label=\"编辑表格\"\n onClick={(e) => e.stopPropagation()}\n >\n <Settings size={14} />\n </button>\n </ColumnConfigPopover>\n );\n}\n"],"names":["flattenSearch","items","q","lower","it","DragList","search","onChange","onToggle","depth","dragIndex","setDragIndex","useState","filtered","useMemo","i","onDragStart","e","index","onDrop","toIndex","from","next","moved","jsx","styles","jsxs","Checkbox","_a","childNext","x","cid","hidden","children","c","toggleDeep","allHidden","Empty","id","toggleInTree","setHiddenDeep","item","mergeSections","visible","ColumnConfigPopover","open","onOpenChange","defaultItems","savedConfig","onConfirm","draft","setDraft","searchVisible","setSearchVisible","searchHidden","setSearchHidden","saving","setSaving","syncDraft","useCallback","mergePanelWithConfig","handleOpenChange","splitVisibleHidden","setVisibleList","list","setHiddenList","nextHidden","prev","onReset","d","onOk","panelItemsToConfig","content","Tooltip","Undo2","Collapse","Fragment","Input","Space","Button","Popover","ColumnConfigTrigger","Settings"],"mappings":"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"}
|
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
import { TableProps as AntTableProps } from 'antd';
|
|
2
|
-
|
|
2
|
+
import { TableColumnConfigFetcher, TableColumnConfigItem, TableColumnConfigSaver } from './columnConfigTypes';
|
|
3
|
+
import { applyColumnConfig, columnsToConfig, COLUMN_CONFIG_COL_KEY } from './columnConfigUtils';
|
|
4
|
+
export type { TableColumnConfigItem, TableColumnConfigFetcher, TableColumnConfigSaver };
|
|
5
|
+
export type TableProps<RecordType extends object = Record<string, unknown>> = AntTableProps<RecordType> & {
|
|
6
|
+
/** 稳定偏好 key;业务列表必填 */
|
|
7
|
+
tableName?: string;
|
|
8
|
+
/** 是否启用「编辑表格」列配置;默认 !!tableName */
|
|
9
|
+
columnConfigEnabled?: boolean;
|
|
10
|
+
fetchColumnConfig?: TableColumnConfigFetcher;
|
|
11
|
+
saveColumnConfig?: TableColumnConfigSaver;
|
|
12
|
+
onColumnConfigChange?: (items: TableColumnConfigItem[]) => void;
|
|
13
|
+
};
|
|
3
14
|
/**
|
|
4
15
|
* 基于 antd Table 的列表表格包装。
|
|
5
16
|
* 默认:横向滚动 max-content、受控分页 showSizeChanger + showTotal、空态 Empty。
|
|
17
|
+
* tableName + columnConfigEnabled 时在最右侧追加独立齿轮列(跨多级表头高度)。
|
|
6
18
|
*/
|
|
7
|
-
declare function Table<RecordType extends object = Record<string, unknown>>({ className, scroll, pagination, locale, ...rest }: TableProps<RecordType>): import("react").JSX.Element;
|
|
19
|
+
declare function Table<RecordType extends object = Record<string, unknown>>({ className, scroll, pagination, locale, columns, tableName, columnConfigEnabled, fetchColumnConfig, saveColumnConfig, onColumnConfigChange, ...rest }: TableProps<RecordType>): import("react").JSX.Element;
|
|
8
20
|
export default Table;
|
|
21
|
+
/** 导出工具:业务侧也可手动生成默认配置 */
|
|
22
|
+
export { columnsToConfig, applyColumnConfig, COLUMN_CONFIG_COL_KEY };
|
|
@@ -1,39 +1,117 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { jsx as m } from "react/jsx-runtime";
|
|
2
|
+
import { useRef as P, useState as T, useEffect as _, useMemo as y, useCallback as R } from "react";
|
|
3
|
+
import { Table as j } from "antd";
|
|
4
|
+
import k from "classnames";
|
|
5
|
+
import { ColumnConfigTrigger as D } from "./ColumnConfigPanel.js";
|
|
6
|
+
import { applyColumnConfig as G, columnsToPanelItems as U, COLUMN_CONFIG_COL_KEY as $ } from "./columnConfigUtils.js";
|
|
7
|
+
import { columnsToConfig as oe } from "./columnConfigUtils.js";
|
|
8
|
+
import v from "./style.module.scss.js";
|
|
9
|
+
import w from "./columnConfig.module.scss.js";
|
|
10
|
+
import z from "../Empty/Empty.js";
|
|
11
|
+
const A = { x: "max-content" }, B = 40;
|
|
12
|
+
function K(f) {
|
|
13
|
+
return `共 ${f} 项`;
|
|
9
14
|
}
|
|
10
|
-
function
|
|
11
|
-
className:
|
|
12
|
-
scroll:
|
|
13
|
-
pagination:
|
|
14
|
-
locale:
|
|
15
|
-
|
|
15
|
+
function ee({
|
|
16
|
+
className: f,
|
|
17
|
+
scroll: O,
|
|
18
|
+
pagination: s,
|
|
19
|
+
locale: h,
|
|
20
|
+
columns: r,
|
|
21
|
+
tableName: t,
|
|
22
|
+
columnConfigEnabled: C,
|
|
23
|
+
fetchColumnConfig: c,
|
|
24
|
+
saveColumnConfig: i,
|
|
25
|
+
onColumnConfigChange: l,
|
|
26
|
+
...E
|
|
16
27
|
}) {
|
|
17
|
-
const
|
|
28
|
+
const o = C ?? !!t, L = P(r), [n, u] = T(null), [x, b] = T(!1), [g, d] = T(!o);
|
|
29
|
+
_(() => {
|
|
30
|
+
L.current = r;
|
|
31
|
+
}, [r]), _(() => {
|
|
32
|
+
if (!o || !t || !c) {
|
|
33
|
+
d(!0);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
let e = !1;
|
|
37
|
+
return d(!1), c(t).then((a) => {
|
|
38
|
+
e || u(a != null && a.length ? a : null);
|
|
39
|
+
}).catch(() => {
|
|
40
|
+
e || u(null);
|
|
41
|
+
}).finally(() => {
|
|
42
|
+
e || d(!0);
|
|
43
|
+
}), () => {
|
|
44
|
+
e = !0;
|
|
45
|
+
};
|
|
46
|
+
}, [o, t, c]);
|
|
47
|
+
const p = y(() => {
|
|
48
|
+
const e = r || [];
|
|
49
|
+
return o ? G(e, n) : e;
|
|
50
|
+
}, [r, o, n]), I = y(
|
|
51
|
+
() => U(
|
|
52
|
+
L.current || r
|
|
53
|
+
),
|
|
54
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- 随 columns 结构变
|
|
55
|
+
[r]
|
|
56
|
+
), S = R(
|
|
57
|
+
async (e) => {
|
|
58
|
+
t && i && await i(t, e), u(e), l == null || l(e);
|
|
59
|
+
},
|
|
60
|
+
[t, i, l]
|
|
61
|
+
), F = y(() => {
|
|
62
|
+
if (!o || !g) return p;
|
|
63
|
+
const e = {
|
|
64
|
+
key: $,
|
|
65
|
+
width: B,
|
|
66
|
+
fixed: "right",
|
|
67
|
+
align: "center",
|
|
68
|
+
className: w.configCol,
|
|
69
|
+
onHeaderCell: () => ({ className: w.configColHeader }),
|
|
70
|
+
title: /* @__PURE__ */ m(
|
|
71
|
+
D,
|
|
72
|
+
{
|
|
73
|
+
open: x,
|
|
74
|
+
onOpenChange: b,
|
|
75
|
+
defaultItems: I,
|
|
76
|
+
savedConfig: n,
|
|
77
|
+
onConfirm: S
|
|
78
|
+
}
|
|
79
|
+
),
|
|
80
|
+
render: () => null
|
|
81
|
+
};
|
|
82
|
+
return [...p, e];
|
|
83
|
+
}, [
|
|
84
|
+
o,
|
|
85
|
+
g,
|
|
86
|
+
p,
|
|
87
|
+
x,
|
|
88
|
+
I,
|
|
89
|
+
n,
|
|
90
|
+
S
|
|
91
|
+
]), H = s === !1 ? !1 : {
|
|
18
92
|
showSizeChanger: !0,
|
|
19
|
-
showTotal:
|
|
20
|
-
...
|
|
21
|
-
},
|
|
22
|
-
emptyText: /* @__PURE__ */
|
|
23
|
-
...
|
|
93
|
+
showTotal: K,
|
|
94
|
+
...s && typeof s == "object" ? s : {}
|
|
95
|
+
}, M = {
|
|
96
|
+
emptyText: /* @__PURE__ */ m(z, { iconType: "simple", description: "暂无数据" }),
|
|
97
|
+
...h
|
|
24
98
|
};
|
|
25
|
-
return /* @__PURE__ */
|
|
26
|
-
|
|
99
|
+
return /* @__PURE__ */ m(
|
|
100
|
+
j,
|
|
27
101
|
{
|
|
28
|
-
className:
|
|
29
|
-
scroll:
|
|
30
|
-
pagination:
|
|
31
|
-
locale:
|
|
32
|
-
|
|
102
|
+
className: k("marsun-table", v["marsun-table"], f),
|
|
103
|
+
scroll: O === void 0 ? A : O,
|
|
104
|
+
pagination: H,
|
|
105
|
+
locale: M,
|
|
106
|
+
columns: F,
|
|
107
|
+
...E
|
|
33
108
|
}
|
|
34
109
|
);
|
|
35
110
|
}
|
|
36
111
|
export {
|
|
37
|
-
|
|
112
|
+
$ as COLUMN_CONFIG_COL_KEY,
|
|
113
|
+
G as applyColumnConfig,
|
|
114
|
+
oe as columnsToConfig,
|
|
115
|
+
ee as default
|
|
38
116
|
};
|
|
39
117
|
//# sourceMappingURL=Table.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.js","sources":["../../../src/components/Table/Table.tsx"],"sourcesContent":["import { Table as AntTable } from 'antd';\nimport type { TableProps as AntTableProps } from 'antd';\nimport classNames from 'classnames';\nimport { Empty } from '../Empty';\nimport styles from './style.module.scss';\n\nexport type TableProps<RecordType extends object = Record<string, unknown>> =\n AntTableProps<RecordType
|
|
1
|
+
{"version":3,"file":"Table.js","sources":["../../../src/components/Table/Table.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Table as AntTable } from 'antd';\nimport type { TableProps as AntTableProps } from 'antd';\nimport type { ColumnsType, ColumnType } from 'antd/es/table';\nimport classNames from 'classnames';\nimport { Empty } from '../Empty';\nimport { ColumnConfigTrigger } from './ColumnConfigPanel';\nimport type {\n TableColumnConfigFetcher,\n TableColumnConfigItem,\n TableColumnConfigSaver,\n} from './columnConfigTypes';\nimport {\n applyColumnConfig,\n columnsToConfig,\n columnsToPanelItems,\n COLUMN_CONFIG_COL_KEY,\n} from './columnConfigUtils';\nimport styles from './style.module.scss';\nimport gearStyles from './columnConfig.module.scss';\n\nexport type { TableColumnConfigItem, TableColumnConfigFetcher, TableColumnConfigSaver };\n\nexport type TableProps<RecordType extends object = Record<string, unknown>> =\n AntTableProps<RecordType> & {\n /** 稳定偏好 key;业务列表必填 */\n tableName?: string;\n /** 是否启用「编辑表格」列配置;默认 !!tableName */\n columnConfigEnabled?: boolean;\n fetchColumnConfig?: TableColumnConfigFetcher;\n saveColumnConfig?: TableColumnConfigSaver;\n onColumnConfigChange?: (items: TableColumnConfigItem[]) => void;\n };\n\nconst DEFAULT_SCROLL = { x: 'max-content' as const };\nconst CONFIG_COL_WIDTH = 40;\n\nfunction defaultShowTotal(total: number): string {\n return `共 ${total} 项`;\n}\n\n/**\n * 基于 antd Table 的列表表格包装。\n * 默认:横向滚动 max-content、受控分页 showSizeChanger + showTotal、空态 Empty。\n * tableName + columnConfigEnabled 时在最右侧追加独立齿轮列(跨多级表头高度)。\n */\nfunction Table<RecordType extends object = Record<string, unknown>>({\n className,\n scroll,\n pagination,\n locale,\n columns,\n tableName,\n columnConfigEnabled,\n fetchColumnConfig,\n saveColumnConfig,\n onColumnConfigChange,\n ...rest\n}: TableProps<RecordType>) {\n const enableConfig = columnConfigEnabled ?? Boolean(tableName);\n const defaultColumnsRef = useRef(columns);\n const [savedConfig, setSavedConfig] = useState<TableColumnConfigItem[] | null>(null);\n const [configOpen, setConfigOpen] = useState(false);\n const [loaded, setLoaded] = useState(!enableConfig);\n\n useEffect(() => {\n defaultColumnsRef.current = columns;\n }, [columns]);\n\n useEffect(() => {\n if (!enableConfig || !tableName || !fetchColumnConfig) {\n setLoaded(true);\n return;\n }\n let cancelled = false;\n setLoaded(false);\n fetchColumnConfig(tableName)\n .then((items) => {\n if (!cancelled) setSavedConfig(items?.length ? items : null);\n })\n .catch(() => {\n if (!cancelled) setSavedConfig(null);\n })\n .finally(() => {\n if (!cancelled) setLoaded(true);\n });\n return () => {\n cancelled = true;\n };\n }, [enableConfig, tableName, fetchColumnConfig]);\n\n const appliedColumns = useMemo(() => {\n const base = (columns || []) as ColumnsType<RecordType>;\n if (!enableConfig) return base;\n return applyColumnConfig(base, savedConfig);\n }, [columns, enableConfig, savedConfig]);\n\n const defaultPanelItems = useMemo(\n () =>\n columnsToPanelItems(\n (defaultColumnsRef.current || columns) as ColumnsType<Record<string, unknown>>,\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- 随 columns 结构变\n [columns],\n );\n\n const handleConfirm = useCallback(\n async (items: TableColumnConfigItem[]) => {\n if (tableName && saveColumnConfig) {\n await saveColumnConfig(tableName, items);\n }\n setSavedConfig(items);\n onColumnConfigChange?.(items);\n },\n [tableName, saveColumnConfig, onColumnConfigChange],\n );\n\n const displayColumns = useMemo(() => {\n if (!enableConfig || !loaded) return appliedColumns;\n const gearCol: ColumnType<RecordType> = {\n key: COLUMN_CONFIG_COL_KEY,\n width: CONFIG_COL_WIDTH,\n fixed: 'right',\n align: 'center',\n className: gearStyles.configCol,\n onHeaderCell: () => ({ className: gearStyles.configColHeader }),\n title: (\n <ColumnConfigTrigger\n open={configOpen}\n onOpenChange={setConfigOpen}\n defaultItems={defaultPanelItems}\n savedConfig={savedConfig}\n onConfirm={handleConfirm}\n />\n ),\n render: () => null,\n };\n return [...appliedColumns, gearCol] as ColumnsType<RecordType>;\n }, [\n enableConfig,\n loaded,\n appliedColumns,\n configOpen,\n defaultPanelItems,\n savedConfig,\n handleConfirm,\n ]);\n\n const mergedPagination =\n pagination === false\n ? false\n : {\n showSizeChanger: true,\n showTotal: defaultShowTotal,\n ...(pagination && typeof pagination === 'object' ? pagination : {}),\n };\n\n const mergedLocale = {\n emptyText: <Empty iconType=\"simple\" description=\"暂无数据\" />,\n ...locale,\n };\n\n return (\n <AntTable<RecordType>\n className={classNames('marsun-table', styles['marsun-table'], className)}\n scroll={scroll === undefined ? DEFAULT_SCROLL : scroll}\n pagination={mergedPagination}\n locale={mergedLocale}\n columns={displayColumns}\n {...rest}\n />\n );\n}\n\nexport default Table;\n\n/** 导出工具:业务侧也可手动生成默认配置 */\nexport { columnsToConfig, applyColumnConfig, COLUMN_CONFIG_COL_KEY };\n"],"names":["DEFAULT_SCROLL","CONFIG_COL_WIDTH","defaultShowTotal","total","Table","className","scroll","pagination","locale","columns","tableName","columnConfigEnabled","fetchColumnConfig","saveColumnConfig","onColumnConfigChange","rest","enableConfig","defaultColumnsRef","useRef","savedConfig","setSavedConfig","useState","configOpen","setConfigOpen","loaded","setLoaded","useEffect","cancelled","items","appliedColumns","useMemo","base","applyColumnConfig","defaultPanelItems","columnsToPanelItems","handleConfirm","useCallback","displayColumns","gearCol","COLUMN_CONFIG_COL_KEY","gearStyles","jsx","ColumnConfigTrigger","mergedPagination","mergedLocale","Empty","AntTable","classNames","styles"],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const t = "_overlay_g3qto_1", o = "_panel_g3qto_5", e = "_header_g3qto_13", _ = "_title_g3qto_22", l = "_resetBtn_g3qto_28", s = "_collapse_g3qto_45", n = "_search_g3qto_60", c = "_list_g3qto_64", g = "_listItem_g3qto_72", r = "_row_g3qto_76", a = "_grip_g3qto_88", i = "_label_g3qto_96", q = "_footer_g3qto_100", f = "_gearBtn_g3qto_108", p = "_configCol_g3qto_129", d = "_configColHeader_g3qto_133", h = {
|
|
2
|
+
overlay: t,
|
|
3
|
+
panel: o,
|
|
4
|
+
header: e,
|
|
5
|
+
title: _,
|
|
6
|
+
resetBtn: l,
|
|
7
|
+
collapse: s,
|
|
8
|
+
search: n,
|
|
9
|
+
list: c,
|
|
10
|
+
listItem: g,
|
|
11
|
+
row: r,
|
|
12
|
+
grip: a,
|
|
13
|
+
label: i,
|
|
14
|
+
footer: q,
|
|
15
|
+
gearBtn: f,
|
|
16
|
+
configCol: p,
|
|
17
|
+
configColHeader: d
|
|
18
|
+
};
|
|
19
|
+
export {
|
|
20
|
+
s as collapse,
|
|
21
|
+
p as configCol,
|
|
22
|
+
d as configColHeader,
|
|
23
|
+
h as default,
|
|
24
|
+
q as footer,
|
|
25
|
+
f as gearBtn,
|
|
26
|
+
a as grip,
|
|
27
|
+
e as header,
|
|
28
|
+
i as label,
|
|
29
|
+
c as list,
|
|
30
|
+
g as listItem,
|
|
31
|
+
t as overlay,
|
|
32
|
+
o as panel,
|
|
33
|
+
l as resetBtn,
|
|
34
|
+
r as row,
|
|
35
|
+
n as search,
|
|
36
|
+
_ as title
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=columnConfig.module.scss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columnConfig.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ColumnType, ColumnsType } from 'antd/es/table';
|
|
2
|
+
/** 与 user_key 持久化一致的列配置项(支持多级 children) */
|
|
3
|
+
export type TableColumnConfigItem = {
|
|
4
|
+
id: string;
|
|
5
|
+
hidden?: boolean;
|
|
6
|
+
width?: number;
|
|
7
|
+
children?: TableColumnConfigItem[];
|
|
8
|
+
};
|
|
9
|
+
export type TableColumnConfigFetcher = (tableName: string) => Promise<TableColumnConfigItem[] | null | undefined>;
|
|
10
|
+
export type TableColumnConfigSaver = (tableName: string, items: TableColumnConfigItem[]) => Promise<void>;
|
|
11
|
+
export type ColumnConfigPanelItem = {
|
|
12
|
+
id: string;
|
|
13
|
+
title: unknown;
|
|
14
|
+
label: string;
|
|
15
|
+
hidden: boolean;
|
|
16
|
+
children?: ColumnConfigPanelItem[];
|
|
17
|
+
};
|
|
18
|
+
export type ColumnTypeAny = ColumnType<Record<string, unknown>> & {
|
|
19
|
+
key?: React.Key;
|
|
20
|
+
children?: ColumnsType<Record<string, unknown>>;
|
|
21
|
+
fixed?: 'left' | 'right' | boolean;
|
|
22
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ColumnsType } from 'antd/es/table';
|
|
2
|
+
import { ColumnConfigPanelItem, TableColumnConfigItem } from './columnConfigTypes';
|
|
3
|
+
/** 列配置齿轮列 key;不进面板 / 持久化 */
|
|
4
|
+
export declare const COLUMN_CONFIG_COL_KEY = "__marsun_column_config";
|
|
5
|
+
/** 叶子相对父级的短 id:TGCV_finished → finished;否则用完整 key */
|
|
6
|
+
export declare function shortChildId(parentId: string, childKey: string): string;
|
|
7
|
+
/** 从 columns 生成默认配置(全部显示,保持树结构;子 id 用短名) */
|
|
8
|
+
export declare function columnsToConfig(columns: ColumnsType<Record<string, unknown>> | undefined, parentId?: string): TableColumnConfigItem[];
|
|
9
|
+
/** columns → 面板树(含 title 文案);子 id 用短名与持久化一致 */
|
|
10
|
+
export declare function columnsToPanelItems(columns: ColumnsType<Record<string, unknown>> | undefined, hiddenIds?: Set<string>, parentId?: string): ColumnConfigPanelItem[];
|
|
11
|
+
/** 按配置重排列并过滤 hidden;子列相对父列解析 */
|
|
12
|
+
export declare function applyColumnConfig<RecordType extends object>(columns: ColumnsType<RecordType> | undefined, config: TableColumnConfigItem[] | null | undefined): ColumnsType<RecordType>;
|
|
13
|
+
/** 找最右可见叶子列路径(用于挂齿轮) */
|
|
14
|
+
export declare function findRightmostLeafPath(columns: ColumnsType<Record<string, unknown>> | undefined): number[] | null;
|
|
15
|
+
export declare function getColumnFixed(columns: ColumnsType<Record<string, unknown>> | undefined, path: number[]): 'left' | 'right' | boolean | undefined;
|
|
16
|
+
/** 在指定 path 的叶子 title 上注入节点 */
|
|
17
|
+
export declare function injectTitleAtPath<RecordType extends object>(columns: ColumnsType<RecordType>, path: number[], inject: (originalTitle: unknown) => unknown): ColumnsType<RecordType>;
|
|
18
|
+
/** 面板草稿 → 持久化 config(hidden 的也写入,保证顺序可恢复) */
|
|
19
|
+
export declare function panelItemsToConfig(items: ColumnConfigPanelItem[]): TableColumnConfigItem[];
|
|
20
|
+
/** 用已保存 config 给面板打 hidden 标记,并按 config 排序 */
|
|
21
|
+
export declare function mergePanelWithConfig(defaults: ColumnConfigPanelItem[], config: TableColumnConfigItem[] | null | undefined): ColumnConfigPanelItem[];
|
|
22
|
+
export declare function splitVisibleHidden(items: ColumnConfigPanelItem[]): {
|
|
23
|
+
visible: ColumnConfigPanelItem[];
|
|
24
|
+
hidden: ColumnConfigPanelItem[];
|
|
25
|
+
};
|