@hkyhy/marsun-components-core 0.1.76 → 0.1.77

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.
@@ -1,10 +1,10 @@
1
- import { Key, ReactNode } from 'react';
2
1
  import { TableProps as AntTableProps } from 'antd';
2
+ import { Key, ReactElement, ReactNode, Ref } from 'react';
3
3
  import { TableColumnConfigFetcher, TableColumnConfigItem, TableColumnConfigSaver } from './columnConfigTypes';
4
- import { applyColumnConfig, columnsToConfig, COLUMN_CONFIG_COL_KEY, FLEX_SPACER_COL_KEY, hideColumnAtPath, isInternalColumnKey } from './columnConfigUtils';
4
+ import { applyColumnConfig, COLUMN_CONFIG_COL_KEY, columnsToConfig, FLEX_SPACER_COL_KEY, hideColumnAtPath, isInternalColumnKey } from './columnConfigUtils';
5
5
  import { TablePrefs, TablePrefsFetcher, TablePrefsSaver } from './tablePrefsTypes';
6
- export type { TableColumnConfigItem, TableColumnConfigFetcher, TableColumnConfigSaver };
7
- export type { TablePrefs, TablePrefsFetcher, TablePrefsSaver };
6
+ import { TableFetchHandle, TableFetchMapped, TableFetchQuery } from './useTableFetch';
7
+ export type { TableColumnConfigFetcher, TableColumnConfigItem, TableColumnConfigSaver, TableFetchHandle, TableFetchMapped, TableFetchQuery, TablePrefs, TablePrefsFetcher, TablePrefsSaver, };
8
8
  export type TableProps<RecordType extends object = Record<string, unknown>> = AntTableProps<RecordType> & {
9
9
  /** 稳定偏好 key;业务列表必填 */
10
10
  tableName?: string;
@@ -30,13 +30,29 @@ export type TableProps<RecordType extends object = Record<string, unknown>> = An
30
30
  rowHideSelectedKeys?: Key[];
31
31
  /** 自定义行隐藏工具条;默认内置按钮 */
32
32
  rowConfigToolbar?: ReactNode | false;
33
+ /**
34
+ * Fetch 模式:`dataSource === undefined` 且提供本回调(或 fetchUrl)时由 Table 拉数。
35
+ * 优先于 fetchUrl。Marsun typed list 主路径。
36
+ */
37
+ fetchData?: (q: TableFetchQuery) => Promise<unknown>;
38
+ /** Form FetchSelect 同构:GET/自定义 Request;需配合 transformData 或默认 pageData 解析 */
39
+ fetchUrl?: string;
40
+ fetchOptions?: RequestInit | ((q: TableFetchQuery) => RequestInit);
41
+ transformData?: (raw: unknown) => TableFetchMapped<RecordType>;
42
+ /** 筛选项;稳定序列化变则回第 1 页再请求 */
43
+ fetchParams?: unknown;
44
+ /** Tab 懒请求;默认 true */
45
+ enabled?: boolean;
46
+ /** fetch 模式默认 pageSize;默认 20 */
47
+ defaultPageSize?: number;
48
+ onFetched?: (r: TableFetchMapped<RecordType> & {
49
+ error: Error | null;
50
+ }) => void;
33
51
  };
34
- /**
35
- * 基于 antd Table 的列表表格包装。
36
- * 列偏好经 user_key;行隐藏仅会话 state,不进 user_key。
37
- */
38
- declare function Table<RecordType extends object = Record<string, unknown>>({ className, style, scroll, pagination, locale, columns, dataSource, rowKey, tableName, columnConfigEnabled, fetchColumnConfig, saveColumnConfig, onColumnConfigChange, fetchTablePrefs, saveTablePrefs, onTablePrefsChange, rowConfigEnabled, lockedRowKeys, hiddenRowKeys: hiddenRowKeysProp, onHiddenRowKeysChange, rowHideSelectedKeys, rowConfigToolbar, rowSelection, ...rest }: TableProps<RecordType>): import("react").JSX.Element;
52
+ declare const Table: <RecordType extends object = Record<string, unknown>>(props: TableProps<RecordType> & {
53
+ ref?: Ref<TableFetchHandle>;
54
+ }) => ReactElement | null;
39
55
  export default Table;
40
- export { columnsToConfig, applyColumnConfig, COLUMN_CONFIG_COL_KEY, FLEX_SPACER_COL_KEY, isInternalColumnKey, hideColumnAtPath, };
41
- export { parseTablePrefs, serializeTablePrefs, mergeTablePrefs, applyHiddenRows, normalizeHiddenRowKeys, } from './tablePrefsUtils';
42
56
  export { emptyTablePrefs } from './tablePrefsTypes';
57
+ export { applyHiddenRows, mergeTablePrefs, normalizeHiddenRowKeys, parseTablePrefs, serializeTablePrefs, } from './tablePrefsUtils';
58
+ export { applyColumnConfig, COLUMN_CONFIG_COL_KEY, columnsToConfig, FLEX_SPACER_COL_KEY, hideColumnAtPath, isInternalColumnKey, };
@@ -1,238 +1,274 @@
1
- import { jsxs as j, jsx as f } from "react/jsx-runtime";
2
- import { useRef as zt, useState as U, useEffect as ot, useMemo as S, useCallback as E } from "react";
3
- import { Space as Ft, Button as dt, Tooltip as pt, Table as kt } from "antd";
4
- import M from "classnames";
5
- import { ColumnConfigTrigger as Ct } from "./ColumnConfigPanel.js";
6
- import { applyColumnConfig as Dt, columnsToPanelItems as $t, columnsToConfig as jt, hideColumnAtPath as Bt, COLUMN_CONFIG_COL_KEY as Gt, isInternalColumnKey as ht, shortChildId as Pt } from "./columnConfigUtils.js";
7
- import { FLEX_SPACER_COL_KEY as fe } from "./columnConfigUtils.js";
8
- import { emptyTablePrefs as Ut } from "./tablePrefsTypes.js";
9
- import { normalizeHiddenRowKeys as Q, mergeTablePrefs as mt, applyHiddenRows as Mt } from "./tablePrefsUtils.js";
10
- import { parseTablePrefs as he, serializeTablePrefs as ye } from "./tablePrefsUtils.js";
11
- import o from "./style.module.scss.js";
12
- import ft from "./columnConfig.module.scss.js";
13
- import { Eye as yt } from "../Icons/Eye.js";
14
- import Xt from "../Empty/Empty.js";
15
- const Yt = { x: "max-content" }, T = 40, qt = 64;
16
- function Zt(e) {
1
+ import { jsx as d, jsxs as D } from "react/jsx-runtime";
2
+ import { Space as ee, Button as gt, Tooltip as vt, Table as ne } from "antd";
3
+ import $ from "classnames";
4
+ import { forwardRef as re, useImperativeHandle as se, useRef as le, useState as U, useEffect as yt, useMemo as L, useCallback as W } from "react";
5
+ import St from "./columnConfig.module.scss.js";
6
+ import { ColumnConfigTrigger as ie } from "./ColumnConfigPanel.js";
7
+ import { applyColumnConfig as ae, columnsToPanelItems as ce, columnsToConfig as oe, hideColumnAtPath as ue, COLUMN_CONFIG_COL_KEY as de, isInternalColumnKey as xt, shortChildId as me } from "./columnConfigUtils.js";
8
+ import { FLEX_SPACER_COL_KEY as $e } from "./columnConfigUtils.js";
9
+ import m from "./style.module.scss.js";
10
+ import { emptyTablePrefs as fe } from "./tablePrefsTypes.js";
11
+ import { normalizeHiddenRowKeys as K, mergeTablePrefs as Lt, applyHiddenRows as he } from "./tablePrefsUtils.js";
12
+ import { parseTablePrefs as Xe, serializeTablePrefs as Ye } from "./tablePrefsUtils.js";
13
+ import { useTableFetch as pe } from "./useTableFetch.js";
14
+ import { useMarsunFetch as ge } from "../../provider/context.js";
15
+ import _t from "../Empty/Empty.js";
16
+ import { Eye as Ht } from "../Icons/Eye.js";
17
+ const ye = { x: "max-content" }, b = 40, Se = 64;
18
+ function Le(e) {
17
19
  return `共 ${e} 项`;
18
20
  }
19
- function gt(e) {
21
+ function It(e) {
20
22
  var i;
21
23
  if (!(e != null && e.length)) return 0;
22
- let a = 0;
23
- for (const s of e) {
24
- const L = s.key != null ? String(s.key) : "";
25
- if (L && ht(L)) continue;
26
- if ((i = s.children) != null && i.length) {
27
- a += gt(s.children);
24
+ let c = 0;
25
+ for (const r of e) {
26
+ const f = r.key != null ? String(r.key) : "";
27
+ if (f && xt(f)) continue;
28
+ if ((i = r.children) != null && i.length) {
29
+ c += It(r.children);
28
30
  continue;
29
31
  }
30
- const l = s.width;
31
- typeof l == "number" && Number.isFinite(l) && l > 0 ? a += l : a += qt;
32
+ const l = r.width;
33
+ typeof l == "number" && Number.isFinite(l) && l > 0 ? c += l : c += Se;
32
34
  }
33
- return a;
35
+ return c;
34
36
  }
35
- function Jt(e, a) {
36
- return e.key != null && String(e.key) !== "" ? String(e.key) : e.dataIndex != null ? Array.isArray(e.dataIndex) ? e.dataIndex.join(".") : String(e.dataIndex) : `__col_${a}`;
37
+ function _e(e, c) {
38
+ return e.key != null && String(e.key) !== "" ? String(e.key) : e.dataIndex != null ? Array.isArray(e.dataIndex) ? e.dataIndex.join(".") : String(e.dataIndex) : `__col_${c}`;
37
39
  }
38
- function Qt(e, a, i) {
39
- if (typeof i == "function") return String(i(e, a));
40
+ function ve(e, c, i) {
41
+ if (typeof i == "function") return String(i(e, c));
40
42
  if (typeof i == "string" && i) {
41
- const s = e[i];
42
- if (s != null && s !== "") return String(s);
43
+ const r = e[i];
44
+ if (r != null && r !== "") return String(r);
43
45
  }
44
- return String(a);
46
+ return String(c);
45
47
  }
46
- const Vt = 6;
47
- function Lt(e, a, i, s = [], L = 0, l) {
48
+ const xe = 6;
49
+ function Ot(e, c, i, r = [], f = 0, l) {
48
50
  let k = 0;
49
- return e.map((r, d) => {
50
- var O, x;
51
- const b = Jt(r, d);
52
- if (ht(b)) return r;
53
- const A = i ? Pt(i, b) : b, N = [...s, A], _ = r.onHeaderCell;
51
+ return e.map((s, G) => {
52
+ var o, _;
53
+ const a = _e(s, G);
54
+ if (xt(a)) return s;
55
+ const X = i ? me(i, a) : a, H = [...r, X], I = s.onHeaderCell;
54
56
  let p = l;
55
- L === 0 && (p = (O = r.children) != null && O.length ? k++ : void 0);
56
- const C = p == null ? void 0 : L === 0 ? o.headerDepth0 : L === 1 ? o.headerDepth1 : o.headerDepth2, z = p == null ? void 0 : o[`headerGroup${p % Vt}`], h = /* @__PURE__ */ j("span", { className: o.headerTitleWithEye, children: [
57
- /* @__PURE__ */ f("span", { className: o.headerTitleText, children: r.title }),
58
- /* @__PURE__ */ f(pt, { title: "隐藏此列", children: /* @__PURE__ */ f(
57
+ f === 0 && (p = (o = s.children) != null && o.length ? k++ : void 0);
58
+ const E = p == null ? void 0 : f === 0 ? m.headerDepth0 : f === 1 ? m.headerDepth1 : m.headerDepth2, F = p == null ? void 0 : m[`headerGroup${p % xe}`], O = /* @__PURE__ */ D("span", { className: m.headerTitleWithEye, children: [
59
+ /* @__PURE__ */ d("span", { className: m.headerTitleText, children: s.title }),
60
+ /* @__PURE__ */ d(vt, { title: "隐藏此列", children: /* @__PURE__ */ d(
59
61
  "button",
60
62
  {
61
63
  type: "button",
62
- className: o.headerEyeBtn,
64
+ className: m.headerEyeBtn,
63
65
  "aria-label": "隐藏此列",
64
- onClick: (H) => {
65
- H.stopPropagation(), a(N);
66
+ onClick: (v) => {
67
+ v.stopPropagation(), c(H);
66
68
  },
67
- children: /* @__PURE__ */ f(yt, { size: 12 })
69
+ children: /* @__PURE__ */ d(Ht, { size: 12 })
68
70
  }
69
71
  ) })
70
- ] }), c = (H) => {
71
- const I = typeof _ == "function" ? _(H) : _ || {};
72
+ ] }), g = (v) => {
73
+ const C = typeof I == "function" ? I(v) : I || {};
72
74
  return {
73
- ...I,
74
- className: M(I.className, z, C)
75
+ ...C,
76
+ className: $(C.className, F, E)
75
77
  };
76
78
  };
77
- return (x = r.children) != null && x.length ? {
78
- ...r,
79
- title: h,
80
- onHeaderCell: c,
81
- children: Lt(
82
- r.children,
79
+ return (_ = s.children) != null && _.length ? {
80
+ ...s,
81
+ title: O,
82
+ onHeaderCell: g,
83
+ children: Ot(
84
+ s.children,
85
+ c,
83
86
  a,
84
- b,
85
- N,
86
- L + 1,
87
+ H,
88
+ f + 1,
87
89
  p
88
90
  )
89
91
  } : {
90
- ...r,
91
- title: h,
92
- onHeaderCell: c
92
+ ...s,
93
+ title: O,
94
+ onHeaderCell: g
93
95
  };
94
96
  });
95
97
  }
96
- function oe({
98
+ function He({
97
99
  className: e,
98
- style: a,
100
+ style: c,
99
101
  scroll: i,
100
- pagination: s,
101
- locale: L,
102
+ pagination: r,
103
+ locale: f,
102
104
  columns: l,
103
105
  dataSource: k,
104
- rowKey: r,
105
- tableName: d,
106
- columnConfigEnabled: b,
107
- fetchColumnConfig: A,
108
- saveColumnConfig: N,
109
- onColumnConfigChange: _,
110
- fetchTablePrefs: p,
111
- saveTablePrefs: C,
112
- onTablePrefsChange: z,
113
- rowConfigEnabled: h = !1,
114
- lockedRowKeys: c,
115
- hiddenRowKeys: O,
116
- onHiddenRowKeysChange: x,
117
- rowHideSelectedKeys: H,
118
- rowConfigToolbar: I,
106
+ rowKey: s,
107
+ loading: G,
108
+ tableName: a,
109
+ columnConfigEnabled: X,
110
+ fetchColumnConfig: H,
111
+ saveColumnConfig: I,
112
+ onColumnConfigChange: p,
113
+ fetchTablePrefs: E,
114
+ saveTablePrefs: F,
115
+ onTablePrefsChange: O,
116
+ rowConfigEnabled: g = !1,
117
+ lockedRowKeys: o,
118
+ hiddenRowKeys: _,
119
+ onHiddenRowKeysChange: v,
120
+ rowHideSelectedKeys: C,
121
+ rowConfigToolbar: M,
119
122
  rowSelection: y,
120
- ...St
121
- }) {
122
- var it;
123
- const v = b ?? !!d, X = zt(l), [u, B] = U(null), [V, _t] = U(!1), [R, Y] = U(!v), [K, Ot] = U([]);
124
- ot(() => {
125
- X.current = l;
126
- }, [l]), ot(() => {
127
- if (!v || !d || !(p || A)) {
128
- Y(!0);
123
+ fetchData: Tt,
124
+ fetchUrl: Wt,
125
+ fetchOptions: bt,
126
+ transformData: Et,
127
+ fetchParams: Ct,
128
+ enabled: At = !0,
129
+ defaultPageSize: Ft = 20,
130
+ onFetched: Nt,
131
+ ...zt
132
+ }, Dt) {
133
+ var mt;
134
+ const Y = ge(), {
135
+ fetchMode: q,
136
+ rows: kt,
137
+ total: Mt,
138
+ loading: jt,
139
+ error: tt,
140
+ currentPage: Bt,
141
+ pageSize: Pt,
142
+ setPage: Ut,
143
+ reload: et
144
+ } = pe({
145
+ dataSource: k,
146
+ fetchData: Tt,
147
+ fetchUrl: Wt,
148
+ fetchOptions: bt,
149
+ transformData: Et,
150
+ fetchParams: Ct,
151
+ enabled: At,
152
+ defaultPageSize: Ft,
153
+ baseUrl: Y.baseUrl,
154
+ defaultHeaders: Y.headers,
155
+ timeoutMs: Y.timeoutMs,
156
+ onFetched: Nt
157
+ });
158
+ se(Dt, () => ({ reload: et }), [et]);
159
+ const Z = q ? kt : k, $t = !!G || q && jt, T = X ?? !!a, J = le(l), [u, j] = U(null), [nt, Gt] = U(!1), [rt, Q] = U(!T), [st, Xt] = U([]);
160
+ yt(() => {
161
+ J.current = l;
162
+ }, [l]), yt(() => {
163
+ if (!T || !a || !(E || H)) {
164
+ Q(!0);
129
165
  return;
130
166
  }
131
167
  let t = !1;
132
- return Y(!1), (async () => {
133
- var g;
168
+ return Q(!1), (async () => {
169
+ var S;
134
170
  try {
135
- if (p) {
136
- const m = await p(d);
137
- t || B((g = m == null ? void 0 : m.columns) != null && g.length ? m : null);
138
- } else if (A) {
139
- const m = await A(d);
140
- t || B(m != null && m.length ? Ut(m) : null);
171
+ if (E) {
172
+ const h = await E(a);
173
+ t || j((S = h == null ? void 0 : h.columns) != null && S.length ? h : null);
174
+ } else if (H) {
175
+ const h = await H(a);
176
+ t || j(h != null && h.length ? fe(h) : null);
141
177
  }
142
178
  } catch {
143
- t || B(null);
179
+ t || j(null);
144
180
  } finally {
145
- t || Y(!0);
181
+ t || Q(!0);
146
182
  }
147
183
  })(), () => {
148
184
  t = !0;
149
185
  };
150
- }, [v, d, p, A]);
151
- const G = (it = u == null ? void 0 : u.columns) != null && it.length ? u.columns : null, W = S(() => O !== void 0 ? Q(O, c) : Q(K, c), [O, K, c]), F = E(
186
+ }, [T, a, E, H]);
187
+ const B = (mt = u == null ? void 0 : u.columns) != null && mt.length ? u.columns : null, x = L(() => _ !== void 0 ? K(_, o) : K(st, o), [_, st, o]), A = W(
152
188
  (t) => {
153
- const n = Q(t, c);
154
- O === void 0 && Ot(n), x == null || x(n);
189
+ const n = K(t, o);
190
+ _ === void 0 && Xt(n), v == null || v(n);
155
191
  },
156
- [O, c, x]
157
- ), P = E(
192
+ [_, o, v]
193
+ ), P = W(
158
194
  async (t) => {
159
- if (B(t), z == null || z(t), _ == null || _(t.columns), d && C) {
160
- await C(d, t);
195
+ if (j(t), O == null || O(t), p == null || p(t.columns), a && F) {
196
+ await F(a, t);
161
197
  return;
162
198
  }
163
- d && N && await N(d, t.columns);
199
+ a && I && await I(a, t.columns);
164
200
  },
165
- [d, C, N, z, _]
166
- ), w = S(() => {
201
+ [a, F, I, O, p]
202
+ ), lt = L(() => {
167
203
  const t = l || [];
168
- return v ? Dt(t, G) : t;
169
- }, [l, v, G]), tt = S(
170
- () => $t(
171
- X.current || l
204
+ return T ? ae(t, B) : t;
205
+ }, [l, T, B]), it = L(
206
+ () => ce(
207
+ J.current || l
172
208
  ),
173
209
  // eslint-disable-next-line react-hooks/exhaustive-deps -- 随 columns 结构变
174
210
  [l]
175
- ), et = E(
211
+ ), at = W(
176
212
  async (t) => {
177
- await P(mt(u, { columns: t }));
213
+ await P(Lt(u, { columns: t }));
178
214
  },
179
215
  [u, P]
180
- ), nt = E(
216
+ ), ct = W(
181
217
  async (t) => {
182
- var g;
218
+ var S;
183
219
  if (!t.length) return;
184
- const n = (g = u == null ? void 0 : u.columns) != null && g.length && u.columns.length ? u.columns : jt(
185
- X.current || l
220
+ const n = (S = u == null ? void 0 : u.columns) != null && S.length && u.columns.length ? u.columns : oe(
221
+ J.current || l
186
222
  );
187
- await P(mt(u, { columns: Bt(n, t) }));
223
+ await P(Lt(u, { columns: ue(n, t) }));
188
224
  },
189
225
  [u, l, P]
190
- ), Wt = E(() => {
191
- const t = (H || []).map(String);
192
- t.length && F([...W, ...t]);
193
- }, [H, W, F]), xt = E(() => {
194
- F([]);
195
- }, [F]), rt = E(
226
+ ), Yt = W(() => {
227
+ const t = (C || []).map(String);
228
+ t.length && A([...x, ...t]);
229
+ }, [C, x, A]), qt = W(() => {
230
+ A([]);
231
+ }, [A]), ot = W(
196
232
  (t) => {
197
233
  const n = String(t);
198
- n && ((c || []).map(String).includes(n) || F([...W, n]));
234
+ n && ((o || []).map(String).includes(n) || A([...x, n]));
199
235
  },
200
- [c, W, F]
201
- ), q = S(() => {
202
- let t = w;
203
- if (v && R) {
204
- t = Lt(t, (g) => {
205
- nt(g);
236
+ [o, x, A]
237
+ ), R = L(() => {
238
+ let t = lt;
239
+ if (T && rt) {
240
+ t = Ot(t, (S) => {
241
+ ct(S);
206
242
  });
207
243
  const n = {
208
- key: Gt,
209
- width: T,
244
+ key: de,
245
+ width: b,
210
246
  fixed: "right",
211
247
  align: "center",
212
- className: ft.configCol,
248
+ className: St.configCol,
213
249
  onHeaderCell: () => ({
214
- className: ft.configColHeader,
250
+ className: St.configColHeader,
215
251
  style: {
216
- width: T,
217
- minWidth: T,
218
- maxWidth: T
252
+ width: b,
253
+ minWidth: b,
254
+ maxWidth: b
219
255
  }
220
256
  }),
221
257
  onCell: () => ({
222
258
  style: {
223
- width: T,
224
- minWidth: T,
225
- maxWidth: T
259
+ width: b,
260
+ minWidth: b,
261
+ maxWidth: b
226
262
  }
227
263
  }),
228
- title: /* @__PURE__ */ f(
229
- Ct,
264
+ title: /* @__PURE__ */ d(
265
+ ie,
230
266
  {
231
- open: V,
232
- onOpenChange: _t,
233
- defaultItems: tt,
234
- savedConfig: G,
235
- onConfirm: et
267
+ open: nt,
268
+ onOpenChange: Gt,
269
+ defaultItems: it,
270
+ savedConfig: B,
271
+ onConfirm: at
236
272
  }
237
273
  ),
238
274
  render: () => null
@@ -241,108 +277,118 @@ function oe({
241
277
  }
242
278
  return t;
243
279
  }, [
244
- v,
245
- R,
246
- w,
247
- V,
248
- tt,
249
- G,
250
- et,
251
- nt
252
- ]), Ht = S(() => h ? Mt(k, W, typeof r == "function" || typeof r == "string" ? r : void 0, c) : k, [h, k, W, r, c]), It = s === !1 ? !1 : {
280
+ T,
281
+ rt,
282
+ lt,
283
+ nt,
284
+ it,
285
+ B,
286
+ at,
287
+ ct
288
+ ]), Zt = L(() => g ? he(Z, x, typeof s == "function" || typeof s == "string" ? s : void 0, o) : Z, [g, Z, x, s, o]), Jt = r === !1 ? !1 : {
253
289
  showSizeChanger: !0,
254
- showTotal: Zt,
255
- ...s && typeof s == "object" ? s : {}
256
- }, vt = {
257
- emptyText: /* @__PURE__ */ f(Xt, { iconType: "simple", description: "暂无数据" }),
258
- ...L
259
- }, Z = S(() => new Set((c || []).map(String)), [c]), Et = h && (H || []).some((t) => {
290
+ showTotal: Le,
291
+ ...r && typeof r == "object" ? r : {},
292
+ ...q ? {
293
+ current: Bt,
294
+ pageSize: Pt,
295
+ total: Mt,
296
+ onChange: (t, n) => {
297
+ Ut(t, n), r && typeof r == "object" && r.onChange && r.onChange(t, n);
298
+ }
299
+ } : null
300
+ }, Qt = {
301
+ ...f,
302
+ emptyText: (f == null ? void 0 : f.emptyText) ?? (tt ? /* @__PURE__ */ d(_t, { iconType: "simple", description: tt.message || "加载失败" }) : /* @__PURE__ */ d(_t, { iconType: "simple", description: "暂无数据" }))
303
+ }, V = L(() => new Set((o || []).map(String)), [o]), Rt = g && (C || []).some((t) => {
260
304
  const n = String(t);
261
- return n && !Z.has(n);
262
- }), st = h && W.length > 0, Tt = h && I !== !1 ? /* @__PURE__ */ j(
263
- Ft,
305
+ return n && !V.has(n);
306
+ }), ut = g && x.length > 0, Vt = g && M !== !1 ? /* @__PURE__ */ D(
307
+ ee,
264
308
  {
265
309
  size: "small",
266
- className: M("marsun-table-row-config", o["marsun-table-row-config"]),
310
+ className: $("marsun-table-row-config", m["marsun-table-row-config"]),
267
311
  children: [
268
- /* @__PURE__ */ f(dt, { size: "small", disabled: !Et, onClick: Wt, children: "隐藏选中行" }),
269
- /* @__PURE__ */ j(dt, { size: "small", disabled: !st, onClick: xt, children: [
312
+ /* @__PURE__ */ d(gt, { size: "small", disabled: !Rt, onClick: Yt, children: "隐藏选中行" }),
313
+ /* @__PURE__ */ D(gt, { size: "small", disabled: !ut, onClick: qt, children: [
270
314
  "恢复隐藏行",
271
- st ? `(${W.length})` : ""
315
+ ut ? `(${x.length})` : ""
272
316
  ] })
273
317
  ]
274
318
  }
275
- ) : null, lt = I === !1 ? null : I !== void 0 ? I : Tt, D = S(() => {
276
- if (!y || !h) return y;
319
+ ) : null, dt = M === !1 ? null : M !== void 0 ? M : Vt, N = L(() => {
320
+ if (!y || !g) return y;
277
321
  const t = typeof y.columnWidth == "number" ? y.columnWidth : 48;
278
322
  return {
279
323
  ...y,
280
324
  columnWidth: t + 20,
281
- renderCell: (n, g, m, at) => {
282
- var ut;
283
- const At = ((ut = y.renderCell) == null ? void 0 : ut.call(y, n, g, m, at)) ?? at, ct = Qt(g, m, r), J = Z.has(ct);
284
- return /* @__PURE__ */ j("span", { className: o.rowSelectWithEye, children: [
285
- At,
286
- /* @__PURE__ */ f(pt, { title: J ? "主对标不可隐藏" : "隐藏此行", children: /* @__PURE__ */ f(
325
+ renderCell: (n, S, h, ft) => {
326
+ var pt;
327
+ const Kt = ((pt = y.renderCell) == null ? void 0 : pt.call(y, n, S, h, ft)) ?? ft, ht = ve(S, h, s), w = V.has(ht);
328
+ return /* @__PURE__ */ D("span", { className: m.rowSelectWithEye, children: [
329
+ Kt,
330
+ /* @__PURE__ */ d(vt, { title: w ? "主对标不可隐藏" : "隐藏此行", children: /* @__PURE__ */ d(
287
331
  "button",
288
332
  {
289
333
  type: "button",
290
- className: o.rowEyeBtn,
291
- "aria-label": J ? "主对标不可隐藏" : "隐藏此行",
292
- disabled: J,
293
- onClick: (Nt) => {
294
- Nt.stopPropagation(), rt(ct);
334
+ className: m.rowEyeBtn,
335
+ "aria-label": w ? "主对标不可隐藏" : "隐藏此行",
336
+ disabled: w,
337
+ onClick: (te) => {
338
+ te.stopPropagation(), ot(ht);
295
339
  },
296
- children: /* @__PURE__ */ f(yt, { size: 14 })
340
+ children: /* @__PURE__ */ d(Ht, { size: 14 })
297
341
  }
298
342
  ) })
299
343
  ] });
300
344
  }
301
345
  };
302
- }, [y, h, r, Z, rt]), $ = S(() => {
303
- const t = gt(q);
346
+ }, [y, g, s, V, ot]), z = L(() => {
347
+ const t = It(R);
304
348
  if (!t) return 0;
305
- const n = D ? typeof D.columnWidth == "number" ? D.columnWidth : 48 : 0;
349
+ const n = N ? typeof N.columnWidth == "number" ? N.columnWidth : 48 : 0;
306
350
  return t + n;
307
- }, [q, D]), bt = S(() => {
308
- const t = i === void 0 ? { ...Yt } : { ...i };
309
- return $ > 0 ? { ...t, x: $ } : t;
310
- }, [i, $]);
311
- return /* @__PURE__ */ j("div", { className: M("marsun-table-shell", o["marsun-table-shell"]), children: [
312
- lt ? /* @__PURE__ */ f("div", { className: o["marsun-table-toolbar"], children: lt }) : null,
313
- /* @__PURE__ */ f(
314
- kt,
351
+ }, [R, N]), wt = L(() => {
352
+ const t = i === void 0 ? { ...ye } : { ...i };
353
+ return z > 0 ? { ...t, x: z } : t;
354
+ }, [i, z]);
355
+ return /* @__PURE__ */ D("div", { className: $("marsun-table-shell", m["marsun-table-shell"]), children: [
356
+ dt ? /* @__PURE__ */ d("div", { className: m["marsun-table-toolbar"], children: dt }) : null,
357
+ /* @__PURE__ */ d(
358
+ ne,
315
359
  {
316
- className: M("marsun-table", o["marsun-table"], e),
360
+ className: $("marsun-table", m["marsun-table"], e),
317
361
  style: {
318
- ...a,
319
- ...$ > 0 ? { "--marsun-table-scroll-x": `${$}px` } : null
362
+ ...c,
363
+ ...z > 0 ? { "--marsun-table-scroll-x": `${z}px` } : null
320
364
  },
321
- scroll: bt,
322
- pagination: It,
323
- locale: vt,
324
- columns: q,
325
- dataSource: Ht,
326
- rowKey: r,
327
- rowSelection: D,
328
- ...St
365
+ scroll: wt,
366
+ pagination: Jt,
367
+ locale: Qt,
368
+ columns: R,
369
+ dataSource: Zt,
370
+ rowKey: s,
371
+ loading: $t,
372
+ rowSelection: N,
373
+ ...zt
329
374
  }
330
375
  )
331
376
  ] });
332
377
  }
378
+ const Be = re(He);
333
379
  export {
334
- Gt as COLUMN_CONFIG_COL_KEY,
335
- fe as FLEX_SPACER_COL_KEY,
336
- Dt as applyColumnConfig,
337
- Mt as applyHiddenRows,
338
- jt as columnsToConfig,
339
- oe as default,
340
- Ut as emptyTablePrefs,
341
- Bt as hideColumnAtPath,
342
- ht as isInternalColumnKey,
343
- mt as mergeTablePrefs,
344
- Q as normalizeHiddenRowKeys,
345
- he as parseTablePrefs,
346
- ye as serializeTablePrefs
380
+ de as COLUMN_CONFIG_COL_KEY,
381
+ $e as FLEX_SPACER_COL_KEY,
382
+ ae as applyColumnConfig,
383
+ he as applyHiddenRows,
384
+ oe as columnsToConfig,
385
+ Be as default,
386
+ fe as emptyTablePrefs,
387
+ ue as hideColumnAtPath,
388
+ xt as isInternalColumnKey,
389
+ Lt as mergeTablePrefs,
390
+ K as normalizeHiddenRowKeys,
391
+ Xe as parseTablePrefs,
392
+ Ye as serializeTablePrefs
347
393
  };
348
394
  //# sourceMappingURL=Table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Table.js","sources":["../../../src/components/Table/Table.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type Key,\n type ReactNode,\n} from 'react';\nimport { Button, Space, Table as AntTable, Tooltip } from 'antd';\nimport type { TableProps as AntTableProps } from 'antd';\nimport type { ColumnsType, ColumnType } from 'antd/es/table';\nimport classNames from 'classnames';\nimport { Empty } from '../Empty';\nimport { Eye } from '../Icons';\nimport { ColumnConfigTrigger } from './ColumnConfigPanel';\nimport type {\n TableColumnConfigFetcher,\n TableColumnConfigItem,\n TableColumnConfigSaver,\n} from './columnConfigTypes';\nimport {\n applyColumnConfig,\n columnsToConfig,\n columnsToPanelItems,\n COLUMN_CONFIG_COL_KEY,\n FLEX_SPACER_COL_KEY,\n hideColumnAtPath,\n isInternalColumnKey,\n shortChildId,\n type ColumnTypeAny,\n} from './columnConfigUtils';\nimport type { TablePrefs, TablePrefsFetcher, TablePrefsSaver } from './tablePrefsTypes';\nimport { emptyTablePrefs } from './tablePrefsTypes';\nimport { applyHiddenRows, mergeTablePrefs, normalizeHiddenRowKeys } from './tablePrefsUtils';\nimport styles from './style.module.scss';\nimport gearStyles from './columnConfig.module.scss';\n\nexport type { TableColumnConfigItem, TableColumnConfigFetcher, TableColumnConfigSaver };\nexport type { TablePrefs, TablePrefsFetcher, TablePrefsSaver };\n\nexport type TableProps<RecordType extends object = Record<string, unknown>> =\n AntTableProps<RecordType> & {\n /** 稳定偏好 key;业务列表必填 */\n tableName?: string;\n /** 是否启用「编辑表格」列配置;默认 !!tableName */\n columnConfigEnabled?: boolean;\n /** @deprecated 优先用 fetchTablePrefs;仍支持仅列配置 */\n fetchColumnConfig?: TableColumnConfigFetcher;\n /** @deprecated 优先用 saveTablePrefs */\n saveColumnConfig?: TableColumnConfigSaver;\n onColumnConfigChange?: (items: TableColumnConfigItem[]) => void;\n /** 读写 TablePrefs(仅 columns,经 user_key) */\n fetchTablePrefs?: TablePrefsFetcher;\n saveTablePrefs?: TablePrefsSaver;\n onTablePrefsChange?: (prefs: TablePrefs) => void;\n /** 启用行隐藏(会话内 state,不进 user_key);默认 false */\n rowConfigEnabled?: boolean;\n /** 不可隐藏的行 key(如主对标) */\n lockedRowKeys?: Key[];\n /** 受控隐藏行;不传则用组件内部会话 state */\n hiddenRowKeys?: Key[];\n onHiddenRowKeysChange?: (keys: string[]) => void;\n /** 行隐藏工具条:传入当前勾选 key 以启用「隐藏选中行」 */\n rowHideSelectedKeys?: Key[];\n /** 自定义行隐藏工具条;默认内置按钮 */\n rowConfigToolbar?: ReactNode | false;\n };\n\nconst DEFAULT_SCROLL = { x: 'max-content' as const };\nconst CONFIG_COL_WIDTH = 40;\n/** 无 width 的弹性列计入 scroll 的最小占位,避免多列时被压扁 */\nconst AUTO_COL_SCROLL_FALLBACK = 64;\n\nfunction defaultShowTotal(total: number): string {\n return `共 ${total} 项`;\n}\n\n/** 可见叶子列 width 合计;无 width 的列用 fallback(弹性列) */\nfunction sumLeafColumnWidths(columns: ColumnsType<unknown> | undefined): number {\n if (!columns?.length) return 0;\n let sum = 0;\n for (const col of columns as ColumnTypeAny[]) {\n const key = col.key != null ? String(col.key) : '';\n if (key && isInternalColumnKey(key)) continue;\n if (col.children?.length) {\n sum += sumLeafColumnWidths(col.children as ColumnsType<unknown>);\n continue;\n }\n const w = col.width;\n if (typeof w === 'number' && Number.isFinite(w) && w > 0) sum += w;\n else sum += AUTO_COL_SCROLL_FALLBACK;\n }\n return sum;\n}\n\nfunction colFullKey(col: ColumnTypeAny, index: number): string {\n if (col.key != null && String(col.key) !== '') return String(col.key);\n if (col.dataIndex != null) {\n return Array.isArray(col.dataIndex) ? col.dataIndex.join('.') : String(col.dataIndex);\n }\n return `__col_${index}`;\n}\n\nfunction resolveRecordKey<RecordType extends object>(\n row: RecordType,\n index: number,\n rowKey: AntTableProps<RecordType>['rowKey'],\n): string {\n if (typeof rowKey === 'function') return String(rowKey(row, index));\n if (typeof rowKey === 'string' && rowKey) {\n const v = (row as Record<string, unknown>)[rowKey];\n if (v != null && v !== '') return String(v);\n }\n return String(index);\n}\n\n/** 一级组色带数量(与 SCSS headerGroup0..5 对齐) */\nconst HEADER_GROUP_PALETTE_SIZE = 6;\n\n/** 多级表头 title 注入眼睛;同色系按一级组,depth 加深浅 */\nfunction injectHeaderHideEyes<RecordType extends object>(\n columns: ColumnsType<RecordType>,\n onHidePath: (path: string[]) => void,\n parentFullKey?: string,\n path: string[] = [],\n depth = 0,\n groupIndex?: number,\n): ColumnsType<RecordType> {\n let groupSeq = 0;\n\n return (columns as ColumnTypeAny[]).map((col, i) => {\n const full = colFullKey(col, i);\n if (isInternalColumnKey(full)) return col as ColumnType<RecordType>;\n const configId = parentFullKey ? shortChildId(parentFullKey, full) : full;\n const nextPath = [...path, configId];\n const prevOnHeaderCell = col.onHeaderCell;\n\n /** 顶层有 children 的列为一级组,分配色带;固定列叶子不着色 */\n let gIdx = groupIndex;\n if (depth === 0) {\n gIdx = col.children?.length ? groupSeq++ : undefined;\n }\n\n const depthClass =\n gIdx == null\n ? undefined\n : depth === 0\n ? styles.headerDepth0\n : depth === 1\n ? styles.headerDepth1\n : styles.headerDepth2;\n const groupClass =\n gIdx == null ? undefined : styles[`headerGroup${gIdx % HEADER_GROUP_PALETTE_SIZE}`];\n\n const titleNode = (\n <span className={styles.headerTitleWithEye}>\n <span className={styles.headerTitleText}>{col.title as ReactNode}</span>\n <Tooltip title=\"隐藏此列\">\n <button\n type=\"button\"\n className={styles.headerEyeBtn}\n aria-label=\"隐藏此列\"\n onClick={(e) => {\n e.stopPropagation();\n onHidePath(nextPath);\n }}\n >\n <Eye size={12} />\n </button>\n </Tooltip>\n </span>\n );\n const mergeHeaderCell = (c: ColumnTypeAny) => {\n const prev =\n typeof prevOnHeaderCell === 'function'\n ? (prevOnHeaderCell as (col: ColumnTypeAny) => Record<string, unknown>)(c)\n : (prevOnHeaderCell as Record<string, unknown> | undefined) || {};\n return {\n ...prev,\n className: classNames((prev as { className?: string }).className, groupClass, depthClass),\n };\n };\n if (col.children?.length) {\n return {\n ...col,\n title: titleNode,\n onHeaderCell: mergeHeaderCell,\n children: injectHeaderHideEyes(\n col.children as ColumnsType<RecordType>,\n onHidePath,\n full,\n nextPath,\n depth + 1,\n gIdx,\n ),\n } as ColumnType<RecordType>;\n }\n return {\n ...col,\n title: titleNode,\n onHeaderCell: mergeHeaderCell,\n } as ColumnType<RecordType>;\n }) as ColumnsType<RecordType>;\n}\n\n/**\n * 基于 antd Table 的列表表格包装。\n * 列偏好经 user_key;行隐藏仅会话 state,不进 user_key。\n */\nfunction Table<RecordType extends object = Record<string, unknown>>({\n className,\n style,\n scroll,\n pagination,\n locale,\n columns,\n dataSource,\n rowKey,\n tableName,\n columnConfigEnabled,\n fetchColumnConfig,\n saveColumnConfig,\n onColumnConfigChange,\n fetchTablePrefs,\n saveTablePrefs,\n onTablePrefsChange,\n rowConfigEnabled = false,\n lockedRowKeys,\n hiddenRowKeys: hiddenRowKeysProp,\n onHiddenRowKeysChange,\n rowHideSelectedKeys,\n rowConfigToolbar,\n rowSelection,\n ...rest\n}: TableProps<RecordType>) {\n const enableConfig = columnConfigEnabled ?? Boolean(tableName);\n const defaultColumnsRef = useRef(columns);\n const [prefs, setPrefs] = useState<TablePrefs | null>(null);\n const [configOpen, setConfigOpen] = useState(false);\n const [loaded, setLoaded] = useState(!enableConfig);\n /** 行隐藏:仅前端会话,不写 user_key */\n const [localHiddenRowKeys, setLocalHiddenRowKeys] = useState<string[]>([]);\n\n useEffect(() => {\n defaultColumnsRef.current = columns;\n }, [columns]);\n\n useEffect(() => {\n if (!enableConfig || !tableName || !(fetchTablePrefs || fetchColumnConfig)) {\n setLoaded(true);\n return;\n }\n let cancelled = false;\n setLoaded(false);\n const load = async () => {\n try {\n if (fetchTablePrefs) {\n const next = await fetchTablePrefs(tableName);\n if (!cancelled) setPrefs(next?.columns?.length ? next : null);\n } else if (fetchColumnConfig) {\n const items = await fetchColumnConfig(tableName);\n if (!cancelled) setPrefs(items?.length ? emptyTablePrefs(items) : null);\n }\n } catch {\n if (!cancelled) setPrefs(null);\n } finally {\n if (!cancelled) setLoaded(true);\n }\n };\n void load();\n return () => {\n cancelled = true;\n };\n }, [enableConfig, tableName, fetchTablePrefs, fetchColumnConfig]);\n\n const savedConfig = prefs?.columns?.length ? prefs.columns : null;\n\n const resolvedHiddenKeys = useMemo(() => {\n if (hiddenRowKeysProp !== undefined) {\n return normalizeHiddenRowKeys(hiddenRowKeysProp, lockedRowKeys);\n }\n return normalizeHiddenRowKeys(localHiddenRowKeys, lockedRowKeys);\n }, [hiddenRowKeysProp, localHiddenRowKeys, lockedRowKeys]);\n\n const setHiddenRows = useCallback(\n (keys: string[]) => {\n const next = normalizeHiddenRowKeys(keys, lockedRowKeys);\n if (hiddenRowKeysProp === undefined) {\n setLocalHiddenRowKeys(next);\n }\n onHiddenRowKeysChange?.(next);\n },\n [hiddenRowKeysProp, lockedRowKeys, onHiddenRowKeysChange],\n );\n\n const persistColumnPrefs = useCallback(\n async (next: TablePrefs) => {\n setPrefs(next);\n onTablePrefsChange?.(next);\n onColumnConfigChange?.(next.columns);\n if (tableName && saveTablePrefs) {\n await saveTablePrefs(tableName, next);\n return;\n }\n if (tableName && saveColumnConfig) {\n await saveColumnConfig(tableName, next.columns);\n }\n },\n [tableName, saveTablePrefs, saveColumnConfig, onTablePrefsChange, onColumnConfigChange],\n );\n\n const appliedColumns = useMemo(() => {\n const base = (columns || []) as ColumnsType<RecordType>;\n if (!enableConfig) return base;\n return applyColumnConfig(base, savedConfig);\n }, [columns, enableConfig, savedConfig]);\n\n const defaultPanelItems = useMemo(\n () =>\n columnsToPanelItems(\n (defaultColumnsRef.current || columns) as ColumnsType<Record<string, unknown>>,\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- 随 columns 结构变\n [columns],\n );\n\n const handleConfirm = useCallback(\n async (items: TableColumnConfigItem[]) => {\n await persistColumnPrefs(mergeTablePrefs(prefs, { columns: items }));\n },\n [prefs, persistColumnPrefs],\n );\n\n const handleHideColumnPath = useCallback(\n async (path: string[]) => {\n if (!path.length) return;\n const base =\n prefs?.columns?.length && prefs.columns.length\n ? prefs.columns\n : columnsToConfig(\n (defaultColumnsRef.current || columns) as ColumnsType<Record<string, unknown>>,\n );\n await persistColumnPrefs(mergeTablePrefs(prefs, { columns: hideColumnAtPath(base, path) }));\n },\n [prefs, columns, persistColumnPrefs],\n );\n\n const handleHideSelected = useCallback(() => {\n const selected = (rowHideSelectedKeys || []).map(String);\n if (!selected.length) return;\n setHiddenRows([...resolvedHiddenKeys, ...selected]);\n }, [rowHideSelectedKeys, resolvedHiddenKeys, setHiddenRows]);\n\n const handleRestoreHidden = useCallback(() => {\n setHiddenRows([]);\n }, [setHiddenRows]);\n\n const handleHideOneRow = useCallback(\n (key: Key) => {\n const s = String(key);\n if (!s) return;\n if ((lockedRowKeys || []).map(String).includes(s)) return;\n setHiddenRows([...resolvedHiddenKeys, s]);\n },\n [lockedRowKeys, resolvedHiddenKeys, setHiddenRows],\n );\n\n const displayColumns = useMemo(() => {\n let cols = appliedColumns;\n if (enableConfig && loaded) {\n cols = injectHeaderHideEyes(cols, (path) => {\n void handleHideColumnPath(path);\n });\n const gearCol: ColumnType<RecordType> = {\n key: COLUMN_CONFIG_COL_KEY,\n width: CONFIG_COL_WIDTH,\n fixed: 'right',\n align: 'center',\n className: gearStyles.configCol,\n onHeaderCell: () => ({\n className: gearStyles.configColHeader,\n style: {\n width: CONFIG_COL_WIDTH,\n minWidth: CONFIG_COL_WIDTH,\n maxWidth: CONFIG_COL_WIDTH,\n },\n }),\n onCell: () => ({\n style: {\n width: CONFIG_COL_WIDTH,\n minWidth: CONFIG_COL_WIDTH,\n maxWidth: CONFIG_COL_WIDTH,\n },\n }),\n title: (\n <ColumnConfigTrigger\n open={configOpen}\n onOpenChange={setConfigOpen}\n defaultItems={defaultPanelItems}\n savedConfig={savedConfig}\n onConfirm={handleConfirm}\n />\n ),\n render: () => null,\n };\n cols = [...cols, gearCol] as ColumnsType<RecordType>;\n }\n return cols;\n }, [\n enableConfig,\n loaded,\n appliedColumns,\n configOpen,\n defaultPanelItems,\n savedConfig,\n handleConfirm,\n handleHideColumnPath,\n ]);\n\n const displayDataSource = useMemo(() => {\n if (!rowConfigEnabled) return dataSource;\n const keyFn = typeof rowKey === 'function' || typeof rowKey === 'string' ? rowKey : undefined;\n return applyHiddenRows(dataSource, resolvedHiddenKeys, keyFn, lockedRowKeys);\n }, [rowConfigEnabled, dataSource, resolvedHiddenKeys, rowKey, lockedRowKeys]);\n\n const mergedPagination =\n pagination === false\n ? false\n : {\n showSizeChanger: true,\n showTotal: defaultShowTotal,\n ...(pagination && typeof pagination === 'object' ? pagination : {}),\n };\n\n const mergedLocale = {\n emptyText: <Empty iconType=\"simple\" description=\"暂无数据\" />,\n ...locale,\n };\n\n const lockedSet = useMemo(() => new Set((lockedRowKeys || []).map(String)), [lockedRowKeys]);\n const canHideSelected =\n rowConfigEnabled &&\n (rowHideSelectedKeys || []).some((k) => {\n const s = String(k);\n return s && !lockedSet.has(s);\n });\n const hasHidden = rowConfigEnabled && resolvedHiddenKeys.length > 0;\n\n const defaultToolbar =\n rowConfigEnabled && rowConfigToolbar !== false ? (\n <Space\n size=\"small\"\n className={classNames('marsun-table-row-config', styles['marsun-table-row-config'])}\n >\n <Button size=\"small\" disabled={!canHideSelected} onClick={handleHideSelected}>\n 隐藏选中行\n </Button>\n <Button size=\"small\" disabled={!hasHidden} onClick={handleRestoreHidden}>\n 恢复隐藏行{hasHidden ? `(${resolvedHiddenKeys.length})` : ''}\n </Button>\n </Space>\n ) : null;\n\n const toolbarNode =\n rowConfigToolbar === false\n ? null\n : rowConfigToolbar !== undefined\n ? rowConfigToolbar\n : defaultToolbar;\n\n const mergedRowSelection = useMemo(() => {\n if (!rowSelection) return rowSelection;\n if (!rowConfigEnabled) return rowSelection;\n const baseWidth = typeof rowSelection.columnWidth === 'number' ? rowSelection.columnWidth : 48;\n return {\n ...rowSelection,\n columnWidth: baseWidth + 20,\n renderCell: (checked, record, index, originNode) => {\n const fromParent = rowSelection.renderCell?.(checked, record, index, originNode);\n const inner = (fromParent ?? originNode) as ReactNode;\n const key = resolveRecordKey(record as RecordType, index, rowKey);\n const locked = lockedSet.has(key);\n return (\n <span className={styles.rowSelectWithEye}>\n {inner}\n <Tooltip title={locked ? '主对标不可隐藏' : '隐藏此行'}>\n <button\n type=\"button\"\n className={styles.rowEyeBtn}\n aria-label={locked ? '主对标不可隐藏' : '隐藏此行'}\n disabled={locked}\n onClick={(e) => {\n e.stopPropagation();\n handleHideOneRow(key);\n }}\n >\n <Eye size={14} />\n </button>\n </Tooltip>\n </span>\n );\n },\n };\n }, [rowSelection, rowConfigEnabled, rowKey, lockedSet, handleHideOneRow]);\n\n const fittedScrollX = useMemo(() => {\n const colsW = sumLeafColumnWidths(displayColumns as ColumnsType<unknown>);\n if (!colsW) return 0;\n const selW = mergedRowSelection\n ? typeof mergedRowSelection.columnWidth === 'number'\n ? mergedRowSelection.columnWidth\n : 48\n : 0;\n return colsW + selW;\n }, [displayColumns, mergedRowSelection]);\n\n const mergedScroll = useMemo(() => {\n const base = scroll === undefined ? { ...DEFAULT_SCROLL } : { ...scroll };\n if (fittedScrollX > 0) {\n // 作为最小内容宽:多于容器则横滚;少于容器时由 CSS width:100% 铺满\n return { ...base, x: fittedScrollX };\n }\n return base;\n }, [scroll, fittedScrollX]);\n\n return (\n <div className={classNames('marsun-table-shell', styles['marsun-table-shell'])}>\n {toolbarNode ? <div className={styles['marsun-table-toolbar']}>{toolbarNode}</div> : null}\n <AntTable<RecordType>\n className={classNames('marsun-table', styles['marsun-table'], className)}\n style={\n {\n ...style,\n ...(fittedScrollX > 0\n ? ({ ['--marsun-table-scroll-x']: `${fittedScrollX}px` } as CSSProperties)\n : null),\n } as CSSProperties\n }\n scroll={mergedScroll}\n pagination={mergedPagination}\n locale={mergedLocale}\n columns={displayColumns}\n dataSource={displayDataSource}\n rowKey={rowKey}\n rowSelection={mergedRowSelection}\n {...rest}\n />\n </div>\n );\n}\n\nexport default Table;\n\nexport {\n columnsToConfig,\n applyColumnConfig,\n COLUMN_CONFIG_COL_KEY,\n FLEX_SPACER_COL_KEY,\n isInternalColumnKey,\n hideColumnAtPath,\n};\nexport {\n parseTablePrefs,\n serializeTablePrefs,\n mergeTablePrefs,\n applyHiddenRows,\n normalizeHiddenRowKeys,\n} from './tablePrefsUtils';\nexport { emptyTablePrefs } from './tablePrefsTypes';\n"],"names":["DEFAULT_SCROLL","CONFIG_COL_WIDTH","AUTO_COL_SCROLL_FALLBACK","defaultShowTotal","total","sumLeafColumnWidths","columns","sum","col","key","isInternalColumnKey","_a","w","colFullKey","index","resolveRecordKey","row","rowKey","v","HEADER_GROUP_PALETTE_SIZE","injectHeaderHideEyes","onHidePath","parentFullKey","path","depth","groupIndex","groupSeq","i","full","configId","shortChildId","nextPath","prevOnHeaderCell","gIdx","depthClass","styles","groupClass","titleNode","jsxs","jsx","Tooltip","e","Eye","mergeHeaderCell","c","prev","classNames","_b","Table","className","style","scroll","pagination","locale","dataSource","tableName","columnConfigEnabled","fetchColumnConfig","saveColumnConfig","onColumnConfigChange","fetchTablePrefs","saveTablePrefs","onTablePrefsChange","rowConfigEnabled","lockedRowKeys","hiddenRowKeysProp","onHiddenRowKeysChange","rowHideSelectedKeys","rowConfigToolbar","rowSelection","rest","enableConfig","defaultColumnsRef","useRef","prefs","setPrefs","useState","configOpen","setConfigOpen","loaded","setLoaded","localHiddenRowKeys","setLocalHiddenRowKeys","useEffect","cancelled","next","items","emptyTablePrefs","savedConfig","resolvedHiddenKeys","useMemo","normalizeHiddenRowKeys","setHiddenRows","useCallback","keys","persistColumnPrefs","appliedColumns","base","applyColumnConfig","defaultPanelItems","columnsToPanelItems","handleConfirm","mergeTablePrefs","handleHideColumnPath","columnsToConfig","hideColumnAtPath","handleHideSelected","selected","handleRestoreHidden","handleHideOneRow","s","displayColumns","cols","gearCol","COLUMN_CONFIG_COL_KEY","gearStyles","ColumnConfigTrigger","displayDataSource","applyHiddenRows","mergedPagination","mergedLocale","Empty","lockedSet","canHideSelected","k","hasHidden","defaultToolbar","Space","Button","toolbarNode","mergedRowSelection","baseWidth","checked","record","originNode","inner","locked","fittedScrollX","colsW","selW","mergedScroll","AntTable"],"mappings":"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"}
1
+ {"version":3,"file":"Table.js","sources":["../../../src/components/Table/Table.tsx"],"sourcesContent":["import { useMarsunFetch } from '@/provider';\nimport type { TableProps as AntTableProps } from 'antd';\nimport { Table as AntTable, Button, Space, Tooltip } from 'antd';\nimport type { ColumnsType, ColumnType } from 'antd/es/table';\nimport classNames from 'classnames';\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type Key,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { Empty } from '../Empty';\nimport { Eye } from '../Icons';\nimport gearStyles from './columnConfig.module.scss';\nimport { ColumnConfigTrigger } from './ColumnConfigPanel';\nimport type {\n TableColumnConfigFetcher,\n TableColumnConfigItem,\n TableColumnConfigSaver,\n} from './columnConfigTypes';\nimport {\n applyColumnConfig,\n COLUMN_CONFIG_COL_KEY,\n columnsToConfig,\n columnsToPanelItems,\n FLEX_SPACER_COL_KEY,\n hideColumnAtPath,\n isInternalColumnKey,\n shortChildId,\n type ColumnTypeAny,\n} from './columnConfigUtils';\nimport styles from './style.module.scss';\nimport type { TablePrefs, TablePrefsFetcher, TablePrefsSaver } from './tablePrefsTypes';\nimport { emptyTablePrefs } from './tablePrefsTypes';\nimport { applyHiddenRows, mergeTablePrefs, normalizeHiddenRowKeys } from './tablePrefsUtils';\nimport {\n useTableFetch,\n type TableFetchHandle,\n type TableFetchMapped,\n type TableFetchQuery,\n} from './useTableFetch';\n\nexport type {\n TableColumnConfigFetcher,\n TableColumnConfigItem,\n TableColumnConfigSaver,\n TableFetchHandle,\n TableFetchMapped,\n TableFetchQuery,\n TablePrefs,\n TablePrefsFetcher,\n TablePrefsSaver,\n};\n\nexport type TableProps<RecordType extends object = Record<string, unknown>> =\n AntTableProps<RecordType> & {\n /** 稳定偏好 key;业务列表必填 */\n tableName?: string;\n /** 是否启用「编辑表格」列配置;默认 !!tableName */\n columnConfigEnabled?: boolean;\n /** @deprecated 优先用 fetchTablePrefs;仍支持仅列配置 */\n fetchColumnConfig?: TableColumnConfigFetcher;\n /** @deprecated 优先用 saveTablePrefs */\n saveColumnConfig?: TableColumnConfigSaver;\n onColumnConfigChange?: (items: TableColumnConfigItem[]) => void;\n /** 读写 TablePrefs(仅 columns,经 user_key) */\n fetchTablePrefs?: TablePrefsFetcher;\n saveTablePrefs?: TablePrefsSaver;\n onTablePrefsChange?: (prefs: TablePrefs) => void;\n /** 启用行隐藏(会话内 state,不进 user_key);默认 false */\n rowConfigEnabled?: boolean;\n /** 不可隐藏的行 key(如主对标) */\n lockedRowKeys?: Key[];\n /** 受控隐藏行;不传则用组件内部会话 state */\n hiddenRowKeys?: Key[];\n onHiddenRowKeysChange?: (keys: string[]) => void;\n /** 行隐藏工具条:传入当前勾选 key 以启用「隐藏选中行」 */\n rowHideSelectedKeys?: Key[];\n /** 自定义行隐藏工具条;默认内置按钮 */\n rowConfigToolbar?: ReactNode | false;\n /**\n * Fetch 模式:`dataSource === undefined` 且提供本回调(或 fetchUrl)时由 Table 拉数。\n * 优先于 fetchUrl。Marsun typed list 主路径。\n */\n fetchData?: (q: TableFetchQuery) => Promise<unknown>;\n /** Form FetchSelect 同构:GET/自定义 Request;需配合 transformData 或默认 pageData 解析 */\n fetchUrl?: string;\n fetchOptions?: RequestInit | ((q: TableFetchQuery) => RequestInit);\n transformData?: (raw: unknown) => TableFetchMapped<RecordType>;\n /** 筛选项;稳定序列化变则回第 1 页再请求 */\n fetchParams?: unknown;\n /** Tab 懒请求;默认 true */\n enabled?: boolean;\n /** fetch 模式默认 pageSize;默认 20 */\n defaultPageSize?: number;\n onFetched?: (r: TableFetchMapped<RecordType> & { error: Error | null }) => void;\n };\n\nconst DEFAULT_SCROLL = { x: 'max-content' as const };\nconst CONFIG_COL_WIDTH = 40;\n/** 无 width 的弹性列计入 scroll 的最小占位,避免多列时被压扁 */\nconst AUTO_COL_SCROLL_FALLBACK = 64;\n\nfunction defaultShowTotal(total: number): string {\n return `共 ${total} 项`;\n}\n\n/** 可见叶子列 width 合计;无 width 的列用 fallback(弹性列) */\nfunction sumLeafColumnWidths(columns: ColumnsType<unknown> | undefined): number {\n if (!columns?.length) return 0;\n let sum = 0;\n for (const col of columns as ColumnTypeAny[]) {\n const key = col.key != null ? String(col.key) : '';\n if (key && isInternalColumnKey(key)) continue;\n if (col.children?.length) {\n sum += sumLeafColumnWidths(col.children as ColumnsType<unknown>);\n continue;\n }\n const w = col.width;\n if (typeof w === 'number' && Number.isFinite(w) && w > 0) sum += w;\n else sum += AUTO_COL_SCROLL_FALLBACK;\n }\n return sum;\n}\n\nfunction colFullKey(col: ColumnTypeAny, index: number): string {\n if (col.key != null && String(col.key) !== '') return String(col.key);\n if (col.dataIndex != null) {\n return Array.isArray(col.dataIndex) ? col.dataIndex.join('.') : String(col.dataIndex);\n }\n return `__col_${index}`;\n}\n\nfunction resolveRecordKey<RecordType extends object>(\n row: RecordType,\n index: number,\n rowKey: AntTableProps<RecordType>['rowKey'],\n): string {\n if (typeof rowKey === 'function') return String(rowKey(row, index));\n if (typeof rowKey === 'string' && rowKey) {\n const v = (row as Record<string, unknown>)[rowKey];\n if (v != null && v !== '') return String(v);\n }\n return String(index);\n}\n\n/** 一级组色带数量(与 SCSS headerGroup0..5 对齐) */\nconst HEADER_GROUP_PALETTE_SIZE = 6;\n\n/** 多级表头 title 注入眼睛;同色系按一级组,depth 加深浅 */\nfunction injectHeaderHideEyes<RecordType extends object>(\n columns: ColumnsType<RecordType>,\n onHidePath: (path: string[]) => void,\n parentFullKey?: string,\n path: string[] = [],\n depth = 0,\n groupIndex?: number,\n): ColumnsType<RecordType> {\n let groupSeq = 0;\n\n return (columns as ColumnTypeAny[]).map((col, i) => {\n const full = colFullKey(col, i);\n if (isInternalColumnKey(full)) return col as ColumnType<RecordType>;\n const configId = parentFullKey ? shortChildId(parentFullKey, full) : full;\n const nextPath = [...path, configId];\n const prevOnHeaderCell = col.onHeaderCell;\n\n /** 顶层有 children 的列为一级组,分配色带;固定列叶子不着色 */\n let gIdx = groupIndex;\n if (depth === 0) {\n gIdx = col.children?.length ? groupSeq++ : undefined;\n }\n\n const depthClass =\n gIdx == null\n ? undefined\n : depth === 0\n ? styles.headerDepth0\n : depth === 1\n ? styles.headerDepth1\n : styles.headerDepth2;\n const groupClass =\n gIdx == null ? undefined : styles[`headerGroup${gIdx % HEADER_GROUP_PALETTE_SIZE}`];\n\n const titleNode = (\n <span className={styles.headerTitleWithEye}>\n <span className={styles.headerTitleText}>{col.title as ReactNode}</span>\n <Tooltip title=\"隐藏此列\">\n <button\n type=\"button\"\n className={styles.headerEyeBtn}\n aria-label=\"隐藏此列\"\n onClick={(e) => {\n e.stopPropagation();\n onHidePath(nextPath);\n }}\n >\n <Eye size={12} />\n </button>\n </Tooltip>\n </span>\n );\n const mergeHeaderCell = (c: ColumnTypeAny) => {\n const prev =\n typeof prevOnHeaderCell === 'function'\n ? (prevOnHeaderCell as (col: ColumnTypeAny) => Record<string, unknown>)(c)\n : (prevOnHeaderCell as Record<string, unknown> | undefined) || {};\n return {\n ...prev,\n className: classNames((prev as { className?: string }).className, groupClass, depthClass),\n };\n };\n if (col.children?.length) {\n return {\n ...col,\n title: titleNode,\n onHeaderCell: mergeHeaderCell,\n children: injectHeaderHideEyes(\n col.children as ColumnsType<RecordType>,\n onHidePath,\n full,\n nextPath,\n depth + 1,\n gIdx,\n ),\n } as ColumnType<RecordType>;\n }\n return {\n ...col,\n title: titleNode,\n onHeaderCell: mergeHeaderCell,\n } as ColumnType<RecordType>;\n }) as ColumnsType<RecordType>;\n}\n\n/**\n * 基于 antd Table 的列表表格包装。\n * 列偏好经 user_key;行隐藏仅会话 state,不进 user_key。\n * Fetch:dataSource===undefined 且 fetchData/fetchUrl 时由 Table 拉 pageData。\n */\nfunction TableInner<RecordType extends object = Record<string, unknown>>(\n {\n className,\n style,\n scroll,\n pagination,\n locale,\n columns,\n dataSource,\n rowKey,\n loading: loadingProp,\n tableName,\n columnConfigEnabled,\n fetchColumnConfig,\n saveColumnConfig,\n onColumnConfigChange,\n fetchTablePrefs,\n saveTablePrefs,\n onTablePrefsChange,\n rowConfigEnabled = false,\n lockedRowKeys,\n hiddenRowKeys: hiddenRowKeysProp,\n onHiddenRowKeysChange,\n rowHideSelectedKeys,\n rowConfigToolbar,\n rowSelection,\n fetchData,\n fetchUrl,\n fetchOptions,\n transformData,\n fetchParams,\n enabled = true,\n defaultPageSize = 20,\n onFetched,\n ...rest\n }: TableProps<RecordType>,\n ref: Ref<TableFetchHandle>,\n) {\n const fetchCtx = useMarsunFetch();\n const {\n fetchMode,\n rows: fetchRows,\n total: fetchTotal,\n loading: fetchLoading,\n error: fetchError,\n currentPage,\n pageSize,\n setPage,\n reload,\n } = useTableFetch<RecordType>({\n dataSource,\n fetchData,\n fetchUrl,\n fetchOptions,\n transformData,\n fetchParams,\n enabled,\n defaultPageSize,\n baseUrl: fetchCtx.baseUrl,\n defaultHeaders: fetchCtx.headers,\n timeoutMs: fetchCtx.timeoutMs,\n onFetched,\n });\n\n useImperativeHandle(ref, () => ({ reload }), [reload]);\n\n const resolvedDataSource = fetchMode ? fetchRows : dataSource;\n const resolvedLoading = Boolean(loadingProp) || (fetchMode && fetchLoading);\n\n const enableConfig = columnConfigEnabled ?? Boolean(tableName);\n const defaultColumnsRef = useRef(columns);\n const [prefs, setPrefs] = useState<TablePrefs | null>(null);\n const [configOpen, setConfigOpen] = useState(false);\n const [loaded, setLoaded] = useState(!enableConfig);\n /** 行隐藏:仅前端会话,不写 user_key */\n const [localHiddenRowKeys, setLocalHiddenRowKeys] = useState<string[]>([]);\n\n useEffect(() => {\n defaultColumnsRef.current = columns;\n }, [columns]);\n\n useEffect(() => {\n if (!enableConfig || !tableName || !(fetchTablePrefs || fetchColumnConfig)) {\n setLoaded(true);\n return;\n }\n let cancelled = false;\n setLoaded(false);\n const load = async () => {\n try {\n if (fetchTablePrefs) {\n const next = await fetchTablePrefs(tableName);\n if (!cancelled) setPrefs(next?.columns?.length ? next : null);\n } else if (fetchColumnConfig) {\n const items = await fetchColumnConfig(tableName);\n if (!cancelled) setPrefs(items?.length ? emptyTablePrefs(items) : null);\n }\n } catch {\n if (!cancelled) setPrefs(null);\n } finally {\n if (!cancelled) setLoaded(true);\n }\n };\n void load();\n return () => {\n cancelled = true;\n };\n }, [enableConfig, tableName, fetchTablePrefs, fetchColumnConfig]);\n\n const savedConfig = prefs?.columns?.length ? prefs.columns : null;\n\n const resolvedHiddenKeys = useMemo(() => {\n if (hiddenRowKeysProp !== undefined) {\n return normalizeHiddenRowKeys(hiddenRowKeysProp, lockedRowKeys);\n }\n return normalizeHiddenRowKeys(localHiddenRowKeys, lockedRowKeys);\n }, [hiddenRowKeysProp, localHiddenRowKeys, lockedRowKeys]);\n\n const setHiddenRows = useCallback(\n (keys: string[]) => {\n const next = normalizeHiddenRowKeys(keys, lockedRowKeys);\n if (hiddenRowKeysProp === undefined) {\n setLocalHiddenRowKeys(next);\n }\n onHiddenRowKeysChange?.(next);\n },\n [hiddenRowKeysProp, lockedRowKeys, onHiddenRowKeysChange],\n );\n\n const persistColumnPrefs = useCallback(\n async (next: TablePrefs) => {\n setPrefs(next);\n onTablePrefsChange?.(next);\n onColumnConfigChange?.(next.columns);\n if (tableName && saveTablePrefs) {\n await saveTablePrefs(tableName, next);\n return;\n }\n if (tableName && saveColumnConfig) {\n await saveColumnConfig(tableName, next.columns);\n }\n },\n [tableName, saveTablePrefs, saveColumnConfig, onTablePrefsChange, onColumnConfigChange],\n );\n\n const appliedColumns = useMemo(() => {\n const base = (columns || []) as ColumnsType<RecordType>;\n if (!enableConfig) return base;\n return applyColumnConfig(base, savedConfig);\n }, [columns, enableConfig, savedConfig]);\n\n const defaultPanelItems = useMemo(\n () =>\n columnsToPanelItems(\n (defaultColumnsRef.current || columns) as ColumnsType<Record<string, unknown>>,\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- 随 columns 结构变\n [columns],\n );\n\n const handleConfirm = useCallback(\n async (items: TableColumnConfigItem[]) => {\n await persistColumnPrefs(mergeTablePrefs(prefs, { columns: items }));\n },\n [prefs, persistColumnPrefs],\n );\n\n const handleHideColumnPath = useCallback(\n async (path: string[]) => {\n if (!path.length) return;\n const base =\n prefs?.columns?.length && prefs.columns.length\n ? prefs.columns\n : columnsToConfig(\n (defaultColumnsRef.current || columns) as ColumnsType<Record<string, unknown>>,\n );\n await persistColumnPrefs(mergeTablePrefs(prefs, { columns: hideColumnAtPath(base, path) }));\n },\n [prefs, columns, persistColumnPrefs],\n );\n\n const handleHideSelected = useCallback(() => {\n const selected = (rowHideSelectedKeys || []).map(String);\n if (!selected.length) return;\n setHiddenRows([...resolvedHiddenKeys, ...selected]);\n }, [rowHideSelectedKeys, resolvedHiddenKeys, setHiddenRows]);\n\n const handleRestoreHidden = useCallback(() => {\n setHiddenRows([]);\n }, [setHiddenRows]);\n\n const handleHideOneRow = useCallback(\n (key: Key) => {\n const s = String(key);\n if (!s) return;\n if ((lockedRowKeys || []).map(String).includes(s)) return;\n setHiddenRows([...resolvedHiddenKeys, s]);\n },\n [lockedRowKeys, resolvedHiddenKeys, setHiddenRows],\n );\n\n const displayColumns = useMemo(() => {\n let cols = appliedColumns;\n if (enableConfig && loaded) {\n cols = injectHeaderHideEyes(cols, (path) => {\n void handleHideColumnPath(path);\n });\n const gearCol: ColumnType<RecordType> = {\n key: COLUMN_CONFIG_COL_KEY,\n width: CONFIG_COL_WIDTH,\n fixed: 'right',\n align: 'center',\n className: gearStyles.configCol,\n onHeaderCell: () => ({\n className: gearStyles.configColHeader,\n style: {\n width: CONFIG_COL_WIDTH,\n minWidth: CONFIG_COL_WIDTH,\n maxWidth: CONFIG_COL_WIDTH,\n },\n }),\n onCell: () => ({\n style: {\n width: CONFIG_COL_WIDTH,\n minWidth: CONFIG_COL_WIDTH,\n maxWidth: CONFIG_COL_WIDTH,\n },\n }),\n title: (\n <ColumnConfigTrigger\n open={configOpen}\n onOpenChange={setConfigOpen}\n defaultItems={defaultPanelItems}\n savedConfig={savedConfig}\n onConfirm={handleConfirm}\n />\n ),\n render: () => null,\n };\n cols = [...cols, gearCol] as ColumnsType<RecordType>;\n }\n return cols;\n }, [\n enableConfig,\n loaded,\n appliedColumns,\n configOpen,\n defaultPanelItems,\n savedConfig,\n handleConfirm,\n handleHideColumnPath,\n ]);\n\n const displayDataSource = useMemo(() => {\n if (!rowConfigEnabled) return resolvedDataSource;\n const keyFn = typeof rowKey === 'function' || typeof rowKey === 'string' ? rowKey : undefined;\n return applyHiddenRows(resolvedDataSource, resolvedHiddenKeys, keyFn, lockedRowKeys);\n }, [rowConfigEnabled, resolvedDataSource, resolvedHiddenKeys, rowKey, lockedRowKeys]);\n\n const mergedPagination =\n pagination === false\n ? false\n : {\n showSizeChanger: true,\n showTotal: defaultShowTotal,\n ...(pagination && typeof pagination === 'object' ? pagination : {}),\n ...(fetchMode\n ? {\n current: currentPage,\n pageSize,\n total: fetchTotal,\n onChange: (page: number, size: number) => {\n setPage(page, size);\n if (pagination && typeof pagination === 'object' && pagination.onChange) {\n pagination.onChange(page, size);\n }\n },\n }\n : null),\n };\n\n const mergedLocale = {\n ...locale,\n emptyText:\n locale?.emptyText ??\n (fetchError ? (\n <Empty iconType=\"simple\" description={fetchError.message || '加载失败'} />\n ) : (\n <Empty iconType=\"simple\" description=\"暂无数据\" />\n )),\n };\n\n const lockedSet = useMemo(() => new Set((lockedRowKeys || []).map(String)), [lockedRowKeys]);\n const canHideSelected =\n rowConfigEnabled &&\n (rowHideSelectedKeys || []).some((k) => {\n const s = String(k);\n return s && !lockedSet.has(s);\n });\n const hasHidden = rowConfigEnabled && resolvedHiddenKeys.length > 0;\n\n const defaultToolbar =\n rowConfigEnabled && rowConfigToolbar !== false ? (\n <Space\n size=\"small\"\n className={classNames('marsun-table-row-config', styles['marsun-table-row-config'])}\n >\n <Button size=\"small\" disabled={!canHideSelected} onClick={handleHideSelected}>\n 隐藏选中行\n </Button>\n <Button size=\"small\" disabled={!hasHidden} onClick={handleRestoreHidden}>\n 恢复隐藏行{hasHidden ? `(${resolvedHiddenKeys.length})` : ''}\n </Button>\n </Space>\n ) : null;\n\n const toolbarNode =\n rowConfigToolbar === false\n ? null\n : rowConfigToolbar !== undefined\n ? rowConfigToolbar\n : defaultToolbar;\n\n const mergedRowSelection = useMemo(() => {\n if (!rowSelection) return rowSelection;\n if (!rowConfigEnabled) return rowSelection;\n const baseWidth = typeof rowSelection.columnWidth === 'number' ? rowSelection.columnWidth : 48;\n return {\n ...rowSelection,\n columnWidth: baseWidth + 20,\n renderCell: (checked, record, index, originNode) => {\n const fromParent = rowSelection.renderCell?.(checked, record, index, originNode);\n const inner = (fromParent ?? originNode) as ReactNode;\n const key = resolveRecordKey(record as RecordType, index, rowKey);\n const locked = lockedSet.has(key);\n return (\n <span className={styles.rowSelectWithEye}>\n {inner}\n <Tooltip title={locked ? '主对标不可隐藏' : '隐藏此行'}>\n <button\n type=\"button\"\n className={styles.rowEyeBtn}\n aria-label={locked ? '主对标不可隐藏' : '隐藏此行'}\n disabled={locked}\n onClick={(e) => {\n e.stopPropagation();\n handleHideOneRow(key);\n }}\n >\n <Eye size={14} />\n </button>\n </Tooltip>\n </span>\n );\n },\n };\n }, [rowSelection, rowConfigEnabled, rowKey, lockedSet, handleHideOneRow]);\n\n const fittedScrollX = useMemo(() => {\n const colsW = sumLeafColumnWidths(displayColumns as ColumnsType<unknown>);\n if (!colsW) return 0;\n const selW = mergedRowSelection\n ? typeof mergedRowSelection.columnWidth === 'number'\n ? mergedRowSelection.columnWidth\n : 48\n : 0;\n return colsW + selW;\n }, [displayColumns, mergedRowSelection]);\n\n const mergedScroll = useMemo(() => {\n const base = scroll === undefined ? { ...DEFAULT_SCROLL } : { ...scroll };\n if (fittedScrollX > 0) {\n // 作为最小内容宽:多于容器则横滚;少于容器时由 CSS width:100% 铺满\n return { ...base, x: fittedScrollX };\n }\n return base;\n }, [scroll, fittedScrollX]);\n\n return (\n <div className={classNames('marsun-table-shell', styles['marsun-table-shell'])}>\n {toolbarNode ? <div className={styles['marsun-table-toolbar']}>{toolbarNode}</div> : null}\n <AntTable<RecordType>\n className={classNames('marsun-table', styles['marsun-table'], className)}\n style={\n {\n ...style,\n ...(fittedScrollX > 0\n ? ({ ['--marsun-table-scroll-x']: `${fittedScrollX}px` } as CSSProperties)\n : null),\n } as CSSProperties\n }\n scroll={mergedScroll}\n pagination={mergedPagination}\n locale={mergedLocale}\n columns={displayColumns}\n dataSource={displayDataSource}\n rowKey={rowKey}\n loading={resolvedLoading}\n rowSelection={mergedRowSelection}\n {...rest}\n />\n </div>\n );\n}\n\nconst Table = forwardRef(TableInner) as <RecordType extends object = Record<string, unknown>>(\n props: TableProps<RecordType> & { ref?: Ref<TableFetchHandle> },\n) => ReactElement | null;\n\nexport default Table;\n\nexport { emptyTablePrefs } from './tablePrefsTypes';\nexport {\n applyHiddenRows,\n mergeTablePrefs,\n normalizeHiddenRowKeys,\n parseTablePrefs,\n serializeTablePrefs,\n} from './tablePrefsUtils';\nexport {\n applyColumnConfig,\n COLUMN_CONFIG_COL_KEY,\n columnsToConfig,\n FLEX_SPACER_COL_KEY,\n hideColumnAtPath,\n isInternalColumnKey,\n};\n"],"names":["DEFAULT_SCROLL","CONFIG_COL_WIDTH","AUTO_COL_SCROLL_FALLBACK","defaultShowTotal","total","sumLeafColumnWidths","columns","sum","col","key","isInternalColumnKey","_a","w","colFullKey","index","resolveRecordKey","row","rowKey","v","HEADER_GROUP_PALETTE_SIZE","injectHeaderHideEyes","onHidePath","parentFullKey","path","depth","groupIndex","groupSeq","i","full","configId","shortChildId","nextPath","prevOnHeaderCell","gIdx","depthClass","styles","groupClass","titleNode","jsxs","jsx","Tooltip","e","Eye","mergeHeaderCell","c","prev","classNames","_b","TableInner","className","style","scroll","pagination","locale","dataSource","loadingProp","tableName","columnConfigEnabled","fetchColumnConfig","saveColumnConfig","onColumnConfigChange","fetchTablePrefs","saveTablePrefs","onTablePrefsChange","rowConfigEnabled","lockedRowKeys","hiddenRowKeysProp","onHiddenRowKeysChange","rowHideSelectedKeys","rowConfigToolbar","rowSelection","fetchData","fetchUrl","fetchOptions","transformData","fetchParams","enabled","defaultPageSize","onFetched","rest","ref","fetchCtx","useMarsunFetch","fetchMode","fetchRows","fetchTotal","fetchLoading","fetchError","currentPage","pageSize","setPage","reload","useTableFetch","useImperativeHandle","resolvedDataSource","resolvedLoading","enableConfig","defaultColumnsRef","useRef","prefs","setPrefs","useState","configOpen","setConfigOpen","loaded","setLoaded","localHiddenRowKeys","setLocalHiddenRowKeys","useEffect","cancelled","next","items","emptyTablePrefs","savedConfig","resolvedHiddenKeys","useMemo","normalizeHiddenRowKeys","setHiddenRows","useCallback","keys","persistColumnPrefs","appliedColumns","base","applyColumnConfig","defaultPanelItems","columnsToPanelItems","handleConfirm","mergeTablePrefs","handleHideColumnPath","columnsToConfig","hideColumnAtPath","handleHideSelected","selected","handleRestoreHidden","handleHideOneRow","s","displayColumns","cols","gearCol","COLUMN_CONFIG_COL_KEY","gearStyles","ColumnConfigTrigger","displayDataSource","applyHiddenRows","mergedPagination","page","size","mergedLocale","Empty","lockedSet","canHideSelected","k","hasHidden","defaultToolbar","Space","Button","toolbarNode","mergedRowSelection","baseWidth","checked","record","originNode","inner","locked","fittedScrollX","colsW","selW","mergedScroll","AntTable","Table","forwardRef"],"mappings":";;;;;;;;;;;;;;;;AA0GA,MAAMA,KAAiB,EAAE,GAAG,cAAA,GACtBC,IAAmB,IAEnBC,KAA2B;AAEjC,SAASC,GAAiBC,GAAuB;AAC/C,SAAO,KAAKA,CAAK;AACnB;AAGA,SAASC,GAAoBC,GAAmD;;AAC9E,MAAI,EAACA,KAAA,QAAAA,EAAS,QAAQ,QAAO;AAC7B,MAAIC,IAAM;AACV,aAAWC,KAAOF,GAA4B;AAC5C,UAAMG,IAAMD,EAAI,OAAO,OAAO,OAAOA,EAAI,GAAG,IAAI;AAChD,QAAIC,KAAOC,GAAoBD,CAAG,EAAG;AACrC,SAAIE,IAAAH,EAAI,aAAJ,QAAAG,EAAc,QAAQ;AACxB,MAAAJ,KAAOF,GAAoBG,EAAI,QAAgC;AAC/D;AAAA,IACF;AACA,UAAMI,IAAIJ,EAAI;AACd,IAAI,OAAOI,KAAM,YAAY,OAAO,SAASA,CAAC,KAAKA,IAAI,IAAGL,KAAOK,IAC5DL,KAAOL;AAAA,EACd;AACA,SAAOK;AACT;AAEA,SAASM,GAAWL,GAAoBM,GAAuB;AAC7D,SAAIN,EAAI,OAAO,QAAQ,OAAOA,EAAI,GAAG,MAAM,KAAW,OAAOA,EAAI,GAAG,IAChEA,EAAI,aAAa,OACZ,MAAM,QAAQA,EAAI,SAAS,IAAIA,EAAI,UAAU,KAAK,GAAG,IAAI,OAAOA,EAAI,SAAS,IAE/E,SAASM,CAAK;AACvB;AAEA,SAASC,GACPC,GACAF,GACAG,GACQ;AACR,MAAI,OAAOA,KAAW,WAAY,QAAO,OAAOA,EAAOD,GAAKF,CAAK,CAAC;AAClE,MAAI,OAAOG,KAAW,YAAYA,GAAQ;AACxC,UAAMC,IAAKF,EAAgCC,CAAM;AACjD,QAAIC,KAAK,QAAQA,MAAM,GAAI,QAAO,OAAOA,CAAC;AAAA,EAC5C;AACA,SAAO,OAAOJ,CAAK;AACrB;AAGA,MAAMK,KAA4B;AAGlC,SAASC,GACPd,GACAe,GACAC,GACAC,IAAiB,IACjBC,IAAQ,GACRC,GACyB;AACzB,MAAIC,IAAW;AAEf,SAAQpB,EAA4B,IAAI,CAACE,GAAKmB,MAAM;;AAClD,UAAMC,IAAOf,GAAWL,GAAKmB,CAAC;AAC9B,QAAIjB,GAAoBkB,CAAI,EAAG,QAAOpB;AACtC,UAAMqB,IAAWP,IAAgBQ,GAAaR,GAAeM,CAAI,IAAIA,GAC/DG,IAAW,CAAC,GAAGR,GAAMM,CAAQ,GAC7BG,IAAmBxB,EAAI;AAG7B,QAAIyB,IAAOR;AACX,IAAID,MAAU,MACZS,KAAOtB,IAAAH,EAAI,aAAJ,QAAAG,EAAc,SAASe,MAAa;AAG7C,UAAMQ,IACJD,KAAQ,OACJ,SACAT,MAAU,IACRW,EAAO,eACPX,MAAU,IACRW,EAAO,eACPA,EAAO,cACXC,IACJH,KAAQ,OAAO,SAAYE,EAAO,cAAcF,IAAOd,EAAyB,EAAE,GAE9EkB,IACJ,gBAAAC,EAAC,QAAA,EAAK,WAAWH,EAAO,oBACtB,UAAA;AAAA,MAAA,gBAAAI,EAAC,QAAA,EAAK,WAAWJ,EAAO,iBAAkB,YAAI,OAAmB;AAAA,MACjE,gBAAAI,EAACC,IAAA,EAAQ,OAAM,QACb,UAAA,gBAAAD;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAWJ,EAAO;AAAA,UAClB,cAAW;AAAA,UACX,SAAS,CAACM,MAAM;AACd,YAAAA,EAAE,gBAAA,GACFpB,EAAWU,CAAQ;AAAA,UACrB;AAAA,UAEA,UAAA,gBAAAQ,EAACG,IAAA,EAAI,MAAM,GAAA,CAAI;AAAA,QAAA;AAAA,MAAA,EACjB,CACF;AAAA,IAAA,GACF,GAEIC,IAAkB,CAACC,MAAqB;AAC5C,YAAMC,IACJ,OAAOb,KAAqB,aACvBA,EAAqEY,CAAC,IACtEZ,KAA4D,CAAA;AACnE,aAAO;AAAA,QACL,GAAGa;AAAA,QACH,WAAWC,EAAYD,EAAgC,WAAWT,GAAYF,CAAU;AAAA,MAAA;AAAA,IAE5F;AACA,YAAIa,IAAAvC,EAAI,aAAJ,QAAAuC,EAAc,SACT;AAAA,MACL,GAAGvC;AAAA,MACH,OAAO6B;AAAA,MACP,cAAcM;AAAA,MACd,UAAUvB;AAAA,QACRZ,EAAI;AAAA,QACJa;AAAA,QACAO;AAAA,QACAG;AAAA,QACAP,IAAQ;AAAA,QACRS;AAAA,MAAA;AAAA,IACF,IAGG;AAAA,MACL,GAAGzB;AAAA,MACH,OAAO6B;AAAA,MACP,cAAcM;AAAA,IAAA;AAAA,EAElB,CAAC;AACH;AAOA,SAASK,GACP;AAAA,EACE,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAA/C;AAAA,EACA,YAAAgD;AAAA,EACA,QAAArC;AAAA,EACA,SAASsC;AAAA,EACT,WAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,sBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,kBAAAC,IAAmB;AAAA,EACnB,eAAAC;AAAA,EACA,eAAeC;AAAA,EACf,uBAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC,KAAU;AAAA,EACV,iBAAAC,KAAkB;AAAA,EAClB,WAAAC;AAAA,EACA,GAAGC;AACL,GACAC,IACA;;AACA,QAAMC,IAAWC,GAAA,GACX;AAAA,IACJ,WAAAC;AAAA,IACA,MAAMC;AAAA,IACN,OAAOC;AAAA,IACP,SAASC;AAAA,IACT,OAAOC;AAAA,IACP,aAAAC;AAAA,IACA,UAAAC;AAAA,IACA,SAAAC;AAAA,IACA,QAAAC;AAAA,EAAA,IACEC,GAA0B;AAAA,IAC5B,YAAAtC;AAAA,IACA,WAAAiB;AAAA,IACA,UAAAC;AAAA,IACA,cAAAC;AAAA,IACA,eAAAC;AAAA,IACA,aAAAC;AAAA,IACA,SAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,SAASI,EAAS;AAAA,IAClB,gBAAgBA,EAAS;AAAA,IACzB,WAAWA,EAAS;AAAA,IACpB,WAAAH;AAAA,EAAA,CACD;AAED,EAAAe,GAAoBb,IAAK,OAAO,EAAE,QAAAW,OAAW,CAACA,EAAM,CAAC;AAErD,QAAMG,IAAqBX,IAAYC,KAAY9B,GAC7CyC,KAAkB,EAAQxC,KAAiB4B,KAAaG,IAExDU,IAAevC,KAAuB,EAAQD,GAC9CyC,IAAoBC,GAAO5F,CAAO,GAClC,CAAC6F,GAAOC,CAAQ,IAAIC,EAA4B,IAAI,GACpD,CAACC,IAAYC,EAAa,IAAIF,EAAS,EAAK,GAC5C,CAACG,IAAQC,CAAS,IAAIJ,EAAS,CAACL,CAAY,GAE5C,CAACU,IAAoBC,EAAqB,IAAIN,EAAmB,CAAA,CAAE;AAEzE,EAAAO,GAAU,MAAM;AACd,IAAAX,EAAkB,UAAU3F;AAAA,EAC9B,GAAG,CAACA,CAAO,CAAC,GAEZsG,GAAU,MAAM;AACd,QAAI,CAACZ,KAAgB,CAACxC,KAAa,EAAEK,KAAmBH,IAAoB;AAC1E,MAAA+C,EAAU,EAAI;AACd;AAAA,IACF;AACA,QAAII,IAAY;AAChB,WAAAJ,EAAU,EAAK,IACF,YAAY;;AACvB,UAAI;AACF,YAAI5C,GAAiB;AACnB,gBAAMiD,IAAO,MAAMjD,EAAgBL,CAAS;AAC5C,UAAKqD,KAAWT,GAASzF,IAAAmG,KAAA,gBAAAA,EAAM,YAAN,QAAAnG,EAAe,SAASmG,IAAO,IAAI;AAAA,QAC9D,WAAWpD,GAAmB;AAC5B,gBAAMqD,IAAQ,MAAMrD,EAAkBF,CAAS;AAC/C,UAAKqD,KAAWT,EAASW,KAAA,QAAAA,EAAO,SAASC,GAAgBD,CAAK,IAAI,IAAI;AAAA,QACxE;AAAA,MACF,QAAQ;AACN,QAAKF,KAAWT,EAAS,IAAI;AAAA,MAC/B,UAAA;AACE,QAAKS,KAAWJ,EAAU,EAAI;AAAA,MAChC;AAAA,IACF,GACK,GACE,MAAM;AACX,MAAAI,IAAY;AAAA,IACd;AAAA,EACF,GAAG,CAACb,GAAcxC,GAAWK,GAAiBH,CAAiB,CAAC;AAEhE,QAAMuD,KAActG,KAAAwF,KAAA,gBAAAA,EAAO,YAAP,QAAAxF,GAAgB,SAASwF,EAAM,UAAU,MAEvDe,IAAqBC,EAAQ,MAC7BjD,MAAsB,SACjBkD,EAAuBlD,GAAmBD,CAAa,IAEzDmD,EAAuBV,IAAoBzC,CAAa,GAC9D,CAACC,GAAmBwC,IAAoBzC,CAAa,CAAC,GAEnDoD,IAAgBC;AAAA,IACpB,CAACC,MAAmB;AAClB,YAAMT,IAAOM,EAAuBG,GAAMtD,CAAa;AACvD,MAAIC,MAAsB,UACxByC,GAAsBG,CAAI,GAE5B3C,KAAA,QAAAA,EAAwB2C;AAAA,IAC1B;AAAA,IACA,CAAC5C,GAAmBD,GAAeE,CAAqB;AAAA,EAAA,GAGpDqD,IAAqBF;AAAA,IACzB,OAAOR,MAAqB;AAI1B,UAHAV,EAASU,CAAI,GACb/C,KAAA,QAAAA,EAAqB+C,IACrBlD,KAAA,QAAAA,EAAuBkD,EAAK,UACxBtD,KAAaM,GAAgB;AAC/B,cAAMA,EAAeN,GAAWsD,CAAI;AACpC;AAAA,MACF;AACA,MAAItD,KAAaG,KACf,MAAMA,EAAiBH,GAAWsD,EAAK,OAAO;AAAA,IAElD;AAAA,IACA,CAACtD,GAAWM,GAAgBH,GAAkBI,GAAoBH,CAAoB;AAAA,EAAA,GAGlF6D,KAAiBN,EAAQ,MAAM;AACnC,UAAMO,IAAQpH,KAAW,CAAA;AACzB,WAAK0F,IACE2B,GAAkBD,GAAMT,CAAW,IADhBS;AAAA,EAE5B,GAAG,CAACpH,GAAS0F,GAAciB,CAAW,CAAC,GAEjCW,KAAoBT;AAAA,IACxB,MACEU;AAAA,MACG5B,EAAkB,WAAW3F;AAAA,IAAA;AAAA;AAAA,IAGlC,CAACA,CAAO;AAAA,EAAA,GAGJwH,KAAgBR;AAAA,IACpB,OAAOP,MAAmC;AACxC,YAAMS,EAAmBO,GAAgB5B,GAAO,EAAE,SAASY,EAAA,CAAO,CAAC;AAAA,IACrE;AAAA,IACA,CAACZ,GAAOqB,CAAkB;AAAA,EAAA,GAGtBQ,KAAuBV;AAAA,IAC3B,OAAO/F,MAAmB;;AACxB,UAAI,CAACA,EAAK,OAAQ;AAClB,YAAMmG,KACJ/G,IAAAwF,KAAA,gBAAAA,EAAO,YAAP,QAAAxF,EAAgB,UAAUwF,EAAM,QAAQ,SACpCA,EAAM,UACN8B;AAAA,QACGhC,EAAkB,WAAW3F;AAAA,MAAA;AAEtC,YAAMkH,EAAmBO,GAAgB5B,GAAO,EAAE,SAAS+B,GAAiBR,GAAMnG,CAAI,EAAA,CAAG,CAAC;AAAA,IAC5F;AAAA,IACA,CAAC4E,GAAO7F,GAASkH,CAAkB;AAAA,EAAA,GAG/BW,KAAqBb,EAAY,MAAM;AAC3C,UAAMc,KAAYhE,KAAuB,CAAA,GAAI,IAAI,MAAM;AACvD,IAAKgE,EAAS,UACdf,EAAc,CAAC,GAAGH,GAAoB,GAAGkB,CAAQ,CAAC;AAAA,EACpD,GAAG,CAAChE,GAAqB8C,GAAoBG,CAAa,CAAC,GAErDgB,KAAsBf,EAAY,MAAM;AAC5C,IAAAD,EAAc,CAAA,CAAE;AAAA,EAClB,GAAG,CAACA,CAAa,CAAC,GAEZiB,KAAmBhB;AAAA,IACvB,CAAC7G,MAAa;AACZ,YAAM8H,IAAI,OAAO9H,CAAG;AACpB,MAAK8H,OACAtE,KAAiB,IAAI,IAAI,MAAM,EAAE,SAASsE,CAAC,KAChDlB,EAAc,CAAC,GAAGH,GAAoBqB,CAAC,CAAC;AAAA,IAC1C;AAAA,IACA,CAACtE,GAAeiD,GAAoBG,CAAa;AAAA,EAAA,GAG7CmB,IAAiBrB,EAAQ,MAAM;AACnC,QAAIsB,IAAOhB;AACX,QAAIzB,KAAgBQ,IAAQ;AAC1B,MAAAiC,IAAOrH,GAAqBqH,GAAM,CAAClH,MAAS;AAC1C,QAAKyG,GAAqBzG,CAAI;AAAA,MAChC,CAAC;AACD,YAAMmH,IAAkC;AAAA,QACtC,KAAKC;AAAA,QACL,OAAO1I;AAAA,QACP,OAAO;AAAA,QACP,OAAO;AAAA,QACP,WAAW2I,GAAW;AAAA,QACtB,cAAc,OAAO;AAAA,UACnB,WAAWA,GAAW;AAAA,UACtB,OAAO;AAAA,YACL,OAAO3I;AAAA,YACP,UAAUA;AAAA,YACV,UAAUA;AAAA,UAAA;AAAA,QACZ;AAAA,QAEF,QAAQ,OAAO;AAAA,UACb,OAAO;AAAA,YACL,OAAOA;AAAA,YACP,UAAUA;AAAA,YACV,UAAUA;AAAA,UAAA;AAAA,QACZ;AAAA,QAEF,OACE,gBAAAsC;AAAA,UAACsG;AAAA,UAAA;AAAA,YACC,MAAMvC;AAAA,YACN,cAAcC;AAAA,YACd,cAAcqB;AAAA,YACd,aAAAX;AAAA,YACA,WAAWa;AAAA,UAAA;AAAA,QAAA;AAAA,QAGf,QAAQ,MAAM;AAAA,MAAA;AAEhB,MAAAW,IAAO,CAAC,GAAGA,GAAMC,CAAO;AAAA,IAC1B;AACA,WAAOD;AAAA,EACT,GAAG;AAAA,IACDzC;AAAA,IACAQ;AAAA,IACAiB;AAAA,IACAnB;AAAA,IACAsB;AAAA,IACAX;AAAA,IACAa;AAAA,IACAE;AAAA,EAAA,CACD,GAEKc,KAAoB3B,EAAQ,MAC3BnD,IAEE+E,GAAgBjD,GAAoBoB,GAD7B,OAAOjG,KAAW,cAAc,OAAOA,KAAW,WAAWA,IAAS,QACdgD,CAAa,IAFrD6B,GAG7B,CAAC9B,GAAkB8B,GAAoBoB,GAAoBjG,GAAQgD,CAAa,CAAC,GAE9E+E,KACJ5F,MAAe,KACX,KACA;AAAA,IACE,iBAAiB;AAAA,IACjB,WAAWjD;AAAA,IACX,GAAIiD,KAAc,OAAOA,KAAe,WAAWA,IAAa,CAAA;AAAA,IAChE,GAAI+B,IACA;AAAA,MACE,SAASK;AAAA,MACT,UAAAC;AAAA,MACA,OAAOJ;AAAA,MACP,UAAU,CAAC4D,GAAcC,MAAiB;AACxC,QAAAxD,GAAQuD,GAAMC,CAAI,GACd9F,KAAc,OAAOA,KAAe,YAAYA,EAAW,YAC7DA,EAAW,SAAS6F,GAAMC,CAAI;AAAA,MAElC;AAAA,IAAA,IAEF;AAAA,EAAA,GAGNC,KAAe;AAAA,IACnB,GAAG9F;AAAA,IACH,YACEA,KAAA,gBAAAA,EAAQ,eACPkC,KACC,gBAAAhD,EAAC6G,IAAA,EAAM,UAAS,UAAS,aAAa7D,GAAW,WAAW,QAAQ,IAEpE,gBAAAhD,EAAC6G,MAAM,UAAS,UAAS,aAAY,QAAO;AAAA,EAAA,GAI5CC,IAAYlC,EAAQ,MAAM,IAAI,KAAKlD,KAAiB,CAAA,GAAI,IAAI,MAAM,CAAC,GAAG,CAACA,CAAa,CAAC,GACrFqF,KACJtF,MACCI,KAAuB,CAAA,GAAI,KAAK,CAACmF,MAAM;AACtC,UAAMhB,IAAI,OAAOgB,CAAC;AAClB,WAAOhB,KAAK,CAACc,EAAU,IAAId,CAAC;AAAA,EAC9B,CAAC,GACGiB,KAAYxF,KAAoBkD,EAAmB,SAAS,GAE5DuC,KACJzF,KAAoBK,MAAqB,KACvC,gBAAA/B;AAAA,IAACoH;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAW5G,EAAW,2BAA2BX,EAAO,yBAAyB,CAAC;AAAA,MAElF,UAAA;AAAA,QAAA,gBAAAI,EAACoH,IAAA,EAAO,MAAK,SAAQ,UAAU,CAACL,IAAiB,SAASnB,IAAoB,UAAA,QAAA,CAE9E;AAAA,QACA,gBAAA7F,EAACqH,MAAO,MAAK,SAAQ,UAAU,CAACH,IAAW,SAASnB,IAAqB,UAAA;AAAA,UAAA;AAAA,UACjEmB,KAAY,IAAItC,EAAmB,MAAM,MAAM;AAAA,QAAA,EAAA,CACvD;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAEA,MAEA0C,KACJvF,MAAqB,KACjB,OACAA,MAAqB,SACnBA,IACAoF,IAEFI,IAAqB1C,EAAQ,MAAM;AAEvC,QADI,CAAC7C,KACD,CAACN,EAAkB,QAAOM;AAC9B,UAAMwF,IAAY,OAAOxF,EAAa,eAAgB,WAAWA,EAAa,cAAc;AAC5F,WAAO;AAAA,MACL,GAAGA;AAAA,MACH,aAAawF,IAAY;AAAA,MACzB,YAAY,CAACC,GAASC,GAAQlJ,GAAOmJ,OAAe;;AAElD,cAAMC,OADavJ,KAAA2D,EAAa,eAAb,gBAAA3D,GAAA,KAAA2D,GAA0ByF,GAASC,GAAQlJ,GAAOmJ,QACxCA,IACvBxJ,KAAMM,GAAiBiJ,GAAsBlJ,GAAOG,CAAM,GAC1DkJ,IAASd,EAAU,IAAI5I,EAAG;AAChC,eACE,gBAAA6B,EAAC,QAAA,EAAK,WAAWH,EAAO,kBACrB,UAAA;AAAA,UAAA+H;AAAA,UACD,gBAAA3H,EAACC,IAAA,EAAQ,OAAO2H,IAAS,YAAY,QACnC,UAAA,gBAAA5H;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAWJ,EAAO;AAAA,cAClB,cAAYgI,IAAS,YAAY;AAAA,cACjC,UAAUA;AAAA,cACV,SAAS,CAAC1H,OAAM;AACd,gBAAAA,GAAE,gBAAA,GACF6F,GAAiB7H,EAAG;AAAA,cACtB;AAAA,cAEA,UAAA,gBAAA8B,EAACG,IAAA,EAAI,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA,EACjB,CACF;AAAA,QAAA,GACF;AAAA,MAEJ;AAAA,IAAA;AAAA,EAEJ,GAAG,CAAC4B,GAAcN,GAAkB/C,GAAQoI,GAAWf,EAAgB,CAAC,GAElE8B,IAAgBjD,EAAQ,MAAM;AAClC,UAAMkD,IAAQhK,GAAoBmI,CAAsC;AACxE,QAAI,CAAC6B,EAAO,QAAO;AACnB,UAAMC,IAAOT,IACT,OAAOA,EAAmB,eAAgB,WACxCA,EAAmB,cACnB,KACF;AACJ,WAAOQ,IAAQC;AAAA,EACjB,GAAG,CAAC9B,GAAgBqB,CAAkB,CAAC,GAEjCU,KAAepD,EAAQ,MAAM;AACjC,UAAMO,IAAOvE,MAAW,SAAY,EAAE,GAAGnD,GAAA,IAAmB,EAAE,GAAGmD,EAAA;AACjE,WAAIiH,IAAgB,IAEX,EAAE,GAAG1C,GAAM,GAAG0C,EAAA,IAEhB1C;AAAA,EACT,GAAG,CAACvE,GAAQiH,CAAa,CAAC;AAE1B,SACE,gBAAA9H,EAAC,SAAI,WAAWQ,EAAW,sBAAsBX,EAAO,oBAAoB,CAAC,GAC1E,UAAA;AAAA,IAAAyH,uBAAe,OAAA,EAAI,WAAWzH,EAAO,sBAAsB,GAAI,cAAY,IAAS;AAAA,IACrF,gBAAAI;AAAA,MAACiI;AAAAA,MAAA;AAAA,QACC,WAAW1H,EAAW,gBAAgBX,EAAO,cAAc,GAAGc,CAAS;AAAA,QACvE,OACE;AAAA,UACE,GAAGC;AAAA,UACH,GAAIkH,IAAgB,IACf,EAAG,2BAA4B,GAAGA,CAAa,SAChD;AAAA,QAAA;AAAA,QAGR,QAAQG;AAAA,QACR,YAAYvB;AAAA,QACZ,QAAQG;AAAA,QACR,SAASX;AAAA,QACT,YAAYM;AAAA,QACZ,QAAA7H;AAAA,QACA,SAAS8E;AAAA,QACT,cAAc8D;AAAA,QACb,GAAG9E;AAAA,MAAA;AAAA,IAAA;AAAA,EACN,GACF;AAEJ;AAEA,MAAM0F,KAAQC,GAAW1H,EAAU;"}
@@ -1,3 +1,3 @@
1
1
  export { default as Table } from './Table';
2
- export type { TableProps, TableColumnConfigItem, TableColumnConfigFetcher, TableColumnConfigSaver, TablePrefs, TablePrefsFetcher, TablePrefsSaver, } from './Table';
2
+ export type { TableProps, TableColumnConfigItem, TableColumnConfigFetcher, TableColumnConfigSaver, TablePrefs, TablePrefsFetcher, TablePrefsSaver, TableFetchHandle, TableFetchMapped, TableFetchQuery, } from './Table';
3
3
  export { columnsToConfig, applyColumnConfig, COLUMN_CONFIG_COL_KEY, FLEX_SPACER_COL_KEY, isInternalColumnKey, parseTablePrefs, serializeTablePrefs, mergeTablePrefs, applyHiddenRows, normalizeHiddenRowKeys, emptyTablePrefs, hideColumnAtPath, } from './Table';
@@ -0,0 +1,49 @@
1
+ export type TableFetchQuery = {
2
+ currentPage: number;
3
+ pageSize: number;
4
+ };
5
+ export type TableFetchMapped<T> = {
6
+ pageData: T[];
7
+ total: number;
8
+ extra?: unknown;
9
+ };
10
+ export type TableFetchHandle = {
11
+ reload: () => void;
12
+ };
13
+ export type UseTableFetchOptions<T extends object> = {
14
+ /** props 模式:传了 dataSource(含 [])则不拉数 */
15
+ dataSource: readonly T[] | T[] | undefined;
16
+ fetchData?: (q: TableFetchQuery) => Promise<unknown>;
17
+ fetchUrl?: string;
18
+ fetchOptions?: RequestInit | ((q: TableFetchQuery) => RequestInit);
19
+ transformData?: (raw: unknown) => TableFetchMapped<T>;
20
+ fetchParams?: unknown;
21
+ enabled?: boolean;
22
+ defaultPageSize?: number;
23
+ baseUrl?: string;
24
+ defaultHeaders?: Record<string, string>;
25
+ timeoutMs?: number;
26
+ onFetched?: (r: TableFetchMapped<T> & {
27
+ error: Error | null;
28
+ }) => void;
29
+ };
30
+ export type UseTableFetchResult<T extends object> = {
31
+ /** 是否处于 fetch 模式 */
32
+ fetchMode: boolean;
33
+ rows: readonly T[] | T[] | undefined;
34
+ total: number;
35
+ loading: boolean;
36
+ error: Error | null;
37
+ currentPage: number;
38
+ pageSize: number;
39
+ setPage: (page: number, size?: number) => void;
40
+ reload: () => void;
41
+ };
42
+ /** 稳定序列化 fetchParams,避免父组件每渲新对象导致死循环 */
43
+ export declare function stableFetchParamsKey(params: unknown): string;
44
+ export declare function defaultTableTransformData<T extends object>(raw: unknown): TableFetchMapped<T>;
45
+ /**
46
+ * Table 内部分页拉数。仅 Table 使用,不进包根导出。
47
+ * fetchData 优先于 fetchUrl;dataSource !== undefined 时为 props 模式。
48
+ */
49
+ export declare function useTableFetch<T extends object>(options: UseTableFetchOptions<T>): UseTableFetchResult<T>;
@@ -0,0 +1,124 @@
1
+ import { useMemo as U, useState as s, useRef as f, useCallback as I, useEffect as tt } from "react";
2
+ import { fetchWithTimeout as et } from "../../hooks/useFetchData.js";
3
+ function T(e) {
4
+ if (e == null) return "";
5
+ if (typeof e != "object") return JSON.stringify(e);
6
+ if (Array.isArray(e))
7
+ return `[${e.map((r) => T(r)).join(",")}]`;
8
+ const t = e;
9
+ return `{${Object.keys(t).sort().map((r) => `${JSON.stringify(r)}:${T(t[r])}`).join(",")}}`;
10
+ }
11
+ function rt(e, t) {
12
+ if (t.startsWith("http://") || t.startsWith("https://"))
13
+ return t;
14
+ const i = (e ?? "").replace(/\/$/, ""), r = t.startsWith("/") ? t : `/${t}`;
15
+ return `${i}${r}`;
16
+ }
17
+ function nt(e) {
18
+ if (e && typeof e == "object") {
19
+ const t = e;
20
+ if (Array.isArray(t.pageData))
21
+ return {
22
+ pageData: t.pageData,
23
+ total: typeof t.total == "number" ? t.total : t.pageData.length,
24
+ extra: "mapping" in t ? t.mapping : t.extra
25
+ };
26
+ if (Array.isArray(e))
27
+ return { pageData: e, total: e.length };
28
+ }
29
+ return { pageData: [], total: 0 };
30
+ }
31
+ function ct(e) {
32
+ const {
33
+ dataSource: t,
34
+ fetchData: i,
35
+ fetchUrl: r,
36
+ fetchOptions: j,
37
+ transformData: A,
38
+ fetchParams: k,
39
+ enabled: h = !0,
40
+ defaultPageSize: J = 20,
41
+ baseUrl: O,
42
+ defaultHeaders: R,
43
+ timeoutMs: E = 3e4,
44
+ onFetched: K
45
+ } = e, n = t === void 0 && !!(i || r), p = U(() => T(k), [k]), [N, D] = s([]), [z, b] = s(0), [B, g] = s(!1), [H, d] = s(null), [y, W] = s(1), [S, L] = s(J), [F, G] = s(0), [Q, V] = s(p);
46
+ n && Q !== p && (V(p), y !== 1 && W(1));
47
+ const m = f(0), c = f(K);
48
+ c.current = K;
49
+ const q = f(A);
50
+ q.current = A;
51
+ const $ = f(i);
52
+ $.current = i;
53
+ const w = f(j);
54
+ w.current = j;
55
+ const X = I(() => {
56
+ G((u) => u + 1);
57
+ }, []), Y = I((u, a) => {
58
+ W(u), a != null && a > 0 && L(a);
59
+ }, []);
60
+ return tt(() => {
61
+ if (!n || !h) {
62
+ n ? h || g(!1) : (D([]), b(0), d(null), g(!1));
63
+ return;
64
+ }
65
+ const u = ++m.current;
66
+ let a = !1;
67
+ return (async () => {
68
+ var C, M;
69
+ g(!0), d(null);
70
+ const x = { currentPage: y, pageSize: S };
71
+ try {
72
+ let o;
73
+ if ($.current)
74
+ o = await $.current(x);
75
+ else if (r) {
76
+ const Z = rt(O, r), P = w.current, v = typeof P == "function" ? P(x) : P ?? {}, _ = {
77
+ ...R,
78
+ ...v.headers
79
+ };
80
+ o = await et(Z, { ...v, headers: _ }, E);
81
+ } else
82
+ o = { pageData: [], total: 0 };
83
+ if (a || u !== m.current) return;
84
+ const l = (q.current ?? nt)(o);
85
+ D(l.pageData ?? []), b(l.total ?? 0), d(null), (C = c.current) == null || C.call(c, { ...l, error: null });
86
+ } catch (o) {
87
+ if (a || u !== m.current) return;
88
+ const l = o instanceof Error ? o : new Error(String(o));
89
+ D([]), b(0), d(l), (M = c.current) == null || M.call(c, { pageData: [], total: 0, error: l });
90
+ } finally {
91
+ !a && u === m.current && g(!1);
92
+ }
93
+ })(), () => {
94
+ a = !0;
95
+ };
96
+ }, [
97
+ n,
98
+ h,
99
+ y,
100
+ S,
101
+ p,
102
+ F,
103
+ r,
104
+ O,
105
+ R,
106
+ E
107
+ ]), {
108
+ fetchMode: n,
109
+ rows: n ? N : t,
110
+ total: z,
111
+ loading: n ? B : !1,
112
+ error: n ? H : null,
113
+ currentPage: y,
114
+ pageSize: S,
115
+ setPage: Y,
116
+ reload: X
117
+ };
118
+ }
119
+ export {
120
+ nt as defaultTableTransformData,
121
+ T as stableFetchParamsKey,
122
+ ct as useTableFetch
123
+ };
124
+ //# sourceMappingURL=useTableFetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableFetch.js","sources":["../../../src/components/Table/useTableFetch.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { fetchWithTimeout } from '@/hooks/useFetchData';\n\nexport type TableFetchQuery = {\n currentPage: number;\n pageSize: number;\n};\n\nexport type TableFetchMapped<T> = {\n pageData: T[];\n total: number;\n extra?: unknown;\n};\n\nexport type TableFetchHandle = {\n reload: () => void;\n};\n\nexport type UseTableFetchOptions<T extends object> = {\n /** props 模式:传了 dataSource(含 [])则不拉数 */\n dataSource: readonly T[] | T[] | undefined;\n fetchData?: (q: TableFetchQuery) => Promise<unknown>;\n fetchUrl?: string;\n fetchOptions?: RequestInit | ((q: TableFetchQuery) => RequestInit);\n transformData?: (raw: unknown) => TableFetchMapped<T>;\n fetchParams?: unknown;\n enabled?: boolean;\n defaultPageSize?: number;\n baseUrl?: string;\n defaultHeaders?: Record<string, string>;\n timeoutMs?: number;\n onFetched?: (r: TableFetchMapped<T> & { error: Error | null }) => void;\n};\n\nexport type UseTableFetchResult<T extends object> = {\n /** 是否处于 fetch 模式 */\n fetchMode: boolean;\n rows: readonly T[] | T[] | undefined;\n total: number;\n loading: boolean;\n error: Error | null;\n currentPage: number;\n pageSize: number;\n setPage: (page: number, size?: number) => void;\n reload: () => void;\n};\n\n/** 稳定序列化 fetchParams,避免父组件每渲新对象导致死循环 */\nexport function stableFetchParamsKey(params: unknown): string {\n if (params == null) return '';\n if (typeof params !== 'object') return JSON.stringify(params);\n if (Array.isArray(params)) {\n return `[${params.map((x) => stableFetchParamsKey(x)).join(',')}]`;\n }\n const obj = params as Record<string, unknown>;\n const keys = Object.keys(obj).sort();\n return `{${keys.map((k) => `${JSON.stringify(k)}:${stableFetchParamsKey(obj[k])}`).join(',')}}`;\n}\n\nfunction buildUrl(baseUrl: string | undefined, fetchUrl: string): string {\n if (fetchUrl.startsWith('http://') || fetchUrl.startsWith('https://')) {\n return fetchUrl;\n }\n const base = (baseUrl ?? '').replace(/\\/$/, '');\n const path = fetchUrl.startsWith('/') ? fetchUrl : `/${fetchUrl}`;\n return `${base}${path}`;\n}\n\nexport function defaultTableTransformData<T extends object>(raw: unknown): TableFetchMapped<T> {\n if (raw && typeof raw === 'object') {\n const o = raw as Record<string, unknown>;\n if (Array.isArray(o.pageData)) {\n return {\n pageData: o.pageData as T[],\n total: typeof o.total === 'number' ? o.total : o.pageData.length,\n extra: 'mapping' in o ? o.mapping : o.extra,\n };\n }\n if (Array.isArray(raw)) {\n return { pageData: raw as T[], total: raw.length };\n }\n }\n return { pageData: [], total: 0 };\n}\n\n/**\n * Table 内部分页拉数。仅 Table 使用,不进包根导出。\n * fetchData 优先于 fetchUrl;dataSource !== undefined 时为 props 模式。\n */\nexport function useTableFetch<T extends object>(\n options: UseTableFetchOptions<T>,\n): UseTableFetchResult<T> {\n const {\n dataSource,\n fetchData,\n fetchUrl,\n fetchOptions,\n transformData,\n fetchParams,\n enabled = true,\n defaultPageSize = 20,\n baseUrl,\n defaultHeaders,\n timeoutMs = 30_000,\n onFetched,\n } = options;\n\n const fetchMode = dataSource === undefined && Boolean(fetchData || fetchUrl);\n const depsKey = useMemo(() => stableFetchParamsKey(fetchParams), [fetchParams]);\n\n const [rows, setRows] = useState<T[]>([]);\n const [total, setTotal] = useState(0);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [currentPage, setCurrentPage] = useState(1);\n const [pageSize, setPageSize] = useState(defaultPageSize);\n const [reloadTick, setReloadTick] = useState(0);\n const [committedDepsKey, setCommittedDepsKey] = useState(depsKey);\n\n // 筛变时同步回第 1 页,避免先用旧页码打一枪\n if (fetchMode && committedDepsKey !== depsKey) {\n setCommittedDepsKey(depsKey);\n if (currentPage !== 1) setCurrentPage(1);\n }\n\n const requestIdRef = useRef(0);\n const onFetchedRef = useRef(onFetched);\n onFetchedRef.current = onFetched;\n const transformRef = useRef(transformData);\n transformRef.current = transformData;\n const fetchDataRef = useRef(fetchData);\n fetchDataRef.current = fetchData;\n const fetchOptionsRef = useRef(fetchOptions);\n fetchOptionsRef.current = fetchOptions;\n\n const reload = useCallback(() => {\n setReloadTick((n) => n + 1);\n }, []);\n\n const setPage = useCallback((page: number, size?: number) => {\n setCurrentPage(page);\n if (size != null && size > 0) setPageSize(size);\n }, []);\n\n useEffect(() => {\n if (!fetchMode || !enabled) {\n if (!fetchMode) {\n setRows([]);\n setTotal(0);\n setError(null);\n setLoading(false);\n } else if (!enabled) {\n setLoading(false);\n }\n return;\n }\n\n const reqId = ++requestIdRef.current;\n let cancelled = false;\n\n const run = async () => {\n setLoading(true);\n setError(null);\n const query: TableFetchQuery = { currentPage, pageSize };\n try {\n let raw: unknown;\n if (fetchDataRef.current) {\n raw = await fetchDataRef.current(query);\n } else if (fetchUrl) {\n const url = buildUrl(baseUrl, fetchUrl);\n const optRaw = fetchOptionsRef.current;\n const opts = typeof optRaw === 'function' ? optRaw(query) : (optRaw ?? {});\n const headers = {\n ...defaultHeaders,\n ...(opts.headers as Record<string, string> | undefined),\n };\n raw = await fetchWithTimeout(url, { ...opts, headers }, timeoutMs);\n } else {\n raw = { pageData: [], total: 0 };\n }\n if (cancelled || reqId !== requestIdRef.current) return;\n const mapped = (transformRef.current ?? defaultTableTransformData<T>)(raw);\n setRows(mapped.pageData ?? []);\n setTotal(mapped.total ?? 0);\n setError(null);\n onFetchedRef.current?.({ ...mapped, error: null });\n } catch (e) {\n if (cancelled || reqId !== requestIdRef.current) return;\n const err = e instanceof Error ? e : new Error(String(e));\n setRows([]);\n setTotal(0);\n setError(err);\n onFetchedRef.current?.({ pageData: [], total: 0, error: err });\n } finally {\n if (!cancelled && reqId === requestIdRef.current) {\n setLoading(false);\n }\n }\n };\n\n void run();\n return () => {\n cancelled = true;\n };\n }, [\n fetchMode,\n enabled,\n currentPage,\n pageSize,\n depsKey,\n reloadTick,\n fetchUrl,\n baseUrl,\n defaultHeaders,\n timeoutMs,\n ]);\n\n return {\n fetchMode,\n rows: (fetchMode ? rows : dataSource) as readonly T[] | undefined,\n total,\n loading: fetchMode ? loading : false,\n error: fetchMode ? error : null,\n currentPage,\n pageSize,\n setPage,\n reload,\n };\n}\n"],"names":["stableFetchParamsKey","params","x","obj","k","buildUrl","baseUrl","fetchUrl","base","path","defaultTableTransformData","raw","o","useTableFetch","options","dataSource","fetchData","fetchOptions","transformData","fetchParams","enabled","defaultPageSize","defaultHeaders","timeoutMs","onFetched","fetchMode","depsKey","useMemo","rows","setRows","useState","total","setTotal","loading","setLoading","error","setError","currentPage","setCurrentPage","pageSize","setPageSize","reloadTick","setReloadTick","committedDepsKey","setCommittedDepsKey","requestIdRef","useRef","onFetchedRef","transformRef","fetchDataRef","fetchOptionsRef","reload","useCallback","n","setPage","page","size","useEffect","reqId","cancelled","query","url","optRaw","opts","headers","fetchWithTimeout","mapped","_a","e","err","_b"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hkyhy/marsun-components-core",
3
- "version": "0.1.76",
3
+ "version": "0.1.77",
4
4
  "description": "Marsun pure UI component library",
5
5
  "type": "module",
6
6
  "repository": {