@hkyhy/marsun-components-core 0.1.30 → 0.1.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Filter/FilterCascader/index.d.ts +40 -0
- package/dist/components/Filter/FilterCascader/index.js +318 -0
- package/dist/components/Filter/FilterCascader/index.js.map +1 -0
- package/dist/components/Filter/FilterCascader/style.module.scss.js +14 -0
- package/dist/components/Filter/FilterCascader/style.module.scss.js.map +1 -0
- package/dist/components/Filter/FilterPopover/index.d.ts +2 -0
- package/dist/components/Filter/FilterPopover/index.js +22 -21
- package/dist/components/Filter/FilterPopover/index.js.map +1 -1
- package/dist/components/Filter/FilterSelect/index.d.ts +6 -0
- package/dist/components/Filter/FilterSelect/index.js +201 -197
- package/dist/components/Filter/FilterSelect/index.js.map +1 -1
- package/dist/components/Filter/FilterSelect/style.module.scss.js +16 -15
- package/dist/components/Filter/FilterSelect/style.module.scss.js.map +1 -1
- package/dist/components/Filter/FilterTreeSelect/index.d.ts +6 -0
- package/dist/components/Filter/FilterTreeSelect/index.js +220 -203
- package/dist/components/Filter/FilterTreeSelect/index.js.map +1 -1
- package/dist/components/Filter/FilterTreeSelect/style.module.scss.js +15 -14
- package/dist/components/Filter/FilterTreeSelect/style.module.scss.js.map +1 -1
- package/dist/components/Filter/FilterTrigger/index.d.ts +3 -0
- package/dist/components/Filter/FilterTrigger/index.js +57 -44
- package/dist/components/Filter/FilterTrigger/index.js.map +1 -1
- package/dist/components/Filter/FilterTrigger/style.module.scss.js +5 -4
- package/dist/components/Filter/FilterTrigger/style.module.scss.js.map +1 -1
- package/dist/components/Filter/index.d.ts +3 -0
- package/dist/components/Table/ColumnConfigPanel.d.ts +13 -0
- package/dist/components/Table/ColumnConfigPanel.js +260 -0
- package/dist/components/Table/ColumnConfigPanel.js.map +1 -0
- package/dist/components/Table/Table.d.ts +16 -2
- package/dist/components/Table/Table.js +106 -28
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Table/columnConfig.module.scss.js +38 -0
- package/dist/components/Table/columnConfig.module.scss.js.map +1 -0
- package/dist/components/Table/columnConfigTypes.d.ts +22 -0
- package/dist/components/Table/columnConfigUtils.d.ts +25 -0
- package/dist/components/Table/columnConfigUtils.js +141 -0
- package/dist/components/Table/columnConfigUtils.js.map +1 -0
- package/dist/components/Table/index.d.ts +2 -1
- package/dist/index.js +258 -251
- package/dist/index.js.map +1 -1
- package/dist/marsun-components-core.css +1 -1
- package/dist/styles/global.css +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { DefaultOptionType } from 'antd/es/cascader';
|
|
2
|
+
import { default as React } from 'react';
|
|
3
|
+
import { TreeFilterNode } from '../FilterTreeSelect';
|
|
4
|
+
import { BaseFilterProps, FilterLoadDataContext } from '../types';
|
|
5
|
+
export type { TreeFilterNode };
|
|
6
|
+
export type CascaderPath = string[];
|
|
7
|
+
export interface FilterCascaderProps extends BaseFilterProps {
|
|
8
|
+
/** 树数据(与 FilterTreeSelect 同构);优先于 loadData */
|
|
9
|
+
treeData?: TreeFilterNode[];
|
|
10
|
+
/** 已转换的 Cascader options;与 treeData 二选一(同时存在以 options 为准) */
|
|
11
|
+
options?: DefaultOptionType[];
|
|
12
|
+
loadData?: (ctx: FilterLoadDataContext) => Promise<TreeFilterNode[]>;
|
|
13
|
+
enabled?: boolean;
|
|
14
|
+
/** leafOnly 时为叶子 id;多选为叶子 id 数组 */
|
|
15
|
+
value?: string | string[] | undefined;
|
|
16
|
+
onChange?: (value: string | string[] | undefined) => void;
|
|
17
|
+
/** 完整路径变更(单选 string[];多选 string[][]) */
|
|
18
|
+
onChangePath?: (paths: CascaderPath | CascaderPath[] | undefined) => void;
|
|
19
|
+
showSearch?: boolean;
|
|
20
|
+
multiple?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* 仅叶子写入最终值(默认 true)。
|
|
23
|
+
* Cascader changeOnSelect=false,父级不可单独作为已选值。
|
|
24
|
+
*/
|
|
25
|
+
leafOnly?: boolean;
|
|
26
|
+
getNodeLabel?: (node: TreeFilterNode) => string;
|
|
27
|
+
panelExtra?: React.ReactNode;
|
|
28
|
+
panelWidth?: number;
|
|
29
|
+
loading?: boolean;
|
|
30
|
+
}
|
|
31
|
+
type CascaderOption = DefaultOptionType & {
|
|
32
|
+
value: string;
|
|
33
|
+
label: React.ReactNode;
|
|
34
|
+
children?: CascaderOption[];
|
|
35
|
+
isLeaf?: boolean;
|
|
36
|
+
};
|
|
37
|
+
/** TreeFilterNode → antd Cascader options */
|
|
38
|
+
export declare function treeToCascaderOptions(nodes: TreeFilterNode[] | undefined, getLabel?: (n: TreeFilterNode) => string): CascaderOption[];
|
|
39
|
+
declare const FilterCascader: React.FC<FilterCascaderProps>;
|
|
40
|
+
export default FilterCascader;
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
import { jsx as u, jsxs as Z } from "react/jsx-runtime";
|
|
2
|
+
import { Input as br, Spin as yr, Cascader as K, Space as Ar } from "antd";
|
|
3
|
+
import h from "classnames";
|
|
4
|
+
import { useRef as $, useState as F, useEffect as q, useMemo as L, useCallback as O } from "react";
|
|
5
|
+
import Lr from "../FilterPopover/index.js";
|
|
6
|
+
import { resolveFilterVisible as C } from "../types.js";
|
|
7
|
+
import { useFilterFieldBridge as pr, useFilterRegister as wr } from "../useFilterState.js";
|
|
8
|
+
import v from "./style.module.scss.js";
|
|
9
|
+
import Mr from "../../Empty/Empty.js";
|
|
10
|
+
const { Search: Nr } = br;
|
|
11
|
+
function rr(r, i = (c) => c.name) {
|
|
12
|
+
return r != null && r.length ? r.map((c) => {
|
|
13
|
+
var l;
|
|
14
|
+
const t = (l = c.children) != null && l.length ? rr(c.children, i) : void 0;
|
|
15
|
+
return {
|
|
16
|
+
value: c.id,
|
|
17
|
+
label: i(c),
|
|
18
|
+
children: t,
|
|
19
|
+
isLeaf: !(t != null && t.length)
|
|
20
|
+
};
|
|
21
|
+
}) : [];
|
|
22
|
+
}
|
|
23
|
+
function Fr(r, i) {
|
|
24
|
+
if (!i.trim()) return r;
|
|
25
|
+
const c = i.toLowerCase(), t = (l) => {
|
|
26
|
+
var n;
|
|
27
|
+
const s = [];
|
|
28
|
+
for (const e of l) {
|
|
29
|
+
const a = typeof e.label == "string" || typeof e.label == "number" ? String(e.label) : String(e.value), f = (n = e.children) != null && n.length ? t(e.children) : [];
|
|
30
|
+
(a.toLowerCase().includes(c) || f.length > 0) && s.push({
|
|
31
|
+
...e,
|
|
32
|
+
children: f.length > 0 ? f : void 0,
|
|
33
|
+
isLeaf: !(f.length > 0)
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return s;
|
|
37
|
+
};
|
|
38
|
+
return t(r);
|
|
39
|
+
}
|
|
40
|
+
function Vr(r) {
|
|
41
|
+
const i = /* @__PURE__ */ new Map(), c = (t, l) => {
|
|
42
|
+
var s;
|
|
43
|
+
for (const n of t) {
|
|
44
|
+
const e = [...l, String(n.value)];
|
|
45
|
+
(s = n.children) != null && s.length ? c(n.children, e) : i.set(String(n.value), e);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
return c(r, []), i;
|
|
49
|
+
}
|
|
50
|
+
function Tr(r, i) {
|
|
51
|
+
let c = r, t = null;
|
|
52
|
+
for (const l of i) {
|
|
53
|
+
if (t = c.find((s) => String(s.value) === String(l)) ?? null, !t) return null;
|
|
54
|
+
c = t.children ?? [];
|
|
55
|
+
}
|
|
56
|
+
return t;
|
|
57
|
+
}
|
|
58
|
+
function er(r) {
|
|
59
|
+
var i;
|
|
60
|
+
return (i = r.children) != null && i.length ? r.children.flatMap(er) : [String(r.value)];
|
|
61
|
+
}
|
|
62
|
+
function P(r, i, c, t) {
|
|
63
|
+
const l = [], s = /* @__PURE__ */ new Set(), n = (e) => {
|
|
64
|
+
!e || s.has(e) || (s.add(e), l.push(e));
|
|
65
|
+
};
|
|
66
|
+
for (const e of r) {
|
|
67
|
+
if (!(e != null && e.length)) continue;
|
|
68
|
+
const a = String(e[e.length - 1]);
|
|
69
|
+
if (c.has(a)) {
|
|
70
|
+
n(a);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (!t) {
|
|
74
|
+
n(a);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const f = Tr(i, e.map(String));
|
|
78
|
+
f && er(f).forEach(n);
|
|
79
|
+
}
|
|
80
|
+
return l;
|
|
81
|
+
}
|
|
82
|
+
function kr(r) {
|
|
83
|
+
const i = /* @__PURE__ */ new Map(), c = (t) => {
|
|
84
|
+
var l;
|
|
85
|
+
for (const s of t) {
|
|
86
|
+
const n = typeof s.label == "string" || typeof s.label == "number" ? String(s.label) : String(s.value);
|
|
87
|
+
i.set(String(s.value), n), (l = s.children) != null && l.length && c(s.children);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
return c(r), i;
|
|
91
|
+
}
|
|
92
|
+
function zr(r, i, c) {
|
|
93
|
+
if (r == null || r === "") return c ? [] : void 0;
|
|
94
|
+
if (c)
|
|
95
|
+
return (Array.isArray(r) ? r : [r]).map((s) => i.get(String(s)) || [String(s)]).filter((s) => s.length);
|
|
96
|
+
const t = Array.isArray(r) ? r[0] : r;
|
|
97
|
+
if (!(t == null || t === ""))
|
|
98
|
+
return i.get(String(t)) || [String(t)];
|
|
99
|
+
}
|
|
100
|
+
function Ir(r, i, c, t, l) {
|
|
101
|
+
if (r == null || Array.isArray(r) && r.length === 0)
|
|
102
|
+
return i ? [] : void 0;
|
|
103
|
+
if (i) {
|
|
104
|
+
const e = r.filter((a) => Array.isArray(a) && a.length);
|
|
105
|
+
return P(
|
|
106
|
+
e.map((a) => a.map(String)),
|
|
107
|
+
t,
|
|
108
|
+
l,
|
|
109
|
+
c
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
const s = r.map(String);
|
|
113
|
+
if (!s.length) return;
|
|
114
|
+
const n = P([s], t, l, c);
|
|
115
|
+
if (!(c && n.length === 0))
|
|
116
|
+
return n[0];
|
|
117
|
+
}
|
|
118
|
+
const qr = ({
|
|
119
|
+
filterKey: r,
|
|
120
|
+
label: i,
|
|
121
|
+
treeData: c,
|
|
122
|
+
options: t,
|
|
123
|
+
loadData: l,
|
|
124
|
+
enabled: s = !0,
|
|
125
|
+
value: n,
|
|
126
|
+
onChange: e,
|
|
127
|
+
onChangePath: a,
|
|
128
|
+
showSearch: f = !1,
|
|
129
|
+
multiple: o = !1,
|
|
130
|
+
leafOnly: V = !0,
|
|
131
|
+
active: tr,
|
|
132
|
+
hidden: I,
|
|
133
|
+
display: R,
|
|
134
|
+
dependsOn: nr,
|
|
135
|
+
clearOnDepsChange: cr = !0,
|
|
136
|
+
getNodeLabel: D = (S) => S.name,
|
|
137
|
+
panelExtra: j,
|
|
138
|
+
panelWidth: sr,
|
|
139
|
+
loading: ir = !1
|
|
140
|
+
}) => {
|
|
141
|
+
const S = $(e);
|
|
142
|
+
S.current = e;
|
|
143
|
+
const T = $(a);
|
|
144
|
+
T.current = a;
|
|
145
|
+
const lr = sr ?? (j ? 520 : 440), { resolvedLabel: p, values: ar, depsKey: or } = pr({
|
|
146
|
+
filterKey: r,
|
|
147
|
+
value: n,
|
|
148
|
+
label: i,
|
|
149
|
+
dependsOn: nr,
|
|
150
|
+
clearOnDepsChange: cr,
|
|
151
|
+
onDepsClear: () => {
|
|
152
|
+
var d, g;
|
|
153
|
+
(d = S.current) == null || d.call(S, o ? [] : void 0), (g = T.current) == null || g.call(T, void 0);
|
|
154
|
+
}
|
|
155
|
+
}), [G, J] = F([]), [dr, Q] = F(!1), x = $(l);
|
|
156
|
+
x.current = l, q(() => {
|
|
157
|
+
if (!x.current || c != null || t != null || !s) return;
|
|
158
|
+
let d = !1;
|
|
159
|
+
return Q(!0), (async () => {
|
|
160
|
+
try {
|
|
161
|
+
const g = await x.current({ values: ar });
|
|
162
|
+
d || J(g ?? []);
|
|
163
|
+
} catch {
|
|
164
|
+
d || J([]);
|
|
165
|
+
} finally {
|
|
166
|
+
d || Q(!1);
|
|
167
|
+
}
|
|
168
|
+
})(), () => {
|
|
169
|
+
d = !0;
|
|
170
|
+
};
|
|
171
|
+
}, [or, s, c, t, l]);
|
|
172
|
+
const m = L(() => t != null && t.length ? t : rr(c ?? (l ? G : []), D), [t, c, l, G, D]), U = ir || dr, b = L(() => Vr(m), [m]), B = L(() => kr(m), [m]), [fr, ur] = F(!1), [k, H] = F(""), [w, X] = F(
|
|
173
|
+
n ?? (o ? [] : void 0)
|
|
174
|
+
);
|
|
175
|
+
q(() => {
|
|
176
|
+
X(n ?? (o ? [] : void 0)), n == null && H("");
|
|
177
|
+
}, [n, o]);
|
|
178
|
+
const W = L(() => {
|
|
179
|
+
if (n == null) return "";
|
|
180
|
+
if (o) {
|
|
181
|
+
const d = n;
|
|
182
|
+
return d.length > 0 ? d.map((g) => B.get(g) ?? g).join("、") : "";
|
|
183
|
+
}
|
|
184
|
+
return B.get(n) ?? "";
|
|
185
|
+
}, [n, o, B]), M = wr(), E = { filterKey: r, label: p, value: n };
|
|
186
|
+
q(() => {
|
|
187
|
+
if (M) {
|
|
188
|
+
if (!C({ display: R, hidden: I }, E)) {
|
|
189
|
+
M.unregister(r);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
W ? M.register(r, {
|
|
193
|
+
label: p,
|
|
194
|
+
valueLabel: W,
|
|
195
|
+
onRemove: () => {
|
|
196
|
+
e == null || e(o ? [] : void 0), a == null || a(void 0);
|
|
197
|
+
}
|
|
198
|
+
}) : M.unregister(r);
|
|
199
|
+
}
|
|
200
|
+
}, [
|
|
201
|
+
W,
|
|
202
|
+
r,
|
|
203
|
+
p,
|
|
204
|
+
R,
|
|
205
|
+
I,
|
|
206
|
+
M,
|
|
207
|
+
e,
|
|
208
|
+
a,
|
|
209
|
+
o,
|
|
210
|
+
E
|
|
211
|
+
]);
|
|
212
|
+
const Y = L(
|
|
213
|
+
() => f && k ? Fr(m, k) : m,
|
|
214
|
+
[f, k, m]
|
|
215
|
+
), gr = L(
|
|
216
|
+
() => zr(w, b, o),
|
|
217
|
+
[w, b, o]
|
|
218
|
+
), z = O(
|
|
219
|
+
(d, g) => {
|
|
220
|
+
X(d), e == null || e(d), a == null || a(g);
|
|
221
|
+
},
|
|
222
|
+
[e, a]
|
|
223
|
+
), mr = O(
|
|
224
|
+
(d) => {
|
|
225
|
+
const y = Ir(
|
|
226
|
+
d,
|
|
227
|
+
o,
|
|
228
|
+
V,
|
|
229
|
+
m,
|
|
230
|
+
b
|
|
231
|
+
);
|
|
232
|
+
if (o) {
|
|
233
|
+
const A = Array.isArray(y) ? y : y ? [y] : [], _ = A.map((N) => b.get(String(N))).filter((N) => !!(N != null && N.length));
|
|
234
|
+
z(A, _);
|
|
235
|
+
} else {
|
|
236
|
+
const A = typeof y == "string" ? y : void 0, _ = A ? b.get(A) : void 0;
|
|
237
|
+
z(A, _);
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
[o, V, m, b, z]
|
|
241
|
+
), vr = () => {
|
|
242
|
+
}, hr = () => {
|
|
243
|
+
z(o ? [] : void 0, void 0), H("");
|
|
244
|
+
}, Sr = tr ?? (o ? Array.isArray(n) && n.length > 0 : n != null && n !== "");
|
|
245
|
+
return C({ display: R, hidden: I }, E) ? /* @__PURE__ */ u(
|
|
246
|
+
Lr,
|
|
247
|
+
{
|
|
248
|
+
label: p,
|
|
249
|
+
active: Sr,
|
|
250
|
+
loading: U,
|
|
251
|
+
width: lr,
|
|
252
|
+
open: fr,
|
|
253
|
+
onOpenChange: ur,
|
|
254
|
+
onConfirm: vr,
|
|
255
|
+
onReset: hr,
|
|
256
|
+
children: /* @__PURE__ */ Z("div", { className: h("filter-cascader-root", v["filter-cascader-root"]), children: [
|
|
257
|
+
j ? /* @__PURE__ */ u(
|
|
258
|
+
"div",
|
|
259
|
+
{
|
|
260
|
+
className: h(
|
|
261
|
+
"filter-cascader-panel-extra",
|
|
262
|
+
v["filter-cascader-panel-extra"]
|
|
263
|
+
),
|
|
264
|
+
children: j
|
|
265
|
+
}
|
|
266
|
+
) : null,
|
|
267
|
+
f ? /* @__PURE__ */ u("div", { className: h("filter-cascader-search", v["filter-cascader-search"]), children: /* @__PURE__ */ u(
|
|
268
|
+
Nr,
|
|
269
|
+
{
|
|
270
|
+
placeholder: `搜索${p}`,
|
|
271
|
+
allowClear: !0,
|
|
272
|
+
value: k,
|
|
273
|
+
onChange: (d) => H(d.target.value)
|
|
274
|
+
}
|
|
275
|
+
) }) : null,
|
|
276
|
+
U ? /* @__PURE__ */ u("div", { className: h("filter-cascader-loading", v["filter-cascader-loading"]), children: /* @__PURE__ */ u(yr, { size: "small" }) }) : Y.length === 0 ? /* @__PURE__ */ u(Mr, { iconType: "simple", description: "暂无选项" }) : /* @__PURE__ */ u(
|
|
277
|
+
"div",
|
|
278
|
+
{
|
|
279
|
+
className: h(
|
|
280
|
+
"filter-cascader-panel-wrap",
|
|
281
|
+
v["filter-cascader-panel-wrap"]
|
|
282
|
+
),
|
|
283
|
+
children: /* @__PURE__ */ u(
|
|
284
|
+
K.Panel,
|
|
285
|
+
{
|
|
286
|
+
className: h("filter-cascader-panel", v["filter-cascader-panel"]),
|
|
287
|
+
options: Y,
|
|
288
|
+
value: gr,
|
|
289
|
+
onChange: mr,
|
|
290
|
+
multiple: o,
|
|
291
|
+
changeOnSelect: !V,
|
|
292
|
+
...o && V ? { showCheckedStrategy: K.SHOW_CHILD } : {}
|
|
293
|
+
}
|
|
294
|
+
)
|
|
295
|
+
}
|
|
296
|
+
),
|
|
297
|
+
o && Array.isArray(w) && w.length > 0 ? /* @__PURE__ */ u(
|
|
298
|
+
"div",
|
|
299
|
+
{
|
|
300
|
+
className: h(
|
|
301
|
+
"filter-cascader-selected-bar",
|
|
302
|
+
v["filter-cascader-selected-bar"]
|
|
303
|
+
),
|
|
304
|
+
children: /* @__PURE__ */ u(Ar, { size: [4, 4], wrap: !0, children: /* @__PURE__ */ Z("span", { className: v["filter-cascader-selected-count"], children: [
|
|
305
|
+
"已选 ",
|
|
306
|
+
w.length
|
|
307
|
+
] }) })
|
|
308
|
+
}
|
|
309
|
+
) : null
|
|
310
|
+
] })
|
|
311
|
+
}
|
|
312
|
+
) : null;
|
|
313
|
+
};
|
|
314
|
+
export {
|
|
315
|
+
qr as default,
|
|
316
|
+
rr as treeToCascaderOptions
|
|
317
|
+
};
|
|
318
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const a = {
|
|
2
|
+
"filter-cascader-root": "_filter-cascader-root_13av2_1",
|
|
3
|
+
"filter-cascader-panel-extra": "_filter-cascader-panel-extra_13av2_5",
|
|
4
|
+
"filter-cascader-search": "_filter-cascader-search_13av2_9",
|
|
5
|
+
"filter-cascader-loading": "_filter-cascader-loading_13av2_14",
|
|
6
|
+
"filter-cascader-panel-wrap": "_filter-cascader-panel-wrap_13av2_22",
|
|
7
|
+
"filter-cascader-panel": "_filter-cascader-panel_13av2_5",
|
|
8
|
+
"filter-cascader-selected-bar": "_filter-cascader-selected-bar_13av2_109",
|
|
9
|
+
"filter-cascader-selected-count": "_filter-cascader-selected-count_13av2_117"
|
|
10
|
+
};
|
|
11
|
+
export {
|
|
12
|
+
a as default
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=style.module.scss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
import { jsx as r } from "react/jsx-runtime";
|
|
2
|
-
import { Popover as
|
|
3
|
-
import { useState as
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
const
|
|
2
|
+
import { Popover as h } from "antd";
|
|
3
|
+
import { useState as v } from "react";
|
|
4
|
+
import x from "../FilterPanel/index.js";
|
|
5
|
+
import P from "../FilterTrigger/index.js";
|
|
6
|
+
const L = ({
|
|
7
7
|
label: a,
|
|
8
8
|
active: p,
|
|
9
|
+
loading: d = !1,
|
|
9
10
|
width: i,
|
|
10
|
-
confirmText:
|
|
11
|
-
children:
|
|
11
|
+
confirmText: c = "确定",
|
|
12
|
+
children: f,
|
|
12
13
|
open: m,
|
|
13
14
|
onOpenChange: l,
|
|
14
|
-
onConfirm:
|
|
15
|
-
onReset:
|
|
15
|
+
onConfirm: e,
|
|
16
|
+
onReset: t
|
|
16
17
|
}) => {
|
|
17
|
-
const [
|
|
18
|
-
|
|
18
|
+
const [u, y] = v(!1), n = m ?? u, o = (s) => {
|
|
19
|
+
y(s), l == null || l(s);
|
|
19
20
|
};
|
|
20
21
|
return /* @__PURE__ */ r(
|
|
21
|
-
|
|
22
|
+
h,
|
|
22
23
|
{
|
|
23
24
|
open: n,
|
|
24
25
|
onOpenChange: o,
|
|
@@ -29,24 +30,24 @@ const I = ({
|
|
|
29
30
|
styles: { content: { maxWidth: i || 300, padding: 0 } },
|
|
30
31
|
getPopupContainer: () => document.body,
|
|
31
32
|
content: /* @__PURE__ */ r(
|
|
32
|
-
|
|
33
|
+
x,
|
|
33
34
|
{
|
|
34
|
-
onConfirm:
|
|
35
|
-
(
|
|
35
|
+
onConfirm: e ? () => {
|
|
36
|
+
(e == null ? void 0 : e()) !== !1 && o(!1);
|
|
36
37
|
} : void 0,
|
|
37
|
-
onReset:
|
|
38
|
-
|
|
38
|
+
onReset: t ? () => {
|
|
39
|
+
t == null || t(), o(!1);
|
|
39
40
|
} : void 0,
|
|
40
|
-
confirmText:
|
|
41
|
+
confirmText: c,
|
|
41
42
|
width: i || 300,
|
|
42
|
-
children:
|
|
43
|
+
children: f
|
|
43
44
|
}
|
|
44
45
|
),
|
|
45
|
-
children: /* @__PURE__ */ r("span", { style: { display: "inline-flex" }, children: /* @__PURE__ */ r(
|
|
46
|
+
children: /* @__PURE__ */ r("span", { style: { display: "inline-flex" }, children: /* @__PURE__ */ r(P, { label: a, active: p, open: n, loading: d }) })
|
|
46
47
|
}
|
|
47
48
|
);
|
|
48
49
|
};
|
|
49
50
|
export {
|
|
50
|
-
|
|
51
|
+
L as default
|
|
51
52
|
};
|
|
52
53
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterPopover/index.tsx"],"sourcesContent":["import { Popover } from 'antd';\nimport React, { useState } from 'react';\nimport FilterPanel from '../FilterPanel';\nimport FilterTrigger from '../FilterTrigger';\n\ninterface FilterPopoverProps {\n /** 筛选项标签 */\n label: string;\n /** 是否有值(控制选中态样式) */\n active?: boolean;\n /** 面板宽度 */\n width?: number;\n /** 确定按钮文字 */\n confirmText?: string;\n /** 面板内容 */\n children: React.ReactNode;\n /** 受控打开状态(传入则由外部控制) */\n open?: boolean;\n /** 打开状态变更回调 */\n onOpenChange?: (open: boolean) => void;\n /** 确认回调(不传则无确定/取消按钮);返回 `false` 时不关闭弹层 */\n onConfirm?: () => void | boolean;\n /** 取消回调 */\n onReset?: () => void;\n}\n\nconst FilterPopover: React.FC<FilterPopoverProps> = ({\n label,\n active,\n width,\n confirmText = '确定',\n children,\n open: controlledOpen,\n onOpenChange,\n onConfirm,\n onReset,\n}) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const open = controlledOpen ?? internalOpen;\n\n const setOpen = (value: boolean) => {\n setInternalOpen(value);\n onOpenChange?.(value);\n };\n\n const handleConfirm = () => {\n const result = onConfirm?.();\n if (result === false) return;\n setOpen(false);\n };\n\n const handleReset = () => {\n onReset?.();\n setOpen(false);\n };\n\n return (\n <Popover\n open={open}\n onOpenChange={setOpen}\n trigger=\"click\"\n placement=\"bottomLeft\"\n destroyOnHidden\n classNames={{ root: 'filter-popover-panel' }}\n styles={{ content: { maxWidth: width || 300, padding: 0 } }}\n getPopupContainer={() => document.body}\n content={\n <FilterPanel\n onConfirm={onConfirm ? handleConfirm : undefined}\n onReset={onReset ? handleReset : undefined}\n confirmText={confirmText}\n width={width || 300}\n >\n {children}\n </FilterPanel>\n }\n >\n <span style={{ display: 'inline-flex' }}>\n <FilterTrigger label={label} active={active} open={open} />\n </span>\n </Popover>\n );\n};\n\nexport default FilterPopover;\nexport type { FilterPopoverProps };\n"],"names":["FilterPopover","label","active","width","confirmText","children","controlledOpen","onOpenChange","onConfirm","onReset","internalOpen","setInternalOpen","useState","open","setOpen","value","jsx","Popover","FilterPanel","FilterTrigger"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterPopover/index.tsx"],"sourcesContent":["import { Popover } from 'antd';\nimport React, { useState } from 'react';\nimport FilterPanel from '../FilterPanel';\nimport FilterTrigger from '../FilterTrigger';\n\ninterface FilterPopoverProps {\n /** 筛选项标签 */\n label: string;\n /** 是否有值(控制选中态样式) */\n active?: boolean;\n /** 选项加载中:透传至 FilterTrigger */\n loading?: boolean;\n /** 面板宽度 */\n width?: number;\n /** 确定按钮文字 */\n confirmText?: string;\n /** 面板内容 */\n children: React.ReactNode;\n /** 受控打开状态(传入则由外部控制) */\n open?: boolean;\n /** 打开状态变更回调 */\n onOpenChange?: (open: boolean) => void;\n /** 确认回调(不传则无确定/取消按钮);返回 `false` 时不关闭弹层 */\n onConfirm?: () => void | boolean;\n /** 取消回调 */\n onReset?: () => void;\n}\n\nconst FilterPopover: React.FC<FilterPopoverProps> = ({\n label,\n active,\n loading = false,\n width,\n confirmText = '确定',\n children,\n open: controlledOpen,\n onOpenChange,\n onConfirm,\n onReset,\n}) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const open = controlledOpen ?? internalOpen;\n\n const setOpen = (value: boolean) => {\n setInternalOpen(value);\n onOpenChange?.(value);\n };\n\n const handleConfirm = () => {\n const result = onConfirm?.();\n if (result === false) return;\n setOpen(false);\n };\n\n const handleReset = () => {\n onReset?.();\n setOpen(false);\n };\n\n return (\n <Popover\n open={open}\n onOpenChange={setOpen}\n trigger=\"click\"\n placement=\"bottomLeft\"\n destroyOnHidden\n classNames={{ root: 'filter-popover-panel' }}\n styles={{ content: { maxWidth: width || 300, padding: 0 } }}\n getPopupContainer={() => document.body}\n content={\n <FilterPanel\n onConfirm={onConfirm ? handleConfirm : undefined}\n onReset={onReset ? handleReset : undefined}\n confirmText={confirmText}\n width={width || 300}\n >\n {children}\n </FilterPanel>\n }\n >\n <span style={{ display: 'inline-flex' }}>\n <FilterTrigger label={label} active={active} open={open} loading={loading} />\n </span>\n </Popover>\n );\n};\n\nexport default FilterPopover;\nexport type { FilterPopoverProps };\n"],"names":["FilterPopover","label","active","loading","width","confirmText","children","controlledOpen","onOpenChange","onConfirm","onReset","internalOpen","setInternalOpen","useState","open","setOpen","value","jsx","Popover","FilterPanel","FilterTrigger"],"mappings":";;;;;AA4BA,MAAMA,IAA8C,CAAC;AAAA,EACnD,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,OAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,UAAAC;AAAA,EACA,MAAMC;AAAA,EACN,cAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AACF,MAAM;AACJ,QAAM,CAACC,GAAcC,CAAe,IAAIC,EAAS,EAAK,GAChDC,IAAOP,KAAkBI,GAEzBI,IAAU,CAACC,MAAmB;AAClC,IAAAJ,EAAgBI,CAAK,GACrBR,KAAA,QAAAA,EAAeQ;AAAA,EACjB;AAaA,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAJ;AAAA,MACA,cAAcC;AAAA,MACd,SAAQ;AAAA,MACR,WAAU;AAAA,MACV,iBAAe;AAAA,MACf,YAAY,EAAE,MAAM,uBAAA;AAAA,MACpB,QAAQ,EAAE,SAAS,EAAE,UAAUX,KAAS,KAAK,SAAS,IAAE;AAAA,MACxD,mBAAmB,MAAM,SAAS;AAAA,MAClC,SACE,gBAAAa;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,WAAWV,IAvBG,MAAM;AAE1B,aADeA,KAAA,gBAAAA,SACA,MACfM,EAAQ,EAAK;AAAA,UACf,IAmB+C;AAAA,UACvC,SAASL,IAlBG,MAAM;AACxB,YAAAA,KAAA,QAAAA,KACAK,EAAQ,EAAK;AAAA,UACf,IAeyC;AAAA,UACjC,aAAAV;AAAA,UACA,OAAOD,KAAS;AAAA,UAEf,UAAAE;AAAA,QAAA;AAAA,MAAA;AAAA,MAIL,UAAA,gBAAAW,EAAC,QAAA,EAAK,OAAO,EAAE,SAAS,cAAA,GACtB,UAAA,gBAAAA,EAACG,GAAA,EAAc,OAAAnB,GAAc,QAAAC,GAAgB,MAAAY,GAAY,SAAAX,GAAkB,EAAA,CAC7E;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -32,6 +32,12 @@ interface FilterSelectProps extends BaseFilterProps {
|
|
|
32
32
|
panelExtra?: React.ReactNode;
|
|
33
33
|
/** 面板宽度;有 panelExtra 时默认 460 */
|
|
34
34
|
panelWidth?: number;
|
|
35
|
+
/**
|
|
36
|
+
* 选项加载中:Filter Item(Trigger)显示 Loader2 spin;
|
|
37
|
+
* 面板列表区显示 Spin,不渲染空态。
|
|
38
|
+
* 与内部 loadData loading 取或。
|
|
39
|
+
*/
|
|
40
|
+
loading?: boolean;
|
|
35
41
|
}
|
|
36
42
|
declare const FilterSelect: React.FC<FilterSelectProps>;
|
|
37
43
|
export default FilterSelect;
|