@hkyhy/marsun-components-core 0.1.138 → 0.1.140
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/README.md +1 -0
- package/dist/components/Iam/client.d.ts +3 -0
- package/dist/components/Iam/index.d.ts +1 -1
- package/dist/components/Iam/pages/IamUsersPage.d.ts +15 -1
- package/dist/components/Iam/pages/IamUsersPage.js +171 -162
- package/dist/components/Iam/pages/IamUsersPage.js.map +1 -1
- package/dist/components/Table/Table.d.ts +2 -2
- package/dist/components/Table/Table.js +75 -72
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Table/columnConfigUtils.d.ts +8 -0
- package/dist/components/Table/columnConfigUtils.js +130 -113
- package/dist/components/Table/columnConfigUtils.js.map +1 -1
- package/dist/components/Table/index.d.ts +1 -1
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.d.ts +2 -0
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.js +97 -83
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.js.map +1 -1
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionModal.d.ts +2 -0
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionModal.js +111 -106
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionModal.js.map +1 -1
- package/dist/components/Tools/ActionTracking/CreateAction/types.d.ts +4 -0
- package/dist/components/Tools/Inbox/InboxBell/InboxBell.js +168 -155
- package/dist/components/Tools/Inbox/InboxBell/InboxBell.js.map +1 -1
- package/dist/components/Tools/Inbox/InboxBell/inboxItemActions.js +60 -46
- package/dist/components/Tools/Inbox/InboxBell/inboxItemActions.js.map +1 -1
- package/dist/components/Tools/Inbox/InboxBell/style.module.scss.js +68 -60
- package/dist/components/Tools/Inbox/InboxBell/style.module.scss.js.map +1 -1
- package/dist/index.js +478 -477
- package/dist/marsun-components-core.css +1 -1
- package/dist/styles/global.css +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const L = "__marsun_column_config", O = "__marsun_flex_spacer",
|
|
1
|
+
const L = "__marsun_column_config", O = "__marsun_flex_spacer", X = 48, $ = 480;
|
|
2
2
|
function E(n, e = 48, r = 480) {
|
|
3
3
|
if (!Number.isFinite(n)) return e;
|
|
4
4
|
const i = Number.isFinite(e) ? e : 48, h = Number.isFinite(r) ? r : 480;
|
|
@@ -7,97 +7,99 @@ function E(n, e = 48, r = 480) {
|
|
|
7
7
|
function I(n, e) {
|
|
8
8
|
return n.key != null && String(n.key) !== "" ? String(n.key) : n.dataIndex != null ? Array.isArray(n.dataIndex) ? n.dataIndex.join(".") : String(n.dataIndex) : `__col_${e}`;
|
|
9
9
|
}
|
|
10
|
-
function
|
|
10
|
+
function x(n) {
|
|
11
11
|
return n === L || n === O || n.startsWith("__marsun_");
|
|
12
12
|
}
|
|
13
|
-
function
|
|
14
|
-
return
|
|
13
|
+
function b(n, e) {
|
|
14
|
+
return x(I(n, e));
|
|
15
15
|
}
|
|
16
16
|
function W(n, e) {
|
|
17
17
|
const r = `${n}_`;
|
|
18
18
|
return e.startsWith(r) ? e.slice(r.length) : e;
|
|
19
19
|
}
|
|
20
|
-
function
|
|
20
|
+
function p(n) {
|
|
21
21
|
return n == null ? "" : typeof n == "string" || typeof n == "number" ? String(n) : "";
|
|
22
22
|
}
|
|
23
23
|
function T(n, e) {
|
|
24
24
|
return n != null && n.length ? n.map((r, i) => {
|
|
25
25
|
var d;
|
|
26
|
-
if (
|
|
27
|
-
const h = I(r, i),
|
|
28
|
-
return t != null && t.length ? { id:
|
|
26
|
+
if (b(r, i)) return null;
|
|
27
|
+
const h = I(r, i), f = e ? W(e, h) : h, t = (d = r.children) != null && d.length ? T(r.children, h) : void 0;
|
|
28
|
+
return t != null && t.length ? { id: f, children: t } : { id: f };
|
|
29
29
|
}).filter(Boolean) : [];
|
|
30
30
|
}
|
|
31
|
-
function
|
|
31
|
+
function v(n, e, r) {
|
|
32
32
|
return n != null && n.length ? n.map((i, h) => {
|
|
33
33
|
var u;
|
|
34
|
-
if (
|
|
35
|
-
const
|
|
34
|
+
if (b(i, h)) return null;
|
|
35
|
+
const f = I(i, h), t = r ? W(r, f) : f, d = p(i.title) || t, l = (u = i.children) != null && u.length ? v(i.children, e, f) : void 0, a = !!((l == null ? void 0 : l.length) && l.every((g) => g.hidden || !1));
|
|
36
36
|
return {
|
|
37
37
|
id: t,
|
|
38
38
|
title: i.title,
|
|
39
39
|
label: d,
|
|
40
40
|
hidden: !!a,
|
|
41
|
-
children:
|
|
41
|
+
children: l
|
|
42
42
|
};
|
|
43
43
|
}).filter(Boolean) : [];
|
|
44
44
|
}
|
|
45
|
-
function
|
|
45
|
+
function N(n) {
|
|
46
46
|
var e;
|
|
47
|
-
return !!(n.hidden || (e = n.children) != null && e.length && n.children.every(
|
|
47
|
+
return !!(n.hidden || (e = n.children) != null && e.length && n.children.every(N));
|
|
48
48
|
}
|
|
49
|
-
function
|
|
49
|
+
function A(n, e) {
|
|
50
50
|
return (n.children || []).find((i, h) => {
|
|
51
|
-
const
|
|
52
|
-
return W(String(n.key ?? ""),
|
|
51
|
+
const f = I(i, h), t = I(n, 0);
|
|
52
|
+
return W(String(n.key ?? ""), f) === e || W(t, f) === e || f === e || f.endsWith(`_${e}`);
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
|
-
function
|
|
55
|
+
function j(n, e, r) {
|
|
56
56
|
if (!(n != null && n.length)) return n || [];
|
|
57
57
|
if (!(e != null && e.length)) return n;
|
|
58
|
-
const i = (r == null ? void 0 : r.minWidth) ?? 48, h = (r == null ? void 0 : r.maxWidth) ?? 480,
|
|
59
|
-
n.forEach((d,
|
|
60
|
-
|
|
58
|
+
const i = (r == null ? void 0 : r.minWidth) ?? 48, h = (r == null ? void 0 : r.maxWidth) ?? 480, f = /* @__PURE__ */ new Map();
|
|
59
|
+
n.forEach((d, l) => {
|
|
60
|
+
f.set(I(d, l), d);
|
|
61
61
|
});
|
|
62
|
-
const t = (d,
|
|
63
|
-
var
|
|
62
|
+
const t = (d, l, c) => {
|
|
63
|
+
var g, C;
|
|
64
64
|
const a = [], u = /* @__PURE__ */ new Set();
|
|
65
65
|
for (const o of d) {
|
|
66
|
-
if (
|
|
66
|
+
if (N(o)) {
|
|
67
67
|
u.add(o.id);
|
|
68
68
|
continue;
|
|
69
69
|
}
|
|
70
70
|
let s;
|
|
71
|
-
if (c ? s =
|
|
72
|
-
if (u.add(o.id), (
|
|
73
|
-
const
|
|
74
|
-
if (!
|
|
75
|
-
a.push({ ...s, children:
|
|
71
|
+
if (c ? s = A(c, o.id) : s = f.get(o.id), !!s)
|
|
72
|
+
if (u.add(o.id), (g = o.children) != null && g.length && ((C = s.children) != null && C.length)) {
|
|
73
|
+
const _ = t(o.children, s.children, s);
|
|
74
|
+
if (!_.length) continue;
|
|
75
|
+
a.push({ ...s, children: _ });
|
|
76
76
|
} else {
|
|
77
|
-
const
|
|
78
|
-
typeof o.width == "number" && Number.isFinite(o.width) && (
|
|
77
|
+
const _ = { ...s };
|
|
78
|
+
typeof o.width == "number" && Number.isFinite(o.width) && (_.width = E(o.width, i, h)), a.push(_);
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
|
-
return
|
|
82
|
-
const
|
|
83
|
-
!u.has(w) && !u.has(
|
|
81
|
+
return l.forEach((o, s) => {
|
|
82
|
+
const _ = I(o, s), w = c ? W(String(c.key ?? I(c, 0)), _) : _;
|
|
83
|
+
!u.has(w) && !u.has(_) && a.push(o);
|
|
84
84
|
}), a;
|
|
85
85
|
};
|
|
86
|
-
return
|
|
86
|
+
return P(
|
|
87
|
+
t(e, n)
|
|
88
|
+
);
|
|
87
89
|
}
|
|
88
|
-
function
|
|
90
|
+
function D(n, e, r, i, h = []) {
|
|
89
91
|
if (!(n != null && n.length) || !e || !Object.keys(e).length)
|
|
90
92
|
return n || [];
|
|
91
|
-
const
|
|
92
|
-
return n.map((d,
|
|
93
|
+
const f = (r == null ? void 0 : r.minWidth) ?? 48, t = (r == null ? void 0 : r.maxWidth) ?? 480;
|
|
94
|
+
return n.map((d, l) => {
|
|
93
95
|
var o;
|
|
94
|
-
const c = I(d,
|
|
95
|
-
if (
|
|
96
|
+
const c = I(d, l);
|
|
97
|
+
if (x(c)) return d;
|
|
96
98
|
const a = i ? W(i, c) : c, u = [...h, a];
|
|
97
99
|
if ((o = d.children) != null && o.length)
|
|
98
100
|
return {
|
|
99
101
|
...d,
|
|
100
|
-
children:
|
|
102
|
+
children: D(
|
|
101
103
|
d.children,
|
|
102
104
|
e,
|
|
103
105
|
r,
|
|
@@ -105,18 +107,18 @@ function R(n, e, r, i, h = []) {
|
|
|
105
107
|
u
|
|
106
108
|
)
|
|
107
109
|
};
|
|
108
|
-
const
|
|
109
|
-
return typeof C != "number" || !Number.isFinite(C) ? d : { ...d, width: E(C,
|
|
110
|
+
const g = u.join("/"), C = e[g];
|
|
111
|
+
return typeof C != "number" || !Number.isFinite(C) ? d : { ...d, width: E(C, f, t) };
|
|
110
112
|
});
|
|
111
113
|
}
|
|
112
|
-
function
|
|
114
|
+
function R(n) {
|
|
113
115
|
return n.map((e) => {
|
|
114
116
|
var h;
|
|
115
|
-
const r = (h = e.children) != null && h.length ?
|
|
117
|
+
const r = (h = e.children) != null && h.length ? R(e.children) : void 0, i = { id: e.id };
|
|
116
118
|
return e.hidden && (i.hidden = !0), r != null && r.length && (i.children = r), i;
|
|
117
119
|
});
|
|
118
120
|
}
|
|
119
|
-
function
|
|
121
|
+
function U(n, e) {
|
|
120
122
|
if (!e.length) return n;
|
|
121
123
|
const [r, ...i] = e;
|
|
122
124
|
return n.map((h) => {
|
|
@@ -124,17 +126,17 @@ function v(n, e) {
|
|
|
124
126
|
if (h.id !== r) return h;
|
|
125
127
|
if (!i.length)
|
|
126
128
|
return y(h);
|
|
127
|
-
const
|
|
128
|
-
return { ...h, children:
|
|
129
|
+
const f = (d = h.children) != null && d.length ? U(h.children, i) : h.children, t = f != null && f.length ? f.every(S) : h.hidden;
|
|
130
|
+
return { ...h, children: f, hidden: t || h.hidden };
|
|
129
131
|
});
|
|
130
132
|
}
|
|
131
|
-
function
|
|
133
|
+
function m(n, e, r, i) {
|
|
132
134
|
if (!e.length) return n;
|
|
133
|
-
const h = (i == null ? void 0 : i.minWidth) ?? 48,
|
|
135
|
+
const h = (i == null ? void 0 : i.minWidth) ?? 48, f = (i == null ? void 0 : i.maxWidth) ?? 480, t = E(r, h, f), [d, ...l] = e;
|
|
134
136
|
let c = !1;
|
|
135
137
|
const a = n.map((u) => {
|
|
136
|
-
var
|
|
137
|
-
return u.id !== d ? u : (c = !0,
|
|
138
|
+
var g;
|
|
139
|
+
return u.id !== d ? u : (c = !0, l.length ? (g = u.children) != null && g.length ? { ...u, children: m(u.children, l, t, i) } : u : { ...u, width: t });
|
|
138
140
|
});
|
|
139
141
|
return c ? a : n;
|
|
140
142
|
}
|
|
@@ -142,69 +144,83 @@ function Z(n, e) {
|
|
|
142
144
|
if (!e.length) return n;
|
|
143
145
|
const [r, ...i] = e;
|
|
144
146
|
let h = !1;
|
|
145
|
-
const
|
|
147
|
+
const f = n.map((t) => {
|
|
146
148
|
var d;
|
|
147
149
|
if (t.id !== r) return t;
|
|
148
150
|
if (h = !0, !i.length) {
|
|
149
151
|
if (t.width === void 0) return t;
|
|
150
|
-
const { width:
|
|
152
|
+
const { width: l, ...c } = t;
|
|
151
153
|
return c;
|
|
152
154
|
}
|
|
153
155
|
return (d = t.children) != null && d.length ? { ...t, children: Z(t.children, i) } : t;
|
|
154
156
|
});
|
|
155
|
-
return h ?
|
|
157
|
+
return h ? f : n;
|
|
156
158
|
}
|
|
157
|
-
function
|
|
159
|
+
function z(n, e) {
|
|
158
160
|
if (!(e != null && e.length)) return n;
|
|
159
|
-
const r = /* @__PURE__ */ new Map(), i = (
|
|
161
|
+
const r = /* @__PURE__ */ new Map(), i = (f, t) => {
|
|
160
162
|
var d;
|
|
161
|
-
for (const
|
|
162
|
-
const c = t ? `${t}/${
|
|
163
|
-
typeof
|
|
163
|
+
for (const l of f) {
|
|
164
|
+
const c = t ? `${t}/${l.id}` : l.id;
|
|
165
|
+
typeof l.width == "number" && Number.isFinite(l.width) && r.set(c, l.width), (d = l.children) != null && d.length && i(l.children, c);
|
|
164
166
|
}
|
|
165
167
|
};
|
|
166
168
|
if (i(e, ""), !r.size) return n;
|
|
167
|
-
const h = (
|
|
169
|
+
const h = (f, t) => f.map((d) => {
|
|
168
170
|
var u;
|
|
169
|
-
const
|
|
171
|
+
const l = t ? `${t}/${d.id}` : d.id, c = (u = d.children) != null && u.length ? h(d.children, l) : d.children, a = r.get(l);
|
|
170
172
|
return a == null ? c !== d.children ? { ...d, children: c } : d : { ...d, width: a, children: c };
|
|
171
173
|
});
|
|
172
174
|
return h(n, "");
|
|
173
175
|
}
|
|
174
|
-
function
|
|
176
|
+
function F(n) {
|
|
175
177
|
var e;
|
|
176
178
|
if (!(n != null && n.length)) return !1;
|
|
177
179
|
for (const r of n)
|
|
178
|
-
if (typeof r.width == "number" && Number.isFinite(r.width) || (e = r.children) != null && e.length &&
|
|
180
|
+
if (typeof r.width == "number" && Number.isFinite(r.width) || (e = r.children) != null && e.length && F(r.children)) return !0;
|
|
179
181
|
return !1;
|
|
180
182
|
}
|
|
181
|
-
function
|
|
183
|
+
function Y(n) {
|
|
182
184
|
const e = n == null ? void 0 : n.fixed;
|
|
183
185
|
return e === "left" || e === "right" || e === !0 || e === "start" || e === "end";
|
|
184
186
|
}
|
|
185
|
-
function
|
|
187
|
+
function k(n) {
|
|
188
|
+
const e = n == null ? void 0 : n.fixed;
|
|
189
|
+
return e === "left" || e === "start" || e === !0 ? "left" : e === "right" || e === "end" ? "right" : null;
|
|
190
|
+
}
|
|
191
|
+
function P(n) {
|
|
192
|
+
if (!(n != null && n.length)) return n || [];
|
|
193
|
+
const e = [], r = [], i = [];
|
|
194
|
+
for (const t of n) {
|
|
195
|
+
const d = k(t);
|
|
196
|
+
d === "left" ? e.push(t) : d === "right" ? i.push(t) : r.push(t);
|
|
197
|
+
}
|
|
198
|
+
const h = [...e, ...r, ...i];
|
|
199
|
+
return h.length === n.length && h.every((t, d) => t === n[d]) ? n : h;
|
|
200
|
+
}
|
|
201
|
+
function G(n, e) {
|
|
186
202
|
if (!n.length) return [e];
|
|
187
203
|
const r = n.findIndex((i) => i.fixed === "right" || i.fixed === "end");
|
|
188
204
|
return r < 0 ? [...n, e] : [...n.slice(0, r), e, ...n.slice(r)];
|
|
189
205
|
}
|
|
190
|
-
function
|
|
206
|
+
function B(n, e, r = []) {
|
|
191
207
|
if (!(n != null && n.length)) return "";
|
|
192
208
|
const i = [];
|
|
193
|
-
return n.forEach((h,
|
|
209
|
+
return n.forEach((h, f) => {
|
|
194
210
|
var c;
|
|
195
|
-
const t = I(h,
|
|
196
|
-
if (
|
|
197
|
-
const d = e ? W(e, t) : t,
|
|
211
|
+
const t = I(h, f);
|
|
212
|
+
if (x(t)) return;
|
|
213
|
+
const d = e ? W(e, t) : t, l = [...r, d];
|
|
198
214
|
if ((c = h.children) != null && c.length) {
|
|
199
|
-
const a =
|
|
215
|
+
const a = B(
|
|
200
216
|
h.children,
|
|
201
217
|
t,
|
|
202
|
-
|
|
218
|
+
l
|
|
203
219
|
);
|
|
204
220
|
a && i.push(a);
|
|
205
221
|
return;
|
|
206
222
|
}
|
|
207
|
-
i.push(
|
|
223
|
+
i.push(l.join("/"));
|
|
208
224
|
}), i.join("\0");
|
|
209
225
|
}
|
|
210
226
|
function y(n) {
|
|
@@ -215,40 +231,40 @@ function y(n) {
|
|
|
215
231
|
children: (e = n.children) == null ? void 0 : e.map(y)
|
|
216
232
|
};
|
|
217
233
|
}
|
|
218
|
-
function
|
|
234
|
+
function S(n) {
|
|
219
235
|
var e;
|
|
220
|
-
return !!(n.hidden || (e = n.children) != null && e.length && n.children.every(
|
|
236
|
+
return !!(n.hidden || (e = n.children) != null && e.length && n.children.every(S));
|
|
221
237
|
}
|
|
222
|
-
function
|
|
238
|
+
function V(n, e) {
|
|
223
239
|
if (!(e != null && e.length)) return n.map(M);
|
|
224
240
|
const r = new Map(n.map((t) => [t.id, t])), i = /* @__PURE__ */ new Set(), h = (t, d) => {
|
|
225
241
|
var o;
|
|
226
|
-
const
|
|
227
|
-
if (!
|
|
242
|
+
const l = d || r.get(t.id);
|
|
243
|
+
if (!l) return null;
|
|
228
244
|
i.add(t.id);
|
|
229
|
-
const c =
|
|
245
|
+
const c = l.children || [], a = new Map(c.map((s) => [s.id, s]));
|
|
230
246
|
let u;
|
|
231
247
|
if ((o = t.children) != null && o.length) {
|
|
232
248
|
u = t.children.map((s) => h(s, a.get(s.id))).filter(Boolean);
|
|
233
249
|
for (const s of c)
|
|
234
|
-
t.children.some((
|
|
250
|
+
t.children.some((_) => _.id === s.id) || u.push(M(s));
|
|
235
251
|
} else c.length && (u = c.map(M));
|
|
236
|
-
const
|
|
252
|
+
const g = !!t.hidden || !!(u != null && u.length && u.every((s) => s.hidden)), C = g && (u != null && u.length) ? u.map((s) => H(s, !0)) : u;
|
|
237
253
|
return {
|
|
238
|
-
id:
|
|
239
|
-
title:
|
|
240
|
-
label:
|
|
241
|
-
hidden:
|
|
254
|
+
id: l.id,
|
|
255
|
+
title: l.title,
|
|
256
|
+
label: l.label,
|
|
257
|
+
hidden: g,
|
|
242
258
|
children: C
|
|
243
259
|
};
|
|
244
|
-
},
|
|
260
|
+
}, f = [];
|
|
245
261
|
for (const t of e) {
|
|
246
262
|
const d = h(t);
|
|
247
|
-
d &&
|
|
263
|
+
d && f.push(d);
|
|
248
264
|
}
|
|
249
265
|
for (const t of n)
|
|
250
|
-
i.has(t.id) ||
|
|
251
|
-
return
|
|
266
|
+
i.has(t.id) || f.push(M(t));
|
|
267
|
+
return f;
|
|
252
268
|
}
|
|
253
269
|
function M(n) {
|
|
254
270
|
var e;
|
|
@@ -257,18 +273,18 @@ function M(n) {
|
|
|
257
273
|
children: (e = n.children) == null ? void 0 : e.map(M)
|
|
258
274
|
};
|
|
259
275
|
}
|
|
260
|
-
function
|
|
276
|
+
function H(n, e) {
|
|
261
277
|
var r;
|
|
262
278
|
return {
|
|
263
279
|
...n,
|
|
264
280
|
hidden: e,
|
|
265
|
-
children: (r = n.children) == null ? void 0 : r.map((i) =>
|
|
281
|
+
children: (r = n.children) == null ? void 0 : r.map((i) => H(i, e))
|
|
266
282
|
};
|
|
267
283
|
}
|
|
268
|
-
function
|
|
269
|
-
var
|
|
284
|
+
function q(n) {
|
|
285
|
+
var f;
|
|
270
286
|
const e = n.filter((t) => !t.hidden), r = n.filter((t) => t.hidden), i = [], h = (t, d) => {
|
|
271
|
-
var
|
|
287
|
+
var l, c;
|
|
272
288
|
for (const a of t) {
|
|
273
289
|
if (a.hidden) {
|
|
274
290
|
const u = [...d, a.label || a.id].join(" / ");
|
|
@@ -276,7 +292,7 @@ function G(n) {
|
|
|
276
292
|
...a,
|
|
277
293
|
label: u,
|
|
278
294
|
// 隐藏区扁平展示;子树已整体隐藏时保留 children 供展开,否则不再嵌套重复项
|
|
279
|
-
children: (
|
|
295
|
+
children: (l = a.children) != null && l.length ? a.children : void 0
|
|
280
296
|
});
|
|
281
297
|
continue;
|
|
282
298
|
}
|
|
@@ -284,31 +300,32 @@ function G(n) {
|
|
|
284
300
|
}
|
|
285
301
|
};
|
|
286
302
|
for (const t of e)
|
|
287
|
-
(
|
|
303
|
+
(f = t.children) != null && f.length && h(t.children, [t.label || t.id]);
|
|
288
304
|
return { visible: e, hidden: [...r, ...i] };
|
|
289
305
|
}
|
|
290
306
|
export {
|
|
291
307
|
L as COLUMN_CONFIG_COL_KEY,
|
|
292
|
-
|
|
293
|
-
|
|
308
|
+
$ as COLUMN_RESIZE_MAX_WIDTH,
|
|
309
|
+
X as COLUMN_RESIZE_MIN_WIDTH,
|
|
294
310
|
O as FLEX_SPACER_COL_KEY,
|
|
295
|
-
|
|
296
|
-
|
|
311
|
+
j as applyColumnConfig,
|
|
312
|
+
D as applyLeafWidthOverrides,
|
|
297
313
|
E as clampColumnWidth,
|
|
298
314
|
Z as clearColumnWidthAtPath,
|
|
299
|
-
|
|
315
|
+
B as columnsLeafPathSignature,
|
|
300
316
|
T as columnsToConfig,
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
317
|
+
v as columnsToPanelItems,
|
|
318
|
+
F as configHasLeafWidths,
|
|
319
|
+
z as copyColumnWidths,
|
|
320
|
+
U as hideColumnAtPath,
|
|
321
|
+
G as insertBeforeFixedRight,
|
|
322
|
+
Y as isFixedColumn,
|
|
323
|
+
x as isInternalColumnKey,
|
|
324
|
+
V as mergePanelWithConfig,
|
|
325
|
+
P as normalizeFixedColumnOrder,
|
|
326
|
+
R as panelItemsToConfig,
|
|
327
|
+
m as setColumnWidthAtPath,
|
|
311
328
|
W as shortChildId,
|
|
312
|
-
|
|
329
|
+
q as splitVisibleHidden
|
|
313
330
|
};
|
|
314
331
|
//# sourceMappingURL=columnConfigUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"columnConfigUtils.js","sources":["../../../src/components/Table/columnConfigUtils.ts"],"sourcesContent":["import type { ColumnsType } from 'antd/es/table';\nimport type {\n ColumnConfigPanelItem,\n ColumnTypeAny,\n TableColumnConfigItem,\n} from './columnConfigTypes';\n\nexport type { ColumnTypeAny };\n/** 列配置齿轮列 key;不进面板 / 持久化 */\nexport const COLUMN_CONFIG_COL_KEY = '__marsun_column_config';\n/** 弹性占位列:吃掉表宽多余空间,避免固定列被撑开;不进面板 / 持久化 */\nexport const FLEX_SPACER_COL_KEY = '__marsun_flex_spacer';\n\n/** 列拖宽默认最小 / 最大(px) */\nexport const COLUMN_RESIZE_MIN_WIDTH = 48;\nexport const COLUMN_RESIZE_MAX_WIDTH = 480;\n\nexport function clampColumnWidth(\n w: number,\n min: number = COLUMN_RESIZE_MIN_WIDTH,\n max: number = COLUMN_RESIZE_MAX_WIDTH,\n): number {\n if (!Number.isFinite(w)) return min;\n const lo = Number.isFinite(min) ? min : COLUMN_RESIZE_MIN_WIDTH;\n const hi = Number.isFinite(max) ? max : COLUMN_RESIZE_MAX_WIDTH;\n return Math.min(hi, Math.max(lo, Math.round(w)));\n}\n\nfunction colKey(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\n/** 内部列(齿轮 / 弹性占位等):不进列配置面板与持久化 */\nexport function isInternalColumnKey(key: string): boolean {\n return (\n key === COLUMN_CONFIG_COL_KEY || key === FLEX_SPACER_COL_KEY || key.startsWith('__marsun_')\n );\n}\n\nfunction isInternalCol(col: ColumnTypeAny, index: number): boolean {\n return isInternalColumnKey(colKey(col, index));\n}\n\n/** 叶子相对父级的短 id:TGCV_finished → finished;否则用完整 key */\nexport function shortChildId(parentId: string, childKey: string): string {\n const prefix = `${parentId}_`;\n if (childKey.startsWith(prefix)) return childKey.slice(prefix.length);\n return childKey;\n}\n\nfunction titleToLabel(title: unknown): string {\n if (title == null) return '';\n if (typeof title === 'string' || typeof title === 'number') return String(title);\n return '';\n}\n\n/** 从 columns 生成默认配置(全部显示,保持树结构;子 id 用短名) */\nexport function columnsToConfig(\n columns: ColumnsType<Record<string, unknown>> | undefined,\n parentId?: string,\n): TableColumnConfigItem[] {\n if (!columns?.length) return [];\n return (columns as ColumnTypeAny[])\n .map((col, i) => {\n if (isInternalCol(col, i)) return null;\n const full = colKey(col, i);\n const id = parentId ? shortChildId(parentId, full) : full;\n const children = col.children?.length\n ? columnsToConfig(col.children as ColumnsType<Record<string, unknown>>, full)\n : undefined;\n return children?.length ? { id, children } : { id };\n })\n .filter(Boolean) as TableColumnConfigItem[];\n}\n\n/** columns → 面板树(含 title 文案);子 id 用短名与持久化一致 */\nexport function columnsToPanelItems(\n columns: ColumnsType<Record<string, unknown>> | undefined,\n hiddenIds?: Set<string>,\n parentId?: string,\n): ColumnConfigPanelItem[] {\n if (!columns?.length) return [];\n return (columns as ColumnTypeAny[])\n .map((col, i) => {\n if (isInternalCol(col, i)) return null;\n const full = colKey(col, i);\n const id = parentId ? shortChildId(parentId, full) : full;\n const label = titleToLabel(col.title) || id;\n const children = col.children?.length\n ? columnsToPanelItems(col.children as ColumnsType<Record<string, unknown>>, hiddenIds, full)\n : undefined;\n const childAllHidden =\n children?.length && children.every((c) => c.hidden || (hiddenIds?.has(c.id) ?? false));\n const hidden = hiddenIds?.has(id) || Boolean(childAllHidden);\n return {\n id,\n title: col.title,\n label,\n hidden: Boolean(hidden),\n children,\n };\n })\n .filter(Boolean) as ColumnConfigPanelItem[];\n}\n\nfunction isHiddenItem(item: TableColumnConfigItem): boolean {\n if (item.hidden) return true;\n if (item.children?.length && item.children.every(isHiddenItem)) return true;\n return false;\n}\n\nfunction findChildCol(parent: ColumnTypeAny, childId: string): ColumnTypeAny | undefined {\n const kids = (parent.children || []) as ColumnTypeAny[];\n return kids.find((c, i) => {\n const full = colKey(c, i);\n const parentFull = colKey(parent, 0);\n // parent key 可能与 map 不一致,用 shortChildId 对每个可能的 parent key\n return (\n shortChildId(String(parent.key ?? ''), full) === childId ||\n shortChildId(parentFull, full) === childId ||\n full === childId ||\n full.endsWith(`_${childId}`)\n );\n });\n}\n\nexport type ApplyColumnConfigOptions = {\n minWidth?: number;\n maxWidth?: number;\n};\n\n/** 按配置重排列并过滤 hidden;子列相对父列解析;叶子 width 写入并 clamp */\nexport function applyColumnConfig<RecordType extends object>(\n columns: ColumnsType<RecordType> | undefined,\n config: TableColumnConfigItem[] | null | undefined,\n options?: ApplyColumnConfigOptions,\n): ColumnsType<RecordType> {\n if (!columns?.length) return columns || [];\n if (!config?.length) return columns;\n\n const minW = options?.minWidth ?? COLUMN_RESIZE_MIN_WIDTH;\n const maxW = options?.maxWidth ?? COLUMN_RESIZE_MAX_WIDTH;\n\n const topById = new Map<string, ColumnTypeAny>();\n (columns as ColumnTypeAny[]).forEach((col, i) => {\n topById.set(colKey(col, i), col);\n });\n\n const buildLevel = (\n items: TableColumnConfigItem[],\n sourceCols: ColumnTypeAny[],\n parent?: ColumnTypeAny,\n ): ColumnTypeAny[] => {\n const out: ColumnTypeAny[] = [];\n const used = new Set<string>();\n\n for (const item of items) {\n if (isHiddenItem(item)) {\n used.add(item.id);\n continue;\n }\n let src: ColumnTypeAny | undefined;\n if (parent) {\n src = findChildCol(parent, item.id);\n } else {\n src = topById.get(item.id);\n }\n if (!src) continue;\n used.add(item.id);\n\n if (item.children?.length && src.children?.length) {\n const childCols = buildLevel(item.children, src.children as ColumnTypeAny[], src);\n if (!childCols.length) continue;\n out.push({ ...src, children: childCols as ColumnsType<Record<string, unknown>> });\n } else {\n const next = { ...src };\n if (typeof item.width === 'number' && Number.isFinite(item.width)) {\n next.width = clampColumnWidth(item.width, minW, maxW);\n }\n out.push(next);\n }\n }\n\n // 配置未覆盖的同级列追加末尾\n sourceCols.forEach((col, i) => {\n const full = colKey(col, i);\n const id = parent ? shortChildId(String(parent.key ?? colKey(parent, 0)), full) : full;\n if (!used.has(id) && !used.has(full)) {\n out.push(col);\n }\n });\n\n return out;\n };\n\n return buildLevel(config, columns as ColumnTypeAny[]) as ColumnsType<RecordType>;\n}\n\n/** 仅按 path 合并叶子 width(不改顺序/显隐);overrides 优先 */\nexport function applyLeafWidthOverrides<RecordType extends object>(\n columns: ColumnsType<RecordType> | undefined,\n widthByPath: Record<string, number> | null | undefined,\n options?: ApplyColumnConfigOptions,\n parentFullKey?: string,\n path: string[] = [],\n): ColumnsType<RecordType> {\n if (!columns?.length || !widthByPath || !Object.keys(widthByPath).length) {\n return columns || [];\n }\n const minW = options?.minWidth ?? COLUMN_RESIZE_MIN_WIDTH;\n const maxW = options?.maxWidth ?? COLUMN_RESIZE_MAX_WIDTH;\n\n return (columns as ColumnTypeAny[]).map((col, i) => {\n const full = colKey(col, i);\n if (isInternalColumnKey(full)) return col as ColumnTypeAny;\n const configId = parentFullKey ? shortChildId(parentFullKey, full) : full;\n const nextPath = [...path, configId];\n if (col.children?.length) {\n return {\n ...col,\n children: applyLeafWidthOverrides(\n col.children as ColumnsType<RecordType>,\n widthByPath,\n options,\n full,\n nextPath,\n ),\n } as ColumnTypeAny;\n }\n const key = nextPath.join('/');\n const raw = widthByPath[key];\n if (typeof raw !== 'number' || !Number.isFinite(raw)) return col as ColumnTypeAny;\n return { ...col, width: clampColumnWidth(raw, minW, maxW) } as ColumnTypeAny;\n }) as ColumnsType<RecordType>;\n}\n\n/** 找最右可见叶子列路径(用于挂齿轮) */\nexport function findRightmostLeafPath(\n columns: ColumnsType<Record<string, unknown>> | undefined,\n): number[] | null {\n if (!columns?.length) return null;\n const cols = columns as ColumnTypeAny[];\n const last = cols.length - 1;\n const col = cols[last];\n if (!col) return null;\n if (col.children?.length) {\n const sub = findRightmostLeafPath(col.children as ColumnsType<Record<string, unknown>>);\n if (!sub) return [last];\n return [last, ...sub];\n }\n return [last];\n}\n\nexport function getColumnFixed(\n columns: ColumnsType<Record<string, unknown>> | undefined,\n path: number[],\n): 'left' | 'right' | boolean | undefined {\n let cur: ColumnTypeAny[] | undefined = columns as ColumnTypeAny[] | undefined;\n let fixed: 'left' | 'right' | boolean | undefined;\n for (const idx of path) {\n if (!cur?.[idx]) return fixed;\n fixed = cur[idx].fixed ?? fixed;\n cur = cur[idx].children as ColumnTypeAny[] | undefined;\n }\n return fixed;\n}\n\n/** 在指定 path 的叶子 title 上注入节点 */\nexport function injectTitleAtPath<RecordType extends object>(\n columns: ColumnsType<RecordType>,\n path: number[],\n inject: (originalTitle: unknown) => unknown,\n): ColumnsType<RecordType> {\n if (!path.length) return columns;\n const clone = (columns as ColumnTypeAny[]).map((c) => ({ ...c }));\n let cur = clone;\n for (let i = 0; i < path.length; i++) {\n const idx = path[i]!;\n const prev = cur[idx];\n if (!prev) return columns;\n const col = { ...prev };\n cur[idx] = col;\n if (i === path.length - 1) {\n col.title = inject(col.title) as ColumnTypeAny['title'];\n } else if (col.children) {\n col.children = (col.children as ColumnTypeAny[]).map((c) => ({ ...c }));\n cur = col.children as ColumnTypeAny[];\n }\n }\n return clone as ColumnsType<RecordType>;\n}\n\n/** 面板草稿 → 持久化 config(hidden 的也写入,保证顺序可恢复) */\nexport function panelItemsToConfig(items: ColumnConfigPanelItem[]): TableColumnConfigItem[] {\n return items.map((it) => {\n const children = it.children?.length ? panelItemsToConfig(it.children) : undefined;\n const base: TableColumnConfigItem = { id: it.id };\n if (it.hidden) base.hidden = true;\n if (children?.length) base.children = children;\n return base;\n });\n}\n\n/** 按配置路径隐藏节点(含子树) */\nexport function hideColumnAtPath(\n items: TableColumnConfigItem[],\n path: string[],\n): TableColumnConfigItem[] {\n if (!path.length) return items;\n const [head, ...rest] = path;\n return items.map((it) => {\n if (it.id !== head) return it;\n if (!rest.length) {\n return hideConfigDeep(it);\n }\n const children = it.children?.length ? hideColumnAtPath(it.children, rest) : it.children;\n const allHidden = children?.length ? children.every(isConfigHidden) : it.hidden;\n return { ...it, children, hidden: allHidden || it.hidden };\n });\n}\n\n/** 按 path 写入叶子 width;path 不存在时原样返回 */\nexport function setColumnWidthAtPath(\n items: TableColumnConfigItem[],\n path: string[],\n width: number,\n options?: ApplyColumnConfigOptions,\n): TableColumnConfigItem[] {\n if (!path.length) return items;\n const minW = options?.minWidth ?? COLUMN_RESIZE_MIN_WIDTH;\n const maxW = options?.maxWidth ?? COLUMN_RESIZE_MAX_WIDTH;\n const clamped = clampColumnWidth(width, minW, maxW);\n const [head, ...rest] = path;\n let hit = false;\n const next = items.map((it) => {\n if (it.id !== head) return it;\n hit = true;\n if (!rest.length) {\n return { ...it, width: clamped };\n }\n if (!it.children?.length) return it;\n return { ...it, children: setColumnWidthAtPath(it.children, rest, clamped, options) };\n });\n return hit ? next : items;\n}\n\n/** 按 path 清除叶子自定义 width(删字段,回到代码默认/弹性) */\nexport function clearColumnWidthAtPath(\n items: TableColumnConfigItem[],\n path: string[],\n): TableColumnConfigItem[] {\n if (!path.length) return items;\n const [head, ...rest] = path;\n let hit = false;\n const next = items.map((it) => {\n if (it.id !== head) return it;\n hit = true;\n if (!rest.length) {\n if (it.width === undefined) return it;\n const { width: _w, ...restItem } = it;\n return restItem;\n }\n if (!it.children?.length) return it;\n return { ...it, children: clearColumnWidthAtPath(it.children, rest) };\n });\n return hit ? next : items;\n}\n\n/** 面板确认后的 config 不含 width;从旧 prefs 按 path 拷回,避免拖宽被面板保存冲掉。 */\nexport function copyColumnWidths(\n target: TableColumnConfigItem[],\n source: TableColumnConfigItem[] | null | undefined,\n): TableColumnConfigItem[] {\n if (!source?.length) return target;\n const widthByPath = new Map<string, number>();\n const collect = (items: TableColumnConfigItem[], prefix: string) => {\n for (const it of items) {\n const key = prefix ? `${prefix}/${it.id}` : it.id;\n if (typeof it.width === 'number' && Number.isFinite(it.width)) {\n widthByPath.set(key, it.width);\n }\n if (it.children?.length) collect(it.children, key);\n }\n };\n collect(source, '');\n if (!widthByPath.size) return target;\n\n const apply = (items: TableColumnConfigItem[], prefix: string): TableColumnConfigItem[] =>\n items.map((it) => {\n const key = prefix ? `${prefix}/${it.id}` : it.id;\n const children = it.children?.length ? apply(it.children, key) : it.children;\n const w = widthByPath.get(key);\n if (w == null) return children !== it.children ? { ...it, children } : it;\n return { ...it, width: w, children };\n });\n return apply(target, '');\n}\n\n/** prefs/config 是否含任意叶子自定义 width(用于挂弹性占位列) */\nexport function configHasLeafWidths(items: TableColumnConfigItem[] | null | undefined): boolean {\n if (!items?.length) return false;\n for (const it of items) {\n if (typeof it.width === 'number' && Number.isFinite(it.width)) return true;\n if (it.children?.length && configHasLeafWidths(it.children)) return true;\n }\n return false;\n}\n\n/** 是否固定列(left / right / true / start / end) */\nexport function isFixedColumn(col: { fixed?: unknown } | null | undefined): boolean {\n const f = col?.fixed;\n return f === 'left' || f === 'right' || f === true || f === 'start' || f === 'end';\n}\n\n/**\n * 将弹性占位插到首个右侧固定列 **之前**(`right` / `end`)。\n * 若插在右侧固定列之后,antd 固定列栈会断,表现为操作列不再 sticky / 表头错位。\n */\nexport function insertBeforeFixedRight<T extends { fixed?: unknown }>(\n columns: T[],\n spacer: T,\n): T[] {\n if (!columns.length) return [spacer];\n const idx = columns.findIndex((c) => c.fixed === 'right' || c.fixed === 'end');\n if (idx < 0) return [...columns, spacer];\n return [...columns.slice(0, idx), spacer, ...columns.slice(idx)];\n}\n\n/**\n * 叶子 path 签名;columns 结构变时用于清空 widthOverrides。\n * 例:`factory\\0name\\0TGCV/finished`\n */\nexport function columnsLeafPathSignature(\n columns: ColumnsType<Record<string, unknown>> | undefined,\n parentFullKey?: string,\n path: string[] = [],\n): string {\n if (!columns?.length) return '';\n const parts: string[] = [];\n (columns as ColumnTypeAny[]).forEach((col, i) => {\n const full = colKey(col, i);\n if (isInternalColumnKey(full)) return;\n const configId = parentFullKey ? shortChildId(parentFullKey, full) : full;\n const nextPath = [...path, configId];\n if (col.children?.length) {\n const sub = columnsLeafPathSignature(\n col.children as ColumnsType<Record<string, unknown>>,\n full,\n nextPath,\n );\n if (sub) parts.push(sub);\n return;\n }\n parts.push(nextPath.join('/'));\n });\n return parts.join('\\0');\n}\n\nfunction hideConfigDeep(item: TableColumnConfigItem): TableColumnConfigItem {\n return {\n ...item,\n hidden: true,\n children: item.children?.map(hideConfigDeep),\n };\n}\n\nfunction isConfigHidden(item: TableColumnConfigItem): boolean {\n if (item.hidden) return true;\n if (item.children?.length && item.children.every(isConfigHidden)) return true;\n return false;\n}\n\n/** 用已保存 config 给面板打 hidden 标记,并按 config 排序 */\nexport function mergePanelWithConfig(\n defaults: ColumnConfigPanelItem[],\n config: TableColumnConfigItem[] | null | undefined,\n): ColumnConfigPanelItem[] {\n if (!config?.length) return defaults.map(clonePanel);\n\n const byId = new Map(defaults.map((d) => [d.id, d]));\n const used = new Set<string>();\n\n const mapItem = (\n cfg: TableColumnConfigItem,\n fallback?: ColumnConfigPanelItem,\n ): ColumnConfigPanelItem | null => {\n const src = fallback || byId.get(cfg.id);\n if (!src) return null;\n used.add(cfg.id);\n const childDefaults = src.children || [];\n const childById = new Map(childDefaults.map((c) => [c.id, c]));\n let children: ColumnConfigPanelItem[] | undefined;\n if (cfg.children?.length) {\n children = cfg.children\n .map((c) => mapItem(c, childById.get(c.id)))\n .filter(Boolean) as ColumnConfigPanelItem[];\n for (const cd of childDefaults) {\n if (!cfg.children.some((c) => c.id === cd.id)) {\n children.push(clonePanel(cd));\n }\n }\n } else if (childDefaults.length) {\n children = childDefaults.map(clonePanel);\n }\n const hidden =\n Boolean(cfg.hidden) || Boolean(children?.length && children.every((c) => c.hidden));\n // 父 hidden 时级联子树,避免「父隐子显」的脏持久化态\n const nextChildren =\n hidden && children?.length ? children.map((c) => cascadePanelHidden(c, true)) : children;\n return {\n id: src.id,\n title: src.title,\n label: src.label,\n hidden,\n children: nextChildren,\n };\n };\n\n const ordered: ColumnConfigPanelItem[] = [];\n for (const cfg of config) {\n const mapped = mapItem(cfg);\n if (mapped) ordered.push(mapped);\n }\n for (const d of defaults) {\n if (!used.has(d.id)) ordered.push(clonePanel(d));\n }\n return ordered;\n}\n\nfunction clonePanel(item: ColumnConfigPanelItem): ColumnConfigPanelItem {\n return {\n ...item,\n children: item.children?.map(clonePanel),\n };\n}\n\n/** 面板项整棵子树打 hidden(加载已存 config 时与 toggle 级联对齐) */\nfunction cascadePanelHidden(item: ColumnConfigPanelItem, hidden: boolean): ColumnConfigPanelItem {\n return {\n ...item,\n hidden,\n children: item.children?.map((c) => cascadePanelHidden(c, hidden)),\n };\n}\n\nexport function splitVisibleHidden(items: ColumnConfigPanelItem[]): {\n visible: ColumnConfigPanelItem[];\n hidden: ColumnConfigPanelItem[];\n} {\n const visible = items.filter((it) => !it.hidden);\n const topHidden = items.filter((it) => it.hidden);\n const nestedHidden: ColumnConfigPanelItem[] = [];\n\n const walk = (nodes: ColumnConfigPanelItem[], pathLabels: string[]) => {\n for (const it of nodes) {\n if (it.hidden) {\n const pathLabel = [...pathLabels, it.label || it.id].join(' / ');\n nestedHidden.push({\n ...it,\n label: pathLabel,\n // 隐藏区扁平展示;子树已整体隐藏时保留 children 供展开,否则不再嵌套重复项\n children: it.children?.length ? it.children : undefined,\n });\n continue;\n }\n if (it.children?.length) {\n walk(it.children, [...pathLabels, it.label || it.id]);\n }\n }\n };\n\n // 仅从「仍显示的顶层」往下收二/三级隐藏项(顶层整棵隐藏已在 topHidden)\n for (const top of visible) {\n if (top.children?.length) {\n walk(top.children, [top.label || top.id]);\n }\n }\n\n return { visible, hidden: [...topHidden, ...nestedHidden] };\n}\n"],"names":["COLUMN_CONFIG_COL_KEY","FLEX_SPACER_COL_KEY","COLUMN_RESIZE_MIN_WIDTH","COLUMN_RESIZE_MAX_WIDTH","clampColumnWidth","w","min","max","lo","hi","colKey","col","index","isInternalColumnKey","key","isInternalCol","shortChildId","parentId","childKey","prefix","titleToLabel","title","columnsToConfig","columns","_a","full","id","children","columnsToPanelItems","hiddenIds","i","label","hidden","c","isHiddenItem","item","findChildCol","parent","childId","parentFull","applyColumnConfig","config","options","minW","maxW","topById","buildLevel","items","sourceCols","_b","out","used","src","childCols","next","applyLeafWidthOverrides","widthByPath","parentFullKey","path","configId","nextPath","raw","panelItemsToConfig","it","base","hideColumnAtPath","head","rest","hideConfigDeep","allHidden","isConfigHidden","setColumnWidthAtPath","width","clamped","hit","clearColumnWidthAtPath","_w","restItem","copyColumnWidths","target","source","collect","apply","configHasLeafWidths","isFixedColumn","f","insertBeforeFixedRight","spacer","idx","columnsLeafPathSignature","parts","sub","mergePanelWithConfig","defaults","clonePanel","byId","d","mapItem","cfg","fallback","childDefaults","childById","cd","nextChildren","cascadePanelHidden","ordered","mapped","splitVisibleHidden","visible","topHidden","nestedHidden","walk","nodes","pathLabels","pathLabel","top"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"columnConfigUtils.js","sources":["../../../src/components/Table/columnConfigUtils.ts"],"sourcesContent":["import type { ColumnsType } from 'antd/es/table';\nimport type {\n ColumnConfigPanelItem,\n ColumnTypeAny,\n TableColumnConfigItem,\n} from './columnConfigTypes';\n\nexport type { ColumnTypeAny };\n/** 列配置齿轮列 key;不进面板 / 持久化 */\nexport const COLUMN_CONFIG_COL_KEY = '__marsun_column_config';\n/** 弹性占位列:吃掉表宽多余空间,避免固定列被撑开;不进面板 / 持久化 */\nexport const FLEX_SPACER_COL_KEY = '__marsun_flex_spacer';\n\n/** 列拖宽默认最小 / 最大(px) */\nexport const COLUMN_RESIZE_MIN_WIDTH = 48;\nexport const COLUMN_RESIZE_MAX_WIDTH = 480;\n\nexport function clampColumnWidth(\n w: number,\n min: number = COLUMN_RESIZE_MIN_WIDTH,\n max: number = COLUMN_RESIZE_MAX_WIDTH,\n): number {\n if (!Number.isFinite(w)) return min;\n const lo = Number.isFinite(min) ? min : COLUMN_RESIZE_MIN_WIDTH;\n const hi = Number.isFinite(max) ? max : COLUMN_RESIZE_MAX_WIDTH;\n return Math.min(hi, Math.max(lo, Math.round(w)));\n}\n\nfunction colKey(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\n/** 内部列(齿轮 / 弹性占位等):不进列配置面板与持久化 */\nexport function isInternalColumnKey(key: string): boolean {\n return (\n key === COLUMN_CONFIG_COL_KEY || key === FLEX_SPACER_COL_KEY || key.startsWith('__marsun_')\n );\n}\n\nfunction isInternalCol(col: ColumnTypeAny, index: number): boolean {\n return isInternalColumnKey(colKey(col, index));\n}\n\n/** 叶子相对父级的短 id:TGCV_finished → finished;否则用完整 key */\nexport function shortChildId(parentId: string, childKey: string): string {\n const prefix = `${parentId}_`;\n if (childKey.startsWith(prefix)) return childKey.slice(prefix.length);\n return childKey;\n}\n\nfunction titleToLabel(title: unknown): string {\n if (title == null) return '';\n if (typeof title === 'string' || typeof title === 'number') return String(title);\n return '';\n}\n\n/** 从 columns 生成默认配置(全部显示,保持树结构;子 id 用短名) */\nexport function columnsToConfig(\n columns: ColumnsType<Record<string, unknown>> | undefined,\n parentId?: string,\n): TableColumnConfigItem[] {\n if (!columns?.length) return [];\n return (columns as ColumnTypeAny[])\n .map((col, i) => {\n if (isInternalCol(col, i)) return null;\n const full = colKey(col, i);\n const id = parentId ? shortChildId(parentId, full) : full;\n const children = col.children?.length\n ? columnsToConfig(col.children as ColumnsType<Record<string, unknown>>, full)\n : undefined;\n return children?.length ? { id, children } : { id };\n })\n .filter(Boolean) as TableColumnConfigItem[];\n}\n\n/** columns → 面板树(含 title 文案);子 id 用短名与持久化一致 */\nexport function columnsToPanelItems(\n columns: ColumnsType<Record<string, unknown>> | undefined,\n hiddenIds?: Set<string>,\n parentId?: string,\n): ColumnConfigPanelItem[] {\n if (!columns?.length) return [];\n return (columns as ColumnTypeAny[])\n .map((col, i) => {\n if (isInternalCol(col, i)) return null;\n const full = colKey(col, i);\n const id = parentId ? shortChildId(parentId, full) : full;\n const label = titleToLabel(col.title) || id;\n const children = col.children?.length\n ? columnsToPanelItems(col.children as ColumnsType<Record<string, unknown>>, hiddenIds, full)\n : undefined;\n const childAllHidden =\n children?.length && children.every((c) => c.hidden || (hiddenIds?.has(c.id) ?? false));\n const hidden = hiddenIds?.has(id) || Boolean(childAllHidden);\n return {\n id,\n title: col.title,\n label,\n hidden: Boolean(hidden),\n children,\n };\n })\n .filter(Boolean) as ColumnConfigPanelItem[];\n}\n\nfunction isHiddenItem(item: TableColumnConfigItem): boolean {\n if (item.hidden) return true;\n if (item.children?.length && item.children.every(isHiddenItem)) return true;\n return false;\n}\n\nfunction findChildCol(parent: ColumnTypeAny, childId: string): ColumnTypeAny | undefined {\n const kids = (parent.children || []) as ColumnTypeAny[];\n return kids.find((c, i) => {\n const full = colKey(c, i);\n const parentFull = colKey(parent, 0);\n // parent key 可能与 map 不一致,用 shortChildId 对每个可能的 parent key\n return (\n shortChildId(String(parent.key ?? ''), full) === childId ||\n shortChildId(parentFull, full) === childId ||\n full === childId ||\n full.endsWith(`_${childId}`)\n );\n });\n}\n\nexport type ApplyColumnConfigOptions = {\n minWidth?: number;\n maxWidth?: number;\n};\n\n/** 按配置重排列并过滤 hidden;子列相对父列解析;叶子 width 写入并 clamp */\nexport function applyColumnConfig<RecordType extends object>(\n columns: ColumnsType<RecordType> | undefined,\n config: TableColumnConfigItem[] | null | undefined,\n options?: ApplyColumnConfigOptions,\n): ColumnsType<RecordType> {\n if (!columns?.length) return columns || [];\n if (!config?.length) return columns;\n\n const minW = options?.minWidth ?? COLUMN_RESIZE_MIN_WIDTH;\n const maxW = options?.maxWidth ?? COLUMN_RESIZE_MAX_WIDTH;\n\n const topById = new Map<string, ColumnTypeAny>();\n (columns as ColumnTypeAny[]).forEach((col, i) => {\n topById.set(colKey(col, i), col);\n });\n\n const buildLevel = (\n items: TableColumnConfigItem[],\n sourceCols: ColumnTypeAny[],\n parent?: ColumnTypeAny,\n ): ColumnTypeAny[] => {\n const out: ColumnTypeAny[] = [];\n const used = new Set<string>();\n\n for (const item of items) {\n if (isHiddenItem(item)) {\n used.add(item.id);\n continue;\n }\n let src: ColumnTypeAny | undefined;\n if (parent) {\n src = findChildCol(parent, item.id);\n } else {\n src = topById.get(item.id);\n }\n if (!src) continue;\n used.add(item.id);\n\n if (item.children?.length && src.children?.length) {\n const childCols = buildLevel(item.children, src.children as ColumnTypeAny[], src);\n if (!childCols.length) continue;\n out.push({ ...src, children: childCols as ColumnsType<Record<string, unknown>> });\n } else {\n const next = { ...src };\n if (typeof item.width === 'number' && Number.isFinite(item.width)) {\n next.width = clampColumnWidth(item.width, minW, maxW);\n }\n out.push(next);\n }\n }\n\n // 配置未覆盖的同级列追加末尾\n sourceCols.forEach((col, i) => {\n const full = colKey(col, i);\n const id = parent ? shortChildId(String(parent.key ?? colKey(parent, 0)), full) : full;\n if (!used.has(id) && !used.has(full)) {\n out.push(col);\n }\n });\n\n return out;\n };\n\n // 列配置拖拽 / 增量列追加末尾,可能把非固定列夹到 fixed:right 之后(或把 fixed:left 拖到中间),\n // antd sticky 会断 → 操作列跟着横滑。应用配置后强制归位。\n return normalizeFixedColumnOrder(\n buildLevel(config, columns as ColumnTypeAny[]),\n ) as ColumnsType<RecordType>;\n}\n\n/** 仅按 path 合并叶子 width(不改顺序/显隐);overrides 优先 */\nexport function applyLeafWidthOverrides<RecordType extends object>(\n columns: ColumnsType<RecordType> | undefined,\n widthByPath: Record<string, number> | null | undefined,\n options?: ApplyColumnConfigOptions,\n parentFullKey?: string,\n path: string[] = [],\n): ColumnsType<RecordType> {\n if (!columns?.length || !widthByPath || !Object.keys(widthByPath).length) {\n return columns || [];\n }\n const minW = options?.minWidth ?? COLUMN_RESIZE_MIN_WIDTH;\n const maxW = options?.maxWidth ?? COLUMN_RESIZE_MAX_WIDTH;\n\n return (columns as ColumnTypeAny[]).map((col, i) => {\n const full = colKey(col, i);\n if (isInternalColumnKey(full)) return col as ColumnTypeAny;\n const configId = parentFullKey ? shortChildId(parentFullKey, full) : full;\n const nextPath = [...path, configId];\n if (col.children?.length) {\n return {\n ...col,\n children: applyLeafWidthOverrides(\n col.children as ColumnsType<RecordType>,\n widthByPath,\n options,\n full,\n nextPath,\n ),\n } as ColumnTypeAny;\n }\n const key = nextPath.join('/');\n const raw = widthByPath[key];\n if (typeof raw !== 'number' || !Number.isFinite(raw)) return col as ColumnTypeAny;\n return { ...col, width: clampColumnWidth(raw, minW, maxW) } as ColumnTypeAny;\n }) as ColumnsType<RecordType>;\n}\n\n/** 找最右可见叶子列路径(用于挂齿轮) */\nexport function findRightmostLeafPath(\n columns: ColumnsType<Record<string, unknown>> | undefined,\n): number[] | null {\n if (!columns?.length) return null;\n const cols = columns as ColumnTypeAny[];\n const last = cols.length - 1;\n const col = cols[last];\n if (!col) return null;\n if (col.children?.length) {\n const sub = findRightmostLeafPath(col.children as ColumnsType<Record<string, unknown>>);\n if (!sub) return [last];\n return [last, ...sub];\n }\n return [last];\n}\n\nexport function getColumnFixed(\n columns: ColumnsType<Record<string, unknown>> | undefined,\n path: number[],\n): 'left' | 'right' | boolean | undefined {\n let cur: ColumnTypeAny[] | undefined = columns as ColumnTypeAny[] | undefined;\n let fixed: 'left' | 'right' | boolean | undefined;\n for (const idx of path) {\n if (!cur?.[idx]) return fixed;\n fixed = cur[idx].fixed ?? fixed;\n cur = cur[idx].children as ColumnTypeAny[] | undefined;\n }\n return fixed;\n}\n\n/** 在指定 path 的叶子 title 上注入节点 */\nexport function injectTitleAtPath<RecordType extends object>(\n columns: ColumnsType<RecordType>,\n path: number[],\n inject: (originalTitle: unknown) => unknown,\n): ColumnsType<RecordType> {\n if (!path.length) return columns;\n const clone = (columns as ColumnTypeAny[]).map((c) => ({ ...c }));\n let cur = clone;\n for (let i = 0; i < path.length; i++) {\n const idx = path[i]!;\n const prev = cur[idx];\n if (!prev) return columns;\n const col = { ...prev };\n cur[idx] = col;\n if (i === path.length - 1) {\n col.title = inject(col.title) as ColumnTypeAny['title'];\n } else if (col.children) {\n col.children = (col.children as ColumnTypeAny[]).map((c) => ({ ...c }));\n cur = col.children as ColumnTypeAny[];\n }\n }\n return clone as ColumnsType<RecordType>;\n}\n\n/** 面板草稿 → 持久化 config(hidden 的也写入,保证顺序可恢复) */\nexport function panelItemsToConfig(items: ColumnConfigPanelItem[]): TableColumnConfigItem[] {\n return items.map((it) => {\n const children = it.children?.length ? panelItemsToConfig(it.children) : undefined;\n const base: TableColumnConfigItem = { id: it.id };\n if (it.hidden) base.hidden = true;\n if (children?.length) base.children = children;\n return base;\n });\n}\n\n/** 按配置路径隐藏节点(含子树) */\nexport function hideColumnAtPath(\n items: TableColumnConfigItem[],\n path: string[],\n): TableColumnConfigItem[] {\n if (!path.length) return items;\n const [head, ...rest] = path;\n return items.map((it) => {\n if (it.id !== head) return it;\n if (!rest.length) {\n return hideConfigDeep(it);\n }\n const children = it.children?.length ? hideColumnAtPath(it.children, rest) : it.children;\n const allHidden = children?.length ? children.every(isConfigHidden) : it.hidden;\n return { ...it, children, hidden: allHidden || it.hidden };\n });\n}\n\n/** 按 path 写入叶子 width;path 不存在时原样返回 */\nexport function setColumnWidthAtPath(\n items: TableColumnConfigItem[],\n path: string[],\n width: number,\n options?: ApplyColumnConfigOptions,\n): TableColumnConfigItem[] {\n if (!path.length) return items;\n const minW = options?.minWidth ?? COLUMN_RESIZE_MIN_WIDTH;\n const maxW = options?.maxWidth ?? COLUMN_RESIZE_MAX_WIDTH;\n const clamped = clampColumnWidth(width, minW, maxW);\n const [head, ...rest] = path;\n let hit = false;\n const next = items.map((it) => {\n if (it.id !== head) return it;\n hit = true;\n if (!rest.length) {\n return { ...it, width: clamped };\n }\n if (!it.children?.length) return it;\n return { ...it, children: setColumnWidthAtPath(it.children, rest, clamped, options) };\n });\n return hit ? next : items;\n}\n\n/** 按 path 清除叶子自定义 width(删字段,回到代码默认/弹性) */\nexport function clearColumnWidthAtPath(\n items: TableColumnConfigItem[],\n path: string[],\n): TableColumnConfigItem[] {\n if (!path.length) return items;\n const [head, ...rest] = path;\n let hit = false;\n const next = items.map((it) => {\n if (it.id !== head) return it;\n hit = true;\n if (!rest.length) {\n if (it.width === undefined) return it;\n const { width: _w, ...restItem } = it;\n return restItem;\n }\n if (!it.children?.length) return it;\n return { ...it, children: clearColumnWidthAtPath(it.children, rest) };\n });\n return hit ? next : items;\n}\n\n/** 面板确认后的 config 不含 width;从旧 prefs 按 path 拷回,避免拖宽被面板保存冲掉。 */\nexport function copyColumnWidths(\n target: TableColumnConfigItem[],\n source: TableColumnConfigItem[] | null | undefined,\n): TableColumnConfigItem[] {\n if (!source?.length) return target;\n const widthByPath = new Map<string, number>();\n const collect = (items: TableColumnConfigItem[], prefix: string) => {\n for (const it of items) {\n const key = prefix ? `${prefix}/${it.id}` : it.id;\n if (typeof it.width === 'number' && Number.isFinite(it.width)) {\n widthByPath.set(key, it.width);\n }\n if (it.children?.length) collect(it.children, key);\n }\n };\n collect(source, '');\n if (!widthByPath.size) return target;\n\n const apply = (items: TableColumnConfigItem[], prefix: string): TableColumnConfigItem[] =>\n items.map((it) => {\n const key = prefix ? `${prefix}/${it.id}` : it.id;\n const children = it.children?.length ? apply(it.children, key) : it.children;\n const w = widthByPath.get(key);\n if (w == null) return children !== it.children ? { ...it, children } : it;\n return { ...it, width: w, children };\n });\n return apply(target, '');\n}\n\n/** prefs/config 是否含任意叶子自定义 width(用于挂弹性占位列) */\nexport function configHasLeafWidths(items: TableColumnConfigItem[] | null | undefined): boolean {\n if (!items?.length) return false;\n for (const it of items) {\n if (typeof it.width === 'number' && Number.isFinite(it.width)) return true;\n if (it.children?.length && configHasLeafWidths(it.children)) return true;\n }\n return false;\n}\n\n/** 是否固定列(left / right / true / start / end) */\nexport function isFixedColumn(col: { fixed?: unknown } | null | undefined): boolean {\n const f = col?.fixed;\n return f === 'left' || f === 'right' || f === true || f === 'start' || f === 'end';\n}\n\nfunction fixedSide(col: { fixed?: unknown } | null | undefined): 'left' | 'right' | null {\n const f = col?.fixed;\n if (f === 'left' || f === 'start' || f === true) return 'left';\n if (f === 'right' || f === 'end') return 'right';\n return null;\n}\n\n/**\n * 顶层列按 antd 固定列约束归位:`fixed:left*` → 中间 → `fixed:right*`。\n * 各组内保持原相对序;已合法则原样返回(引用相等)。\n * 弹性占位无 fixed,归入中间组;齿轮等 `fixed:right` 与操作列一起落在末尾。\n */\nexport function normalizeFixedColumnOrder<T extends { fixed?: unknown }>(\n columns: T[] | undefined,\n): T[] {\n if (!columns?.length) return columns || [];\n const left: T[] = [];\n const middle: T[] = [];\n const right: T[] = [];\n for (const col of columns) {\n const side = fixedSide(col);\n if (side === 'left') left.push(col);\n else if (side === 'right') right.push(col);\n else middle.push(col);\n }\n const next = [...left, ...middle, ...right];\n const same = next.length === columns.length && next.every((col, i) => col === columns[i]);\n return same ? columns : next;\n}\n\n/**\n * 将弹性占位插到首个右侧固定列 **之前**(`right` / `end`)。\n * 若插在右侧固定列之后,antd 固定列栈会断,表现为操作列不再 sticky / 表头错位。\n */\nexport function insertBeforeFixedRight<T extends { fixed?: unknown }>(\n columns: T[],\n spacer: T,\n): T[] {\n if (!columns.length) return [spacer];\n const idx = columns.findIndex((c) => c.fixed === 'right' || c.fixed === 'end');\n if (idx < 0) return [...columns, spacer];\n return [...columns.slice(0, idx), spacer, ...columns.slice(idx)];\n}\n\n/**\n * 叶子 path 签名;columns 结构变时用于清空 widthOverrides。\n * 例:`factory\\0name\\0TGCV/finished`\n */\nexport function columnsLeafPathSignature(\n columns: ColumnsType<Record<string, unknown>> | undefined,\n parentFullKey?: string,\n path: string[] = [],\n): string {\n if (!columns?.length) return '';\n const parts: string[] = [];\n (columns as ColumnTypeAny[]).forEach((col, i) => {\n const full = colKey(col, i);\n if (isInternalColumnKey(full)) return;\n const configId = parentFullKey ? shortChildId(parentFullKey, full) : full;\n const nextPath = [...path, configId];\n if (col.children?.length) {\n const sub = columnsLeafPathSignature(\n col.children as ColumnsType<Record<string, unknown>>,\n full,\n nextPath,\n );\n if (sub) parts.push(sub);\n return;\n }\n parts.push(nextPath.join('/'));\n });\n return parts.join('\\0');\n}\n\nfunction hideConfigDeep(item: TableColumnConfigItem): TableColumnConfigItem {\n return {\n ...item,\n hidden: true,\n children: item.children?.map(hideConfigDeep),\n };\n}\n\nfunction isConfigHidden(item: TableColumnConfigItem): boolean {\n if (item.hidden) return true;\n if (item.children?.length && item.children.every(isConfigHidden)) return true;\n return false;\n}\n\n/** 用已保存 config 给面板打 hidden 标记,并按 config 排序 */\nexport function mergePanelWithConfig(\n defaults: ColumnConfigPanelItem[],\n config: TableColumnConfigItem[] | null | undefined,\n): ColumnConfigPanelItem[] {\n if (!config?.length) return defaults.map(clonePanel);\n\n const byId = new Map(defaults.map((d) => [d.id, d]));\n const used = new Set<string>();\n\n const mapItem = (\n cfg: TableColumnConfigItem,\n fallback?: ColumnConfigPanelItem,\n ): ColumnConfigPanelItem | null => {\n const src = fallback || byId.get(cfg.id);\n if (!src) return null;\n used.add(cfg.id);\n const childDefaults = src.children || [];\n const childById = new Map(childDefaults.map((c) => [c.id, c]));\n let children: ColumnConfigPanelItem[] | undefined;\n if (cfg.children?.length) {\n children = cfg.children\n .map((c) => mapItem(c, childById.get(c.id)))\n .filter(Boolean) as ColumnConfigPanelItem[];\n for (const cd of childDefaults) {\n if (!cfg.children.some((c) => c.id === cd.id)) {\n children.push(clonePanel(cd));\n }\n }\n } else if (childDefaults.length) {\n children = childDefaults.map(clonePanel);\n }\n const hidden =\n Boolean(cfg.hidden) || Boolean(children?.length && children.every((c) => c.hidden));\n // 父 hidden 时级联子树,避免「父隐子显」的脏持久化态\n const nextChildren =\n hidden && children?.length ? children.map((c) => cascadePanelHidden(c, true)) : children;\n return {\n id: src.id,\n title: src.title,\n label: src.label,\n hidden,\n children: nextChildren,\n };\n };\n\n const ordered: ColumnConfigPanelItem[] = [];\n for (const cfg of config) {\n const mapped = mapItem(cfg);\n if (mapped) ordered.push(mapped);\n }\n for (const d of defaults) {\n if (!used.has(d.id)) ordered.push(clonePanel(d));\n }\n return ordered;\n}\n\nfunction clonePanel(item: ColumnConfigPanelItem): ColumnConfigPanelItem {\n return {\n ...item,\n children: item.children?.map(clonePanel),\n };\n}\n\n/** 面板项整棵子树打 hidden(加载已存 config 时与 toggle 级联对齐) */\nfunction cascadePanelHidden(item: ColumnConfigPanelItem, hidden: boolean): ColumnConfigPanelItem {\n return {\n ...item,\n hidden,\n children: item.children?.map((c) => cascadePanelHidden(c, hidden)),\n };\n}\n\nexport function splitVisibleHidden(items: ColumnConfigPanelItem[]): {\n visible: ColumnConfigPanelItem[];\n hidden: ColumnConfigPanelItem[];\n} {\n const visible = items.filter((it) => !it.hidden);\n const topHidden = items.filter((it) => it.hidden);\n const nestedHidden: ColumnConfigPanelItem[] = [];\n\n const walk = (nodes: ColumnConfigPanelItem[], pathLabels: string[]) => {\n for (const it of nodes) {\n if (it.hidden) {\n const pathLabel = [...pathLabels, it.label || it.id].join(' / ');\n nestedHidden.push({\n ...it,\n label: pathLabel,\n // 隐藏区扁平展示;子树已整体隐藏时保留 children 供展开,否则不再嵌套重复项\n children: it.children?.length ? it.children : undefined,\n });\n continue;\n }\n if (it.children?.length) {\n walk(it.children, [...pathLabels, it.label || it.id]);\n }\n }\n };\n\n // 仅从「仍显示的顶层」往下收二/三级隐藏项(顶层整棵隐藏已在 topHidden)\n for (const top of visible) {\n if (top.children?.length) {\n walk(top.children, [top.label || top.id]);\n }\n }\n\n return { visible, hidden: [...topHidden, ...nestedHidden] };\n}\n"],"names":["COLUMN_CONFIG_COL_KEY","FLEX_SPACER_COL_KEY","COLUMN_RESIZE_MIN_WIDTH","COLUMN_RESIZE_MAX_WIDTH","clampColumnWidth","w","min","max","lo","hi","colKey","col","index","isInternalColumnKey","key","isInternalCol","shortChildId","parentId","childKey","prefix","titleToLabel","title","columnsToConfig","columns","_a","full","id","children","columnsToPanelItems","hiddenIds","i","label","hidden","c","isHiddenItem","item","findChildCol","parent","childId","parentFull","applyColumnConfig","config","options","minW","maxW","topById","buildLevel","items","sourceCols","_b","out","used","src","childCols","next","normalizeFixedColumnOrder","applyLeafWidthOverrides","widthByPath","parentFullKey","path","configId","nextPath","raw","panelItemsToConfig","it","base","hideColumnAtPath","head","rest","hideConfigDeep","allHidden","isConfigHidden","setColumnWidthAtPath","width","clamped","hit","clearColumnWidthAtPath","_w","restItem","copyColumnWidths","target","source","collect","apply","configHasLeafWidths","isFixedColumn","f","fixedSide","left","middle","right","side","insertBeforeFixedRight","spacer","idx","columnsLeafPathSignature","parts","sub","mergePanelWithConfig","defaults","clonePanel","byId","d","mapItem","cfg","fallback","childDefaults","childById","cd","nextChildren","cascadePanelHidden","ordered","mapped","splitVisibleHidden","visible","topHidden","nestedHidden","walk","nodes","pathLabels","pathLabel","top"],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { default as Table } from './Table';
|
|
2
2
|
export type { TableProps, TableColumnConfigItem, TableColumnConfigFetcher, TableColumnConfigSaver, TablePrefs, TablePrefsFetcher, TablePrefsSaver, TableFetchHandle, TableFetchMapped, TableFetchQuery, } from './Table';
|
|
3
|
-
export { columnsToConfig, applyColumnConfig, applyLeafWidthOverrides, clearColumnWidthAtPath, clampColumnWidth, columnsLeafPathSignature, COLUMN_CONFIG_COL_KEY, COLUMN_RESIZE_MAX_WIDTH, COLUMN_RESIZE_MIN_WIDTH, configHasLeafWidths, copyColumnWidths, FLEX_SPACER_COL_KEY, insertBeforeFixedRight, isFixedColumn, isInternalColumnKey, parseTablePrefs, serializeTablePrefs, mergeTablePrefs, applyHiddenRows, normalizeHiddenRowKeys, emptyTablePrefs, hideColumnAtPath, setColumnWidthAtPath, } from './Table';
|
|
3
|
+
export { columnsToConfig, applyColumnConfig, applyLeafWidthOverrides, clearColumnWidthAtPath, clampColumnWidth, columnsLeafPathSignature, COLUMN_CONFIG_COL_KEY, COLUMN_RESIZE_MAX_WIDTH, COLUMN_RESIZE_MIN_WIDTH, configHasLeafWidths, copyColumnWidths, FLEX_SPACER_COL_KEY, insertBeforeFixedRight, isFixedColumn, isInternalColumnKey, normalizeFixedColumnOrder, parseTablePrefs, serializeTablePrefs, mergeTablePrefs, applyHiddenRows, normalizeHiddenRowKeys, emptyTablePrefs, hideColumnAtPath, setColumnWidthAtPath, } from './Table';
|
|
@@ -13,6 +13,8 @@ export type CreateActionFormProps = {
|
|
|
13
13
|
scopeMode?: CreateActionScopeMode;
|
|
14
14
|
/** F4:任务标题 placeholder(App 注入;禁写死业务文案) */
|
|
15
15
|
titlePlaceholder?: string;
|
|
16
|
+
/** F4:任务描述 placeholder(App 注入) */
|
|
17
|
+
descriptionPlaceholder?: string;
|
|
16
18
|
/** F4:关联指标 placeholder */
|
|
17
19
|
metricPlaceholder?: string;
|
|
18
20
|
/** scopeMode=none 时展示在截止日期下的短提示(App 注入) */
|