@hkyhy/marsun-components-core 0.1.34 → 0.1.36
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 +176 -169
- package/dist/components/Table/ColumnConfigPanel.js.map +1 -1
- package/dist/components/Table/Table.d.ts +26 -6
- package/dist/components/Table/Table.js +330 -99
- 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 +142 -88
- 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 +34 -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,178 +1,183 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { useState as
|
|
3
|
-
import { Popover as
|
|
4
|
-
import { Settings as
|
|
5
|
-
import { mergePanelWithConfig as
|
|
6
|
-
import
|
|
7
|
-
function
|
|
8
|
-
if (!
|
|
9
|
-
const
|
|
10
|
-
return
|
|
11
|
-
(
|
|
1
|
+
import { jsx as e, jsxs as v, Fragment as B } from "react/jsx-runtime";
|
|
2
|
+
import { useState as S, useCallback as E, useMemo as z } from "react";
|
|
3
|
+
import { Popover as J, Tooltip as Q, Collapse as X, Input as R, Space as Y, Button as V, Empty as A, Checkbox as Z } from "antd";
|
|
4
|
+
import { Settings as $, Undo2 as q, ChevronDown as ee, ChevronRight as ne } from "../Icons/index.js";
|
|
5
|
+
import { mergePanelWithConfig as re, splitVisibleHidden as te, panelItemsToConfig as ae } from "./columnConfigUtils.js";
|
|
6
|
+
import i from "./columnConfig.module.scss.js";
|
|
7
|
+
function j(s, r) {
|
|
8
|
+
if (!r) return !0;
|
|
9
|
+
const l = r.toLowerCase();
|
|
10
|
+
return s.some(
|
|
11
|
+
(t) => t.label.toLowerCase().includes(l) || t.id.toLowerCase().includes(l) || (t.children ? j(t.children, r) : !1)
|
|
12
12
|
);
|
|
13
13
|
}
|
|
14
|
-
const
|
|
15
|
-
const [
|
|
16
|
-
|
|
17
|
-
},
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
if (
|
|
21
|
-
const
|
|
22
|
-
|
|
14
|
+
const H = ({ items: s, search: r, onChange: l, onToggle: t, depth: f = 0, collapsedIds: h, onToggleCollapse: c }) => {
|
|
15
|
+
const [g, y] = S(null), w = !!r.trim(), D = z(() => r.trim() ? s.map((n, o) => ({ it: n, i: o })).filter(({ it: n }) => j([n], r.trim())) : s.map((n, o) => ({ it: n, i: o })), [s, r]), L = (n, o) => {
|
|
16
|
+
y(o), n.dataTransfer.effectAllowed = "move", n.dataTransfer.setData("text/plain", String(o));
|
|
17
|
+
}, T = (n, o) => {
|
|
18
|
+
n.preventDefault();
|
|
19
|
+
const m = g ?? Number(n.dataTransfer.getData("text/plain"));
|
|
20
|
+
if (y(null), !Number.isFinite(m) || m === o) return;
|
|
21
|
+
const p = [...s], [C] = p.splice(m, 1);
|
|
22
|
+
C && (p.splice(o, 0, C), l(p));
|
|
23
23
|
};
|
|
24
|
-
return
|
|
25
|
-
var
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
return D.length ? /* @__PURE__ */ e("ul", { className: i.list, style: { paddingLeft: f ? 12 : 0 }, children: D.map(({ it: n, i: o }) => {
|
|
25
|
+
var C;
|
|
26
|
+
const m = !!((C = n.children) != null && C.length), p = w || !h.has(n.id);
|
|
27
|
+
return /* @__PURE__ */ v("li", { className: i.listItem, children: [
|
|
28
|
+
/* @__PURE__ */ v(
|
|
28
29
|
"div",
|
|
29
30
|
{
|
|
30
|
-
className:
|
|
31
|
-
draggable: !
|
|
32
|
-
onDragStart: (
|
|
33
|
-
onDragOver: (
|
|
34
|
-
onDrop: (
|
|
31
|
+
className: i.row,
|
|
32
|
+
draggable: !w,
|
|
33
|
+
onDragStart: (d) => L(d, o),
|
|
34
|
+
onDragOver: (d) => d.preventDefault(),
|
|
35
|
+
onDrop: (d) => T(d, o),
|
|
35
36
|
children: [
|
|
36
|
-
/* @__PURE__ */
|
|
37
|
-
|
|
37
|
+
m ? /* @__PURE__ */ e(
|
|
38
|
+
"button",
|
|
39
|
+
{
|
|
40
|
+
type: "button",
|
|
41
|
+
className: i.foldBtn,
|
|
42
|
+
"aria-label": p ? "折叠" : "展开",
|
|
43
|
+
"aria-expanded": p,
|
|
44
|
+
onClick: (d) => {
|
|
45
|
+
d.stopPropagation(), c(n.id);
|
|
46
|
+
},
|
|
47
|
+
children: p ? /* @__PURE__ */ e(ee, { size: 14 }) : /* @__PURE__ */ e(ne, { size: 14 })
|
|
48
|
+
}
|
|
49
|
+
) : /* @__PURE__ */ e("span", { className: i.foldSpacer, "aria-hidden": !0 }),
|
|
50
|
+
/* @__PURE__ */ e("span", { className: i.grip, "aria-hidden": !0, children: "⠿" }),
|
|
51
|
+
/* @__PURE__ */ e(Z, { checked: !n.hidden, onChange: (d) => t(n.id, !d.target.checked), children: /* @__PURE__ */ e("span", { className: i.label, children: n.label || n.id }) })
|
|
38
52
|
]
|
|
39
53
|
}
|
|
40
54
|
),
|
|
41
|
-
|
|
42
|
-
|
|
55
|
+
m && p ? /* @__PURE__ */ e(
|
|
56
|
+
H,
|
|
43
57
|
{
|
|
44
|
-
items:
|
|
45
|
-
search:
|
|
46
|
-
depth:
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
58
|
+
items: n.children,
|
|
59
|
+
search: r,
|
|
60
|
+
depth: f + 1,
|
|
61
|
+
collapsedIds: h,
|
|
62
|
+
onToggleCollapse: c,
|
|
63
|
+
onChange: (d) => {
|
|
64
|
+
const x = s.map(
|
|
65
|
+
(N) => N.id === n.id ? { ...N, children: d } : N
|
|
66
|
+
);
|
|
67
|
+
l(x);
|
|
50
68
|
},
|
|
51
|
-
onToggle:
|
|
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
|
-
}
|
|
69
|
+
onToggle: t
|
|
64
70
|
}
|
|
65
71
|
) : null
|
|
66
|
-
] },
|
|
67
|
-
}) }) : /* @__PURE__ */
|
|
72
|
+
] }, n.id);
|
|
73
|
+
}) }) : /* @__PURE__ */ e(A, { image: A.PRESENTED_IMAGE_SIMPLE, description: "暂无数据" });
|
|
68
74
|
};
|
|
69
|
-
function
|
|
70
|
-
return
|
|
71
|
-
|
|
72
|
-
if (
|
|
73
|
-
const
|
|
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 };
|
|
75
|
+
function F(s, r, l) {
|
|
76
|
+
return s.map((t) => {
|
|
77
|
+
var f;
|
|
78
|
+
if (t.id === r) {
|
|
79
|
+
const h = (f = t.children) == null ? void 0 : f.map((c) => O(c, l));
|
|
80
|
+
return { ...t, hidden: l, children: h };
|
|
89
81
|
}
|
|
90
|
-
if (
|
|
91
|
-
const h =
|
|
82
|
+
if (t.children) {
|
|
83
|
+
const h = F(t.children, r, l), c = h.every((g) => g.hidden);
|
|
92
84
|
return {
|
|
93
|
-
...
|
|
85
|
+
...t,
|
|
94
86
|
children: h,
|
|
95
|
-
hidden:
|
|
87
|
+
hidden: c ? !0 : !l && t.id !== r ? !1 : t.hidden
|
|
96
88
|
};
|
|
97
89
|
}
|
|
98
|
-
return
|
|
90
|
+
return t;
|
|
99
91
|
});
|
|
100
92
|
}
|
|
101
|
-
function
|
|
102
|
-
var
|
|
93
|
+
function O(s, r) {
|
|
94
|
+
var l;
|
|
103
95
|
return {
|
|
104
|
-
...
|
|
105
|
-
hidden:
|
|
106
|
-
children: (
|
|
96
|
+
...s,
|
|
97
|
+
hidden: r,
|
|
98
|
+
children: (l = s.children) == null ? void 0 : l.map((t) => O(t, r))
|
|
107
99
|
};
|
|
108
100
|
}
|
|
109
|
-
function
|
|
110
|
-
return [...
|
|
101
|
+
function M(s, r) {
|
|
102
|
+
return [...s, ...r];
|
|
111
103
|
}
|
|
112
|
-
const
|
|
113
|
-
open:
|
|
114
|
-
onOpenChange:
|
|
115
|
-
defaultItems:
|
|
116
|
-
savedConfig:
|
|
117
|
-
onConfirm:
|
|
104
|
+
const le = ({
|
|
105
|
+
open: s,
|
|
106
|
+
onOpenChange: r,
|
|
107
|
+
defaultItems: l,
|
|
108
|
+
savedConfig: t,
|
|
109
|
+
onConfirm: f,
|
|
118
110
|
children: h
|
|
119
111
|
}) => {
|
|
120
|
-
const [
|
|
121
|
-
|
|
122
|
-
}, [
|
|
123
|
-
|
|
124
|
-
}, { visible:
|
|
125
|
-
|
|
126
|
-
},
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
112
|
+
const [c, g] = S([]), [y, w] = S(""), [D, L] = S(""), [T, n] = S(!1), [o, m] = S(() => /* @__PURE__ */ new Set()), p = E(() => {
|
|
113
|
+
g(re(l, t)), w(""), L(""), m(/* @__PURE__ */ new Set());
|
|
114
|
+
}, [l, t]), C = (a) => {
|
|
115
|
+
a && p(), r(a);
|
|
116
|
+
}, { visible: d, hidden: x } = z(() => te(c), [c]), N = z(() => c.filter((a) => a.hidden), [c]), _ = (a) => {
|
|
117
|
+
g(M(a, N));
|
|
118
|
+
}, G = (a) => {
|
|
119
|
+
const b = new Set(N.map((k) => k.id)), u = a.filter((k) => b.has(k.id));
|
|
120
|
+
g(
|
|
121
|
+
M(
|
|
122
|
+
c.filter((k) => !k.hidden),
|
|
123
|
+
u
|
|
124
|
+
)
|
|
125
|
+
);
|
|
126
|
+
}, I = (a, b) => {
|
|
127
|
+
g((u) => F(u, a, b));
|
|
128
|
+
}, P = E((a) => {
|
|
129
|
+
m((b) => {
|
|
130
|
+
const u = new Set(b);
|
|
131
|
+
return u.has(a) ? u.delete(a) : u.add(a), u;
|
|
132
|
+
});
|
|
133
|
+
}, []), K = () => {
|
|
134
|
+
g(l.map((a) => {
|
|
135
|
+
var b;
|
|
136
|
+
return { ...a, children: (b = a.children) == null ? void 0 : b.map((u) => ({ ...u })) };
|
|
137
|
+
})), m(/* @__PURE__ */ new Set());
|
|
138
|
+
}, U = async () => {
|
|
139
|
+
n(!0);
|
|
137
140
|
try {
|
|
138
|
-
await
|
|
141
|
+
await f(ae(c)), r(!1);
|
|
139
142
|
} finally {
|
|
140
|
-
|
|
143
|
+
n(!1);
|
|
141
144
|
}
|
|
142
|
-
},
|
|
143
|
-
/* @__PURE__ */
|
|
144
|
-
/* @__PURE__ */
|
|
145
|
-
/* @__PURE__ */
|
|
145
|
+
}, W = /* @__PURE__ */ v("div", { className: i.panel, "data-ui": "table-column-config", children: [
|
|
146
|
+
/* @__PURE__ */ v("div", { className: i.header, children: [
|
|
147
|
+
/* @__PURE__ */ e("span", { className: i.title, children: "编辑表格" }),
|
|
148
|
+
/* @__PURE__ */ e(Q, { title: "恢复默认", children: /* @__PURE__ */ e("button", { type: "button", className: i.resetBtn, onClick: K, "aria-label": "恢复默认", children: /* @__PURE__ */ e(q, { size: 16 }) }) })
|
|
146
149
|
] }),
|
|
147
|
-
/* @__PURE__ */
|
|
148
|
-
|
|
150
|
+
/* @__PURE__ */ e(
|
|
151
|
+
X,
|
|
149
152
|
{
|
|
150
|
-
className:
|
|
153
|
+
className: i.collapse,
|
|
151
154
|
defaultActiveKey: ["visible", "hidden"],
|
|
152
155
|
ghost: !0,
|
|
153
156
|
items: [
|
|
154
157
|
{
|
|
155
158
|
key: "visible",
|
|
156
159
|
label: "显示的信息",
|
|
157
|
-
children: /* @__PURE__ */
|
|
158
|
-
/* @__PURE__ */
|
|
159
|
-
|
|
160
|
+
children: /* @__PURE__ */ v(B, { children: [
|
|
161
|
+
/* @__PURE__ */ e(
|
|
162
|
+
R,
|
|
160
163
|
{
|
|
161
164
|
allowClear: !0,
|
|
162
165
|
size: "small",
|
|
163
|
-
className:
|
|
166
|
+
className: i.search,
|
|
164
167
|
placeholder: "搜索",
|
|
165
|
-
value:
|
|
166
|
-
onChange: (
|
|
168
|
+
value: y,
|
|
169
|
+
onChange: (a) => w(a.target.value)
|
|
167
170
|
}
|
|
168
171
|
),
|
|
169
|
-
/* @__PURE__ */
|
|
170
|
-
|
|
172
|
+
/* @__PURE__ */ e(
|
|
173
|
+
H,
|
|
171
174
|
{
|
|
172
|
-
items:
|
|
173
|
-
search:
|
|
174
|
-
onChange:
|
|
175
|
-
onToggle:
|
|
175
|
+
items: d,
|
|
176
|
+
search: y,
|
|
177
|
+
onChange: _,
|
|
178
|
+
onToggle: I,
|
|
179
|
+
collapsedIds: o,
|
|
180
|
+
onToggleCollapse: P
|
|
176
181
|
}
|
|
177
182
|
)
|
|
178
183
|
] })
|
|
@@ -180,25 +185,27 @@ const q = ({
|
|
|
180
185
|
{
|
|
181
186
|
key: "hidden",
|
|
182
187
|
label: "隐藏的信息",
|
|
183
|
-
children: /* @__PURE__ */
|
|
184
|
-
/* @__PURE__ */
|
|
185
|
-
|
|
188
|
+
children: /* @__PURE__ */ v(B, { children: [
|
|
189
|
+
/* @__PURE__ */ e(
|
|
190
|
+
R,
|
|
186
191
|
{
|
|
187
192
|
allowClear: !0,
|
|
188
193
|
size: "small",
|
|
189
|
-
className:
|
|
194
|
+
className: i.search,
|
|
190
195
|
placeholder: "搜索",
|
|
191
|
-
value:
|
|
192
|
-
onChange: (
|
|
196
|
+
value: D,
|
|
197
|
+
onChange: (a) => L(a.target.value)
|
|
193
198
|
}
|
|
194
199
|
),
|
|
195
|
-
/* @__PURE__ */
|
|
196
|
-
|
|
200
|
+
/* @__PURE__ */ e(
|
|
201
|
+
H,
|
|
197
202
|
{
|
|
198
|
-
items:
|
|
199
|
-
search:
|
|
200
|
-
onChange:
|
|
201
|
-
onToggle:
|
|
203
|
+
items: x,
|
|
204
|
+
search: D,
|
|
205
|
+
onChange: G,
|
|
206
|
+
onToggle: I,
|
|
207
|
+
collapsedIds: o,
|
|
208
|
+
onToggleCollapse: P
|
|
202
209
|
}
|
|
203
210
|
)
|
|
204
211
|
] })
|
|
@@ -206,55 +213,55 @@ const q = ({
|
|
|
206
213
|
]
|
|
207
214
|
}
|
|
208
215
|
),
|
|
209
|
-
/* @__PURE__ */
|
|
210
|
-
/* @__PURE__ */
|
|
211
|
-
/* @__PURE__ */
|
|
216
|
+
/* @__PURE__ */ e("div", { className: i.footer, children: /* @__PURE__ */ v(Y, { children: [
|
|
217
|
+
/* @__PURE__ */ e(V, { size: "small", onClick: () => r(!1), children: "取消" }),
|
|
218
|
+
/* @__PURE__ */ e(V, { type: "primary", size: "small", loading: T, onClick: () => void U(), children: "确定" })
|
|
212
219
|
] }) })
|
|
213
220
|
] });
|
|
214
|
-
return /* @__PURE__ */
|
|
215
|
-
|
|
221
|
+
return /* @__PURE__ */ e(
|
|
222
|
+
J,
|
|
216
223
|
{
|
|
217
224
|
trigger: "click",
|
|
218
225
|
placement: "bottomRight",
|
|
219
|
-
open:
|
|
220
|
-
onOpenChange:
|
|
221
|
-
content:
|
|
222
|
-
overlayClassName:
|
|
226
|
+
open: s,
|
|
227
|
+
onOpenChange: C,
|
|
228
|
+
content: W,
|
|
229
|
+
overlayClassName: i.overlay,
|
|
223
230
|
arrow: !1,
|
|
224
231
|
children: h
|
|
225
232
|
}
|
|
226
233
|
);
|
|
227
234
|
};
|
|
228
|
-
function
|
|
229
|
-
open:
|
|
230
|
-
onOpenChange:
|
|
231
|
-
defaultItems:
|
|
232
|
-
savedConfig:
|
|
233
|
-
onConfirm:
|
|
235
|
+
function me({
|
|
236
|
+
open: s,
|
|
237
|
+
onOpenChange: r,
|
|
238
|
+
defaultItems: l,
|
|
239
|
+
savedConfig: t,
|
|
240
|
+
onConfirm: f
|
|
234
241
|
}) {
|
|
235
|
-
return /* @__PURE__ */
|
|
236
|
-
|
|
242
|
+
return /* @__PURE__ */ e(
|
|
243
|
+
le,
|
|
237
244
|
{
|
|
238
|
-
open:
|
|
239
|
-
onOpenChange:
|
|
240
|
-
defaultItems:
|
|
241
|
-
savedConfig:
|
|
242
|
-
onConfirm:
|
|
243
|
-
children: /* @__PURE__ */
|
|
245
|
+
open: s,
|
|
246
|
+
onOpenChange: r,
|
|
247
|
+
defaultItems: l,
|
|
248
|
+
savedConfig: t,
|
|
249
|
+
onConfirm: f,
|
|
250
|
+
children: /* @__PURE__ */ e(
|
|
244
251
|
"button",
|
|
245
252
|
{
|
|
246
253
|
type: "button",
|
|
247
|
-
className:
|
|
254
|
+
className: i.gearBtn,
|
|
248
255
|
"aria-label": "编辑表格",
|
|
249
256
|
onClick: (h) => h.stopPropagation(),
|
|
250
|
-
children: /* @__PURE__ */
|
|
257
|
+
children: /* @__PURE__ */ e($, { size: 14 })
|
|
251
258
|
}
|
|
252
259
|
)
|
|
253
260
|
}
|
|
254
261
|
);
|
|
255
262
|
}
|
|
256
263
|
export {
|
|
257
|
-
|
|
258
|
-
|
|
264
|
+
le as ColumnConfigPopover,
|
|
265
|
+
me as ColumnConfigTrigger
|
|
259
266
|
};
|
|
260
267
|
//# sourceMappingURL=ColumnConfigPanel.js.map
|
|
@@ -1 +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
|
+
{"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 { ChevronDown, ChevronRight, 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 collapsedIds: Set<string>;\n onToggleCollapse: (id: string) => void;\n}> = ({ items, search, onChange, onToggle, depth = 0, collapsedIds, onToggleCollapse }) => {\n const [dragIndex, setDragIndex] = useState<number | null>(null);\n const searching = Boolean(search.trim());\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 const hasChildren = Boolean(it.children?.length);\n const expanded = searching || !collapsedIds.has(it.id);\n return (\n <li key={it.id} className={styles.listItem}>\n <div\n className={styles.row}\n draggable={!searching}\n onDragStart={(e) => onDragStart(e, i)}\n onDragOver={(e) => e.preventDefault()}\n onDrop={(e) => onDrop(e, i)}\n >\n {hasChildren ? (\n <button\n type=\"button\"\n className={styles.foldBtn}\n aria-label={expanded ? '折叠' : '展开'}\n aria-expanded={expanded}\n onClick={(e) => {\n e.stopPropagation();\n onToggleCollapse(it.id);\n }}\n >\n {expanded ? <ChevronDown size={14} /> : <ChevronRight size={14} />}\n </button>\n ) : (\n <span className={styles.foldSpacer} aria-hidden />\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 {hasChildren && expanded ? (\n <DragList\n items={it.children!}\n search={search}\n depth={depth + 1}\n collapsedIds={collapsedIds}\n onToggleCollapse={onToggleCollapse}\n onChange={(childNext) => {\n const next = items.map((x) =>\n x.id === it.id ? { ...x, children: childNext } : x,\n );\n onChange(next);\n }}\n onToggle={onToggle}\n />\n ) : null}\n </li>\n );\n })}\n </ul>\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 const [collapsedIds, setCollapsedIds] = useState<Set<string>>(() => new Set());\n\n const syncDraft = useCallback(() => {\n setDraft(mergePanelWithConfig(defaultItems, savedConfig));\n setSearchVisible('');\n setSearchHidden('');\n setCollapsedIds(new Set());\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 /** 仅顶层 hidden,供可见区拖拽后 merge,避免把「摘出的二/三级扁平项」写回成顶层 */\n const topLevelHidden = useMemo(() => draft.filter((d) => d.hidden), [draft]);\n\n const setVisibleList = (list: ColumnConfigPanelItem[]) => {\n setDraft(mergeSections(list, topLevelHidden));\n };\n const setHiddenList = (list: ColumnConfigPanelItem[]) => {\n const topIds = new Set(topLevelHidden.map((d) => d.id));\n const newTopHidden = list.filter((i) => topIds.has(i.id));\n setDraft(\n mergeSections(\n draft.filter((d) => !d.hidden),\n newTopHidden,\n ),\n );\n };\n\n const onToggle = (id: string, nextHidden: boolean) => {\n setDraft((prev) => toggleInTree(prev, id, nextHidden));\n };\n\n const onToggleCollapse = useCallback((id: string) => {\n setCollapsedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n }, []);\n\n const onReset = () => {\n setDraft(defaultItems.map((d) => ({ ...d, children: d.children?.map((c) => ({ ...c })) })));\n setCollapsedIds(new Set());\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 collapsedIds={collapsedIds}\n onToggleCollapse={onToggleCollapse}\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 collapsedIds={collapsedIds}\n onToggleCollapse={onToggleCollapse}\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","collapsedIds","onToggleCollapse","dragIndex","setDragIndex","useState","searching","filtered","useMemo","i","onDragStart","e","index","onDrop","toIndex","from","next","moved","styles","hasChildren","_a","expanded","jsxs","jsx","ChevronDown","ChevronRight","Checkbox","childNext","x","Empty","toggleInTree","id","hidden","children","setHiddenDeep","allHidden","c","item","mergeSections","visible","ColumnConfigPopover","open","onOpenChange","defaultItems","savedConfig","onConfirm","draft","setDraft","searchVisible","setSearchVisible","searchHidden","setSearchHidden","saving","setSaving","setCollapsedIds","syncDraft","useCallback","mergePanelWithConfig","handleOpenChange","splitVisibleHidden","topLevelHidden","d","setVisibleList","list","setHiddenList","topIds","newTopHidden","nextHidden","prev","onReset","onOk","panelItemsToConfig","content","Tooltip","Undo2","Collapse","Fragment","Input","Space","Button","Popover","ColumnConfigTrigger","Settings"],"mappings":"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"}
|
|
@@ -1,22 +1,42 @@
|
|
|
1
|
+
import { Key, ReactNode } from 'react';
|
|
1
2
|
import { TableProps as AntTableProps } from 'antd';
|
|
2
3
|
import { TableColumnConfigFetcher, TableColumnConfigItem, TableColumnConfigSaver } from './columnConfigTypes';
|
|
3
|
-
import { applyColumnConfig, columnsToConfig, COLUMN_CONFIG_COL_KEY } from './columnConfigUtils';
|
|
4
|
+
import { applyColumnConfig, columnsToConfig, COLUMN_CONFIG_COL_KEY, FLEX_SPACER_COL_KEY, hideColumnAtPath, isInternalColumnKey } from './columnConfigUtils';
|
|
5
|
+
import { TablePrefs, TablePrefsFetcher, TablePrefsSaver } from './tablePrefsTypes';
|
|
4
6
|
export type { TableColumnConfigItem, TableColumnConfigFetcher, TableColumnConfigSaver };
|
|
7
|
+
export type { TablePrefs, TablePrefsFetcher, TablePrefsSaver };
|
|
5
8
|
export type TableProps<RecordType extends object = Record<string, unknown>> = AntTableProps<RecordType> & {
|
|
6
9
|
/** 稳定偏好 key;业务列表必填 */
|
|
7
10
|
tableName?: string;
|
|
8
11
|
/** 是否启用「编辑表格」列配置;默认 !!tableName */
|
|
9
12
|
columnConfigEnabled?: boolean;
|
|
13
|
+
/** @deprecated 优先用 fetchTablePrefs;仍支持仅列配置 */
|
|
10
14
|
fetchColumnConfig?: TableColumnConfigFetcher;
|
|
15
|
+
/** @deprecated 优先用 saveTablePrefs */
|
|
11
16
|
saveColumnConfig?: TableColumnConfigSaver;
|
|
12
17
|
onColumnConfigChange?: (items: TableColumnConfigItem[]) => void;
|
|
18
|
+
/** 读写 TablePrefs(仅 columns,经 user_key) */
|
|
19
|
+
fetchTablePrefs?: TablePrefsFetcher;
|
|
20
|
+
saveTablePrefs?: TablePrefsSaver;
|
|
21
|
+
onTablePrefsChange?: (prefs: TablePrefs) => void;
|
|
22
|
+
/** 启用行隐藏(会话内 state,不进 user_key);默认 false */
|
|
23
|
+
rowConfigEnabled?: boolean;
|
|
24
|
+
/** 不可隐藏的行 key(如主对标) */
|
|
25
|
+
lockedRowKeys?: Key[];
|
|
26
|
+
/** 受控隐藏行;不传则用组件内部会话 state */
|
|
27
|
+
hiddenRowKeys?: Key[];
|
|
28
|
+
onHiddenRowKeysChange?: (keys: string[]) => void;
|
|
29
|
+
/** 行隐藏工具条:传入当前勾选 key 以启用「隐藏选中行」 */
|
|
30
|
+
rowHideSelectedKeys?: Key[];
|
|
31
|
+
/** 自定义行隐藏工具条;默认内置按钮 */
|
|
32
|
+
rowConfigToolbar?: ReactNode | false;
|
|
13
33
|
};
|
|
14
34
|
/**
|
|
15
35
|
* 基于 antd Table 的列表表格包装。
|
|
16
|
-
*
|
|
17
|
-
* tableName + columnConfigEnabled 时在最右侧追加独立齿轮列(跨多级表头高度)。
|
|
36
|
+
* 列偏好经 user_key;行隐藏仅会话 state,不进 user_key。
|
|
18
37
|
*/
|
|
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;
|
|
38
|
+
declare function Table<RecordType extends object = Record<string, unknown>>({ className, style, scroll, pagination, locale, columns, dataSource, rowKey, tableName, columnConfigEnabled, fetchColumnConfig, saveColumnConfig, onColumnConfigChange, fetchTablePrefs, saveTablePrefs, onTablePrefsChange, rowConfigEnabled, lockedRowKeys, hiddenRowKeys: hiddenRowKeysProp, onHiddenRowKeysChange, rowHideSelectedKeys, rowConfigToolbar, rowSelection, ...rest }: TableProps<RecordType>): import("react").JSX.Element;
|
|
20
39
|
export default Table;
|
|
21
|
-
|
|
22
|
-
export {
|
|
40
|
+
export { columnsToConfig, applyColumnConfig, COLUMN_CONFIG_COL_KEY, FLEX_SPACER_COL_KEY, isInternalColumnKey, hideColumnAtPath, };
|
|
41
|
+
export { parseTablePrefs, serializeTablePrefs, mergeTablePrefs, applyHiddenRows, normalizeHiddenRowKeys, } from './tablePrefsUtils';
|
|
42
|
+
export { emptyTablePrefs } from './tablePrefsTypes';
|