@hkyhy/marsun-components-core 0.1.34 → 0.1.35
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/Icons/index.d.ts +2 -1
- package/dist/components/Icons/index.js +158 -155
- package/dist/components/Icons/index.js.map +1 -1
- package/dist/components/Table/ColumnConfigPanel.js +164 -137
- package/dist/components/Table/ColumnConfigPanel.js.map +1 -1
- package/dist/components/Table/Table.d.ts +26 -6
- package/dist/components/Table/Table.js +313 -100
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Table/columnConfig.module.scss.js +32 -28
- package/dist/components/Table/columnConfig.module.scss.js.map +1 -1
- package/dist/components/Table/columnConfigUtils.d.ts +8 -1
- package/dist/components/Table/columnConfigUtils.js +114 -84
- package/dist/components/Table/columnConfigUtils.js.map +1 -1
- package/dist/components/Table/index.d.ts +2 -2
- package/dist/components/Table/style.module.scss.js +16 -3
- package/dist/components/Table/style.module.scss.js.map +1 -1
- package/dist/components/Table/tablePrefsTypes.d.ts +12 -0
- package/dist/components/Table/tablePrefsTypes.js +7 -0
- package/dist/components/Table/tablePrefsTypes.js.map +1 -0
- package/dist/components/Table/tablePrefsUtils.d.ts +11 -0
- package/dist/components/Table/tablePrefsUtils.js +66 -0
- package/dist/components/Table/tablePrefsUtils.js.map +1 -0
- package/dist/index.js +384 -372
- 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
|
@@ -1,117 +1,330 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { useRef as
|
|
3
|
-
import { Table as
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { columnsToConfig as
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
import { jsxs as A, jsx as d } from "react/jsx-runtime";
|
|
2
|
+
import { useRef as Nt, useState as U, useEffect as ot, useMemo as y, useCallback as O } from "react";
|
|
3
|
+
import { Space as kt, Button as dt, Tooltip as pt, Table as Et } from "antd";
|
|
4
|
+
import Q from "classnames";
|
|
5
|
+
import { Eye as ht } from "../Icons/index.js";
|
|
6
|
+
import { ColumnConfigTrigger as jt } from "./ColumnConfigPanel.js";
|
|
7
|
+
import { applyColumnConfig as Bt, columnsToPanelItems as $t, columnsToConfig as Dt, hideColumnAtPath as Mt, COLUMN_CONFIG_COL_KEY as Ut, isInternalColumnKey as yt, shortChildId as Gt } from "./columnConfigUtils.js";
|
|
8
|
+
import { FLEX_SPACER_COL_KEY as fn } from "./columnConfigUtils.js";
|
|
9
|
+
import { emptyTablePrefs as Pt } from "./tablePrefsTypes.js";
|
|
10
|
+
import { normalizeHiddenRowKeys as V, mergeTablePrefs as mt, applyHiddenRows as Xt } from "./tablePrefsUtils.js";
|
|
11
|
+
import { parseTablePrefs as hn, serializeTablePrefs as yn } from "./tablePrefsUtils.js";
|
|
12
|
+
import g from "./style.module.scss.js";
|
|
13
|
+
import ft from "./columnConfig.module.scss.js";
|
|
14
|
+
import Yt from "../Empty/Empty.js";
|
|
15
|
+
const qt = { x: "max-content" }, I = 40, Ct = 64;
|
|
16
|
+
function Jt(n) {
|
|
17
|
+
return `共 ${n} 项`;
|
|
14
18
|
}
|
|
15
|
-
function
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
function gt(n) {
|
|
20
|
+
var i;
|
|
21
|
+
if (!(n != null && n.length)) return 0;
|
|
22
|
+
let l = 0;
|
|
23
|
+
for (const r of n) {
|
|
24
|
+
const u = r.key != null ? String(r.key) : "";
|
|
25
|
+
if (u && yt(u)) continue;
|
|
26
|
+
if ((i = r.children) != null && i.length) {
|
|
27
|
+
l += gt(r.children);
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
const s = r.width;
|
|
31
|
+
typeof s == "number" && Number.isFinite(s) && s > 0 ? l += s : l += Ct;
|
|
32
|
+
}
|
|
33
|
+
return l;
|
|
34
|
+
}
|
|
35
|
+
function Qt(n, l) {
|
|
36
|
+
return n.key != null && String(n.key) !== "" ? String(n.key) : n.dataIndex != null ? Array.isArray(n.dataIndex) ? n.dataIndex.join(".") : String(n.dataIndex) : `__col_${l}`;
|
|
37
|
+
}
|
|
38
|
+
function Vt(n, l, i) {
|
|
39
|
+
if (typeof i == "function") return String(i(n, l));
|
|
40
|
+
if (typeof i == "string" && i) {
|
|
41
|
+
const r = n[i];
|
|
42
|
+
if (r != null && r !== "") return String(r);
|
|
43
|
+
}
|
|
44
|
+
return String(l);
|
|
45
|
+
}
|
|
46
|
+
function Lt(n, l, i, r = []) {
|
|
47
|
+
return n.map((u, s) => {
|
|
48
|
+
var W;
|
|
49
|
+
const L = Qt(u, s);
|
|
50
|
+
if (yt(L)) return u;
|
|
51
|
+
const h = i ? Gt(i, L) : L, a = [...r, h], F = /* @__PURE__ */ A("span", { className: g.headerTitleWithEye, children: [
|
|
52
|
+
/* @__PURE__ */ d("span", { className: g.headerTitleText, children: u.title }),
|
|
53
|
+
/* @__PURE__ */ d(pt, { title: "隐藏此列", children: /* @__PURE__ */ d(
|
|
54
|
+
"button",
|
|
55
|
+
{
|
|
56
|
+
type: "button",
|
|
57
|
+
className: g.headerEyeBtn,
|
|
58
|
+
"aria-label": "隐藏此列",
|
|
59
|
+
onClick: (v) => {
|
|
60
|
+
v.stopPropagation(), l(a);
|
|
61
|
+
},
|
|
62
|
+
children: /* @__PURE__ */ d(ht, { size: 12 })
|
|
63
|
+
}
|
|
64
|
+
) })
|
|
65
|
+
] });
|
|
66
|
+
return (W = u.children) != null && W.length ? {
|
|
67
|
+
...u,
|
|
68
|
+
title: F,
|
|
69
|
+
children: Lt(
|
|
70
|
+
u.children,
|
|
71
|
+
l,
|
|
72
|
+
L,
|
|
73
|
+
a
|
|
74
|
+
)
|
|
75
|
+
} : { ...u, title: F };
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
function on({
|
|
79
|
+
className: n,
|
|
80
|
+
style: l,
|
|
81
|
+
scroll: i,
|
|
82
|
+
pagination: r,
|
|
83
|
+
locale: u,
|
|
84
|
+
columns: s,
|
|
85
|
+
dataSource: L,
|
|
86
|
+
rowKey: h,
|
|
87
|
+
tableName: a,
|
|
88
|
+
columnConfigEnabled: F,
|
|
89
|
+
fetchColumnConfig: W,
|
|
90
|
+
saveColumnConfig: v,
|
|
91
|
+
onColumnConfigChange: N,
|
|
92
|
+
fetchTablePrefs: k,
|
|
93
|
+
saveTablePrefs: G,
|
|
94
|
+
onTablePrefsChange: E,
|
|
95
|
+
rowConfigEnabled: _ = !1,
|
|
96
|
+
lockedRowKeys: m,
|
|
97
|
+
hiddenRowKeys: H,
|
|
98
|
+
onHiddenRowKeysChange: j,
|
|
99
|
+
rowHideSelectedKeys: P,
|
|
100
|
+
rowConfigToolbar: B,
|
|
101
|
+
rowSelection: f,
|
|
102
|
+
...St
|
|
27
103
|
}) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
104
|
+
var lt;
|
|
105
|
+
const x = F ?? !!a, X = Nt(s), [c, $] = U(null), [Z, Wt] = U(!1), [R, Y] = U(!x), [K, _t] = U([]);
|
|
106
|
+
ot(() => {
|
|
107
|
+
X.current = s;
|
|
108
|
+
}, [s]), ot(() => {
|
|
109
|
+
if (!x || !a || !(k || W)) {
|
|
110
|
+
Y(!0);
|
|
34
111
|
return;
|
|
35
112
|
}
|
|
36
|
-
let
|
|
37
|
-
return
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
113
|
+
let t = !1;
|
|
114
|
+
return Y(!1), (async () => {
|
|
115
|
+
var p;
|
|
116
|
+
try {
|
|
117
|
+
if (k) {
|
|
118
|
+
const o = await k(a);
|
|
119
|
+
t || $((p = o == null ? void 0 : o.columns) != null && p.length ? o : null);
|
|
120
|
+
} else if (W) {
|
|
121
|
+
const o = await W(a);
|
|
122
|
+
t || $(o != null && o.length ? Pt(o) : null);
|
|
123
|
+
}
|
|
124
|
+
} catch {
|
|
125
|
+
t || $(null);
|
|
126
|
+
} finally {
|
|
127
|
+
t || Y(!0);
|
|
128
|
+
}
|
|
129
|
+
})(), () => {
|
|
130
|
+
t = !0;
|
|
45
131
|
};
|
|
46
|
-
}, [
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
132
|
+
}, [x, a, k, W]);
|
|
133
|
+
const D = (lt = c == null ? void 0 : c.columns) != null && lt.length ? c.columns : null, S = y(() => H !== void 0 ? V(H, m) : V(K, m), [H, K, m]), b = O(
|
|
134
|
+
(t) => {
|
|
135
|
+
const e = V(t, m);
|
|
136
|
+
H === void 0 && _t(e), j == null || j(e);
|
|
137
|
+
},
|
|
138
|
+
[H, m, j]
|
|
139
|
+
), M = O(
|
|
140
|
+
async (t) => {
|
|
141
|
+
if ($(t), E == null || E(t), N == null || N(t.columns), a && G) {
|
|
142
|
+
await G(a, t);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
a && v && await v(a, t.columns);
|
|
146
|
+
},
|
|
147
|
+
[a, G, v, E, N]
|
|
148
|
+
), w = y(() => {
|
|
149
|
+
const t = s || [];
|
|
150
|
+
return x ? Bt(t, D) : t;
|
|
151
|
+
}, [s, x, D]), tt = y(
|
|
152
|
+
() => $t(
|
|
153
|
+
X.current || s
|
|
53
154
|
),
|
|
54
155
|
// eslint-disable-next-line react-hooks/exhaustive-deps -- 随 columns 结构变
|
|
55
|
-
[
|
|
56
|
-
),
|
|
57
|
-
async (
|
|
58
|
-
|
|
156
|
+
[s]
|
|
157
|
+
), nt = O(
|
|
158
|
+
async (t) => {
|
|
159
|
+
await M(mt(c, { columns: t }));
|
|
59
160
|
},
|
|
60
|
-
[
|
|
61
|
-
),
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
),
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
161
|
+
[c, M]
|
|
162
|
+
), et = O(
|
|
163
|
+
async (t) => {
|
|
164
|
+
var p;
|
|
165
|
+
if (!t.length) return;
|
|
166
|
+
const e = (p = c == null ? void 0 : c.columns) != null && p.length && c.columns.length ? c.columns : Dt(
|
|
167
|
+
X.current || s
|
|
168
|
+
);
|
|
169
|
+
await M(mt(c, { columns: Mt(e, t) }));
|
|
170
|
+
},
|
|
171
|
+
[c, s, M]
|
|
172
|
+
), xt = O(() => {
|
|
173
|
+
const t = (P || []).map(String);
|
|
174
|
+
t.length && b([...S, ...t]);
|
|
175
|
+
}, [P, S, b]), Ot = O(() => {
|
|
176
|
+
b([]);
|
|
177
|
+
}, [b]), rt = O(
|
|
178
|
+
(t) => {
|
|
179
|
+
const e = String(t);
|
|
180
|
+
e && ((m || []).map(String).includes(e) || b([...S, e]));
|
|
181
|
+
},
|
|
182
|
+
[m, S, b]
|
|
183
|
+
), q = y(() => {
|
|
184
|
+
let t = w;
|
|
185
|
+
if (x && R) {
|
|
186
|
+
t = Lt(t, (p) => {
|
|
187
|
+
et(p);
|
|
188
|
+
});
|
|
189
|
+
const e = {
|
|
190
|
+
key: Ut,
|
|
191
|
+
width: I,
|
|
192
|
+
fixed: "right",
|
|
193
|
+
align: "center",
|
|
194
|
+
className: ft.configCol,
|
|
195
|
+
onHeaderCell: () => ({
|
|
196
|
+
className: ft.configColHeader,
|
|
197
|
+
style: {
|
|
198
|
+
width: I,
|
|
199
|
+
minWidth: I,
|
|
200
|
+
maxWidth: I
|
|
201
|
+
}
|
|
202
|
+
}),
|
|
203
|
+
onCell: () => ({
|
|
204
|
+
style: {
|
|
205
|
+
width: I,
|
|
206
|
+
minWidth: I,
|
|
207
|
+
maxWidth: I
|
|
208
|
+
}
|
|
209
|
+
}),
|
|
210
|
+
title: /* @__PURE__ */ d(
|
|
211
|
+
jt,
|
|
212
|
+
{
|
|
213
|
+
open: Z,
|
|
214
|
+
onOpenChange: Wt,
|
|
215
|
+
defaultItems: tt,
|
|
216
|
+
savedConfig: D,
|
|
217
|
+
onConfirm: nt
|
|
218
|
+
}
|
|
219
|
+
),
|
|
220
|
+
render: () => null
|
|
221
|
+
};
|
|
222
|
+
t = [...t, e];
|
|
223
|
+
}
|
|
224
|
+
return t;
|
|
83
225
|
}, [
|
|
84
|
-
o,
|
|
85
|
-
g,
|
|
86
|
-
p,
|
|
87
226
|
x,
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
227
|
+
R,
|
|
228
|
+
w,
|
|
229
|
+
Z,
|
|
230
|
+
tt,
|
|
231
|
+
D,
|
|
232
|
+
nt,
|
|
233
|
+
et
|
|
234
|
+
]), It = y(() => _ ? Xt(L, S, typeof h == "function" || typeof h == "string" ? h : void 0, m) : L, [_, L, S, h, m]), bt = r === !1 ? !1 : {
|
|
92
235
|
showSizeChanger: !0,
|
|
93
|
-
showTotal:
|
|
94
|
-
...
|
|
95
|
-
},
|
|
96
|
-
emptyText: /* @__PURE__ */
|
|
97
|
-
...
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
|
|
236
|
+
showTotal: Jt,
|
|
237
|
+
...r && typeof r == "object" ? r : {}
|
|
238
|
+
}, vt = {
|
|
239
|
+
emptyText: /* @__PURE__ */ d(Yt, { iconType: "simple", description: "暂无数据" }),
|
|
240
|
+
...u
|
|
241
|
+
}, C = y(() => new Set((m || []).map(String)), [m]), Ht = _ && (P || []).some((t) => {
|
|
242
|
+
const e = String(t);
|
|
243
|
+
return e && !C.has(e);
|
|
244
|
+
}), st = _ && S.length > 0, Tt = _ && B !== !1 ? /* @__PURE__ */ A(
|
|
245
|
+
kt,
|
|
101
246
|
{
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
247
|
+
size: "small",
|
|
248
|
+
className: Q("marsun-table-row-config", g["marsun-table-row-config"]),
|
|
249
|
+
children: [
|
|
250
|
+
/* @__PURE__ */ d(dt, { size: "small", disabled: !Ht, onClick: xt, children: "隐藏选中行" }),
|
|
251
|
+
/* @__PURE__ */ A(dt, { size: "small", disabled: !st, onClick: Ot, children: [
|
|
252
|
+
"恢复隐藏行",
|
|
253
|
+
st ? `(${S.length})` : ""
|
|
254
|
+
] })
|
|
255
|
+
]
|
|
108
256
|
}
|
|
109
|
-
)
|
|
257
|
+
) : null, it = B === !1 ? null : B !== void 0 ? B : Tt, T = y(() => {
|
|
258
|
+
if (!f || !_) return f;
|
|
259
|
+
const t = typeof f.columnWidth == "number" ? f.columnWidth : 48;
|
|
260
|
+
return {
|
|
261
|
+
...f,
|
|
262
|
+
columnWidth: t + 20,
|
|
263
|
+
renderCell: (e, p, o, at) => {
|
|
264
|
+
var ut;
|
|
265
|
+
const At = ((ut = f.renderCell) == null ? void 0 : ut.call(f, e, p, o, at)) ?? at, ct = Vt(p, o, h), J = C.has(ct);
|
|
266
|
+
return /* @__PURE__ */ A("span", { className: g.rowSelectWithEye, children: [
|
|
267
|
+
At,
|
|
268
|
+
/* @__PURE__ */ d(pt, { title: J ? "主对标不可隐藏" : "隐藏此行", children: /* @__PURE__ */ d(
|
|
269
|
+
"button",
|
|
270
|
+
{
|
|
271
|
+
type: "button",
|
|
272
|
+
className: g.rowEyeBtn,
|
|
273
|
+
"aria-label": J ? "主对标不可隐藏" : "隐藏此行",
|
|
274
|
+
disabled: J,
|
|
275
|
+
onClick: (Ft) => {
|
|
276
|
+
Ft.stopPropagation(), rt(ct);
|
|
277
|
+
},
|
|
278
|
+
children: /* @__PURE__ */ d(ht, { size: 14 })
|
|
279
|
+
}
|
|
280
|
+
) })
|
|
281
|
+
] });
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
}, [f, _, h, C, rt]), z = y(() => {
|
|
285
|
+
const t = gt(q);
|
|
286
|
+
if (!t) return 0;
|
|
287
|
+
const e = T ? typeof T.columnWidth == "number" ? T.columnWidth : 48 : 0;
|
|
288
|
+
return t + e;
|
|
289
|
+
}, [q, T]), zt = y(() => {
|
|
290
|
+
const t = i === void 0 ? { ...qt } : { ...i };
|
|
291
|
+
return z > 0 ? { ...t, x: z } : t;
|
|
292
|
+
}, [i, z]);
|
|
293
|
+
return /* @__PURE__ */ A("div", { className: Q("marsun-table-shell", g["marsun-table-shell"]), children: [
|
|
294
|
+
it ? /* @__PURE__ */ d("div", { className: g["marsun-table-toolbar"], children: it }) : null,
|
|
295
|
+
/* @__PURE__ */ d(
|
|
296
|
+
Et,
|
|
297
|
+
{
|
|
298
|
+
className: Q("marsun-table", g["marsun-table"], n),
|
|
299
|
+
style: {
|
|
300
|
+
...l,
|
|
301
|
+
...z > 0 ? { "--marsun-table-scroll-x": `${z}px` } : null
|
|
302
|
+
},
|
|
303
|
+
scroll: zt,
|
|
304
|
+
pagination: bt,
|
|
305
|
+
locale: vt,
|
|
306
|
+
columns: q,
|
|
307
|
+
dataSource: It,
|
|
308
|
+
rowKey: h,
|
|
309
|
+
rowSelection: T,
|
|
310
|
+
...St
|
|
311
|
+
}
|
|
312
|
+
)
|
|
313
|
+
] });
|
|
110
314
|
}
|
|
111
315
|
export {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
316
|
+
Ut as COLUMN_CONFIG_COL_KEY,
|
|
317
|
+
fn as FLEX_SPACER_COL_KEY,
|
|
318
|
+
Bt as applyColumnConfig,
|
|
319
|
+
Xt as applyHiddenRows,
|
|
320
|
+
Dt as columnsToConfig,
|
|
321
|
+
on as default,
|
|
322
|
+
Pt as emptyTablePrefs,
|
|
323
|
+
Mt as hideColumnAtPath,
|
|
324
|
+
yt as isInternalColumnKey,
|
|
325
|
+
mt as mergeTablePrefs,
|
|
326
|
+
V as normalizeHiddenRowKeys,
|
|
327
|
+
hn as parseTablePrefs,
|
|
328
|
+
yn as serializeTablePrefs
|
|
116
329
|
};
|
|
117
330
|
//# sourceMappingURL=Table.js.map
|
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
1
|
+
{"version":3,"file":"Table.js","sources":["../../../src/components/Table/Table.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type Key,\n type ReactNode,\n} from 'react';\nimport { Button, Space, Table as AntTable, Tooltip } 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 { Eye } from '../Icons';\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 FLEX_SPACER_COL_KEY,\n hideColumnAtPath,\n isInternalColumnKey,\n shortChildId,\n type ColumnTypeAny,\n} from './columnConfigUtils';\nimport type { TablePrefs, TablePrefsFetcher, TablePrefsSaver } from './tablePrefsTypes';\nimport { emptyTablePrefs } from './tablePrefsTypes';\nimport { applyHiddenRows, mergeTablePrefs, normalizeHiddenRowKeys } from './tablePrefsUtils';\nimport styles from './style.module.scss';\nimport gearStyles from './columnConfig.module.scss';\n\nexport type { TableColumnConfigItem, TableColumnConfigFetcher, TableColumnConfigSaver };\nexport type { TablePrefs, TablePrefsFetcher, TablePrefsSaver };\n\nexport type TableProps<RecordType extends object = Record<string, unknown>> =\n AntTableProps<RecordType> & {\n /** 稳定偏好 key;业务列表必填 */\n tableName?: string;\n /** 是否启用「编辑表格」列配置;默认 !!tableName */\n columnConfigEnabled?: boolean;\n /** @deprecated 优先用 fetchTablePrefs;仍支持仅列配置 */\n fetchColumnConfig?: TableColumnConfigFetcher;\n /** @deprecated 优先用 saveTablePrefs */\n saveColumnConfig?: TableColumnConfigSaver;\n onColumnConfigChange?: (items: TableColumnConfigItem[]) => void;\n /** 读写 TablePrefs(仅 columns,经 user_key) */\n fetchTablePrefs?: TablePrefsFetcher;\n saveTablePrefs?: TablePrefsSaver;\n onTablePrefsChange?: (prefs: TablePrefs) => void;\n /** 启用行隐藏(会话内 state,不进 user_key);默认 false */\n rowConfigEnabled?: boolean;\n /** 不可隐藏的行 key(如主对标) */\n lockedRowKeys?: Key[];\n /** 受控隐藏行;不传则用组件内部会话 state */\n hiddenRowKeys?: Key[];\n onHiddenRowKeysChange?: (keys: string[]) => void;\n /** 行隐藏工具条:传入当前勾选 key 以启用「隐藏选中行」 */\n rowHideSelectedKeys?: Key[];\n /** 自定义行隐藏工具条;默认内置按钮 */\n rowConfigToolbar?: ReactNode | false;\n };\n\nconst DEFAULT_SCROLL = { x: 'max-content' as const };\nconst CONFIG_COL_WIDTH = 40;\n/** 无 width 的弹性列计入 scroll 的最小占位,避免多列时被压扁 */\nconst AUTO_COL_SCROLL_FALLBACK = 64;\n\nfunction defaultShowTotal(total: number): string {\n return `共 ${total} 项`;\n}\n\n/** 可见叶子列 width 合计;无 width 的列用 fallback(弹性列) */\nfunction sumLeafColumnWidths(columns: ColumnsType<unknown> | undefined): number {\n if (!columns?.length) return 0;\n let sum = 0;\n for (const col of columns as ColumnTypeAny[]) {\n const key = col.key != null ? String(col.key) : '';\n if (key && isInternalColumnKey(key)) continue;\n if (col.children?.length) {\n sum += sumLeafColumnWidths(col.children as ColumnsType<unknown>);\n continue;\n }\n const w = col.width;\n if (typeof w === 'number' && Number.isFinite(w) && w > 0) sum += w;\n else sum += AUTO_COL_SCROLL_FALLBACK;\n }\n return sum;\n}\n\nfunction colFullKey(col: ColumnTypeAny, index: number): string {\n if (col.key != null && String(col.key) !== '') return String(col.key);\n if (col.dataIndex != null) {\n return Array.isArray(col.dataIndex) ? col.dataIndex.join('.') : String(col.dataIndex);\n }\n return `__col_${index}`;\n}\n\nfunction resolveRecordKey<RecordType extends object>(\n row: RecordType,\n index: number,\n rowKey: AntTableProps<RecordType>['rowKey'],\n): string {\n if (typeof rowKey === 'function') return String(rowKey(row, index));\n if (typeof rowKey === 'string' && rowKey) {\n const v = (row as Record<string, unknown>)[rowKey];\n if (v != null && v !== '') return String(v);\n }\n return String(index);\n}\n\n/** 多级表头 title 注入眼睛;path 为 TableColumnConfigItem id 路径 */\nfunction injectHeaderHideEyes<RecordType extends object>(\n columns: ColumnsType<RecordType>,\n onHidePath: (path: string[]) => void,\n parentFullKey?: string,\n path: string[] = [],\n): ColumnsType<RecordType> {\n return (columns as ColumnTypeAny[]).map((col, i) => {\n const full = colFullKey(col, i);\n if (isInternalColumnKey(full)) return col as ColumnType<RecordType>;\n const configId = parentFullKey ? shortChildId(parentFullKey, full) : full;\n const nextPath = [...path, configId];\n const titleNode = (\n <span className={styles.headerTitleWithEye}>\n <span className={styles.headerTitleText}>{col.title as ReactNode}</span>\n <Tooltip title=\"隐藏此列\">\n <button\n type=\"button\"\n className={styles.headerEyeBtn}\n aria-label=\"隐藏此列\"\n onClick={(e) => {\n e.stopPropagation();\n onHidePath(nextPath);\n }}\n >\n <Eye size={12} />\n </button>\n </Tooltip>\n </span>\n );\n if (col.children?.length) {\n return {\n ...col,\n title: titleNode,\n children: injectHeaderHideEyes(\n col.children as ColumnsType<RecordType>,\n onHidePath,\n full,\n nextPath,\n ),\n } as ColumnType<RecordType>;\n }\n return { ...col, title: titleNode } as ColumnType<RecordType>;\n }) as ColumnsType<RecordType>;\n}\n\n/**\n * 基于 antd Table 的列表表格包装。\n * 列偏好经 user_key;行隐藏仅会话 state,不进 user_key。\n */\nfunction Table<RecordType extends object = Record<string, unknown>>({\n className,\n style,\n scroll,\n pagination,\n locale,\n columns,\n dataSource,\n rowKey,\n tableName,\n columnConfigEnabled,\n fetchColumnConfig,\n saveColumnConfig,\n onColumnConfigChange,\n fetchTablePrefs,\n saveTablePrefs,\n onTablePrefsChange,\n rowConfigEnabled = false,\n lockedRowKeys,\n hiddenRowKeys: hiddenRowKeysProp,\n onHiddenRowKeysChange,\n rowHideSelectedKeys,\n rowConfigToolbar,\n rowSelection,\n ...rest\n}: TableProps<RecordType>) {\n const enableConfig = columnConfigEnabled ?? Boolean(tableName);\n const defaultColumnsRef = useRef(columns);\n const [prefs, setPrefs] = useState<TablePrefs | null>(null);\n const [configOpen, setConfigOpen] = useState(false);\n const [loaded, setLoaded] = useState(!enableConfig);\n /** 行隐藏:仅前端会话,不写 user_key */\n const [localHiddenRowKeys, setLocalHiddenRowKeys] = useState<string[]>([]);\n\n useEffect(() => {\n defaultColumnsRef.current = columns;\n }, [columns]);\n\n useEffect(() => {\n if (!enableConfig || !tableName || !(fetchTablePrefs || fetchColumnConfig)) {\n setLoaded(true);\n return;\n }\n let cancelled = false;\n setLoaded(false);\n const load = async () => {\n try {\n if (fetchTablePrefs) {\n const next = await fetchTablePrefs(tableName);\n if (!cancelled) setPrefs(next?.columns?.length ? next : null);\n } else if (fetchColumnConfig) {\n const items = await fetchColumnConfig(tableName);\n if (!cancelled) setPrefs(items?.length ? emptyTablePrefs(items) : null);\n }\n } catch {\n if (!cancelled) setPrefs(null);\n } finally {\n if (!cancelled) setLoaded(true);\n }\n };\n void load();\n return () => {\n cancelled = true;\n };\n }, [enableConfig, tableName, fetchTablePrefs, fetchColumnConfig]);\n\n const savedConfig = prefs?.columns?.length ? prefs.columns : null;\n\n const resolvedHiddenKeys = useMemo(() => {\n if (hiddenRowKeysProp !== undefined) {\n return normalizeHiddenRowKeys(hiddenRowKeysProp, lockedRowKeys);\n }\n return normalizeHiddenRowKeys(localHiddenRowKeys, lockedRowKeys);\n }, [hiddenRowKeysProp, localHiddenRowKeys, lockedRowKeys]);\n\n const setHiddenRows = useCallback(\n (keys: string[]) => {\n const next = normalizeHiddenRowKeys(keys, lockedRowKeys);\n if (hiddenRowKeysProp === undefined) {\n setLocalHiddenRowKeys(next);\n }\n onHiddenRowKeysChange?.(next);\n },\n [hiddenRowKeysProp, lockedRowKeys, onHiddenRowKeysChange],\n );\n\n const persistColumnPrefs = useCallback(\n async (next: TablePrefs) => {\n setPrefs(next);\n onTablePrefsChange?.(next);\n onColumnConfigChange?.(next.columns);\n if (tableName && saveTablePrefs) {\n await saveTablePrefs(tableName, next);\n return;\n }\n if (tableName && saveColumnConfig) {\n await saveColumnConfig(tableName, next.columns);\n }\n },\n [tableName, saveTablePrefs, saveColumnConfig, onTablePrefsChange, onColumnConfigChange],\n );\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 await persistColumnPrefs(mergeTablePrefs(prefs, { columns: items }));\n },\n [prefs, persistColumnPrefs],\n );\n\n const handleHideColumnPath = useCallback(\n async (path: string[]) => {\n if (!path.length) return;\n const base =\n prefs?.columns?.length && prefs.columns.length\n ? prefs.columns\n : columnsToConfig(\n (defaultColumnsRef.current || columns) as ColumnsType<Record<string, unknown>>,\n );\n await persistColumnPrefs(mergeTablePrefs(prefs, { columns: hideColumnAtPath(base, path) }));\n },\n [prefs, columns, persistColumnPrefs],\n );\n\n const handleHideSelected = useCallback(() => {\n const selected = (rowHideSelectedKeys || []).map(String);\n if (!selected.length) return;\n setHiddenRows([...resolvedHiddenKeys, ...selected]);\n }, [rowHideSelectedKeys, resolvedHiddenKeys, setHiddenRows]);\n\n const handleRestoreHidden = useCallback(() => {\n setHiddenRows([]);\n }, [setHiddenRows]);\n\n const handleHideOneRow = useCallback(\n (key: Key) => {\n const s = String(key);\n if (!s) return;\n if ((lockedRowKeys || []).map(String).includes(s)) return;\n setHiddenRows([...resolvedHiddenKeys, s]);\n },\n [lockedRowKeys, resolvedHiddenKeys, setHiddenRows],\n );\n\n const displayColumns = useMemo(() => {\n let cols = appliedColumns;\n if (enableConfig && loaded) {\n cols = injectHeaderHideEyes(cols, (path) => {\n void handleHideColumnPath(path);\n });\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: () => ({\n className: gearStyles.configColHeader,\n style: {\n width: CONFIG_COL_WIDTH,\n minWidth: CONFIG_COL_WIDTH,\n maxWidth: CONFIG_COL_WIDTH,\n },\n }),\n onCell: () => ({\n style: {\n width: CONFIG_COL_WIDTH,\n minWidth: CONFIG_COL_WIDTH,\n maxWidth: CONFIG_COL_WIDTH,\n },\n }),\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 cols = [...cols, gearCol] as ColumnsType<RecordType>;\n }\n return cols;\n }, [\n enableConfig,\n loaded,\n appliedColumns,\n configOpen,\n defaultPanelItems,\n savedConfig,\n handleConfirm,\n handleHideColumnPath,\n ]);\n\n const displayDataSource = useMemo(() => {\n if (!rowConfigEnabled) return dataSource;\n const keyFn = typeof rowKey === 'function' || typeof rowKey === 'string' ? rowKey : undefined;\n return applyHiddenRows(dataSource, resolvedHiddenKeys, keyFn, lockedRowKeys);\n }, [rowConfigEnabled, dataSource, resolvedHiddenKeys, rowKey, lockedRowKeys]);\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 const lockedSet = useMemo(() => new Set((lockedRowKeys || []).map(String)), [lockedRowKeys]);\n const canHideSelected =\n rowConfigEnabled &&\n (rowHideSelectedKeys || []).some((k) => {\n const s = String(k);\n return s && !lockedSet.has(s);\n });\n const hasHidden = rowConfigEnabled && resolvedHiddenKeys.length > 0;\n\n const defaultToolbar =\n rowConfigEnabled && rowConfigToolbar !== false ? (\n <Space\n size=\"small\"\n className={classNames('marsun-table-row-config', styles['marsun-table-row-config'])}\n >\n <Button size=\"small\" disabled={!canHideSelected} onClick={handleHideSelected}>\n 隐藏选中行\n </Button>\n <Button size=\"small\" disabled={!hasHidden} onClick={handleRestoreHidden}>\n 恢复隐藏行{hasHidden ? `(${resolvedHiddenKeys.length})` : ''}\n </Button>\n </Space>\n ) : null;\n\n const toolbarNode =\n rowConfigToolbar === false\n ? null\n : rowConfigToolbar !== undefined\n ? rowConfigToolbar\n : defaultToolbar;\n\n const mergedRowSelection = useMemo(() => {\n if (!rowSelection) return rowSelection;\n if (!rowConfigEnabled) return rowSelection;\n const baseWidth = typeof rowSelection.columnWidth === 'number' ? rowSelection.columnWidth : 48;\n return {\n ...rowSelection,\n columnWidth: baseWidth + 20,\n renderCell: (checked, record, index, originNode) => {\n const fromParent = rowSelection.renderCell?.(checked, record, index, originNode);\n const inner = (fromParent ?? originNode) as ReactNode;\n const key = resolveRecordKey(record as RecordType, index, rowKey);\n const locked = lockedSet.has(key);\n return (\n <span className={styles.rowSelectWithEye}>\n {inner}\n <Tooltip title={locked ? '主对标不可隐藏' : '隐藏此行'}>\n <button\n type=\"button\"\n className={styles.rowEyeBtn}\n aria-label={locked ? '主对标不可隐藏' : '隐藏此行'}\n disabled={locked}\n onClick={(e) => {\n e.stopPropagation();\n handleHideOneRow(key);\n }}\n >\n <Eye size={14} />\n </button>\n </Tooltip>\n </span>\n );\n },\n };\n }, [rowSelection, rowConfigEnabled, rowKey, lockedSet, handleHideOneRow]);\n\n const fittedScrollX = useMemo(() => {\n const colsW = sumLeafColumnWidths(displayColumns as ColumnsType<unknown>);\n if (!colsW) return 0;\n const selW = mergedRowSelection\n ? typeof mergedRowSelection.columnWidth === 'number'\n ? mergedRowSelection.columnWidth\n : 48\n : 0;\n return colsW + selW;\n }, [displayColumns, mergedRowSelection]);\n\n const mergedScroll = useMemo(() => {\n const base = scroll === undefined ? { ...DEFAULT_SCROLL } : { ...scroll };\n if (fittedScrollX > 0) {\n // 作为最小内容宽:多于容器则横滚;少于容器时由 CSS width:100% 铺满\n return { ...base, x: fittedScrollX };\n }\n return base;\n }, [scroll, fittedScrollX]);\n\n return (\n <div className={classNames('marsun-table-shell', styles['marsun-table-shell'])}>\n {toolbarNode ? <div className={styles['marsun-table-toolbar']}>{toolbarNode}</div> : null}\n <AntTable<RecordType>\n className={classNames('marsun-table', styles['marsun-table'], className)}\n style={\n {\n ...style,\n ...(fittedScrollX > 0\n ? ({ ['--marsun-table-scroll-x']: `${fittedScrollX}px` } as CSSProperties)\n : null),\n } as CSSProperties\n }\n scroll={mergedScroll}\n pagination={mergedPagination}\n locale={mergedLocale}\n columns={displayColumns}\n dataSource={displayDataSource}\n rowKey={rowKey}\n rowSelection={mergedRowSelection}\n {...rest}\n />\n </div>\n );\n}\n\nexport default Table;\n\nexport {\n columnsToConfig,\n applyColumnConfig,\n COLUMN_CONFIG_COL_KEY,\n FLEX_SPACER_COL_KEY,\n isInternalColumnKey,\n hideColumnAtPath,\n};\nexport {\n parseTablePrefs,\n serializeTablePrefs,\n mergeTablePrefs,\n applyHiddenRows,\n normalizeHiddenRowKeys,\n} from './tablePrefsUtils';\nexport { emptyTablePrefs } from './tablePrefsTypes';\n"],"names":["DEFAULT_SCROLL","CONFIG_COL_WIDTH","AUTO_COL_SCROLL_FALLBACK","defaultShowTotal","total","sumLeafColumnWidths","columns","sum","col","key","isInternalColumnKey","_a","w","colFullKey","index","resolveRecordKey","row","rowKey","v","injectHeaderHideEyes","onHidePath","parentFullKey","path","i","full","configId","shortChildId","nextPath","titleNode","jsxs","styles","jsx","Tooltip","e","Eye","Table","className","style","scroll","pagination","locale","dataSource","tableName","columnConfigEnabled","fetchColumnConfig","saveColumnConfig","onColumnConfigChange","fetchTablePrefs","saveTablePrefs","onTablePrefsChange","rowConfigEnabled","lockedRowKeys","hiddenRowKeysProp","onHiddenRowKeysChange","rowHideSelectedKeys","rowConfigToolbar","rowSelection","rest","enableConfig","defaultColumnsRef","useRef","prefs","setPrefs","useState","configOpen","setConfigOpen","loaded","setLoaded","localHiddenRowKeys","setLocalHiddenRowKeys","useEffect","cancelled","next","items","emptyTablePrefs","savedConfig","resolvedHiddenKeys","useMemo","normalizeHiddenRowKeys","setHiddenRows","useCallback","keys","persistColumnPrefs","appliedColumns","base","applyColumnConfig","defaultPanelItems","columnsToPanelItems","handleConfirm","mergeTablePrefs","handleHideColumnPath","columnsToConfig","hideColumnAtPath","handleHideSelected","selected","handleRestoreHidden","handleHideOneRow","s","displayColumns","cols","gearCol","COLUMN_CONFIG_COL_KEY","gearStyles","ColumnConfigTrigger","displayDataSource","applyHiddenRows","mergedPagination","mergedLocale","Empty","lockedSet","canHideSelected","k","hasHidden","defaultToolbar","Space","classNames","Button","toolbarNode","mergedRowSelection","baseWidth","checked","record","originNode","inner","locked","fittedScrollX","colsW","selW","mergedScroll","AntTable"],"mappings":"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"}
|
|
@@ -1,38 +1,42 @@
|
|
|
1
|
-
const
|
|
2
|
-
overlay:
|
|
1
|
+
const _ = "_overlay_14r0q_1", o = "_panel_14r0q_5", e = "_header_14r0q_13", t = "_title_14r0q_22", r = "_resetBtn_14r0q_28", l = "_collapse_14r0q_45", n = "_search_14r0q_60", s = "_list_14r0q_64", c = "_listItem_14r0q_77", a = "_row_14r0q_90", i = "_foldBtn_14r0q_102", q = "_foldSpacer_14r0q_126", f = "_grip_14r0q_131", d = "_label_14r0q_139", g = "_footer_14r0q_143", p = "_gearBtn_14r0q_151", B = "_configCol_14r0q_172", h = "_configColHeader_14r0q_176", C = {
|
|
2
|
+
overlay: _,
|
|
3
3
|
panel: o,
|
|
4
4
|
header: e,
|
|
5
|
-
title:
|
|
6
|
-
resetBtn:
|
|
7
|
-
collapse:
|
|
5
|
+
title: t,
|
|
6
|
+
resetBtn: r,
|
|
7
|
+
collapse: l,
|
|
8
8
|
search: n,
|
|
9
|
-
list:
|
|
10
|
-
listItem:
|
|
11
|
-
row:
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
list: s,
|
|
10
|
+
listItem: c,
|
|
11
|
+
row: a,
|
|
12
|
+
foldBtn: i,
|
|
13
|
+
foldSpacer: q,
|
|
14
|
+
grip: f,
|
|
15
|
+
label: d,
|
|
16
|
+
footer: g,
|
|
17
|
+
gearBtn: p,
|
|
18
|
+
configCol: B,
|
|
19
|
+
configColHeader: h
|
|
18
20
|
};
|
|
19
21
|
export {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
l as collapse,
|
|
23
|
+
B as configCol,
|
|
24
|
+
h as configColHeader,
|
|
25
|
+
C as default,
|
|
26
|
+
i as foldBtn,
|
|
27
|
+
q as foldSpacer,
|
|
28
|
+
g as footer,
|
|
29
|
+
p as gearBtn,
|
|
30
|
+
f as grip,
|
|
27
31
|
e as header,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
d as label,
|
|
33
|
+
s as list,
|
|
34
|
+
c as listItem,
|
|
35
|
+
_ as overlay,
|
|
32
36
|
o as panel,
|
|
33
|
-
|
|
34
|
-
|
|
37
|
+
r as resetBtn,
|
|
38
|
+
a as row,
|
|
35
39
|
n as search,
|
|
36
|
-
|
|
40
|
+
t as title
|
|
37
41
|
};
|
|
38
42
|
//# sourceMappingURL=columnConfig.module.scss.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"columnConfig.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"columnConfig.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { ColumnsType } from 'antd/es/table';
|
|
2
|
-
import { ColumnConfigPanelItem, TableColumnConfigItem } from './columnConfigTypes';
|
|
2
|
+
import { ColumnConfigPanelItem, ColumnTypeAny, TableColumnConfigItem } from './columnConfigTypes';
|
|
3
|
+
export type { ColumnTypeAny };
|
|
3
4
|
/** 列配置齿轮列 key;不进面板 / 持久化 */
|
|
4
5
|
export declare const COLUMN_CONFIG_COL_KEY = "__marsun_column_config";
|
|
6
|
+
/** 弹性占位列:吃掉表宽多余空间,避免固定列被撑开;不进面板 / 持久化 */
|
|
7
|
+
export declare const FLEX_SPACER_COL_KEY = "__marsun_flex_spacer";
|
|
8
|
+
/** 内部列(齿轮 / 弹性占位等):不进列配置面板与持久化 */
|
|
9
|
+
export declare function isInternalColumnKey(key: string): boolean;
|
|
5
10
|
/** 叶子相对父级的短 id:TGCV_finished → finished;否则用完整 key */
|
|
6
11
|
export declare function shortChildId(parentId: string, childKey: string): string;
|
|
7
12
|
/** 从 columns 生成默认配置(全部显示,保持树结构;子 id 用短名) */
|
|
@@ -17,6 +22,8 @@ export declare function getColumnFixed(columns: ColumnsType<Record<string, unkno
|
|
|
17
22
|
export declare function injectTitleAtPath<RecordType extends object>(columns: ColumnsType<RecordType>, path: number[], inject: (originalTitle: unknown) => unknown): ColumnsType<RecordType>;
|
|
18
23
|
/** 面板草稿 → 持久化 config(hidden 的也写入,保证顺序可恢复) */
|
|
19
24
|
export declare function panelItemsToConfig(items: ColumnConfigPanelItem[]): TableColumnConfigItem[];
|
|
25
|
+
/** 按配置路径隐藏节点(含子树) */
|
|
26
|
+
export declare function hideColumnAtPath(items: TableColumnConfigItem[], path: string[]): TableColumnConfigItem[];
|
|
20
27
|
/** 用已保存 config 给面板打 hidden 标记,并按 config 排序 */
|
|
21
28
|
export declare function mergePanelWithConfig(defaults: ColumnConfigPanelItem[], config: TableColumnConfigItem[] | null | undefined): ColumnConfigPanelItem[];
|
|
22
29
|
export declare function splitVisibleHidden(items: ColumnConfigPanelItem[]): {
|