@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,141 +1,195 @@
|
|
|
1
|
-
const
|
|
1
|
+
const S = "__marsun_column_config", k = "__marsun_flex_spacer";
|
|
2
2
|
function p(n, e) {
|
|
3
3
|
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}`;
|
|
4
4
|
}
|
|
5
|
-
function
|
|
6
|
-
return
|
|
5
|
+
function w(n) {
|
|
6
|
+
return n === S || n === k || n.startsWith("__marsun_");
|
|
7
|
+
}
|
|
8
|
+
function b(n, e) {
|
|
9
|
+
return w(p(n, e));
|
|
7
10
|
}
|
|
8
11
|
function C(n, e) {
|
|
9
|
-
const
|
|
10
|
-
return e.startsWith(
|
|
12
|
+
const l = `${n}_`;
|
|
13
|
+
return e.startsWith(l) ? e.slice(l.length) : e;
|
|
11
14
|
}
|
|
12
|
-
function
|
|
15
|
+
function A(n) {
|
|
13
16
|
return n == null ? "" : typeof n == "string" || typeof n == "number" ? String(n) : "";
|
|
14
17
|
}
|
|
15
|
-
function
|
|
16
|
-
return n != null && n.length ? n.map((
|
|
17
|
-
var
|
|
18
|
-
if (
|
|
19
|
-
const
|
|
20
|
-
return t != null && t.length ? { id:
|
|
18
|
+
function E(n, e) {
|
|
19
|
+
return n != null && n.length ? n.map((l, i) => {
|
|
20
|
+
var o;
|
|
21
|
+
if (b(l, i)) return null;
|
|
22
|
+
const r = p(l, i), h = e ? C(e, r) : r, t = (o = l.children) != null && o.length ? E(l.children, r) : void 0;
|
|
23
|
+
return t != null && t.length ? { id: h, children: t } : { id: h };
|
|
21
24
|
}).filter(Boolean) : [];
|
|
22
25
|
}
|
|
23
|
-
function
|
|
24
|
-
return n != null && n.length ? n.map((i,
|
|
26
|
+
function L(n, e, l) {
|
|
27
|
+
return n != null && n.length ? n.map((i, r) => {
|
|
25
28
|
var d;
|
|
26
|
-
if (
|
|
27
|
-
const
|
|
29
|
+
if (b(i, r)) return null;
|
|
30
|
+
const h = p(i, r), t = l ? C(l, h) : h, o = A(i.title) || t, u = (d = i.children) != null && d.length ? L(i.children, e, h) : void 0, s = !!((u == null ? void 0 : u.length) && u.every((f) => f.hidden || !1));
|
|
28
31
|
return {
|
|
29
32
|
id: t,
|
|
30
33
|
title: i.title,
|
|
31
|
-
label:
|
|
32
|
-
hidden: !!
|
|
33
|
-
children:
|
|
34
|
+
label: o,
|
|
35
|
+
hidden: !!s,
|
|
36
|
+
children: u
|
|
34
37
|
};
|
|
35
38
|
}).filter(Boolean) : [];
|
|
36
39
|
}
|
|
37
|
-
function
|
|
40
|
+
function v(n) {
|
|
38
41
|
var e;
|
|
39
|
-
return !!(n.hidden || (e = n.children) != null && e.length && n.children.every(
|
|
42
|
+
return !!(n.hidden || (e = n.children) != null && e.length && n.children.every(v));
|
|
40
43
|
}
|
|
41
|
-
function
|
|
42
|
-
return (n.children || []).find((i,
|
|
43
|
-
const
|
|
44
|
-
return C(String(n.key ?? ""),
|
|
44
|
+
function P(n, e) {
|
|
45
|
+
return (n.children || []).find((i, r) => {
|
|
46
|
+
const h = p(i, r), t = p(n, 0);
|
|
47
|
+
return C(String(n.key ?? ""), h) === e || C(t, h) === e || h === e || h.endsWith(`_${e}`);
|
|
45
48
|
});
|
|
46
49
|
}
|
|
47
|
-
function
|
|
50
|
+
function O(n, e) {
|
|
48
51
|
if (!(n != null && n.length)) return n || [];
|
|
49
52
|
if (!(e != null && e.length)) return n;
|
|
50
|
-
const
|
|
51
|
-
n.forEach((
|
|
52
|
-
|
|
53
|
+
const l = /* @__PURE__ */ new Map();
|
|
54
|
+
n.forEach((r, h) => {
|
|
55
|
+
l.set(p(r, h), r);
|
|
53
56
|
});
|
|
54
|
-
const i = (
|
|
55
|
-
var
|
|
56
|
-
const
|
|
57
|
-
for (const d of
|
|
58
|
-
if (
|
|
59
|
-
|
|
57
|
+
const i = (r, h, t) => {
|
|
58
|
+
var a, s;
|
|
59
|
+
const o = [], u = /* @__PURE__ */ new Set();
|
|
60
|
+
for (const d of r) {
|
|
61
|
+
if (v(d)) {
|
|
62
|
+
u.add(d.id);
|
|
60
63
|
continue;
|
|
61
64
|
}
|
|
62
|
-
let
|
|
63
|
-
if (t ?
|
|
64
|
-
if (
|
|
65
|
-
const
|
|
66
|
-
if (!
|
|
67
|
-
|
|
65
|
+
let f;
|
|
66
|
+
if (t ? f = P(t, d.id) : f = l.get(d.id), !!f)
|
|
67
|
+
if (u.add(d.id), (a = d.children) != null && a.length && ((s = f.children) != null && s.length)) {
|
|
68
|
+
const g = i(d.children, f.children, f);
|
|
69
|
+
if (!g.length) continue;
|
|
70
|
+
o.push({ ...f, children: g });
|
|
68
71
|
} else {
|
|
69
|
-
const
|
|
70
|
-
d.children,
|
|
72
|
+
const g = { ...f };
|
|
73
|
+
d.children, o.push(g);
|
|
71
74
|
}
|
|
72
75
|
}
|
|
73
|
-
return
|
|
74
|
-
const
|
|
75
|
-
!
|
|
76
|
-
}),
|
|
76
|
+
return h.forEach((d, f) => {
|
|
77
|
+
const g = p(d, f), y = t ? C(String(t.key ?? p(t, 0)), g) : g;
|
|
78
|
+
!u.has(y) && !u.has(g) && o.push(d);
|
|
79
|
+
}), o;
|
|
77
80
|
};
|
|
78
81
|
return i(e, n);
|
|
79
82
|
}
|
|
80
|
-
function
|
|
83
|
+
function m(n) {
|
|
81
84
|
return n.map((e) => {
|
|
82
|
-
var
|
|
83
|
-
const
|
|
84
|
-
return e.hidden && (i.hidden = !0),
|
|
85
|
+
var r;
|
|
86
|
+
const l = (r = e.children) != null && r.length ? m(e.children) : void 0, i = { id: e.id };
|
|
87
|
+
return e.hidden && (i.hidden = !0), l != null && l.length && (i.children = l), i;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
function M(n, e) {
|
|
91
|
+
if (!e.length) return n;
|
|
92
|
+
const [l, ...i] = e;
|
|
93
|
+
return n.map((r) => {
|
|
94
|
+
var o;
|
|
95
|
+
if (r.id !== l) return r;
|
|
96
|
+
if (!i.length)
|
|
97
|
+
return I(r);
|
|
98
|
+
const h = (o = r.children) != null && o.length ? M(r.children, i) : r.children, t = h != null && h.length ? h.every(x) : r.hidden;
|
|
99
|
+
return { ...r, children: h, hidden: t || r.hidden };
|
|
85
100
|
});
|
|
86
101
|
}
|
|
87
|
-
function
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
102
|
+
function I(n) {
|
|
103
|
+
var e;
|
|
104
|
+
return {
|
|
105
|
+
...n,
|
|
106
|
+
hidden: !0,
|
|
107
|
+
children: (e = n.children) == null ? void 0 : e.map(I)
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function x(n) {
|
|
111
|
+
var e;
|
|
112
|
+
return !!(n.hidden || (e = n.children) != null && e.length && n.children.every(x));
|
|
113
|
+
}
|
|
114
|
+
function T(n, e) {
|
|
115
|
+
if (!(e != null && e.length)) return n.map(_);
|
|
116
|
+
const l = new Map(n.map((t) => [t.id, t])), i = /* @__PURE__ */ new Set(), r = (t, o) => {
|
|
117
|
+
var y;
|
|
118
|
+
const u = o || l.get(t.id);
|
|
119
|
+
if (!u) return null;
|
|
93
120
|
i.add(t.id);
|
|
94
|
-
const
|
|
121
|
+
const a = u.children || [], s = new Map(a.map((c) => [c.id, c]));
|
|
95
122
|
let d;
|
|
96
|
-
if ((
|
|
97
|
-
d = t.children.map((
|
|
98
|
-
for (const
|
|
99
|
-
t.children.some((
|
|
100
|
-
} else
|
|
101
|
-
const
|
|
123
|
+
if ((y = t.children) != null && y.length) {
|
|
124
|
+
d = t.children.map((c) => r(c, s.get(c.id))).filter(Boolean);
|
|
125
|
+
for (const c of a)
|
|
126
|
+
t.children.some((H) => H.id === c.id) || d.push(_(c));
|
|
127
|
+
} else a.length && (d = a.map(_));
|
|
128
|
+
const f = !!t.hidden || !!(d != null && d.length && d.every((c) => c.hidden)), g = f && (d != null && d.length) ? d.map((c) => B(c, !0)) : d;
|
|
102
129
|
return {
|
|
103
|
-
id:
|
|
104
|
-
title:
|
|
105
|
-
label:
|
|
106
|
-
hidden:
|
|
107
|
-
children:
|
|
130
|
+
id: u.id,
|
|
131
|
+
title: u.title,
|
|
132
|
+
label: u.label,
|
|
133
|
+
hidden: f,
|
|
134
|
+
children: g
|
|
108
135
|
};
|
|
109
|
-
},
|
|
136
|
+
}, h = [];
|
|
110
137
|
for (const t of e) {
|
|
111
|
-
const
|
|
112
|
-
|
|
138
|
+
const o = r(t);
|
|
139
|
+
o && h.push(o);
|
|
113
140
|
}
|
|
114
141
|
for (const t of n)
|
|
115
|
-
i.has(t.id) ||
|
|
116
|
-
return
|
|
142
|
+
i.has(t.id) || h.push(_(t));
|
|
143
|
+
return h;
|
|
117
144
|
}
|
|
118
|
-
function
|
|
145
|
+
function _(n) {
|
|
119
146
|
var e;
|
|
120
147
|
return {
|
|
121
148
|
...n,
|
|
122
|
-
children: (e = n.children) == null ? void 0 : e.map(
|
|
149
|
+
children: (e = n.children) == null ? void 0 : e.map(_)
|
|
123
150
|
};
|
|
124
151
|
}
|
|
125
|
-
function
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
152
|
+
function B(n, e) {
|
|
153
|
+
var l;
|
|
154
|
+
return {
|
|
155
|
+
...n,
|
|
156
|
+
hidden: e,
|
|
157
|
+
children: (l = n.children) == null ? void 0 : l.map((i) => B(i, e))
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
function W(n) {
|
|
161
|
+
var h;
|
|
162
|
+
const e = n.filter((t) => !t.hidden), l = n.filter((t) => t.hidden), i = [], r = (t, o) => {
|
|
163
|
+
var u, a;
|
|
164
|
+
for (const s of t) {
|
|
165
|
+
if (s.hidden) {
|
|
166
|
+
const d = [...o, s.label || s.id].join(" / ");
|
|
167
|
+
i.push({
|
|
168
|
+
...s,
|
|
169
|
+
label: d,
|
|
170
|
+
// 隐藏区扁平展示;子树已整体隐藏时保留 children 供展开,否则不再嵌套重复项
|
|
171
|
+
children: (u = s.children) != null && u.length ? s.children : void 0
|
|
172
|
+
});
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
(a = s.children) != null && a.length && r(s.children, [...o, s.label || s.id]);
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
for (const t of e)
|
|
179
|
+
(h = t.children) != null && h.length && r(t.children, [t.label || t.id]);
|
|
180
|
+
return { visible: e, hidden: [...l, ...i] };
|
|
130
181
|
}
|
|
131
182
|
export {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
183
|
+
S as COLUMN_CONFIG_COL_KEY,
|
|
184
|
+
k as FLEX_SPACER_COL_KEY,
|
|
185
|
+
O as applyColumnConfig,
|
|
186
|
+
E as columnsToConfig,
|
|
187
|
+
L as columnsToPanelItems,
|
|
188
|
+
M as hideColumnAtPath,
|
|
189
|
+
w as isInternalColumnKey,
|
|
190
|
+
T as mergePanelWithConfig,
|
|
191
|
+
m as panelItemsToConfig,
|
|
138
192
|
C as shortChildId,
|
|
139
|
-
|
|
193
|
+
W as splitVisibleHidden
|
|
140
194
|
};
|
|
141
195
|
//# 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\n/** 列配置齿轮列 key;不进面板 / 持久化 */\nexport const COLUMN_CONFIG_COL_KEY = '__marsun_column_config';\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\nfunction isConfigCol(col: ColumnTypeAny, index: number): boolean {\n return colKey(col, index) === COLUMN_CONFIG_COL_KEY;\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 (isConfigCol(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 (isConfigCol(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\n/** 按配置重排列并过滤 hidden;子列相对父列解析 */\nexport function applyColumnConfig<RecordType extends object>(\n columns: ColumnsType<RecordType> | undefined,\n config: TableColumnConfigItem[] | null | undefined,\n): ColumnsType<RecordType> {\n if (!columns?.length) return columns || [];\n if (!config?.length) return columns;\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 (!item.children) {\n // keep children as-is when config leaf but source has group — strip if short ids only\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/** 找最右可见叶子列路径(用于挂齿轮) */\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/** 用已保存 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 return {\n id: src.id,\n title: src.title,\n label: src.label,\n hidden,\n children,\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\nexport function splitVisibleHidden(items: ColumnConfigPanelItem[]): {\n visible: ColumnConfigPanelItem[];\n hidden: ColumnConfigPanelItem[];\n} {\n const visible: ColumnConfigPanelItem[] = [];\n const hidden: ColumnConfigPanelItem[] = [];\n for (const it of items) {\n if (it.hidden) hidden.push(it);\n else visible.push(it);\n }\n return { visible, hidden };\n}\n"],"names":["COLUMN_CONFIG_COL_KEY","colKey","col","index","isConfigCol","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","topById","buildLevel","items","sourceCols","_b","out","used","src","childCols","next","panelItemsToConfig","it","base","mergePanelWithConfig","defaults","clonePanel","byId","d","mapItem","cfg","fallback","childDefaults","childById","cd","ordered","mapped","splitVisibleHidden","visible"],"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\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\n/** 按配置重排列并过滤 hidden;子列相对父列解析 */\nexport function applyColumnConfig<RecordType extends object>(\n columns: ColumnsType<RecordType> | undefined,\n config: TableColumnConfigItem[] | null | undefined,\n): ColumnsType<RecordType> {\n if (!columns?.length) return columns || [];\n if (!config?.length) return columns;\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 (!item.children) {\n // keep children as-is when config leaf but source has group — strip if short ids only\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/** 找最右可见叶子列路径(用于挂齿轮) */\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\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","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","topById","buildLevel","items","sourceCols","_b","out","used","src","childCols","next","panelItemsToConfig","it","base","hideColumnAtPath","path","head","rest","hideConfigDeep","allHidden","isConfigHidden","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
|
-
export type { TableProps, TableColumnConfigItem, TableColumnConfigFetcher, TableColumnConfigSaver, } from './Table';
|
|
3
|
-
export { columnsToConfig, applyColumnConfig, COLUMN_CONFIG_COL_KEY } from './Table';
|
|
2
|
+
export type { TableProps, TableColumnConfigItem, TableColumnConfigFetcher, TableColumnConfigSaver, TablePrefs, TablePrefsFetcher, TablePrefsSaver, } from './Table';
|
|
3
|
+
export { columnsToConfig, applyColumnConfig, COLUMN_CONFIG_COL_KEY, FLEX_SPACER_COL_KEY, isInternalColumnKey, parseTablePrefs, serializeTablePrefs, mergeTablePrefs, applyHiddenRows, normalizeHiddenRowKeys, emptyTablePrefs, hideColumnAtPath, } from './Table';
|
|
@@ -1,7 +1,38 @@
|
|
|
1
|
-
const s = {
|
|
2
|
-
"marsun-table": "_marsun-
|
|
1
|
+
const e = "_headerEyeBtn_1vchc_114", r = "_rowEyeBtn_1vchc_115", h = "_headerTitleWithEye_1vchc_121", t = "_headerTitleText_1vchc_131", a = "_headerDepth0_1vchc_142", c = "_headerDepth1_1vchc_146", _ = "_headerDepth2_1vchc_150", o = "_headerGroup0_1vchc_157", d = "_headerGroup1_1vchc_170", n = "_headerGroup2_1vchc_183", p = "_headerGroup3_1vchc_196", s = "_headerGroup4_1vchc_209", u = "_headerGroup5_1vchc_222", l = "_rowSelectWithEye_1vchc_283", v = {
|
|
2
|
+
"marsun-table-shell": "_marsun-table-shell_1vchc_2",
|
|
3
|
+
"marsun-table-toolbar": "_marsun-table-toolbar_1vchc_9",
|
|
4
|
+
"marsun-table-row-config": "_marsun-table-row-config_1vchc_15",
|
|
5
|
+
"marsun-table": "_marsun-table_1vchc_2",
|
|
6
|
+
headerEyeBtn: e,
|
|
7
|
+
rowEyeBtn: r,
|
|
8
|
+
headerTitleWithEye: h,
|
|
9
|
+
headerTitleText: t,
|
|
10
|
+
headerDepth0: a,
|
|
11
|
+
headerDepth1: c,
|
|
12
|
+
headerDepth2: _,
|
|
13
|
+
headerGroup0: o,
|
|
14
|
+
headerGroup1: d,
|
|
15
|
+
headerGroup2: n,
|
|
16
|
+
headerGroup3: p,
|
|
17
|
+
headerGroup4: s,
|
|
18
|
+
headerGroup5: u,
|
|
19
|
+
rowSelectWithEye: l
|
|
3
20
|
};
|
|
4
21
|
export {
|
|
5
|
-
|
|
22
|
+
v as default,
|
|
23
|
+
a as headerDepth0,
|
|
24
|
+
c as headerDepth1,
|
|
25
|
+
_ as headerDepth2,
|
|
26
|
+
e as headerEyeBtn,
|
|
27
|
+
o as headerGroup0,
|
|
28
|
+
d as headerGroup1,
|
|
29
|
+
n as headerGroup2,
|
|
30
|
+
p as headerGroup3,
|
|
31
|
+
s as headerGroup4,
|
|
32
|
+
u as headerGroup5,
|
|
33
|
+
t as headerTitleText,
|
|
34
|
+
h as headerTitleWithEye,
|
|
35
|
+
r as rowEyeBtn,
|
|
36
|
+
l as rowSelectWithEye
|
|
6
37
|
};
|
|
7
38
|
//# sourceMappingURL=style.module.scss.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { TableColumnConfigItem } from './columnConfigTypes';
|
|
2
|
+
/**
|
|
3
|
+
* user_key 持久化:仅列配置。
|
|
4
|
+
* hiddenRowKeys 曾误入 v2,现已废弃——解析时忽略,序列化不写出。
|
|
5
|
+
*/
|
|
6
|
+
export type TablePrefs = {
|
|
7
|
+
version: 2;
|
|
8
|
+
columns: TableColumnConfigItem[];
|
|
9
|
+
};
|
|
10
|
+
export type TablePrefsFetcher = (tableName: string) => Promise<TablePrefs | null | undefined>;
|
|
11
|
+
export type TablePrefsSaver = (tableName: string, prefs: TablePrefs) => Promise<void>;
|
|
12
|
+
export declare function emptyTablePrefs(columns?: TableColumnConfigItem[]): TablePrefs;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tablePrefsTypes.js","sources":["../../../src/components/Table/tablePrefsTypes.ts"],"sourcesContent":["import type { TableColumnConfigItem } from './columnConfigTypes';\n\n/**\n * user_key 持久化:仅列配置。\n * hiddenRowKeys 曾误入 v2,现已废弃——解析时忽略,序列化不写出。\n */\nexport type TablePrefs = {\n version: 2;\n columns: TableColumnConfigItem[];\n};\n\nexport type TablePrefsFetcher = (tableName: string) => Promise<TablePrefs | null | undefined>;\n\nexport type TablePrefsSaver = (tableName: string, prefs: TablePrefs) => Promise<void>;\n\nexport function emptyTablePrefs(columns: TableColumnConfigItem[] = []): TablePrefs {\n return { version: 2, columns };\n}\n"],"names":["emptyTablePrefs","columns"],"mappings":"AAeO,SAASA,EAAgBC,IAAmC,IAAgB;AACjF,SAAO,EAAE,SAAS,GAAG,SAAAA,EAAA;AACvB;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Key } from 'react';
|
|
2
|
+
import { TablePrefs } from './tablePrefsTypes';
|
|
3
|
+
/** 将任意持久化值解析为 TablePrefs;v1 纯数组 → columns;忽略历史 hiddenRowKeys */
|
|
4
|
+
export declare function parseTablePrefs(raw: unknown): TablePrefs | null;
|
|
5
|
+
/** 只序列化列配置(不写 hiddenRowKeys) */
|
|
6
|
+
export declare function serializeTablePrefs(prefs: TablePrefs): string;
|
|
7
|
+
export declare function mergeTablePrefs(base: TablePrefs | null | undefined, patch: Partial<Pick<TablePrefs, 'columns'>>): TablePrefs;
|
|
8
|
+
/** 过滤隐藏行;locked 行始终保留(即使在 hidden 列表中) */
|
|
9
|
+
export declare function applyHiddenRows<RecordType extends object>(dataSource: readonly RecordType[] | undefined, hiddenRowKeys: readonly string[] | null | undefined, rowKey: string | ((record: RecordType, index: number) => Key) | undefined, lockedRowKeys?: readonly Key[] | null): RecordType[];
|
|
10
|
+
/** 合并隐藏:去掉 locked,去重 */
|
|
11
|
+
export declare function normalizeHiddenRowKeys(keys: readonly Key[] | null | undefined, lockedRowKeys?: readonly Key[] | null): string[];
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { emptyTablePrefs as f } from "./tablePrefsTypes.js";
|
|
2
|
+
function c(n) {
|
|
3
|
+
if (n == null) return null;
|
|
4
|
+
if (typeof n == "string") {
|
|
5
|
+
const e = n.trim();
|
|
6
|
+
if (!e) return null;
|
|
7
|
+
try {
|
|
8
|
+
return c(JSON.parse(e));
|
|
9
|
+
} catch {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
if (Array.isArray(n))
|
|
14
|
+
return f(n);
|
|
15
|
+
if (typeof n != "object") return null;
|
|
16
|
+
const r = n, t = Array.isArray(r.columns) ? r.columns : Array.isArray(r) ? r : [];
|
|
17
|
+
return !t.length && r.version == null && !("columns" in r) ? null : {
|
|
18
|
+
version: 2,
|
|
19
|
+
columns: t
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function g(n) {
|
|
23
|
+
return JSON.stringify({
|
|
24
|
+
version: 2,
|
|
25
|
+
columns: n.columns ?? []
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function y(n, r) {
|
|
29
|
+
return {
|
|
30
|
+
version: 2,
|
|
31
|
+
columns: r.columns ?? (n == null ? void 0 : n.columns) ?? []
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function m(n, r, t) {
|
|
35
|
+
if (typeof t == "function") return String(t(n, r));
|
|
36
|
+
if (typeof t == "string" && t) {
|
|
37
|
+
const e = n[t];
|
|
38
|
+
if (e != null && e !== "") return String(e);
|
|
39
|
+
}
|
|
40
|
+
return String(r);
|
|
41
|
+
}
|
|
42
|
+
function S(n, r, t, e) {
|
|
43
|
+
if (!(n != null && n.length)) return [];
|
|
44
|
+
if (!(r != null && r.length)) return [...n];
|
|
45
|
+
const u = new Set(r.map(String)), l = new Set((e || []).map(String));
|
|
46
|
+
return n.filter((i, o) => {
|
|
47
|
+
const s = m(i, o, t);
|
|
48
|
+
return l.has(s) ? !0 : !u.has(s);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function v(n, r) {
|
|
52
|
+
const t = new Set((r || []).map(String)), e = [], u = /* @__PURE__ */ new Set();
|
|
53
|
+
for (const l of n || []) {
|
|
54
|
+
const i = String(l);
|
|
55
|
+
!i || t.has(i) || u.has(i) || (u.add(i), e.push(i));
|
|
56
|
+
}
|
|
57
|
+
return e;
|
|
58
|
+
}
|
|
59
|
+
export {
|
|
60
|
+
S as applyHiddenRows,
|
|
61
|
+
y as mergeTablePrefs,
|
|
62
|
+
v as normalizeHiddenRowKeys,
|
|
63
|
+
c as parseTablePrefs,
|
|
64
|
+
g as serializeTablePrefs
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=tablePrefsUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tablePrefsUtils.js","sources":["../../../src/components/Table/tablePrefsUtils.ts"],"sourcesContent":["import type { Key } from 'react';\nimport type { TableColumnConfigItem } from './columnConfigTypes';\nimport { emptyTablePrefs, type TablePrefs } from './tablePrefsTypes';\n\n/** 将任意持久化值解析为 TablePrefs;v1 纯数组 → columns;忽略历史 hiddenRowKeys */\nexport function parseTablePrefs(raw: unknown): TablePrefs | null {\n if (raw == null) return null;\n if (typeof raw === 'string') {\n const trimmed = raw.trim();\n if (!trimmed) return null;\n try {\n return parseTablePrefs(JSON.parse(trimmed) as unknown);\n } catch {\n return null;\n }\n }\n if (Array.isArray(raw)) {\n return emptyTablePrefs(raw as TableColumnConfigItem[]);\n }\n if (typeof raw !== 'object') return null;\n const obj = raw as Record<string, unknown>;\n const columns = Array.isArray(obj.columns)\n ? (obj.columns as TableColumnConfigItem[])\n : Array.isArray(obj)\n ? (obj as unknown as TableColumnConfigItem[])\n : [];\n if (!columns.length && obj.version == null && !('columns' in obj)) {\n return null;\n }\n return {\n version: 2,\n columns,\n };\n}\n\n/** 只序列化列配置(不写 hiddenRowKeys) */\nexport function serializeTablePrefs(prefs: TablePrefs): string {\n return JSON.stringify({\n version: 2,\n columns: prefs.columns ?? [],\n });\n}\n\nexport function mergeTablePrefs(\n base: TablePrefs | null | undefined,\n patch: Partial<Pick<TablePrefs, 'columns'>>,\n): TablePrefs {\n return {\n version: 2,\n columns: patch.columns ?? base?.columns ?? [],\n };\n}\n\nfunction resolveRowKey<RecordType extends object>(\n row: RecordType,\n index: number,\n rowKey: string | ((record: RecordType, index: number) => Key) | undefined,\n): string {\n if (typeof rowKey === 'function') return String(rowKey(row, index));\n if (typeof rowKey === 'string' && rowKey) {\n const v = (row as Record<string, unknown>)[rowKey];\n if (v != null && v !== '') return String(v);\n }\n return String(index);\n}\n\n/** 过滤隐藏行;locked 行始终保留(即使在 hidden 列表中) */\nexport function applyHiddenRows<RecordType extends object>(\n dataSource: readonly RecordType[] | undefined,\n hiddenRowKeys: readonly string[] | null | undefined,\n rowKey: string | ((record: RecordType, index: number) => Key) | undefined,\n lockedRowKeys?: readonly Key[] | null,\n): RecordType[] {\n if (!dataSource?.length) return [];\n if (!hiddenRowKeys?.length) return [...dataSource];\n const hidden = new Set(hiddenRowKeys.map(String));\n const locked = new Set((lockedRowKeys || []).map(String));\n return dataSource.filter((row, index) => {\n const key = resolveRowKey(row, index, rowKey);\n if (locked.has(key)) return true;\n return !hidden.has(key);\n });\n}\n\n/** 合并隐藏:去掉 locked,去重 */\nexport function normalizeHiddenRowKeys(\n keys: readonly Key[] | null | undefined,\n lockedRowKeys?: readonly Key[] | null,\n): string[] {\n const locked = new Set((lockedRowKeys || []).map(String));\n const out: string[] = [];\n const seen = new Set<string>();\n for (const k of keys || []) {\n const s = String(k);\n if (!s || locked.has(s) || seen.has(s)) continue;\n seen.add(s);\n out.push(s);\n }\n return out;\n}\n"],"names":["parseTablePrefs","raw","trimmed","emptyTablePrefs","obj","columns","serializeTablePrefs","prefs","mergeTablePrefs","base","patch","resolveRowKey","row","index","rowKey","v","applyHiddenRows","dataSource","hiddenRowKeys","lockedRowKeys","hidden","locked","key","normalizeHiddenRowKeys","keys","out","seen","k","s"],"mappings":";AAKO,SAASA,EAAgBC,GAAiC;AAC/D,MAAIA,KAAO,KAAM,QAAO;AACxB,MAAI,OAAOA,KAAQ,UAAU;AAC3B,UAAMC,IAAUD,EAAI,KAAA;AACpB,QAAI,CAACC,EAAS,QAAO;AACrB,QAAI;AACF,aAAOF,EAAgB,KAAK,MAAME,CAAO,CAAY;AAAA,IACvD,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACA,MAAI,MAAM,QAAQD,CAAG;AACnB,WAAOE,EAAgBF,CAA8B;AAEvD,MAAI,OAAOA,KAAQ,SAAU,QAAO;AACpC,QAAMG,IAAMH,GACNI,IAAU,MAAM,QAAQD,EAAI,OAAO,IACpCA,EAAI,UACL,MAAM,QAAQA,CAAG,IACdA,IACD,CAAA;AACN,SAAI,CAACC,EAAQ,UAAUD,EAAI,WAAW,QAAQ,EAAE,aAAaA,KACpD,OAEF;AAAA,IACL,SAAS;AAAA,IACT,SAAAC;AAAA,EAAA;AAEJ;AAGO,SAASC,EAAoBC,GAA2B;AAC7D,SAAO,KAAK,UAAU;AAAA,IACpB,SAAS;AAAA,IACT,SAASA,EAAM,WAAW,CAAA;AAAA,EAAC,CAC5B;AACH;AAEO,SAASC,EACdC,GACAC,GACY;AACZ,SAAO;AAAA,IACL,SAAS;AAAA,IACT,SAASA,EAAM,YAAWD,KAAA,gBAAAA,EAAM,YAAW,CAAA;AAAA,EAAC;AAEhD;AAEA,SAASE,EACPC,GACAC,GACAC,GACQ;AACR,MAAI,OAAOA,KAAW,WAAY,QAAO,OAAOA,EAAOF,GAAKC,CAAK,CAAC;AAClE,MAAI,OAAOC,KAAW,YAAYA,GAAQ;AACxC,UAAMC,IAAKH,EAAgCE,CAAM;AACjD,QAAIC,KAAK,QAAQA,MAAM,GAAI,QAAO,OAAOA,CAAC;AAAA,EAC5C;AACA,SAAO,OAAOF,CAAK;AACrB;AAGO,SAASG,EACdC,GACAC,GACAJ,GACAK,GACc;AACd,MAAI,EAACF,KAAA,QAAAA,EAAY,QAAQ,QAAO,CAAA;AAChC,MAAI,EAACC,KAAA,QAAAA,EAAe,QAAQ,QAAO,CAAC,GAAGD,CAAU;AACjD,QAAMG,IAAS,IAAI,IAAIF,EAAc,IAAI,MAAM,CAAC,GAC1CG,IAAS,IAAI,KAAKF,KAAiB,IAAI,IAAI,MAAM,CAAC;AACxD,SAAOF,EAAW,OAAO,CAACL,GAAKC,MAAU;AACvC,UAAMS,IAAMX,EAAcC,GAAKC,GAAOC,CAAM;AAC5C,WAAIO,EAAO,IAAIC,CAAG,IAAU,KACrB,CAACF,EAAO,IAAIE,CAAG;AAAA,EACxB,CAAC;AACH;AAGO,SAASC,EACdC,GACAL,GACU;AACV,QAAME,IAAS,IAAI,KAAKF,KAAiB,IAAI,IAAI,MAAM,CAAC,GAClDM,IAAgB,CAAA,GAChBC,wBAAW,IAAA;AACjB,aAAWC,KAAKH,KAAQ,IAAI;AAC1B,UAAMI,IAAI,OAAOD,CAAC;AAClB,IAAI,CAACC,KAAKP,EAAO,IAAIO,CAAC,KAAKF,EAAK,IAAIE,CAAC,MACrCF,EAAK,IAAIE,CAAC,GACVH,EAAI,KAAKG,CAAC;AAAA,EACZ;AACA,SAAOH;AACT;"}
|