@hkyhy/marsun-components-core 0.1.31 → 0.1.32
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,57 +1,57 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { Input as
|
|
3
|
-
import
|
|
4
|
-
import { useRef as
|
|
5
|
-
import
|
|
1
|
+
import { jsx as g, jsxs as K } from "react/jsx-runtime";
|
|
2
|
+
import { Input as Lr, Spin as wr, Cascader as O, Space as pr } from "antd";
|
|
3
|
+
import y from "classnames";
|
|
4
|
+
import { useRef as _, useState as M, useEffect as $, useMemo as L, useCallback as k } from "react";
|
|
5
|
+
import Mr from "../FilterPopover/index.js";
|
|
6
6
|
import { resolveFilterVisible as C } from "../types.js";
|
|
7
|
-
import { useFilterFieldBridge as
|
|
7
|
+
import { useFilterFieldBridge as Nr, useFilterRegister as Fr } from "../useFilterState.js";
|
|
8
8
|
import v from "./style.module.scss.js";
|
|
9
|
-
import
|
|
10
|
-
const { Search:
|
|
11
|
-
function rr(r, i = (
|
|
12
|
-
return r != null && r.length ? r.map((
|
|
13
|
-
var
|
|
14
|
-
const t = (
|
|
9
|
+
import Tr from "../../Empty/Empty.js";
|
|
10
|
+
const { Search: Vr } = Lr;
|
|
11
|
+
function rr(r, i = (s) => s.name) {
|
|
12
|
+
return r != null && r.length ? r.map((s) => {
|
|
13
|
+
var a;
|
|
14
|
+
const t = (a = s.children) != null && a.length ? rr(s.children, i) : void 0;
|
|
15
15
|
return {
|
|
16
|
-
value:
|
|
17
|
-
label: i(
|
|
16
|
+
value: s.id,
|
|
17
|
+
label: i(s),
|
|
18
18
|
children: t,
|
|
19
19
|
isLeaf: !(t != null && t.length)
|
|
20
20
|
};
|
|
21
21
|
}) : [];
|
|
22
22
|
}
|
|
23
|
-
function
|
|
23
|
+
function Ir(r, i) {
|
|
24
24
|
if (!i.trim()) return r;
|
|
25
|
-
const
|
|
26
|
-
var
|
|
27
|
-
const
|
|
28
|
-
for (const e of
|
|
29
|
-
const
|
|
30
|
-
(
|
|
25
|
+
const s = i.toLowerCase(), t = (a) => {
|
|
26
|
+
var c;
|
|
27
|
+
const n = [];
|
|
28
|
+
for (const e of a) {
|
|
29
|
+
const o = typeof e.label == "string" || typeof e.label == "number" ? String(e.label) : String(e.value), u = (c = e.children) != null && c.length ? t(e.children) : [];
|
|
30
|
+
(o.toLowerCase().includes(s) || u.length > 0) && n.push({
|
|
31
31
|
...e,
|
|
32
|
-
children:
|
|
33
|
-
isLeaf: !(
|
|
32
|
+
children: u.length > 0 ? u : void 0,
|
|
33
|
+
isLeaf: !(u.length > 0)
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
|
-
return
|
|
36
|
+
return n;
|
|
37
37
|
};
|
|
38
38
|
return t(r);
|
|
39
39
|
}
|
|
40
|
-
function
|
|
41
|
-
const i = /* @__PURE__ */ new Map(),
|
|
42
|
-
var
|
|
43
|
-
for (const
|
|
44
|
-
const e = [...
|
|
45
|
-
(
|
|
40
|
+
function kr(r) {
|
|
41
|
+
const i = /* @__PURE__ */ new Map(), s = (t, a) => {
|
|
42
|
+
var n;
|
|
43
|
+
for (const c of t) {
|
|
44
|
+
const e = [...a, String(c.value)];
|
|
45
|
+
(n = c.children) != null && n.length ? s(c.children, e) : i.set(String(c.value), e);
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
|
-
return
|
|
48
|
+
return s(r, []), i;
|
|
49
49
|
}
|
|
50
|
-
function
|
|
51
|
-
let
|
|
52
|
-
for (const
|
|
53
|
-
if (t =
|
|
54
|
-
|
|
50
|
+
function zr(r, i) {
|
|
51
|
+
let s = r, t = null;
|
|
52
|
+
for (const a of i) {
|
|
53
|
+
if (t = s.find((n) => String(n.value) === String(a)) ?? null, !t) return null;
|
|
54
|
+
s = t.children ?? [];
|
|
55
55
|
}
|
|
56
56
|
return t;
|
|
57
57
|
}
|
|
@@ -59,251 +59,261 @@ function er(r) {
|
|
|
59
59
|
var i;
|
|
60
60
|
return (i = r.children) != null && i.length ? r.children.flatMap(er) : [String(r.value)];
|
|
61
61
|
}
|
|
62
|
-
function P(r, i,
|
|
63
|
-
const
|
|
64
|
-
!e ||
|
|
62
|
+
function P(r, i, s, t) {
|
|
63
|
+
const a = [], n = /* @__PURE__ */ new Set(), c = (e) => {
|
|
64
|
+
!e || n.has(e) || (n.add(e), a.push(e));
|
|
65
65
|
};
|
|
66
66
|
for (const e of r) {
|
|
67
67
|
if (!(e != null && e.length)) continue;
|
|
68
|
-
const
|
|
69
|
-
if (
|
|
70
|
-
|
|
68
|
+
const o = String(e[e.length - 1]);
|
|
69
|
+
if (s.has(o)) {
|
|
70
|
+
c(o);
|
|
71
71
|
continue;
|
|
72
72
|
}
|
|
73
73
|
if (!t) {
|
|
74
|
-
|
|
74
|
+
c(o);
|
|
75
75
|
continue;
|
|
76
76
|
}
|
|
77
|
-
const
|
|
78
|
-
|
|
77
|
+
const u = zr(i, e.map(String));
|
|
78
|
+
u && er(u).forEach(c);
|
|
79
79
|
}
|
|
80
|
-
return
|
|
80
|
+
return a;
|
|
81
81
|
}
|
|
82
|
-
function
|
|
83
|
-
const i = /* @__PURE__ */ new Map(),
|
|
84
|
-
var
|
|
85
|
-
for (const
|
|
86
|
-
const
|
|
87
|
-
i.set(String(
|
|
82
|
+
function jr(r) {
|
|
83
|
+
const i = /* @__PURE__ */ new Map(), s = (t) => {
|
|
84
|
+
var a;
|
|
85
|
+
for (const n of t) {
|
|
86
|
+
const c = typeof n.label == "string" || typeof n.label == "number" ? String(n.label) : String(n.value);
|
|
87
|
+
i.set(String(n.value), c), (a = n.children) != null && a.length && s(n.children);
|
|
88
88
|
}
|
|
89
89
|
};
|
|
90
|
-
return
|
|
90
|
+
return s(r), i;
|
|
91
91
|
}
|
|
92
|
-
function
|
|
93
|
-
if (r == null || r === "") return
|
|
94
|
-
if (
|
|
95
|
-
return (Array.isArray(r) ? r : [r]).map((
|
|
92
|
+
function Rr(r, i, s) {
|
|
93
|
+
if (r == null || r === "") return s ? [] : void 0;
|
|
94
|
+
if (s)
|
|
95
|
+
return (Array.isArray(r) ? r : [r]).map((n) => i.get(String(n)) || [String(n)]).filter((n) => n.length);
|
|
96
96
|
const t = Array.isArray(r) ? r[0] : r;
|
|
97
97
|
if (!(t == null || t === ""))
|
|
98
98
|
return i.get(String(t)) || [String(t)];
|
|
99
99
|
}
|
|
100
|
-
function
|
|
100
|
+
function Br(r, i, s, t, a) {
|
|
101
101
|
if (r == null || Array.isArray(r) && r.length === 0)
|
|
102
102
|
return i ? [] : void 0;
|
|
103
103
|
if (i) {
|
|
104
|
-
const e = r.filter((
|
|
104
|
+
const e = r.filter((o) => Array.isArray(o) && o.length);
|
|
105
105
|
return P(
|
|
106
|
-
e.map((
|
|
106
|
+
e.map((o) => o.map(String)),
|
|
107
107
|
t,
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
a,
|
|
109
|
+
s
|
|
110
110
|
);
|
|
111
111
|
}
|
|
112
|
-
const
|
|
113
|
-
if (!
|
|
114
|
-
const
|
|
115
|
-
if (!(
|
|
116
|
-
return
|
|
112
|
+
const n = r.map(String);
|
|
113
|
+
if (!n.length) return;
|
|
114
|
+
const c = P([n], t, a, s);
|
|
115
|
+
if (!(s && c.length === 0))
|
|
116
|
+
return c[0];
|
|
117
117
|
}
|
|
118
|
-
const
|
|
118
|
+
const Jr = ({
|
|
119
119
|
filterKey: r,
|
|
120
120
|
label: i,
|
|
121
|
-
treeData:
|
|
121
|
+
treeData: s,
|
|
122
122
|
options: t,
|
|
123
|
-
loadData:
|
|
124
|
-
enabled:
|
|
125
|
-
value:
|
|
123
|
+
loadData: a,
|
|
124
|
+
enabled: n = !0,
|
|
125
|
+
value: c,
|
|
126
126
|
onChange: e,
|
|
127
|
-
onChangePath:
|
|
128
|
-
showSearch:
|
|
129
|
-
multiple:
|
|
130
|
-
leafOnly:
|
|
127
|
+
onChangePath: o,
|
|
128
|
+
showSearch: u = !1,
|
|
129
|
+
multiple: d = !1,
|
|
130
|
+
leafOnly: N = !0,
|
|
131
131
|
active: tr,
|
|
132
|
-
hidden:
|
|
133
|
-
display:
|
|
134
|
-
dependsOn:
|
|
135
|
-
clearOnDepsChange:
|
|
136
|
-
getNodeLabel:
|
|
137
|
-
panelExtra:
|
|
138
|
-
panelWidth:
|
|
132
|
+
hidden: z,
|
|
133
|
+
display: j,
|
|
134
|
+
dependsOn: cr,
|
|
135
|
+
clearOnDepsChange: sr = !0,
|
|
136
|
+
getNodeLabel: q = (A) => A.name,
|
|
137
|
+
panelExtra: R,
|
|
138
|
+
panelWidth: nr,
|
|
139
139
|
loading: ir = !1
|
|
140
140
|
}) => {
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
const lr =
|
|
141
|
+
const A = _(e);
|
|
142
|
+
A.current = e;
|
|
143
|
+
const F = _(o);
|
|
144
|
+
F.current = o;
|
|
145
|
+
const lr = nr ?? (R ? 520 : 440), { resolvedLabel: w, values: ar, depsKey: or } = Nr({
|
|
146
146
|
filterKey: r,
|
|
147
|
-
value:
|
|
147
|
+
value: c,
|
|
148
148
|
label: i,
|
|
149
|
-
dependsOn:
|
|
150
|
-
clearOnDepsChange:
|
|
149
|
+
dependsOn: cr,
|
|
150
|
+
clearOnDepsChange: sr,
|
|
151
151
|
onDepsClear: () => {
|
|
152
|
-
var
|
|
153
|
-
(
|
|
152
|
+
var l, f;
|
|
153
|
+
(l = A.current) == null || l.call(A, d ? [] : void 0), (f = F.current) == null || f.call(F, void 0);
|
|
154
154
|
}
|
|
155
|
-
}), [G, J] =
|
|
156
|
-
|
|
157
|
-
if (!
|
|
158
|
-
let
|
|
155
|
+
}), [G, J] = M([]), [dr, Q] = M(!1), B = _(a);
|
|
156
|
+
B.current = a, $(() => {
|
|
157
|
+
if (!B.current || s != null || t != null || !n) return;
|
|
158
|
+
let l = !1;
|
|
159
159
|
return Q(!0), (async () => {
|
|
160
160
|
try {
|
|
161
|
-
const
|
|
162
|
-
|
|
161
|
+
const f = await B.current({ values: ar });
|
|
162
|
+
l || J(f ?? []);
|
|
163
163
|
} catch {
|
|
164
|
-
|
|
164
|
+
l || J([]);
|
|
165
165
|
} finally {
|
|
166
|
-
|
|
166
|
+
l || Q(!1);
|
|
167
167
|
}
|
|
168
168
|
})(), () => {
|
|
169
|
-
|
|
169
|
+
l = !0;
|
|
170
170
|
};
|
|
171
|
-
}, [or,
|
|
172
|
-
const m = L(() => t != null && t.length ? t : rr(
|
|
173
|
-
|
|
171
|
+
}, [or, n, s, t, a]);
|
|
172
|
+
const m = L(() => t != null && t.length ? t : rr(s ?? (a ? G : []), q), [t, s, a, G, q]), U = ir || dr, S = L(() => kr(m), [m]), D = L(() => jr(m), [m]), [fr, T] = M(!1), [V, H] = M(""), [b, I] = M(
|
|
173
|
+
c ?? (d ? [] : void 0)
|
|
174
174
|
);
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
}, [
|
|
175
|
+
$(() => {
|
|
176
|
+
I(c ?? (d ? [] : void 0)), c == null && H("");
|
|
177
|
+
}, [c, d]);
|
|
178
178
|
const W = L(() => {
|
|
179
|
-
if (
|
|
180
|
-
if (
|
|
181
|
-
const
|
|
182
|
-
return
|
|
179
|
+
if (c == null) return "";
|
|
180
|
+
if (d) {
|
|
181
|
+
const l = c;
|
|
182
|
+
return l.length > 0 ? l.map((f) => D.get(f) ?? f).join("、") : "";
|
|
183
183
|
}
|
|
184
|
-
return
|
|
185
|
-
}, [
|
|
186
|
-
|
|
187
|
-
if (
|
|
188
|
-
if (!C({ display:
|
|
189
|
-
|
|
184
|
+
return D.get(c) ?? "";
|
|
185
|
+
}, [c, d, D]), p = Fr(), x = { filterKey: r, label: w, value: c };
|
|
186
|
+
$(() => {
|
|
187
|
+
if (p) {
|
|
188
|
+
if (!C({ display: j, hidden: z }, x)) {
|
|
189
|
+
p.unregister(r);
|
|
190
190
|
return;
|
|
191
191
|
}
|
|
192
|
-
W ?
|
|
193
|
-
label:
|
|
192
|
+
W ? p.register(r, {
|
|
193
|
+
label: w,
|
|
194
194
|
valueLabel: W,
|
|
195
195
|
onRemove: () => {
|
|
196
|
-
e == null || e(
|
|
196
|
+
e == null || e(d ? [] : void 0), o == null || o(void 0);
|
|
197
197
|
}
|
|
198
|
-
}) :
|
|
198
|
+
}) : p.unregister(r);
|
|
199
199
|
}
|
|
200
200
|
}, [
|
|
201
201
|
W,
|
|
202
202
|
r,
|
|
203
|
+
w,
|
|
204
|
+
j,
|
|
205
|
+
z,
|
|
203
206
|
p,
|
|
204
|
-
R,
|
|
205
|
-
I,
|
|
206
|
-
M,
|
|
207
207
|
e,
|
|
208
|
-
a,
|
|
209
208
|
o,
|
|
210
|
-
|
|
209
|
+
d,
|
|
210
|
+
x
|
|
211
211
|
]);
|
|
212
|
-
const
|
|
213
|
-
() =>
|
|
214
|
-
[
|
|
215
|
-
),
|
|
216
|
-
() =>
|
|
217
|
-
[
|
|
218
|
-
),
|
|
219
|
-
(
|
|
220
|
-
|
|
212
|
+
const X = L(
|
|
213
|
+
() => u && V ? Ir(m, V) : m,
|
|
214
|
+
[u, V, m]
|
|
215
|
+
), ur = L(
|
|
216
|
+
() => Rr(b, S, d),
|
|
217
|
+
[b, S, d]
|
|
218
|
+
), gr = k(
|
|
219
|
+
(l) => l.map((f) => S.get(String(f))).filter((f) => !!(f != null && f.length)),
|
|
220
|
+
[S]
|
|
221
|
+
), Y = k(
|
|
222
|
+
(l, f) => {
|
|
223
|
+
I(l), e == null || e(l), o == null || o(f);
|
|
221
224
|
},
|
|
222
|
-
[e,
|
|
223
|
-
),
|
|
224
|
-
(d)
|
|
225
|
-
|
|
225
|
+
[e, o]
|
|
226
|
+
), Z = k(() => {
|
|
227
|
+
I(c ?? (d ? [] : void 0)), H("");
|
|
228
|
+
}, [c, d]), mr = k(
|
|
229
|
+
(l) => {
|
|
230
|
+
const h = Br(
|
|
231
|
+
l,
|
|
226
232
|
d,
|
|
227
|
-
|
|
228
|
-
V,
|
|
233
|
+
N,
|
|
229
234
|
m,
|
|
230
|
-
|
|
235
|
+
S
|
|
231
236
|
);
|
|
232
|
-
if (
|
|
233
|
-
const
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
const A = typeof y == "string" ? y : void 0, _ = A ? b.get(A) : void 0;
|
|
237
|
-
z(A, _);
|
|
237
|
+
if (d) {
|
|
238
|
+
const hr = Array.isArray(h) ? h : h ? [h] : [];
|
|
239
|
+
I(hr);
|
|
240
|
+
return;
|
|
238
241
|
}
|
|
242
|
+
const E = typeof h == "string" ? h : void 0, Ar = E ? S.get(E) : void 0;
|
|
243
|
+
Y(E, Ar), T(!1);
|
|
239
244
|
},
|
|
240
|
-
[
|
|
245
|
+
[d, N, m, S, Y]
|
|
241
246
|
), vr = () => {
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
+
if (!d) return;
|
|
248
|
+
const l = Array.isArray(b) ? b : [], f = gr(l);
|
|
249
|
+
e == null || e(l), o == null || o(f), T(!1);
|
|
250
|
+
}, Sr = () => {
|
|
251
|
+
Z(), T(!1);
|
|
252
|
+
}, br = (l) => {
|
|
253
|
+
!l && d && Z(), T(l);
|
|
254
|
+
}, yr = tr ?? (d ? Array.isArray(c) && c.length > 0 : c != null && c !== "");
|
|
255
|
+
return C({ display: j, hidden: z }, x) ? /* @__PURE__ */ g(
|
|
256
|
+
Mr,
|
|
247
257
|
{
|
|
248
|
-
label:
|
|
249
|
-
active:
|
|
258
|
+
label: w,
|
|
259
|
+
active: yr,
|
|
250
260
|
loading: U,
|
|
251
261
|
width: lr,
|
|
252
262
|
open: fr,
|
|
253
|
-
onOpenChange:
|
|
254
|
-
onConfirm: vr,
|
|
255
|
-
onReset:
|
|
256
|
-
children: /* @__PURE__ */
|
|
257
|
-
|
|
263
|
+
onOpenChange: br,
|
|
264
|
+
onConfirm: d ? vr : void 0,
|
|
265
|
+
onReset: d ? Sr : void 0,
|
|
266
|
+
children: /* @__PURE__ */ K("div", { className: y("filter-cascader-root", v["filter-cascader-root"]), children: [
|
|
267
|
+
R ? /* @__PURE__ */ g(
|
|
258
268
|
"div",
|
|
259
269
|
{
|
|
260
|
-
className:
|
|
270
|
+
className: y(
|
|
261
271
|
"filter-cascader-panel-extra",
|
|
262
272
|
v["filter-cascader-panel-extra"]
|
|
263
273
|
),
|
|
264
|
-
children:
|
|
274
|
+
children: R
|
|
265
275
|
}
|
|
266
276
|
) : null,
|
|
267
|
-
|
|
268
|
-
|
|
277
|
+
u ? /* @__PURE__ */ g("div", { className: y("filter-cascader-search", v["filter-cascader-search"]), children: /* @__PURE__ */ g(
|
|
278
|
+
Vr,
|
|
269
279
|
{
|
|
270
|
-
placeholder: `搜索${
|
|
280
|
+
placeholder: `搜索${w}`,
|
|
271
281
|
allowClear: !0,
|
|
272
|
-
value:
|
|
273
|
-
onChange: (
|
|
282
|
+
value: V,
|
|
283
|
+
onChange: (l) => H(l.target.value)
|
|
274
284
|
}
|
|
275
285
|
) }) : null,
|
|
276
|
-
U ? /* @__PURE__ */
|
|
286
|
+
U ? /* @__PURE__ */ g("div", { className: y("filter-cascader-loading", v["filter-cascader-loading"]), children: /* @__PURE__ */ g(wr, { size: "small" }) }) : X.length === 0 ? /* @__PURE__ */ g(Tr, { iconType: "simple", description: "暂无选项" }) : /* @__PURE__ */ g(
|
|
277
287
|
"div",
|
|
278
288
|
{
|
|
279
|
-
className:
|
|
289
|
+
className: y(
|
|
280
290
|
"filter-cascader-panel-wrap",
|
|
281
291
|
v["filter-cascader-panel-wrap"]
|
|
282
292
|
),
|
|
283
|
-
children: /* @__PURE__ */
|
|
284
|
-
|
|
293
|
+
children: /* @__PURE__ */ g(
|
|
294
|
+
O.Panel,
|
|
285
295
|
{
|
|
286
|
-
className:
|
|
287
|
-
options:
|
|
288
|
-
value:
|
|
296
|
+
className: y("filter-cascader-panel", v["filter-cascader-panel"]),
|
|
297
|
+
options: X,
|
|
298
|
+
value: ur,
|
|
289
299
|
onChange: mr,
|
|
290
|
-
multiple:
|
|
291
|
-
changeOnSelect: !
|
|
292
|
-
...
|
|
300
|
+
multiple: d,
|
|
301
|
+
changeOnSelect: !N,
|
|
302
|
+
...d && N ? { showCheckedStrategy: O.SHOW_CHILD } : {}
|
|
293
303
|
}
|
|
294
304
|
)
|
|
295
305
|
}
|
|
296
306
|
),
|
|
297
|
-
|
|
307
|
+
d && Array.isArray(b) && b.length > 0 ? /* @__PURE__ */ g(
|
|
298
308
|
"div",
|
|
299
309
|
{
|
|
300
|
-
className:
|
|
310
|
+
className: y(
|
|
301
311
|
"filter-cascader-selected-bar",
|
|
302
312
|
v["filter-cascader-selected-bar"]
|
|
303
313
|
),
|
|
304
|
-
children: /* @__PURE__ */
|
|
314
|
+
children: /* @__PURE__ */ g(pr, { size: [4, 4], wrap: !0, children: /* @__PURE__ */ K("span", { className: v["filter-cascader-selected-count"], children: [
|
|
305
315
|
"已选 ",
|
|
306
|
-
|
|
316
|
+
b.length
|
|
307
317
|
] }) })
|
|
308
318
|
}
|
|
309
319
|
) : null
|
|
@@ -312,7 +322,7 @@ const qr = ({
|
|
|
312
322
|
) : null;
|
|
313
323
|
};
|
|
314
324
|
export {
|
|
315
|
-
|
|
325
|
+
Jr as default,
|
|
316
326
|
rr as treeToCascaderOptions
|
|
317
327
|
};
|
|
318
328
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterCascader/index.tsx"],"sourcesContent":["import { Empty } from '@/components/Empty';\nimport { Cascader, Input, Space, Spin } from 'antd';\nimport type { DefaultOptionType } from 'antd/es/cascader';\nimport classNames from 'classnames';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { TreeFilterNode } from '../FilterTreeSelect';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps, FilterLoadDataContext } from '../types';\nimport { resolveFilterVisible } from '../types';\nimport { useFilterFieldBridge, useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\n\nconst { Search } = Input;\n\nexport type { TreeFilterNode };\n\nexport type CascaderPath = string[];\n\nexport interface FilterCascaderProps extends BaseFilterProps {\n /** 树数据(与 FilterTreeSelect 同构);优先于 loadData */\n treeData?: TreeFilterNode[];\n /** 已转换的 Cascader options;与 treeData 二选一(同时存在以 options 为准) */\n options?: DefaultOptionType[];\n loadData?: (ctx: FilterLoadDataContext) => Promise<TreeFilterNode[]>;\n enabled?: boolean;\n /** leafOnly 时为叶子 id;多选为叶子 id 数组 */\n value?: string | string[] | undefined;\n onChange?: (value: string | string[] | undefined) => void;\n /** 完整路径变更(单选 string[];多选 string[][]) */\n onChangePath?: (paths: CascaderPath | CascaderPath[] | undefined) => void;\n showSearch?: boolean;\n multiple?: boolean;\n /**\n * 仅叶子写入最终值(默认 true)。\n * Cascader changeOnSelect=false,父级不可单独作为已选值。\n */\n leafOnly?: boolean;\n getNodeLabel?: (node: TreeFilterNode) => string;\n panelExtra?: React.ReactNode;\n panelWidth?: number;\n loading?: boolean;\n}\n\ntype CascaderOption = DefaultOptionType & {\n value: string;\n label: React.ReactNode;\n children?: CascaderOption[];\n isLeaf?: boolean;\n};\n\n/** TreeFilterNode → antd Cascader options */\nexport function treeToCascaderOptions(\n nodes: TreeFilterNode[] | undefined,\n getLabel: (n: TreeFilterNode) => string = (n) => n.name,\n): CascaderOption[] {\n if (!nodes?.length) return [];\n return nodes.map((n) => {\n const children = n.children?.length ? treeToCascaderOptions(n.children, getLabel) : undefined;\n return {\n value: n.id,\n label: getLabel(n),\n children,\n isLeaf: !children?.length,\n };\n });\n}\n\nfunction filterOptionsByKeyword(options: CascaderOption[], keyword: string): CascaderOption[] {\n if (!keyword.trim()) return options;\n const lower = keyword.toLowerCase();\n const walk = (opts: CascaderOption[]): CascaderOption[] => {\n const result: CascaderOption[] = [];\n for (const opt of opts) {\n const label =\n typeof opt.label === 'string' || typeof opt.label === 'number'\n ? String(opt.label)\n : String(opt.value);\n const children = opt.children?.length ? walk(opt.children) : [];\n const selfMatch = label.toLowerCase().includes(lower);\n if (selfMatch || children.length > 0) {\n result.push({\n ...opt,\n children: children.length > 0 ? children : undefined,\n isLeaf: !(children.length > 0),\n });\n }\n }\n return result;\n };\n return walk(options);\n}\n\nfunction buildLeafPathMap(options: CascaderOption[]): Map<string, CascaderPath> {\n const map = new Map<string, CascaderPath>();\n const walk = (opts: CascaderOption[], prefix: CascaderPath) => {\n for (const opt of opts) {\n const path = [...prefix, String(opt.value)];\n if (opt.children?.length) {\n walk(opt.children, path);\n } else {\n map.set(String(opt.value), path);\n }\n }\n };\n walk(options, []);\n return map;\n}\n\nfunction findCascaderNode(options: CascaderOption[], path: CascaderPath): CascaderOption | null {\n let nodes = options;\n let found: CascaderOption | null = null;\n for (const id of path) {\n found = nodes.find((n) => String(n.value) === String(id)) ?? null;\n if (!found) return null;\n nodes = found.children ?? [];\n }\n return found;\n}\n\nfunction collectDescendantLeafIds(node: CascaderOption): string[] {\n if (!node.children?.length) return [String(node.value)];\n return node.children.flatMap(collectDescendantLeafIds);\n}\n\n/** leafOnly:多选路径可能因 SHOW_PARENT 塌成父级,展开为叶子 id */\nfunction pathsToLeafIds(\n paths: CascaderPath[],\n options: CascaderOption[],\n leafPathMap: Map<string, CascaderPath>,\n leafOnly: boolean,\n): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n const push = (id: string) => {\n if (!id || seen.has(id)) return;\n seen.add(id);\n out.push(id);\n };\n\n for (const path of paths) {\n if (!path?.length) continue;\n const last = String(path[path.length - 1]);\n if (leafPathMap.has(last)) {\n push(last);\n continue;\n }\n if (!leafOnly) {\n push(last);\n continue;\n }\n const node = findCascaderNode(options, path.map(String));\n if (node) {\n collectDescendantLeafIds(node).forEach(push);\n }\n }\n return out;\n}\n\nfunction buildLabelMapFromOptions(options: CascaderOption[]): Map<string, string> {\n const map = new Map<string, string>();\n const walk = (opts: CascaderOption[]) => {\n for (const opt of opts) {\n const label =\n typeof opt.label === 'string' || typeof opt.label === 'number'\n ? String(opt.label)\n : String(opt.value);\n map.set(String(opt.value), label);\n if (opt.children?.length) walk(opt.children);\n }\n };\n walk(options);\n return map;\n}\n\nfunction leafToCascaderValue(\n leaf: string | string[] | undefined,\n leafPathMap: Map<string, CascaderPath>,\n multiple: boolean,\n): CascaderPath | CascaderPath[] | undefined {\n if (leaf == null || leaf === '') return multiple ? [] : undefined;\n if (multiple) {\n const arr = Array.isArray(leaf) ? leaf : [leaf];\n return arr.map((id) => leafPathMap.get(String(id)) || [String(id)]).filter((p) => p.length);\n }\n const id = Array.isArray(leaf) ? leaf[0] : leaf;\n if (id == null || id === '') return undefined;\n return leafPathMap.get(String(id)) || [String(id)];\n}\n\nfunction cascaderValueToLeaf(\n next: CascaderPath | CascaderPath[] | null,\n multiple: boolean,\n leafOnly: boolean,\n options: CascaderOption[],\n leafPathMap: Map<string, CascaderPath>,\n): string | string[] | undefined {\n if (next == null || (Array.isArray(next) && next.length === 0)) {\n return multiple ? [] : undefined;\n }\n if (multiple) {\n const paths = (next as CascaderPath[]).filter((p) => Array.isArray(p) && p.length);\n return pathsToLeafIds(\n paths.map((p) => p.map(String)),\n options,\n leafPathMap,\n leafOnly,\n );\n }\n const path = (next as CascaderPath).map(String);\n if (!path.length) return undefined;\n const leaves = pathsToLeafIds([path], options, leafPathMap, leafOnly);\n if (leafOnly && leaves.length === 0) return undefined;\n return leaves[0];\n}\n\nconst FilterCascader: React.FC<FilterCascaderProps> = ({\n filterKey,\n label,\n treeData: propsTreeData,\n options: propsOptions,\n loadData,\n enabled = true,\n value,\n onChange,\n onChangePath,\n showSearch = false,\n multiple = false,\n leafOnly = true,\n active,\n hidden,\n display,\n dependsOn,\n clearOnDepsChange = true,\n getNodeLabel = (n) => n.name,\n panelExtra,\n panelWidth,\n loading: loadingProp = false,\n}) => {\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const onChangePathRef = useRef(onChangePath);\n onChangePathRef.current = onChangePath;\n\n // 两列路径:分厂列 + 品种长文案列,默认略宽;有 panelExtra 再加一点\n const resolvedPanelWidth = panelWidth ?? (panelExtra ? 520 : 440);\n\n const { resolvedLabel, values, depsKey } = useFilterFieldBridge({\n filterKey,\n value,\n label,\n dependsOn,\n clearOnDepsChange,\n onDepsClear: () => {\n onChangeRef.current?.(multiple ? [] : undefined);\n onChangePathRef.current?.(undefined);\n },\n });\n\n const [loadedTree, setLoadedTree] = useState<TreeFilterNode[]>([]);\n const [loadDataLoading, setLoadDataLoading] = useState(false);\n const loadDataRef = useRef(loadData);\n loadDataRef.current = loadData;\n\n useEffect(() => {\n if (!loadDataRef.current || propsTreeData != null || propsOptions != null || !enabled) return;\n let cancelled = false;\n setLoadDataLoading(true);\n (async () => {\n try {\n const next = await loadDataRef.current!({ values });\n if (!cancelled) setLoadedTree(next ?? []);\n } catch {\n if (!cancelled) setLoadedTree([]);\n } finally {\n if (!cancelled) setLoadDataLoading(false);\n }\n })();\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [depsKey, enabled, propsTreeData, propsOptions, loadData]);\n\n const cascaderOptions = useMemo(() => {\n if (propsOptions?.length) return propsOptions as CascaderOption[];\n const tree = propsTreeData ?? (loadData ? loadedTree : []);\n return treeToCascaderOptions(tree, getNodeLabel);\n }, [propsOptions, propsTreeData, loadData, loadedTree, getNodeLabel]);\n\n const optionsLoading = loadingProp || loadDataLoading;\n const leafPathMap = useMemo(() => buildLeafPathMap(cascaderOptions), [cascaderOptions]);\n const labelMap = useMemo(() => buildLabelMapFromOptions(cascaderOptions), [cascaderOptions]);\n\n const [open, setOpen] = useState(false);\n const [searchText, setSearchText] = useState('');\n const [localValue, setLocalValue] = useState<string | string[] | undefined>(\n value ?? (multiple ? [] : undefined),\n );\n\n useEffect(() => {\n setLocalValue(value ?? (multiple ? [] : undefined));\n if (value === undefined || value === null) setSearchText('');\n }, [value, multiple]);\n\n const confirmedValueLabel = useMemo(() => {\n if (value == null) return '';\n if (multiple) {\n const arr = value as string[];\n return arr.length > 0 ? arr.map((v) => labelMap.get(v) ?? v).join('、') : '';\n }\n return labelMap.get(value as string) ?? '';\n }, [value, multiple, labelMap]);\n\n const registerFn = useFilterRegister();\n const visibilityCtx = { filterKey, label: resolvedLabel, value };\n\n useEffect(() => {\n if (!registerFn) return;\n if (!resolveFilterVisible({ display, hidden }, visibilityCtx)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (confirmedValueLabel) {\n registerFn.register(filterKey, {\n label: resolvedLabel,\n valueLabel: confirmedValueLabel,\n onRemove: () => {\n onChange?.(multiple ? [] : undefined);\n onChangePath?.(undefined);\n },\n });\n } else {\n registerFn.unregister(filterKey);\n }\n }, [\n confirmedValueLabel,\n filterKey,\n resolvedLabel,\n display,\n hidden,\n registerFn,\n onChange,\n onChangePath,\n multiple,\n visibilityCtx,\n ]);\n\n const displayOptions = useMemo(\n () =>\n showSearch && searchText\n ? filterOptionsByKeyword(cascaderOptions, searchText)\n : cascaderOptions,\n [showSearch, searchText, cascaderOptions],\n );\n\n const cascaderValue = useMemo(\n () => leafToCascaderValue(localValue, leafPathMap, multiple),\n [localValue, leafPathMap, multiple],\n );\n\n const emitChange = useCallback(\n (nextLeaf: string | string[] | undefined, paths: CascaderPath | CascaderPath[] | undefined) => {\n setLocalValue(nextLeaf);\n onChange?.(nextLeaf);\n onChangePath?.(paths);\n },\n [onChange, onChangePath],\n );\n\n const handleCascaderChange = useCallback(\n (next: (string | number | null)[] | (string | number | null)[][] | null) => {\n const normalized = next as CascaderPath | CascaderPath[] | null;\n const leaf = cascaderValueToLeaf(\n normalized,\n multiple,\n leafOnly,\n cascaderOptions,\n leafPathMap,\n );\n if (multiple) {\n const leafArr = Array.isArray(leaf) ? leaf : leaf ? [leaf] : [];\n const paths = leafArr\n .map((id) => leafPathMap.get(String(id)))\n .filter((p): p is CascaderPath => !!p?.length);\n emitChange(leafArr, paths);\n } else {\n const id = typeof leaf === 'string' ? leaf : undefined;\n const path = id ? leafPathMap.get(id) : undefined;\n emitChange(id, path);\n }\n },\n [multiple, leafOnly, cascaderOptions, leafPathMap, emitChange],\n );\n\n const handleConfirm = () => {\n // 即时 onChange;确认仅关面板\n };\n\n const handleReset = () => {\n emitChange(multiple ? [] : undefined, undefined);\n setSearchText('');\n };\n\n const isActive =\n active ?? (multiple ? Array.isArray(value) && value.length > 0 : value != null && value !== '');\n\n if (!resolveFilterVisible({ display, hidden }, visibilityCtx)) {\n return null;\n }\n\n return (\n <FilterPopover\n label={resolvedLabel}\n active={isActive}\n loading={optionsLoading}\n width={resolvedPanelWidth}\n open={open}\n onOpenChange={setOpen}\n onConfirm={handleConfirm}\n onReset={handleReset}\n >\n <div className={classNames('filter-cascader-root', styles['filter-cascader-root'])}>\n {panelExtra ? (\n <div\n className={classNames(\n 'filter-cascader-panel-extra',\n styles['filter-cascader-panel-extra'],\n )}\n >\n {panelExtra}\n </div>\n ) : null}\n {showSearch ? (\n <div className={classNames('filter-cascader-search', styles['filter-cascader-search'])}>\n <Search\n placeholder={`搜索${resolvedLabel}`}\n allowClear\n value={searchText}\n onChange={(e) => setSearchText(e.target.value)}\n />\n </div>\n ) : null}\n {optionsLoading ? (\n <div className={classNames('filter-cascader-loading', styles['filter-cascader-loading'])}>\n <Spin size=\"small\" />\n </div>\n ) : displayOptions.length === 0 ? (\n <Empty iconType=\"simple\" description=\"暂无选项\" />\n ) : (\n <div\n className={classNames(\n 'filter-cascader-panel-wrap',\n styles['filter-cascader-panel-wrap'],\n )}\n >\n <Cascader.Panel\n className={classNames('filter-cascader-panel', styles['filter-cascader-panel'])}\n options={displayOptions}\n value={cascaderValue as never}\n onChange={handleCascaderChange as never}\n multiple={multiple}\n changeOnSelect={!leafOnly}\n // leafOnly 多选:禁止 SHOW_PARENT 把整厂塌成父级 Code\n {...(multiple && leafOnly ? { showCheckedStrategy: Cascader.SHOW_CHILD } : {})}\n />\n </div>\n )}\n {multiple && Array.isArray(localValue) && localValue.length > 0 ? (\n <div\n className={classNames(\n 'filter-cascader-selected-bar',\n styles['filter-cascader-selected-bar'],\n )}\n >\n <Space size={[4, 4]} wrap>\n <span className={styles['filter-cascader-selected-count']}>\n 已选 {localValue.length}\n </span>\n </Space>\n </div>\n ) : null}\n </div>\n </FilterPopover>\n );\n};\n\nexport default FilterCascader;\n"],"names":["Search","Input","treeToCascaderOptions","nodes","getLabel","n","children","_a","filterOptionsByKeyword","options","keyword","lower","walk","opts","result","opt","label","buildLeafPathMap","map","prefix","path","findCascaderNode","found","id","collectDescendantLeafIds","node","pathsToLeafIds","paths","leafPathMap","leafOnly","out","seen","push","last","buildLabelMapFromOptions","leafToCascaderValue","leaf","multiple","p","cascaderValueToLeaf","next","leaves","FilterCascader","filterKey","propsTreeData","propsOptions","loadData","enabled","value","onChange","onChangePath","showSearch","active","hidden","display","dependsOn","clearOnDepsChange","getNodeLabel","panelExtra","panelWidth","loadingProp","onChangeRef","useRef","onChangePathRef","resolvedPanelWidth","resolvedLabel","values","depsKey","useFilterFieldBridge","_b","loadedTree","setLoadedTree","useState","loadDataLoading","setLoadDataLoading","loadDataRef","useEffect","cancelled","cascaderOptions","useMemo","optionsLoading","labelMap","open","setOpen","searchText","setSearchText","localValue","setLocalValue","confirmedValueLabel","arr","v","registerFn","useFilterRegister","visibilityCtx","resolveFilterVisible","displayOptions","cascaderValue","emitChange","useCallback","nextLeaf","handleCascaderChange","leafArr","handleConfirm","handleReset","isActive","jsx","FilterPopover","jsxs","classNames","styles","e","Spin","Empty","Cascader","Space"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterCascader/index.tsx"],"sourcesContent":["import { Empty } from '@/components/Empty';\nimport { Cascader, Input, Space, Spin } from 'antd';\nimport type { DefaultOptionType } from 'antd/es/cascader';\nimport classNames from 'classnames';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { TreeFilterNode } from '../FilterTreeSelect';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps, FilterLoadDataContext } from '../types';\nimport { resolveFilterVisible } from '../types';\nimport { useFilterFieldBridge, useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\n\nconst { Search } = Input;\n\nexport type { TreeFilterNode };\n\nexport type CascaderPath = string[];\n\nexport interface FilterCascaderProps extends BaseFilterProps {\n /** 树数据(与 FilterTreeSelect 同构);优先于 loadData */\n treeData?: TreeFilterNode[];\n /** 已转换的 Cascader options;与 treeData 二选一(同时存在以 options 为准) */\n options?: DefaultOptionType[];\n loadData?: (ctx: FilterLoadDataContext) => Promise<TreeFilterNode[]>;\n enabled?: boolean;\n /** leafOnly 时为叶子 id;多选为叶子 id 数组 */\n value?: string | string[] | undefined;\n onChange?: (value: string | string[] | undefined) => void;\n /** 完整路径变更(单选 string[];多选 string[][]) */\n onChangePath?: (paths: CascaderPath | CascaderPath[] | undefined) => void;\n showSearch?: boolean;\n multiple?: boolean;\n /**\n * 仅叶子写入最终值(默认 true)。\n * Cascader changeOnSelect=false,父级不可单独作为已选值。\n */\n leafOnly?: boolean;\n getNodeLabel?: (node: TreeFilterNode) => string;\n panelExtra?: React.ReactNode;\n panelWidth?: number;\n loading?: boolean;\n}\n\ntype CascaderOption = DefaultOptionType & {\n value: string;\n label: React.ReactNode;\n children?: CascaderOption[];\n isLeaf?: boolean;\n};\n\n/** TreeFilterNode → antd Cascader options */\nexport function treeToCascaderOptions(\n nodes: TreeFilterNode[] | undefined,\n getLabel: (n: TreeFilterNode) => string = (n) => n.name,\n): CascaderOption[] {\n if (!nodes?.length) return [];\n return nodes.map((n) => {\n const children = n.children?.length ? treeToCascaderOptions(n.children, getLabel) : undefined;\n return {\n value: n.id,\n label: getLabel(n),\n children,\n isLeaf: !children?.length,\n };\n });\n}\n\nfunction filterOptionsByKeyword(options: CascaderOption[], keyword: string): CascaderOption[] {\n if (!keyword.trim()) return options;\n const lower = keyword.toLowerCase();\n const walk = (opts: CascaderOption[]): CascaderOption[] => {\n const result: CascaderOption[] = [];\n for (const opt of opts) {\n const label =\n typeof opt.label === 'string' || typeof opt.label === 'number'\n ? String(opt.label)\n : String(opt.value);\n const children = opt.children?.length ? walk(opt.children) : [];\n const selfMatch = label.toLowerCase().includes(lower);\n if (selfMatch || children.length > 0) {\n result.push({\n ...opt,\n children: children.length > 0 ? children : undefined,\n isLeaf: !(children.length > 0),\n });\n }\n }\n return result;\n };\n return walk(options);\n}\n\nfunction buildLeafPathMap(options: CascaderOption[]): Map<string, CascaderPath> {\n const map = new Map<string, CascaderPath>();\n const walk = (opts: CascaderOption[], prefix: CascaderPath) => {\n for (const opt of opts) {\n const path = [...prefix, String(opt.value)];\n if (opt.children?.length) {\n walk(opt.children, path);\n } else {\n map.set(String(opt.value), path);\n }\n }\n };\n walk(options, []);\n return map;\n}\n\nfunction findCascaderNode(options: CascaderOption[], path: CascaderPath): CascaderOption | null {\n let nodes = options;\n let found: CascaderOption | null = null;\n for (const id of path) {\n found = nodes.find((n) => String(n.value) === String(id)) ?? null;\n if (!found) return null;\n nodes = found.children ?? [];\n }\n return found;\n}\n\nfunction collectDescendantLeafIds(node: CascaderOption): string[] {\n if (!node.children?.length) return [String(node.value)];\n return node.children.flatMap(collectDescendantLeafIds);\n}\n\n/** leafOnly:多选路径可能因 SHOW_PARENT 塌成父级,展开为叶子 id */\nfunction pathsToLeafIds(\n paths: CascaderPath[],\n options: CascaderOption[],\n leafPathMap: Map<string, CascaderPath>,\n leafOnly: boolean,\n): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n const push = (id: string) => {\n if (!id || seen.has(id)) return;\n seen.add(id);\n out.push(id);\n };\n\n for (const path of paths) {\n if (!path?.length) continue;\n const last = String(path[path.length - 1]);\n if (leafPathMap.has(last)) {\n push(last);\n continue;\n }\n if (!leafOnly) {\n push(last);\n continue;\n }\n const node = findCascaderNode(options, path.map(String));\n if (node) {\n collectDescendantLeafIds(node).forEach(push);\n }\n }\n return out;\n}\n\nfunction buildLabelMapFromOptions(options: CascaderOption[]): Map<string, string> {\n const map = new Map<string, string>();\n const walk = (opts: CascaderOption[]) => {\n for (const opt of opts) {\n const label =\n typeof opt.label === 'string' || typeof opt.label === 'number'\n ? String(opt.label)\n : String(opt.value);\n map.set(String(opt.value), label);\n if (opt.children?.length) walk(opt.children);\n }\n };\n walk(options);\n return map;\n}\n\nfunction leafToCascaderValue(\n leaf: string | string[] | undefined,\n leafPathMap: Map<string, CascaderPath>,\n multiple: boolean,\n): CascaderPath | CascaderPath[] | undefined {\n if (leaf == null || leaf === '') return multiple ? [] : undefined;\n if (multiple) {\n const arr = Array.isArray(leaf) ? leaf : [leaf];\n return arr.map((id) => leafPathMap.get(String(id)) || [String(id)]).filter((p) => p.length);\n }\n const id = Array.isArray(leaf) ? leaf[0] : leaf;\n if (id == null || id === '') return undefined;\n return leafPathMap.get(String(id)) || [String(id)];\n}\n\nfunction cascaderValueToLeaf(\n next: CascaderPath | CascaderPath[] | null,\n multiple: boolean,\n leafOnly: boolean,\n options: CascaderOption[],\n leafPathMap: Map<string, CascaderPath>,\n): string | string[] | undefined {\n if (next == null || (Array.isArray(next) && next.length === 0)) {\n return multiple ? [] : undefined;\n }\n if (multiple) {\n const paths = (next as CascaderPath[]).filter((p) => Array.isArray(p) && p.length);\n return pathsToLeafIds(\n paths.map((p) => p.map(String)),\n options,\n leafPathMap,\n leafOnly,\n );\n }\n const path = (next as CascaderPath).map(String);\n if (!path.length) return undefined;\n const leaves = pathsToLeafIds([path], options, leafPathMap, leafOnly);\n if (leafOnly && leaves.length === 0) return undefined;\n return leaves[0];\n}\n\nconst FilterCascader: React.FC<FilterCascaderProps> = ({\n filterKey,\n label,\n treeData: propsTreeData,\n options: propsOptions,\n loadData,\n enabled = true,\n value,\n onChange,\n onChangePath,\n showSearch = false,\n multiple = false,\n leafOnly = true,\n active,\n hidden,\n display,\n dependsOn,\n clearOnDepsChange = true,\n getNodeLabel = (n) => n.name,\n panelExtra,\n panelWidth,\n loading: loadingProp = false,\n}) => {\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const onChangePathRef = useRef(onChangePath);\n onChangePathRef.current = onChangePath;\n\n // 两列路径:分厂列 + 品种长文案列,默认略宽;有 panelExtra 再加一点\n const resolvedPanelWidth = panelWidth ?? (panelExtra ? 520 : 440);\n\n const { resolvedLabel, values, depsKey } = useFilterFieldBridge({\n filterKey,\n value,\n label,\n dependsOn,\n clearOnDepsChange,\n onDepsClear: () => {\n onChangeRef.current?.(multiple ? [] : undefined);\n onChangePathRef.current?.(undefined);\n },\n });\n\n const [loadedTree, setLoadedTree] = useState<TreeFilterNode[]>([]);\n const [loadDataLoading, setLoadDataLoading] = useState(false);\n const loadDataRef = useRef(loadData);\n loadDataRef.current = loadData;\n\n useEffect(() => {\n if (!loadDataRef.current || propsTreeData != null || propsOptions != null || !enabled) return;\n let cancelled = false;\n setLoadDataLoading(true);\n (async () => {\n try {\n const next = await loadDataRef.current!({ values });\n if (!cancelled) setLoadedTree(next ?? []);\n } catch {\n if (!cancelled) setLoadedTree([]);\n } finally {\n if (!cancelled) setLoadDataLoading(false);\n }\n })();\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [depsKey, enabled, propsTreeData, propsOptions, loadData]);\n\n const cascaderOptions = useMemo(() => {\n if (propsOptions?.length) return propsOptions as CascaderOption[];\n const tree = propsTreeData ?? (loadData ? loadedTree : []);\n return treeToCascaderOptions(tree, getNodeLabel);\n }, [propsOptions, propsTreeData, loadData, loadedTree, getNodeLabel]);\n\n const optionsLoading = loadingProp || loadDataLoading;\n const leafPathMap = useMemo(() => buildLeafPathMap(cascaderOptions), [cascaderOptions]);\n const labelMap = useMemo(() => buildLabelMapFromOptions(cascaderOptions), [cascaderOptions]);\n\n const [open, setOpen] = useState(false);\n const [searchText, setSearchText] = useState('');\n const [localValue, setLocalValue] = useState<string | string[] | undefined>(\n value ?? (multiple ? [] : undefined),\n );\n\n useEffect(() => {\n setLocalValue(value ?? (multiple ? [] : undefined));\n if (value === undefined || value === null) setSearchText('');\n }, [value, multiple]);\n\n const confirmedValueLabel = useMemo(() => {\n if (value == null) return '';\n if (multiple) {\n const arr = value as string[];\n return arr.length > 0 ? arr.map((v) => labelMap.get(v) ?? v).join('、') : '';\n }\n return labelMap.get(value as string) ?? '';\n }, [value, multiple, labelMap]);\n\n const registerFn = useFilterRegister();\n const visibilityCtx = { filterKey, label: resolvedLabel, value };\n\n useEffect(() => {\n if (!registerFn) return;\n if (!resolveFilterVisible({ display, hidden }, visibilityCtx)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (confirmedValueLabel) {\n registerFn.register(filterKey, {\n label: resolvedLabel,\n valueLabel: confirmedValueLabel,\n onRemove: () => {\n onChange?.(multiple ? [] : undefined);\n onChangePath?.(undefined);\n },\n });\n } else {\n registerFn.unregister(filterKey);\n }\n }, [\n confirmedValueLabel,\n filterKey,\n resolvedLabel,\n display,\n hidden,\n registerFn,\n onChange,\n onChangePath,\n multiple,\n visibilityCtx,\n ]);\n\n const displayOptions = useMemo(\n () =>\n showSearch && searchText\n ? filterOptionsByKeyword(cascaderOptions, searchText)\n : cascaderOptions,\n [showSearch, searchText, cascaderOptions],\n );\n\n const cascaderValue = useMemo(\n () => leafToCascaderValue(localValue, leafPathMap, multiple),\n [localValue, leafPathMap, multiple],\n );\n\n const leafIdsToPaths = useCallback(\n (leafIds: string[]): CascaderPath[] =>\n leafIds\n .map((id) => leafPathMap.get(String(id)))\n .filter((p): p is CascaderPath => !!p?.length),\n [leafPathMap],\n );\n\n const emitChange = useCallback(\n (nextLeaf: string | string[] | undefined, paths: CascaderPath | CascaderPath[] | undefined) => {\n setLocalValue(nextLeaf);\n onChange?.(nextLeaf);\n onChangePath?.(paths);\n },\n [onChange, onChangePath],\n );\n\n const revertToCommitted = useCallback(() => {\n setLocalValue(value ?? (multiple ? [] : undefined));\n setSearchText('');\n }, [value, multiple]);\n\n const handleCascaderChange = useCallback(\n (next: (string | number | null)[] | (string | number | null)[][] | null) => {\n const normalized = next as CascaderPath | CascaderPath[] | null;\n const leaf = cascaderValueToLeaf(\n normalized,\n multiple,\n leafOnly,\n cascaderOptions,\n leafPathMap,\n );\n if (multiple) {\n // 多选:勾选只改草稿,确定才 onChange(对齐 FilterSelect / FilterTreeSelect)\n const leafArr = Array.isArray(leaf) ? leaf : leaf ? [leaf] : [];\n setLocalValue(leafArr);\n return;\n }\n const id = typeof leaf === 'string' ? leaf : undefined;\n const path = id ? leafPathMap.get(id) : undefined;\n emitChange(id, path);\n setOpen(false);\n },\n [multiple, leafOnly, cascaderOptions, leafPathMap, emitChange],\n );\n\n const handleConfirm = () => {\n if (!multiple) return;\n const leafArr = Array.isArray(localValue) ? localValue : [];\n const paths = leafIdsToPaths(leafArr);\n onChange?.(leafArr);\n onChangePath?.(paths);\n setOpen(false);\n };\n\n const handleDiscardDraft = () => {\n revertToCommitted();\n setOpen(false);\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (!nextOpen && multiple) {\n revertToCommitted();\n }\n setOpen(nextOpen);\n };\n\n const isActive =\n active ?? (multiple ? Array.isArray(value) && value.length > 0 : value != null && value !== '');\n\n if (!resolveFilterVisible({ display, hidden }, visibilityCtx)) {\n return null;\n }\n\n return (\n <FilterPopover\n label={resolvedLabel}\n active={isActive}\n loading={optionsLoading}\n width={resolvedPanelWidth}\n open={open}\n onOpenChange={handleOpenChange}\n onConfirm={multiple ? handleConfirm : undefined}\n onReset={multiple ? handleDiscardDraft : undefined}\n >\n <div className={classNames('filter-cascader-root', styles['filter-cascader-root'])}>\n {panelExtra ? (\n <div\n className={classNames(\n 'filter-cascader-panel-extra',\n styles['filter-cascader-panel-extra'],\n )}\n >\n {panelExtra}\n </div>\n ) : null}\n {showSearch ? (\n <div className={classNames('filter-cascader-search', styles['filter-cascader-search'])}>\n <Search\n placeholder={`搜索${resolvedLabel}`}\n allowClear\n value={searchText}\n onChange={(e) => setSearchText(e.target.value)}\n />\n </div>\n ) : null}\n {optionsLoading ? (\n <div className={classNames('filter-cascader-loading', styles['filter-cascader-loading'])}>\n <Spin size=\"small\" />\n </div>\n ) : displayOptions.length === 0 ? (\n <Empty iconType=\"simple\" description=\"暂无选项\" />\n ) : (\n <div\n className={classNames(\n 'filter-cascader-panel-wrap',\n styles['filter-cascader-panel-wrap'],\n )}\n >\n <Cascader.Panel\n className={classNames('filter-cascader-panel', styles['filter-cascader-panel'])}\n options={displayOptions}\n value={cascaderValue as never}\n onChange={handleCascaderChange as never}\n multiple={multiple}\n changeOnSelect={!leafOnly}\n // leafOnly 多选:禁止 SHOW_PARENT 把整厂塌成父级 Code\n {...(multiple && leafOnly ? { showCheckedStrategy: Cascader.SHOW_CHILD } : {})}\n />\n </div>\n )}\n {multiple && Array.isArray(localValue) && localValue.length > 0 ? (\n <div\n className={classNames(\n 'filter-cascader-selected-bar',\n styles['filter-cascader-selected-bar'],\n )}\n >\n <Space size={[4, 4]} wrap>\n <span className={styles['filter-cascader-selected-count']}>\n 已选 {localValue.length}\n </span>\n </Space>\n </div>\n ) : null}\n </div>\n </FilterPopover>\n );\n};\n\nexport default FilterCascader;\n"],"names":["Search","Input","treeToCascaderOptions","nodes","getLabel","n","children","_a","filterOptionsByKeyword","options","keyword","lower","walk","opts","result","opt","label","buildLeafPathMap","map","prefix","path","findCascaderNode","found","id","collectDescendantLeafIds","node","pathsToLeafIds","paths","leafPathMap","leafOnly","out","seen","push","last","buildLabelMapFromOptions","leafToCascaderValue","leaf","multiple","p","cascaderValueToLeaf","next","leaves","FilterCascader","filterKey","propsTreeData","propsOptions","loadData","enabled","value","onChange","onChangePath","showSearch","active","hidden","display","dependsOn","clearOnDepsChange","getNodeLabel","panelExtra","panelWidth","loadingProp","onChangeRef","useRef","onChangePathRef","resolvedPanelWidth","resolvedLabel","values","depsKey","useFilterFieldBridge","_b","loadedTree","setLoadedTree","useState","loadDataLoading","setLoadDataLoading","loadDataRef","useEffect","cancelled","cascaderOptions","useMemo","optionsLoading","labelMap","open","setOpen","searchText","setSearchText","localValue","setLocalValue","confirmedValueLabel","arr","v","registerFn","useFilterRegister","visibilityCtx","resolveFilterVisible","displayOptions","cascaderValue","leafIdsToPaths","useCallback","leafIds","emitChange","nextLeaf","revertToCommitted","handleCascaderChange","leafArr","handleConfirm","handleDiscardDraft","handleOpenChange","nextOpen","isActive","jsx","FilterPopover","jsxs","classNames","styles","e","Spin","Empty","Cascader","Space"],"mappings":"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"}
|