@hkyhy/marsun-components-core 0.1.12 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -6
- package/dist/components/AgentHub/Chat/Action/CreateButton.js +8 -0
- package/dist/components/AgentHub/Chat/Action/CreateButton.js.map +1 -0
- package/dist/components/AgentHub/Chat/Action/ManageActionButtons.js +20 -0
- package/dist/components/AgentHub/Chat/Action/ManageActionButtons.js.map +1 -0
- package/dist/components/AgentHub/Chat/Action/SessionActionButtons.js +24 -0
- package/dist/components/AgentHub/Chat/Action/SessionActionButtons.js.map +1 -0
- package/dist/components/AgentHub/Chat/Action/handlers.d.ts +0 -5
- package/dist/components/AgentHub/Chat/Detail/ChatInput/index.js +65 -0
- package/dist/components/AgentHub/Chat/Detail/ChatInput/index.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/ChatInput/style.module.scss.js +12 -0
- package/dist/components/AgentHub/Chat/Detail/ChatInput/style.module.scss.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/ChatPanel/index.d.ts +31 -0
- package/dist/components/AgentHub/Chat/Detail/ChatPanel/index.js +85 -0
- package/dist/components/AgentHub/Chat/Detail/ChatPanel/index.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/ChatPanel/style.module.scss.js +14 -0
- package/dist/components/AgentHub/Chat/Detail/ChatPanel/style.module.scss.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/ChatSuggestionRow/index.d.ts +9 -0
- package/dist/components/AgentHub/Chat/Detail/ChatSuggestionRow/index.js +22 -0
- package/dist/components/AgentHub/Chat/Detail/ChatSuggestionRow/index.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/ChatSuggestionRow/style.module.scss.js +8 -0
- package/dist/components/AgentHub/Chat/Detail/ChatSuggestionRow/style.module.scss.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/CitationContent/index.js +21 -0
- package/dist/components/AgentHub/Chat/Detail/CitationContent/index.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/CitationContent/style.module.scss.js +8 -0
- package/dist/components/AgentHub/Chat/Detail/CitationContent/style.module.scss.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/CitationInlineBadge/index.js +17 -0
- package/dist/components/AgentHub/Chat/Detail/CitationInlineBadge/index.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/CitationInlineBadge/style.module.scss.js +7 -0
- package/dist/components/AgentHub/Chat/Detail/CitationInlineBadge/style.module.scss.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/CitationMarkdownContent/index.js +68 -0
- package/dist/components/AgentHub/Chat/Detail/CitationMarkdownContent/index.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/CitationMarkdownContent/style.module.scss.js +7 -0
- package/dist/components/AgentHub/Chat/Detail/CitationMarkdownContent/style.module.scss.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/CitationPanel/index.js +247 -0
- package/dist/components/AgentHub/Chat/Detail/CitationPanel/index.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/CitationPanel/style.module.scss.js +31 -0
- package/dist/components/AgentHub/Chat/Detail/CitationPanel/style.module.scss.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/MermaidBlock/index.js +43 -0
- package/dist/components/AgentHub/Chat/Detail/MermaidBlock/index.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/MermaidBlock/style.module.scss.js +8 -0
- package/dist/components/AgentHub/Chat/Detail/MermaidBlock/style.module.scss.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/MessageActions/index.js +103 -0
- package/dist/components/AgentHub/Chat/Detail/MessageActions/index.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/MessageActions/style.module.scss.js +14 -0
- package/dist/components/AgentHub/Chat/Detail/MessageActions/style.module.scss.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/MessageEditPopover/index.js +58 -0
- package/dist/components/AgentHub/Chat/Detail/MessageEditPopover/index.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/MessageEditPopover/style.module.scss.js +9 -0
- package/dist/components/AgentHub/Chat/Detail/MessageEditPopover/style.module.scss.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/MessageItem/index.js +309 -0
- package/dist/components/AgentHub/Chat/Detail/MessageItem/index.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/MessageItem/style.module.scss.js +24 -0
- package/dist/components/AgentHub/Chat/Detail/MessageItem/style.module.scss.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/ThinkingSection/index.js +122 -0
- package/dist/components/AgentHub/Chat/Detail/ThinkingSection/index.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/ThinkingSection/style.module.scss.js +25 -0
- package/dist/components/AgentHub/Chat/Detail/ThinkingSection/style.module.scss.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/index.d.ts +12 -0
- package/dist/components/AgentHub/Chat/Form/Form.js +37 -0
- package/dist/components/AgentHub/Chat/Form/Form.js.map +1 -0
- package/dist/components/AgentHub/Chat/List/ChatCard/index.js +86 -0
- package/dist/components/AgentHub/Chat/List/ChatCard/index.js.map +1 -0
- package/dist/components/AgentHub/Chat/List/ChatCard/style.module.scss.js +25 -0
- package/dist/components/AgentHub/Chat/List/ChatCard/style.module.scss.js.map +1 -0
- package/dist/components/AgentHub/Chat/List/FilterBar.js +17 -0
- package/dist/components/AgentHub/Chat/List/FilterBar.js.map +1 -0
- package/dist/components/AgentHub/Chat/List/SessionSidebar/index.js +156 -0
- package/dist/components/AgentHub/Chat/List/SessionSidebar/index.js.map +1 -0
- package/dist/components/AgentHub/Chat/List/SessionSidebar/style.module.scss.js +28 -0
- package/dist/components/AgentHub/Chat/List/SessionSidebar/style.module.scss.js.map +1 -0
- package/dist/components/AgentHub/Chat/Modal/FormModal.js +58 -0
- package/dist/components/AgentHub/Chat/Modal/FormModal.js.map +1 -0
- package/dist/components/AgentHub/Chat/hooks/useAutoScrollToBottom.js +35 -0
- package/dist/components/AgentHub/Chat/hooks/useAutoScrollToBottom.js.map +1 -0
- package/dist/components/AgentHub/Chat/hooks/useChat.js +51 -0
- package/dist/components/AgentHub/Chat/hooks/useChat.js.map +1 -0
- package/dist/components/AgentHub/Chat/hooks/useChatSessions.js +60 -0
- package/dist/components/AgentHub/Chat/hooks/useChatSessions.js.map +1 -0
- package/dist/components/AgentHub/Chat/hooks/useSSECompletion.js +69 -0
- package/dist/components/AgentHub/Chat/hooks/useSSECompletion.js.map +1 -0
- package/dist/components/AgentHub/Chat/hooks/useTypewriter.js +39 -0
- package/dist/components/AgentHub/Chat/hooks/useTypewriter.js.map +1 -0
- package/dist/components/AgentHub/Chat/index.d.ts +1 -0
- package/dist/components/AgentHub/Chat/utils/citationContent.js +169 -0
- package/dist/components/AgentHub/Chat/utils/citationContent.js.map +1 -0
- package/dist/components/AgentHub/Chat/utils/messageContent.js +85 -0
- package/dist/components/AgentHub/Chat/utils/messageContent.js.map +1 -0
- package/dist/components/AgentHub/Chat/utils/sanitizeMermaidChart.js +22 -0
- package/dist/components/AgentHub/Chat/utils/sanitizeMermaidChart.js.map +1 -0
- package/dist/components/AgentHub/Chat/utils/sessionMessages.js +151 -0
- package/dist/components/AgentHub/Chat/utils/sessionMessages.js.map +1 -0
- package/dist/components/AgentHub/KnowledgeBase/Action/CreateButton.js +8 -0
- package/dist/components/AgentHub/KnowledgeBase/Action/CreateButton.js.map +1 -0
- package/dist/components/AgentHub/KnowledgeBase/Action/ManageActionButtons.js +20 -0
- package/dist/components/AgentHub/KnowledgeBase/Action/ManageActionButtons.js.map +1 -0
- package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/index.js +110 -0
- package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/index.js.map +1 -0
- package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/style.module.scss.js +7 -0
- package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/style.module.scss.js.map +1 -0
- package/dist/components/AgentHub/KnowledgeBase/Detail/ParseStatusTag/index.js +18 -0
- package/dist/components/AgentHub/KnowledgeBase/Detail/ParseStatusTag/index.js.map +1 -0
- package/dist/components/AgentHub/KnowledgeBase/Detail/ParseStatusTag/style.module.scss.js +7 -0
- package/dist/components/AgentHub/KnowledgeBase/Detail/ParseStatusTag/style.module.scss.js.map +1 -0
- package/dist/components/AgentHub/KnowledgeBase/Form/Form.js +31 -0
- package/dist/components/AgentHub/KnowledgeBase/Form/Form.js.map +1 -0
- package/dist/components/AgentHub/KnowledgeBase/List/FilterBar.js +17 -0
- package/dist/components/AgentHub/KnowledgeBase/List/FilterBar.js.map +1 -0
- package/dist/components/AgentHub/KnowledgeBase/List/KnowledgeCard/index.js +118 -0
- package/dist/components/AgentHub/KnowledgeBase/List/KnowledgeCard/index.js.map +1 -0
- package/dist/components/AgentHub/KnowledgeBase/List/KnowledgeCard/style.module.scss.js +23 -0
- package/dist/components/AgentHub/KnowledgeBase/List/KnowledgeCard/style.module.scss.js.map +1 -0
- package/dist/components/AgentHub/KnowledgeBase/Modal/FormModal.js +47 -0
- package/dist/components/AgentHub/KnowledgeBase/Modal/FormModal.js.map +1 -0
- package/dist/components/AgentHub/KnowledgeBase/constants/types.js +28 -0
- package/dist/components/AgentHub/KnowledgeBase/constants/types.js.map +1 -0
- package/dist/components/AgentHub/KnowledgeBase/hooks/useKBDocuments.js +21 -0
- package/dist/components/AgentHub/KnowledgeBase/hooks/useKBDocuments.js.map +1 -0
- package/dist/components/AgentHub/KnowledgeBase/hooks/useKnowledgeBase.js +32 -0
- package/dist/components/AgentHub/KnowledgeBase/hooks/useKnowledgeBase.js.map +1 -0
- package/dist/components/Filter/CommonFilter/index.js +34 -30
- package/dist/components/Filter/CommonFilter/index.js.map +1 -1
- package/dist/components/Filter/CommonFilter/style.module.scss.js +17 -16
- package/dist/components/Filter/CommonFilter/style.module.scss.js.map +1 -1
- package/dist/components/Filter/FilterDateRange/index.d.ts +2 -0
- package/dist/components/Filter/FilterDateRange/index.js +62 -51
- package/dist/components/Filter/FilterDateRange/index.js.map +1 -1
- package/dist/components/Filter/FilterSelect/index.d.ts +8 -2
- package/dist/components/Filter/FilterSelect/index.js +163 -116
- package/dist/components/Filter/FilterSelect/index.js.map +1 -1
- package/dist/components/Filter/FilterSelect/style.module.scss.js +12 -10
- package/dist/components/Filter/FilterSelect/style.module.scss.js.map +1 -1
- package/dist/components/Filter/FilterTrigger/index.d.ts +2 -2
- package/dist/components/Filter/FilterTrigger/index.js.map +1 -1
- package/dist/components/Filter/FilterTrigger/style.module.scss.js +4 -4
- package/dist/components/Filter/index.d.ts +1 -1
- package/dist/components/Filter/types.d.ts +2 -0
- package/dist/components/Filter/types.js.map +1 -1
- package/dist/components/Filter/useFilterState.d.ts +2 -0
- package/dist/components/Filter/useFilterState.js +27 -26
- package/dist/components/Filter/useFilterState.js.map +1 -1
- package/dist/components/Icons/index.js +153 -145
- package/dist/components/Icons/index.js.map +1 -1
- package/dist/components/TooltipInfo/TooltipInfo.js +29 -20
- package/dist/components/TooltipInfo/TooltipInfo.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +295 -186
- package/dist/index.js.map +1 -1
- package/dist/marsun-components-core.css +1 -1
- package/dist/styles/global.css +1 -1
- package/dist/theme/constants.d.ts +47 -1
- package/dist/theme/constants.js +50 -5
- package/dist/theme/constants.js.map +1 -1
- package/dist/theme/index.d.ts +2 -2
- package/dist/theme/index.js +8 -6
- package/dist/theme/theme.d.ts +10 -0
- package/dist/theme/theme.js +24 -34
- package/dist/theme/theme.js.map +1 -1
- package/dist/theme/tokens.css +139 -0
- package/package.json +7 -3
|
@@ -1,149 +1,196 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { Check as
|
|
3
|
-
import { Input as
|
|
4
|
-
import { useState as
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import { resolveFilterVisible as
|
|
8
|
-
import { useFilterRegister as
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
const { Search:
|
|
12
|
-
function
|
|
13
|
-
const
|
|
14
|
-
return
|
|
1
|
+
import { jsxs as N, jsx as v } from "react/jsx-runtime";
|
|
2
|
+
import { Check as W, X as Y } from "../../Icons/index.js";
|
|
3
|
+
import { Input as Z, Checkbox as _, Space as K } from "antd";
|
|
4
|
+
import { useState as D, useRef as V, useMemo as z, useEffect as B } from "react";
|
|
5
|
+
import ee from "../../Form/PersonOptionRow/index.js";
|
|
6
|
+
import re from "../FilterPopover/index.js";
|
|
7
|
+
import { resolveFilterVisible as E } from "../types.js";
|
|
8
|
+
import { useFilterRegister as te } from "../useFilterState.js";
|
|
9
|
+
import m from "./style.module.scss.js";
|
|
10
|
+
import h from "classnames";
|
|
11
|
+
const { Search: se } = Z;
|
|
12
|
+
function ne(r) {
|
|
13
|
+
const t = [r.label];
|
|
14
|
+
return r.departmentName && t.push(r.departmentName), t.join(" · ");
|
|
15
15
|
}
|
|
16
|
-
function
|
|
17
|
-
const o =
|
|
18
|
-
return [
|
|
16
|
+
function ce(r, t) {
|
|
17
|
+
const o = t.toLowerCase();
|
|
18
|
+
return [r.label, r.departmentName, r.email, r.phone, r.employeeId].filter(Boolean).some((l) => String(l).toLowerCase().includes(o));
|
|
19
19
|
}
|
|
20
|
-
function
|
|
21
|
-
if (
|
|
22
|
-
if (!
|
|
23
|
-
|
|
20
|
+
function ie(r, t) {
|
|
21
|
+
if (!(r != null && r.length) && !(t != null && t.length)) return !0;
|
|
22
|
+
if (!r || !t || r.length !== t.length) return !1;
|
|
23
|
+
const o = [...r].map(String).sort(), l = [...t].map(String).sort();
|
|
24
|
+
return o.every((c, d) => c === l[d]);
|
|
24
25
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
function I(r, t, o, l) {
|
|
27
|
+
if (l) {
|
|
28
|
+
const c = Array.isArray(r) ? r : r != null && r !== "" ? [r] : [];
|
|
29
|
+
return o != null && o.length && ie(c, o) ? [] : c;
|
|
30
|
+
}
|
|
31
|
+
if (!(t !== void 0 && r === t))
|
|
32
|
+
return r;
|
|
33
|
+
}
|
|
34
|
+
function oe(r, t, o, l) {
|
|
35
|
+
if (o) {
|
|
36
|
+
const d = r || [];
|
|
37
|
+
return d.length > 0 ? d.map((u) => {
|
|
38
|
+
var S;
|
|
39
|
+
return ((S = t.find((s) => String(s.value) === String(u))) == null ? void 0 : S.label) ?? String(u);
|
|
40
|
+
}).join("、") : "";
|
|
41
|
+
}
|
|
42
|
+
if (r == null) return "";
|
|
43
|
+
const c = t.find((d) => String(d.value) === String(r));
|
|
44
|
+
return c ? l ? ne(c) : c.label : String(r);
|
|
45
|
+
}
|
|
46
|
+
const Ne = ({
|
|
47
|
+
filterKey: r,
|
|
48
|
+
label: t,
|
|
28
49
|
options: o = [],
|
|
29
|
-
value:
|
|
30
|
-
onChange:
|
|
31
|
-
defaultValue:
|
|
32
|
-
|
|
50
|
+
value: l,
|
|
51
|
+
onChange: c,
|
|
52
|
+
defaultValue: d,
|
|
53
|
+
defaultValues: u,
|
|
54
|
+
searchable: S = !1,
|
|
33
55
|
multiple: s = !1,
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
56
|
+
minSelection: g,
|
|
57
|
+
variant: M = "default",
|
|
58
|
+
active: q,
|
|
59
|
+
hidden: C,
|
|
60
|
+
display: O
|
|
38
61
|
}) => {
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
),
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
62
|
+
const x = M === "person", [X, b] = D(!1), [y, R] = D(""), n = I(l, d, u, s), [a, k] = D(
|
|
63
|
+
n ?? (s ? [] : void 0)
|
|
64
|
+
), L = te(), w = V(c);
|
|
65
|
+
w.current = c;
|
|
66
|
+
const F = z(() => {
|
|
67
|
+
const e = Array.isArray(n) ? n : n != null && n !== "" ? [n] : [], i = !s || g == null || e.length > g;
|
|
68
|
+
return () => {
|
|
69
|
+
var f;
|
|
70
|
+
i && ((f = w.current) == null || f.call(w, void 0));
|
|
71
|
+
};
|
|
72
|
+
}, [n, g, s]), j = () => {
|
|
73
|
+
k(n ?? (s ? [] : void 0)), R("");
|
|
74
|
+
};
|
|
75
|
+
B(() => {
|
|
76
|
+
const e = I(l, d, u, s);
|
|
77
|
+
k(e ?? (s ? [] : void 0)), (e == null || Array.isArray(e) && e.length === 0) && R("");
|
|
78
|
+
}, [l, d, u, s]);
|
|
79
|
+
const P = z(
|
|
80
|
+
() => oe(n, o, s, x),
|
|
81
|
+
[o, n, s, x]
|
|
49
82
|
);
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const g = P(() => {
|
|
55
|
-
if (s) {
|
|
56
|
-
const c = r || [];
|
|
57
|
-
return c.length > 0 ? c.map((l) => {
|
|
58
|
-
var k;
|
|
59
|
-
return ((k = o.find((G) => G.value === l)) == null ? void 0 : k.label) ?? String(l);
|
|
60
|
-
}).join("、") : "";
|
|
61
|
-
}
|
|
62
|
-
if (r == null) return "";
|
|
63
|
-
const e = o.find((c) => c.value === r);
|
|
64
|
-
return e ? u ? V(e) : e.label : String(r);
|
|
65
|
-
}, [o, r, s, u]);
|
|
66
|
-
if (j(() => {
|
|
67
|
-
if (!S) return;
|
|
68
|
-
if (!A({ display: L, hidden: w }, { filterKey: t, label: i, value: m })) {
|
|
69
|
-
S.unregister(t);
|
|
83
|
+
if (B(() => {
|
|
84
|
+
if (!L) return;
|
|
85
|
+
if (!E({ display: O, hidden: C }, { filterKey: r, label: t, value: l })) {
|
|
86
|
+
L.unregister(r);
|
|
70
87
|
return;
|
|
71
88
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
},
|
|
83
|
-
|
|
84
|
-
|
|
89
|
+
if (P) {
|
|
90
|
+
const i = Array.isArray(n) ? n : n != null && n !== "" ? [n] : [], f = !s || g == null || i.length > g;
|
|
91
|
+
L.register(r, {
|
|
92
|
+
label: t,
|
|
93
|
+
valueLabel: P,
|
|
94
|
+
onRemove: F,
|
|
95
|
+
removable: f
|
|
96
|
+
});
|
|
97
|
+
} else
|
|
98
|
+
L.unregister(r);
|
|
99
|
+
}, [P, r, t, C, O, F]), !E({ display: O, hidden: C }, { filterKey: r, label: t, value: l })) return null;
|
|
100
|
+
const T = y ? o.filter(
|
|
101
|
+
(e) => x ? ce(e, y) : e.label.toLowerCase().includes(y.toLowerCase())
|
|
102
|
+
) : o, $ = () => {
|
|
103
|
+
c == null || c(a), b(!1);
|
|
104
|
+
}, G = () => {
|
|
105
|
+
j(), b(!1);
|
|
106
|
+
}, H = (e) => {
|
|
107
|
+
!e && s && j(), b(e);
|
|
108
|
+
}, J = (e) => {
|
|
85
109
|
if (!s) {
|
|
86
|
-
const
|
|
87
|
-
let
|
|
88
|
-
|
|
110
|
+
const i = d !== void 0 && e === d;
|
|
111
|
+
let f;
|
|
112
|
+
a === e || i ? f = void 0 : f = e, k(f), c == null || c(f), b(!1);
|
|
89
113
|
}
|
|
90
|
-
},
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
114
|
+
}, p = (e) => {
|
|
115
|
+
const i = a || [];
|
|
116
|
+
if (i.includes(e) && g != null && i.length <= g)
|
|
117
|
+
return;
|
|
118
|
+
const f = i.includes(e) ? i.filter((A) => A !== e) : [...i, e];
|
|
119
|
+
k(f);
|
|
120
|
+
}, Q = s ? Array.isArray(n) && n.length > 0 : n != null && n !== "";
|
|
121
|
+
return /* @__PURE__ */ N(
|
|
122
|
+
re,
|
|
96
123
|
{
|
|
97
|
-
label:
|
|
98
|
-
active:
|
|
99
|
-
open:
|
|
100
|
-
onOpenChange:
|
|
101
|
-
onConfirm: s ?
|
|
102
|
-
onReset: s ?
|
|
124
|
+
label: t,
|
|
125
|
+
active: q || Q,
|
|
126
|
+
open: X,
|
|
127
|
+
onOpenChange: H,
|
|
128
|
+
onConfirm: s ? $ : void 0,
|
|
129
|
+
onReset: s ? G : void 0,
|
|
103
130
|
children: [
|
|
104
|
-
|
|
105
|
-
|
|
131
|
+
S && /* @__PURE__ */ v(
|
|
132
|
+
se,
|
|
106
133
|
{
|
|
107
|
-
placeholder: `搜索${
|
|
134
|
+
placeholder: `搜索${t}`,
|
|
108
135
|
allowClear: !0,
|
|
109
136
|
size: "middle",
|
|
110
|
-
className:
|
|
111
|
-
value:
|
|
112
|
-
onChange: (e) =>
|
|
137
|
+
className: h("filter-select-search", m["filter-select-search"]),
|
|
138
|
+
value: y,
|
|
139
|
+
onChange: (e) => R(e.target.value)
|
|
113
140
|
}
|
|
114
141
|
),
|
|
115
|
-
/* @__PURE__ */
|
|
116
|
-
|
|
142
|
+
/* @__PURE__ */ N("div", { className: h("filter-select-options", m["filter-select-options"]), children: [
|
|
143
|
+
T.map((e) => /* @__PURE__ */ N(
|
|
117
144
|
"div",
|
|
118
145
|
{
|
|
119
|
-
className:
|
|
146
|
+
className: h(
|
|
120
147
|
"filter-select-option",
|
|
121
|
-
|
|
122
|
-
!s &&
|
|
148
|
+
m["filter-select-option"],
|
|
149
|
+
!s && a === e.value && h("filter-select-option-selected", m["filter-select-option-selected"])
|
|
123
150
|
),
|
|
124
|
-
onClick: () =>
|
|
151
|
+
onClick: () => s ? p(e.value) : J(e.value),
|
|
125
152
|
children: [
|
|
126
|
-
s && /* @__PURE__ */
|
|
127
|
-
|
|
128
|
-
|
|
153
|
+
s && /* @__PURE__ */ v(
|
|
154
|
+
_,
|
|
155
|
+
{
|
|
156
|
+
checked: a == null ? void 0 : a.includes(e.value),
|
|
157
|
+
onChange: () => p(e.value),
|
|
158
|
+
onClick: (i) => i.stopPropagation()
|
|
159
|
+
}
|
|
160
|
+
),
|
|
161
|
+
x ? /* @__PURE__ */ v(ee, { option: e }) : /* @__PURE__ */ v("span", { children: e.label }),
|
|
162
|
+
!s && !x && a === e.value && /* @__PURE__ */ v(W, { className: h("filter-select-option-check", m["filter-select-option-check"]) })
|
|
129
163
|
]
|
|
130
164
|
},
|
|
131
165
|
String(e.value)
|
|
132
166
|
)),
|
|
133
|
-
|
|
167
|
+
T.length === 0 && /* @__PURE__ */ v("div", { className: h("filter-select-empty", m["filter-select-empty"]), children: "暂无数据" })
|
|
134
168
|
] }),
|
|
135
|
-
s && (
|
|
136
|
-
/* @__PURE__ */
|
|
137
|
-
/* @__PURE__ */
|
|
138
|
-
const
|
|
139
|
-
return /* @__PURE__ */
|
|
169
|
+
s && (a == null ? void 0 : a.length) > 0 && /* @__PURE__ */ N("div", { className: h("filter-select-selected-bar", m["filter-select-selected-bar"]), children: [
|
|
170
|
+
/* @__PURE__ */ v("div", { className: h("filter-select-selected-label", m["filter-select-selected-label"]), children: "已选:" }),
|
|
171
|
+
/* @__PURE__ */ v(K, { size: [4, 4], wrap: !0, children: a.map((e) => {
|
|
172
|
+
const i = o.find((U) => String(U.value) === String(e)), f = a || [], A = g == null || f.length > g;
|
|
173
|
+
return /* @__PURE__ */ N(
|
|
140
174
|
"span",
|
|
141
175
|
{
|
|
142
|
-
className:
|
|
143
|
-
|
|
176
|
+
className: h(
|
|
177
|
+
"filter-select-selected-tag",
|
|
178
|
+
m["filter-select-selected-tag"],
|
|
179
|
+
!A && m["filter-select-selected-tag-disabled"]
|
|
180
|
+
),
|
|
181
|
+
onClick: () => A && p(e),
|
|
144
182
|
children: [
|
|
145
|
-
(
|
|
146
|
-
/* @__PURE__ */
|
|
183
|
+
(i == null ? void 0 : i.label) ?? String(e),
|
|
184
|
+
/* @__PURE__ */ v(
|
|
185
|
+
Y,
|
|
186
|
+
{
|
|
187
|
+
className: h(
|
|
188
|
+
"filter-select-selected-remove",
|
|
189
|
+
m["filter-select-selected-remove"],
|
|
190
|
+
!A && m["filter-select-selected-remove-disabled"]
|
|
191
|
+
)
|
|
192
|
+
}
|
|
193
|
+
)
|
|
147
194
|
]
|
|
148
195
|
},
|
|
149
196
|
String(e)
|
|
@@ -155,6 +202,6 @@ const me = ({
|
|
|
155
202
|
);
|
|
156
203
|
};
|
|
157
204
|
export {
|
|
158
|
-
|
|
205
|
+
Ne as default
|
|
159
206
|
};
|
|
160
207
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterSelect/index.tsx"],"sourcesContent":["import { Check, X } from '@/components/Icons';\nimport { Checkbox, Input, Space } from 'antd';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport PersonOptionRow from '../../Form/PersonOptionRow';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps, FilterOption, PersonOption } from '../types';\nimport { resolveFilterVisible } from '../types';\nimport { useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\nconst { Search } = Input;\n\nfunction formatPersonValueLabel(opt: PersonOption): string {\n const parts = [opt.label];\n if (opt.departmentName) parts.push(opt.departmentName);\n return parts.join(' · ');\n}\n\nfunction matchPersonOptionSearch(opt: PersonOption, keyword: string): boolean {\n const lower = keyword.toLowerCase();\n return [opt.label, opt.departmentName, opt.email, opt.phone, opt.employeeId]\n .filter(Boolean)\n .some((s) => String(s).toLowerCase().includes(lower));\n}\n\ninterface FilterSelectProps extends BaseFilterProps {\n options: FilterOption[];\n value?: string | number | undefined;\n onChange?: (value: string | number | undefined) => void;\n /** 默认值:与默认值相同时视为未筛选(不展示已选标签与选中态) */\n defaultValue?: string | number;\n placeholder?: string;\n searchable?: boolean;\n /** 是否多选 */\n multiple?: boolean;\n /** 人员选项:展示部门与联系方式 */\n variant?: 'default' | 'person';\n}\n\nfunction toDisplayValue(\n value: string | number | undefined,\n defaultValue: string | number | undefined,\n multiple: boolean,\n): string | number | (string | number)[] | undefined {\n if (multiple) return value ?? [];\n if (defaultValue !== undefined && value === defaultValue) return undefined;\n return value;\n}\n\nconst FilterSelect: React.FC<FilterSelectProps> = ({\n filterKey,\n label,\n options = [],\n value,\n onChange,\n defaultValue,\n searchable = false,\n multiple = false,\n variant = 'default',\n active,\n hidden,\n display,\n}) => {\n const isPersonVariant = variant === 'person';\n const [open, setOpen] = useState(false);\n const [searchText, setSearchText] = useState('');\n const displayValue = toDisplayValue(value, defaultValue, multiple);\n const [localValue, setLocalValue] = useState<string | number | (string | number)[] | undefined>(\n displayValue ?? (multiple ? [] : undefined),\n );\n\n // ── 自动注册到 CommonFilter ──\n const registerFn = useFilterRegister();\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const handleRemove = useMemo(\n () => () => {\n onChangeRef.current?.(undefined);\n },\n [],\n );\n\n // 同步外部 value 到内部 localValue\n useEffect(() => {\n const nextDisplayValue = toDisplayValue(value, defaultValue, multiple);\n setLocalValue(nextDisplayValue ?? (multiple ? [] : undefined));\n // 外部清空时同时清空搜索文本\n if (\n nextDisplayValue === undefined ||\n nextDisplayValue === null ||\n (Array.isArray(nextDisplayValue) && nextDisplayValue.length === 0)\n ) {\n setSearchText('');\n }\n }, [value, defaultValue, multiple]);\n\n // 从 options 反查 valueLabel\n const valueLabel = useMemo(() => {\n if (multiple) {\n const arr = (localValue as (string | number)[]) || [];\n return arr.length > 0\n ? arr.map((v) => options.find((o) => o.value === v)?.label ?? String(v)).join('、')\n : '';\n }\n if (localValue == null) return '';\n const opt = options.find((o) => o.value === localValue);\n if (!opt) return String(localValue);\n return isPersonVariant ? formatPersonValueLabel(opt as PersonOption) : opt.label;\n }, [options, localValue, multiple, isPersonVariant]);\n\n useEffect(() => {\n if (!registerFn) return;\n const ctx = { filterKey, label, value };\n if (!resolveFilterVisible({ display, hidden }, ctx)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (valueLabel && !multiple) {\n // 多选由 CommonFilter 的 clearAll 统一处理,单选直接注册\n registerFn.register(filterKey, {\n label,\n valueLabel,\n onRemove: handleRemove,\n });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueLabel, filterKey, label, hidden, display, multiple, handleRemove]);\n\n const visibilityCtx = { filterKey, label, value };\n if (!resolveFilterVisible({ display, hidden }, visibilityCtx)) return null;\n\n const filteredOptions = searchText\n ? options.filter((opt) =>\n isPersonVariant\n ? matchPersonOptionSearch(opt as PersonOption, searchText)\n : opt.label.toLowerCase().includes(searchText.toLowerCase()),\n )\n : options;\n\n const handleConfirm = () => {\n onChange?.(localValue as string | number | undefined);\n setOpen(false);\n };\n\n const handleReset = () => {\n setLocalValue(multiple ? [] : undefined);\n setSearchText('');\n onChange?.(undefined);\n setOpen(false);\n };\n\n const handleClickOption = (optVal: string | number) => {\n if (!multiple) {\n const isDefaultOption = defaultValue !== undefined && optVal === defaultValue;\n let next: string | number | undefined;\n if (localValue === optVal || isDefaultOption) {\n next = undefined;\n } else {\n next = optVal;\n }\n setLocalValue(next);\n onChange?.(next);\n setOpen(false); // 单选自动收起\n }\n };\n\n const handleToggleMulti = (optVal: string | number) => {\n const arr = (localValue as (string | number)[]) || [];\n const next = arr.includes(optVal) ? arr.filter((v) => v !== optVal) : [...arr, optVal];\n setLocalValue(next);\n };\n\n return (\n <FilterPopover\n label={label}\n active={\n active ||\n (multiple\n ? Array.isArray(localValue) && localValue.length > 0\n : localValue != null && localValue !== '')\n }\n open={open}\n onOpenChange={setOpen}\n onConfirm={multiple ? handleConfirm : undefined}\n onReset={multiple ? handleReset : undefined}\n >\n {/* 搜索框 */}\n {searchable && (\n <Search\n placeholder={`搜索${label}`}\n allowClear\n size=\"middle\"\n className={classNames('filter-select-search', styles['filter-select-search'])}\n value={searchText}\n onChange={(e) => setSearchText(e.target.value)}\n />\n )}\n\n {/* 选项列表 */}\n <div className={classNames('filter-select-options', styles['filter-select-options'])}>\n {filteredOptions.map((opt) => (\n <div\n key={String(opt.value)}\n className={classNames('filter-select-option', styles['filter-select-option'],\n !multiple &&\n localValue === opt.value &&\n classNames('filter-select-option-selected', styles['filter-select-option-selected']),\n )}\n onClick={() => handleClickOption(opt.value)}\n >\n {multiple && (\n <Checkbox checked={(localValue as (string | number)[])?.includes(opt.value)} />\n )}\n {isPersonVariant ? (\n <PersonOptionRow option={opt as PersonOption} />\n ) : (\n <span>{opt.label}</span>\n )}\n {!multiple && !isPersonVariant && localValue === opt.value && (\n <Check className={classNames('filter-select-option-check', styles['filter-select-option-check'])} />\n )}\n </div>\n ))}\n {filteredOptions.length === 0 && (\n <div className={classNames('filter-select-empty', styles['filter-select-empty'])}>暂无数据</div>\n )}\n </div>\n\n {/* 多选已选 */}\n {multiple && (localValue as (string | number)[])?.length > 0 && (\n <div className={classNames('filter-select-selected-bar', styles['filter-select-selected-bar'])}>\n <div className={classNames('filter-select-selected-label', styles['filter-select-selected-label'])}>已选:</div>\n <Space size={[4, 4]} wrap>\n {(localValue as (string | number)[]).map((v) => {\n const opt = options.find((o) => o.value === v);\n return (\n <span\n key={String(v)}\n className={classNames('filter-select-selected-tag', styles['filter-select-selected-tag'])}\n onClick={() => handleToggleMulti(v)}\n >\n {opt?.label ?? String(v)}\n <X className={classNames('filter-select-selected-remove', styles['filter-select-selected-remove'])} />\n </span>\n );\n })}\n </Space>\n </div>\n )}\n </FilterPopover>\n );\n};\n\nexport default FilterSelect;\nexport type { FilterSelectProps };\n"],"names":["Search","Input","formatPersonValueLabel","opt","parts","matchPersonOptionSearch","keyword","lower","s","toDisplayValue","value","defaultValue","multiple","FilterSelect","filterKey","label","options","onChange","searchable","variant","active","hidden","display","isPersonVariant","open","setOpen","useState","searchText","setSearchText","displayValue","localValue","setLocalValue","registerFn","useFilterRegister","onChangeRef","useRef","handleRemove","useMemo","_a","useEffect","nextDisplayValue","valueLabel","arr","v","o","resolveFilterVisible","filteredOptions","handleConfirm","handleReset","handleClickOption","optVal","isDefaultOption","next","handleToggleMulti","jsxs","FilterPopover","jsx","classNames","styles","Checkbox","PersonOptionRow","Check","Space","X"],"mappings":";;;;;;;;;;AAWA,MAAM,EAAE,QAAAA,MAAWC;AAEnB,SAASC,EAAuBC,GAA2B;AACzD,QAAMC,IAAQ,CAACD,EAAI,KAAK;AACxB,SAAIA,EAAI,kBAAgBC,EAAM,KAAKD,EAAI,cAAc,GAC9CC,EAAM,KAAK,KAAK;AACzB;AAEA,SAASC,GAAwBF,GAAmBG,GAA0B;AAC5E,QAAMC,IAAQD,EAAQ,YAAA;AACtB,SAAO,CAACH,EAAI,OAAOA,EAAI,gBAAgBA,EAAI,OAAOA,EAAI,OAAOA,EAAI,UAAU,EACxE,OAAO,OAAO,EACd,KAAK,CAACK,MAAM,OAAOA,CAAC,EAAE,YAAA,EAAc,SAASD,CAAK,CAAC;AACxD;AAgBA,SAASE,EACPC,GACAC,GACAC,GACmD;AACnD,MAAIA,EAAU,QAAOF,KAAS,CAAA;AAC9B,MAAI,EAAAC,MAAiB,UAAaD,MAAUC;AAC5C,WAAOD;AACT;AAEA,MAAMG,KAA4C,CAAC;AAAA,EACjD,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC,IAAU,CAAA;AAAA,EACV,OAAAN;AAAA,EACA,UAAAO;AAAA,EACA,cAAAN;AAAA,EACA,YAAAO,IAAa;AAAA,EACb,UAAAN,IAAW;AAAA,EACX,SAAAO,IAAU;AAAA,EACV,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AACF,MAAM;AACJ,QAAMC,IAAkBJ,MAAY,UAC9B,CAACK,GAAMC,CAAO,IAAIC,EAAS,EAAK,GAChC,CAACC,GAAYC,CAAa,IAAIF,EAAS,EAAE,GACzCG,IAAepB,EAAeC,GAAOC,GAAcC,CAAQ,GAC3D,CAACkB,GAAYC,CAAa,IAAIL;AAAA,IAClCG,MAAiBjB,IAAW,CAAA,IAAK;AAAA,EAAA,GAI7BoB,IAAaC,EAAA,GACbC,IAAcC,EAAOlB,CAAQ;AACnC,EAAAiB,EAAY,UAAUjB;AAEtB,QAAMmB,IAAeC;AAAA,IACnB,MAAM,MAAM;;AACV,OAAAC,IAAAJ,EAAY,YAAZ,QAAAI,EAAA,KAAAJ,GAAsB;AAAA,IACxB;AAAA,IACA,CAAA;AAAA,EAAC;AAIH,EAAAK,EAAU,MAAM;AACd,UAAMC,IAAmB/B,EAAeC,GAAOC,GAAcC,CAAQ;AACrE,IAAAmB,EAAcS,MAAqB5B,IAAW,CAAA,IAAK,OAAU,IAI3D4B,KAAqB,QACpB,MAAM,QAAQA,CAAgB,KAAKA,EAAiB,WAAW,MAEhEZ,EAAc,EAAE;AAAA,EAEpB,GAAG,CAAClB,GAAOC,GAAcC,CAAQ,CAAC;AAGlC,QAAM6B,IAAaJ,EAAQ,MAAM;AAC/B,QAAIzB,GAAU;AACZ,YAAM8B,IAAOZ,KAAsC,CAAA;AACnD,aAAOY,EAAI,SAAS,IAChBA,EAAI,IAAI,CAACC,MAAA;;AAAM,iBAAAL,IAAAtB,EAAQ,KAAK,CAAC4B,MAAMA,EAAE,UAAUD,CAAC,MAAjC,gBAAAL,EAAoC,UAAS,OAAOK,CAAC;AAAA,OAAC,EAAE,KAAK,GAAG,IAC/E;AAAA,IACN;AACA,QAAIb,KAAc,KAAM,QAAO;AAC/B,UAAM3B,IAAMa,EAAQ,KAAK,CAAC4B,MAAMA,EAAE,UAAUd,CAAU;AACtD,WAAK3B,IACEoB,IAAkBrB,EAAuBC,CAAmB,IAAIA,EAAI,QAD1D,OAAO2B,CAAU;AAAA,EAEpC,GAAG,CAACd,GAASc,GAAYlB,GAAUW,CAAe,CAAC;AAuBnD,MArBAgB,EAAU,MAAM;AACd,QAAI,CAACP,EAAY;AAEjB,QAAI,CAACa,EAAqB,EAAE,SAAAvB,GAAS,QAAAD,EAAA,GADzB,EAAE,WAAAP,GAAW,OAAAC,GAAO,OAAAL,EAAA,CACkB,GAAG;AACnD,MAAAsB,EAAW,WAAWlB,CAAS;AAC/B;AAAA,IACF;AACA,IAAI2B,KAAc,CAAC7B,IAEjBoB,EAAW,SAASlB,GAAW;AAAA,MAC7B,OAAAC;AAAA,MACA,YAAA0B;AAAA,MACA,UAAUL;AAAA,IAAA,CACX,IAEDJ,EAAW,WAAWlB,CAAS;AAAA,EAGnC,GAAG,CAAC2B,GAAY3B,GAAWC,GAAOM,GAAQC,GAASV,GAAUwB,CAAY,CAAC,GAGtE,CAACS,EAAqB,EAAE,SAAAvB,GAAS,QAAAD,KADf,EAAE,WAAAP,GAAW,OAAAC,GAAO,OAAAL,EAAA,CACkB,EAAG,QAAO;AAEtE,QAAMoC,IAAkBnB,IACpBX,EAAQ;AAAA,IAAO,CAACb,MACdoB,IACIlB,GAAwBF,GAAqBwB,CAAU,IACvDxB,EAAI,MAAM,YAAA,EAAc,SAASwB,EAAW,aAAa;AAAA,EAAA,IAE/DX,GAEE+B,IAAgB,MAAM;AAC1B,IAAA9B,KAAA,QAAAA,EAAWa,IACXL,EAAQ,EAAK;AAAA,EACf,GAEMuB,IAAc,MAAM;AACxB,IAAAjB,EAAcnB,IAAW,CAAA,IAAK,MAAS,GACvCgB,EAAc,EAAE,GAChBX,KAAA,QAAAA,EAAW,SACXQ,EAAQ,EAAK;AAAA,EACf,GAEMwB,IAAoB,CAACC,MAA4B;AACrD,QAAI,CAACtC,GAAU;AACb,YAAMuC,IAAkBxC,MAAiB,UAAauC,MAAWvC;AACjE,UAAIyC;AACJ,MAAItB,MAAeoB,KAAUC,IAC3BC,IAAO,SAEPA,IAAOF,GAETnB,EAAcqB,CAAI,GAClBnC,KAAA,QAAAA,EAAWmC,IACX3B,EAAQ,EAAK;AAAA,IACf;AAAA,EACF,GAEM4B,IAAoB,CAACH,MAA4B;AACrD,UAAMR,IAAOZ,KAAsC,CAAA,GAC7CsB,IAAOV,EAAI,SAASQ,CAAM,IAAIR,EAAI,OAAO,CAACC,MAAMA,MAAMO,CAAM,IAAI,CAAC,GAAGR,GAAKQ,CAAM;AACrF,IAAAnB,EAAcqB,CAAI;AAAA,EACpB;AAEA,SACE,gBAAAE;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAAxC;AAAA,MACA,QACEK,MACCR,IACG,MAAM,QAAQkB,CAAU,KAAKA,EAAW,SAAS,IACjDA,KAAc,QAAQA,MAAe;AAAA,MAE3C,MAAAN;AAAA,MACA,cAAcC;AAAA,MACd,WAAWb,IAAWmC,IAAgB;AAAA,MACtC,SAASnC,IAAWoC,IAAc;AAAA,MAGjC,UAAA;AAAA,QAAA9B,KACC,gBAAAsC;AAAA,UAACxD;AAAA,UAAA;AAAA,YACC,aAAa,KAAKe,CAAK;AAAA,YACvB,YAAU;AAAA,YACV,MAAK;AAAA,YACL,WAAW0C,EAAW,wBAAwBC,EAAO,sBAAsB,CAAC;AAAA,YAC5E,OAAO/B;AAAA,YACP,UAAU,CAAC,MAAMC,EAAc,EAAE,OAAO,KAAK;AAAA,UAAA;AAAA,QAAA;AAAA,QAKjD,gBAAA0B,EAAC,SAAI,WAAWG,EAAW,yBAAyBC,EAAO,uBAAuB,CAAC,GAChF,UAAA;AAAA,UAAAZ,EAAgB,IAAI,CAAC3C,MACpB,gBAAAmD;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,WAAWG;AAAA,gBAAW;AAAA,gBAAwBC,EAAO,sBAAsB;AAAA,gBACzE,CAAC9C,KACCkB,MAAe3B,EAAI,SACnBsD,EAAW,iCAAiCC,EAAO,+BAA+B,CAAC;AAAA,cAAA;AAAA,cAEvF,SAAS,MAAMT,EAAkB9C,EAAI,KAAK;AAAA,cAEzC,UAAA;AAAA,gBAAAS,uBACE+C,GAAA,EAAS,SAAU7B,KAAA,gBAAAA,EAAoC,SAAS3B,EAAI,QAAQ;AAAA,gBAE9EoB,sBACEqC,GAAA,EAAgB,QAAQzD,GAAqB,IAE9C,gBAAAqD,EAAC,QAAA,EAAM,UAAArD,EAAI,MAAA,CAAM;AAAA,gBAElB,CAACS,KAAY,CAACW,KAAmBO,MAAe3B,EAAI,SACnD,gBAAAqD,EAACK,GAAA,EAAM,WAAWJ,EAAW,8BAA8BC,EAAO,4BAA4B,CAAC,EAAA,CAAG;AAAA,cAAA;AAAA,YAAA;AAAA,YAjB/F,OAAOvD,EAAI,KAAK;AAAA,UAAA,CAoBxB;AAAA,UACA2C,EAAgB,WAAW,KAC1B,gBAAAU,EAAC,OAAA,EAAI,WAAWC,EAAW,uBAAuBC,EAAO,qBAAqB,CAAC,GAAG,UAAA,OAAA,CAAI;AAAA,QAAA,GAE1F;AAAA,QAGC9C,MAAakB,KAAA,gBAAAA,EAAoC,UAAS,KACzD,gBAAAwB,EAAC,OAAA,EAAI,WAAWG,EAAW,8BAA8BC,EAAO,4BAA4B,CAAC,GAC3F,UAAA;AAAA,UAAA,gBAAAF,EAAC,OAAA,EAAI,WAAWC,EAAW,gCAAgCC,EAAO,8BAA8B,CAAC,GAAG,UAAA,MAAA,CAAG;AAAA,UACvG,gBAAAF,EAACM,GAAA,EAAM,MAAM,CAAC,GAAG,CAAC,GAAG,MAAI,IACrB,UAAAhC,EAAmC,IAAI,CAACa,MAAM;AAC9C,kBAAMxC,IAAMa,EAAQ,KAAK,CAAC4B,MAAMA,EAAE,UAAUD,CAAC;AAC7C,mBACE,gBAAAW;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,WAAWG,EAAW,8BAA8BC,EAAO,4BAA4B,CAAC;AAAA,gBACxF,SAAS,MAAML,EAAkBV,CAAC;AAAA,gBAEjC,UAAA;AAAA,mBAAAxC,KAAA,gBAAAA,EAAK,UAAS,OAAOwC,CAAC;AAAA,kBACvB,gBAAAa,EAACO,KAAE,WAAWN,EAAW,iCAAiCC,EAAO,+BAA+B,CAAC,EAAA,CAAG;AAAA,gBAAA;AAAA,cAAA;AAAA,cAL/F,OAAOf,CAAC;AAAA,YAAA;AAAA,UAQnB,CAAC,EAAA,CACH;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterSelect/index.tsx"],"sourcesContent":["import { Check, X } from '@/components/Icons';\nimport { Checkbox, Input, Space } from 'antd';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport PersonOptionRow from '../../Form/PersonOptionRow';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps, FilterOption, PersonOption } from '../types';\nimport { resolveFilterVisible } from '../types';\nimport { useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\nconst { Search } = Input;\n\nfunction formatPersonValueLabel(opt: PersonOption): string {\n const parts = [opt.label];\n if (opt.departmentName) parts.push(opt.departmentName);\n return parts.join(' · ');\n}\n\nfunction matchPersonOptionSearch(opt: PersonOption, keyword: string): boolean {\n const lower = keyword.toLowerCase();\n return [opt.label, opt.departmentName, opt.email, opt.phone, opt.employeeId]\n .filter(Boolean)\n .some((s) => String(s).toLowerCase().includes(lower));\n}\n\ntype FilterSelectValue = string | number | (string | number)[] | undefined;\n\nexport type { FilterSelectValue };\n\nfunction arraysEqual(\n a?: (string | number)[],\n b?: (string | number)[],\n): boolean {\n if (!a?.length && !b?.length) return true;\n if (!a || !b || a.length !== b.length) return false;\n const sortedA = [...a].map(String).sort();\n const sortedB = [...b].map(String).sort();\n return sortedA.every((v, i) => v === sortedB[i]);\n}\n\ninterface FilterSelectProps extends BaseFilterProps {\n options: FilterOption[];\n value?: FilterSelectValue;\n onChange?: (value: FilterSelectValue) => void;\n /** 默认值:与默认值相同时视为未筛选(不展示已选标签与选中态) */\n defaultValue?: string | number;\n /** 多选默认值:与默认集合相同时视为未筛选 */\n defaultValues?: (string | number)[];\n placeholder?: string;\n searchable?: boolean;\n /** 是否多选 */\n multiple?: boolean;\n /** 多选至少保留项数;达到下限时不允许移除已选标签 */\n minSelection?: number;\n /** 人员选项:展示部门与联系方式 */\n variant?: 'default' | 'person';\n}\n\nfunction toDisplayValue(\n value: FilterSelectValue,\n defaultValue: string | number | undefined,\n defaultValues: (string | number)[] | undefined,\n multiple: boolean,\n): string | number | (string | number)[] | undefined {\n if (multiple) {\n const arr = Array.isArray(value) ? value : value != null && value !== '' ? [value] : [];\n if (defaultValues?.length && arraysEqual(arr, defaultValues)) {\n return [];\n }\n return arr;\n }\n if (defaultValue !== undefined && value === defaultValue) return undefined;\n return value;\n}\n\nfunction formatValueLabel(\n displayVal: string | number | (string | number)[] | undefined,\n options: FilterOption[],\n multiple: boolean,\n isPersonVariant: boolean,\n): string {\n if (multiple) {\n const arr = (displayVal as (string | number)[]) || [];\n return arr.length > 0\n ? arr.map((v) => options.find((o) => String(o.value) === String(v))?.label ?? String(v)).join('、')\n : '';\n }\n if (displayVal == null) return '';\n const opt = options.find((o) => String(o.value) === String(displayVal));\n if (!opt) return String(displayVal);\n return isPersonVariant ? formatPersonValueLabel(opt as PersonOption) : opt.label;\n}\n\nconst FilterSelect: React.FC<FilterSelectProps> = ({\n filterKey,\n label,\n options = [],\n value,\n onChange,\n defaultValue,\n defaultValues,\n searchable = false,\n multiple = false,\n minSelection,\n variant = 'default',\n active,\n hidden,\n display,\n}) => {\n const isPersonVariant = variant === 'person';\n const [open, setOpen] = useState(false);\n const [searchText, setSearchText] = useState('');\n const displayValue = toDisplayValue(value, defaultValue, defaultValues, multiple);\n const [localValue, setLocalValue] = useState<string | number | (string | number)[] | undefined>(\n displayValue ?? (multiple ? [] : undefined),\n );\n\n // ── 自动注册到 CommonFilter ──\n const registerFn = useFilterRegister();\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const handleRemove = useMemo(() => {\n const selectedArr = Array.isArray(displayValue)\n ? displayValue\n : displayValue != null && displayValue !== ''\n ? [displayValue]\n : [];\n const canRemove =\n !multiple ||\n minSelection == null ||\n selectedArr.length > minSelection;\n return () => {\n if (!canRemove) return;\n onChangeRef.current?.(undefined);\n };\n }, [displayValue, minSelection, multiple]);\n\n const revertToCommitted = () => {\n const next = displayValue ?? (multiple ? [] : undefined);\n setLocalValue(next);\n setSearchText('');\n };\n\n // 同步外部 value 到内部 localValue\n useEffect(() => {\n const nextDisplayValue = toDisplayValue(value, defaultValue, defaultValues, multiple);\n setLocalValue(nextDisplayValue ?? (multiple ? [] : undefined));\n if (\n nextDisplayValue === undefined ||\n nextDisplayValue === null ||\n (Array.isArray(nextDisplayValue) && nextDisplayValue.length === 0)\n ) {\n setSearchText('');\n }\n }, [value, defaultValue, defaultValues, multiple]);\n\n const committedValueLabel = useMemo(\n () => formatValueLabel(displayValue, options, multiple, isPersonVariant),\n [options, displayValue, multiple, isPersonVariant],\n );\n\n useEffect(() => {\n if (!registerFn) return;\n const ctx = { filterKey, label, value };\n if (!resolveFilterVisible({ display, hidden }, ctx)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (committedValueLabel) {\n const selectedArr = Array.isArray(displayValue)\n ? displayValue\n : displayValue != null && displayValue !== ''\n ? [displayValue]\n : [];\n const removable =\n !multiple || minSelection == null || selectedArr.length > minSelection;\n registerFn.register(filterKey, {\n label,\n valueLabel: committedValueLabel,\n onRemove: handleRemove,\n removable,\n });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [committedValueLabel, filterKey, label, hidden, display, handleRemove]);\n\n const visibilityCtx = { filterKey, label, value };\n if (!resolveFilterVisible({ display, hidden }, visibilityCtx)) return null;\n\n const filteredOptions = searchText\n ? options.filter((opt) =>\n isPersonVariant\n ? matchPersonOptionSearch(opt as PersonOption, searchText)\n : opt.label.toLowerCase().includes(searchText.toLowerCase()),\n )\n : options;\n\n const handleConfirm = () => {\n onChange?.(localValue as FilterSelectValue);\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 handleClickOption = (optVal: string | number) => {\n if (!multiple) {\n const isDefaultOption = defaultValue !== undefined && optVal === defaultValue;\n let next: string | number | undefined;\n if (localValue === optVal || isDefaultOption) {\n next = undefined;\n } else {\n next = optVal;\n }\n setLocalValue(next);\n onChange?.(next);\n setOpen(false);\n }\n };\n\n const handleToggleMulti = (optVal: string | number) => {\n const arr = (localValue as (string | number)[]) || [];\n if (arr.includes(optVal) && minSelection != null && arr.length <= minSelection) {\n return;\n }\n const next = arr.includes(optVal) ? arr.filter((v) => v !== optVal) : [...arr, optVal];\n setLocalValue(next);\n };\n\n const isActive = multiple\n ? Array.isArray(displayValue) && displayValue.length > 0\n : displayValue != null && displayValue !== '';\n\n return (\n <FilterPopover\n label={label}\n active={active || isActive}\n open={open}\n onOpenChange={handleOpenChange}\n onConfirm={multiple ? handleConfirm : undefined}\n onReset={multiple ? handleDiscardDraft : undefined}\n >\n {searchable && (\n <Search\n placeholder={`搜索${label}`}\n allowClear\n size=\"middle\"\n className={classNames('filter-select-search', styles['filter-select-search'])}\n value={searchText}\n onChange={(e) => setSearchText(e.target.value)}\n />\n )}\n\n <div className={classNames('filter-select-options', styles['filter-select-options'])}>\n {filteredOptions.map((opt) => (\n <div\n key={String(opt.value)}\n className={classNames('filter-select-option', styles['filter-select-option'],\n !multiple &&\n localValue === opt.value &&\n classNames('filter-select-option-selected', styles['filter-select-option-selected']),\n )}\n onClick={() =>\n multiple ? handleToggleMulti(opt.value) : handleClickOption(opt.value)\n }\n >\n {multiple && (\n <Checkbox\n checked={(localValue as (string | number)[])?.includes(opt.value)}\n onChange={() => handleToggleMulti(opt.value)}\n onClick={(e) => e.stopPropagation()}\n />\n )}\n {isPersonVariant ? (\n <PersonOptionRow option={opt as PersonOption} />\n ) : (\n <span>{opt.label}</span>\n )}\n {!multiple && !isPersonVariant && localValue === opt.value && (\n <Check className={classNames('filter-select-option-check', styles['filter-select-option-check'])} />\n )}\n </div>\n ))}\n {filteredOptions.length === 0 && (\n <div className={classNames('filter-select-empty', styles['filter-select-empty'])}>暂无数据</div>\n )}\n </div>\n\n {multiple && (localValue as (string | number)[])?.length > 0 && (\n <div className={classNames('filter-select-selected-bar', styles['filter-select-selected-bar'])}>\n <div className={classNames('filter-select-selected-label', styles['filter-select-selected-label'])}>已选:</div>\n <Space size={[4, 4]} wrap>\n {(localValue as (string | number)[]).map((v) => {\n const opt = options.find((o) => String(o.value) === String(v));\n const arr = (localValue as (string | number)[]) || [];\n const tagRemovable = minSelection == null || arr.length > minSelection;\n return (\n <span\n key={String(v)}\n className={classNames(\n 'filter-select-selected-tag',\n styles['filter-select-selected-tag'],\n !tagRemovable && styles['filter-select-selected-tag-disabled'],\n )}\n onClick={() => tagRemovable && handleToggleMulti(v)}\n >\n {opt?.label ?? String(v)}\n <X\n className={classNames(\n 'filter-select-selected-remove',\n styles['filter-select-selected-remove'],\n !tagRemovable && styles['filter-select-selected-remove-disabled'],\n )}\n />\n </span>\n );\n })}\n </Space>\n </div>\n )}\n </FilterPopover>\n );\n};\n\nexport default FilterSelect;\nexport type { FilterSelectProps };\n"],"names":["Search","Input","formatPersonValueLabel","opt","parts","matchPersonOptionSearch","keyword","lower","s","arraysEqual","a","b","sortedA","sortedB","v","i","toDisplayValue","value","defaultValue","defaultValues","multiple","arr","formatValueLabel","displayVal","options","isPersonVariant","_a","o","FilterSelect","filterKey","label","onChange","searchable","minSelection","variant","active","hidden","display","open","setOpen","useState","searchText","setSearchText","displayValue","localValue","setLocalValue","registerFn","useFilterRegister","onChangeRef","useRef","handleRemove","useMemo","selectedArr","canRemove","revertToCommitted","useEffect","nextDisplayValue","committedValueLabel","resolveFilterVisible","removable","filteredOptions","handleConfirm","handleDiscardDraft","handleOpenChange","nextOpen","handleClickOption","optVal","isDefaultOption","next","handleToggleMulti","isActive","jsxs","FilterPopover","jsx","classNames","styles","Checkbox","e","PersonOptionRow","Check","Space","tagRemovable","X"],"mappings":"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"}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
const e = {
|
|
2
|
-
"filter-select-search": "_filter-select-
|
|
3
|
-
"filter-select-options": "_filter-select-
|
|
4
|
-
"filter-select-option": "_filter-select-
|
|
5
|
-
"filter-select-option-selected": "_filter-select-option-
|
|
6
|
-
"filter-select-option-check": "_filter-select-option-
|
|
7
|
-
"filter-select-empty": "_filter-select-
|
|
8
|
-
"filter-select-selected-bar": "_filter-select-selected-
|
|
9
|
-
"filter-select-selected-label": "_filter-select-selected-
|
|
10
|
-
"filter-select-selected-tag": "_filter-select-selected-
|
|
11
|
-
"filter-select-selected-
|
|
2
|
+
"filter-select-search": "_filter-select-search_11rsz_1",
|
|
3
|
+
"filter-select-options": "_filter-select-options_11rsz_5",
|
|
4
|
+
"filter-select-option": "_filter-select-option_11rsz_5",
|
|
5
|
+
"filter-select-option-selected": "_filter-select-option-selected_11rsz_23",
|
|
6
|
+
"filter-select-option-check": "_filter-select-option-check_11rsz_28",
|
|
7
|
+
"filter-select-empty": "_filter-select-empty_11rsz_34",
|
|
8
|
+
"filter-select-selected-bar": "_filter-select-selected-bar_11rsz_42",
|
|
9
|
+
"filter-select-selected-label": "_filter-select-selected-label_11rsz_49",
|
|
10
|
+
"filter-select-selected-tag": "_filter-select-selected-tag_11rsz_55",
|
|
11
|
+
"filter-select-selected-tag-disabled": "_filter-select-selected-tag-disabled_11rsz_68",
|
|
12
|
+
"filter-select-selected-remove": "_filter-select-selected-remove_11rsz_73",
|
|
13
|
+
"filter-select-selected-remove-disabled": "_filter-select-selected-remove-disabled_11rsz_77"
|
|
12
14
|
};
|
|
13
15
|
export {
|
|
14
16
|
e as default
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
|
|
@@ -8,8 +8,8 @@ interface FilterTriggerProps extends Omit<BaseFilterProps, 'filterKey'> {
|
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
10
|
* 筛选触发按钮
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* 未选中:灰色文字 + 下箭头
|
|
12
|
+
* 已选:主题色文字 + 浅底 + 上箭头
|
|
13
13
|
*/
|
|
14
14
|
declare const FilterTrigger: React.FC<FilterTriggerProps>;
|
|
15
15
|
export default FilterTrigger;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterTrigger/index.tsx"],"sourcesContent":["import { ChevronDown, ChevronUp } from '@/components/Icons';\nimport classNames from 'classnames';\nimport React from 'react';\nimport type { BaseFilterProps } from '../types';\nimport styles from './style.module.scss';\n\ninterface FilterTriggerProps extends Omit<BaseFilterProps, 'filterKey'> {\n onClick?: (e: React.MouseEvent) => void;\n open?: boolean;\n className?: string;\n children?: React.ReactNode;\n}\n\n/**\n * 筛选触发按钮\n *
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterTrigger/index.tsx"],"sourcesContent":["import { ChevronDown, ChevronUp } from '@/components/Icons';\nimport classNames from 'classnames';\nimport React from 'react';\nimport type { BaseFilterProps } from '../types';\nimport styles from './style.module.scss';\n\ninterface FilterTriggerProps extends Omit<BaseFilterProps, 'filterKey'> {\n onClick?: (e: React.MouseEvent) => void;\n open?: boolean;\n className?: string;\n children?: React.ReactNode;\n}\n\n/**\n * 筛选触发按钮\n * 未选中:灰色文字 + 下箭头\n * 已选:主题色文字 + 浅底 + 上箭头\n */\nconst FilterTrigger: React.FC<FilterTriggerProps> = ({\n label,\n active,\n onClick,\n open,\n className = '',\n children,\n}) => (\n <span\n className={classNames('filter-trigger-root', styles['filter-trigger-root'],\n active\n ? ['filter-trigger-active', styles['filter-trigger-active']]\n : ['filter-trigger-inactive', styles['filter-trigger-inactive']],\n className,\n )}\n onClick={onClick}\n >\n {children ?? label}\n {open !== undefined ? (\n open ? (\n <ChevronUp className={classNames('filter-trigger-chevron', styles['filter-trigger-chevron'])} />\n ) : (\n <ChevronDown className={classNames('filter-trigger-chevron', styles['filter-trigger-chevron'])} />\n )\n ) : !active ? (\n <ChevronDown className={classNames('filter-trigger-chevron', styles['filter-trigger-chevron'])} />\n ) : (\n <ChevronUp className={classNames('filter-trigger-chevron', styles['filter-trigger-chevron'])} />\n )}\n </span>\n);\n\nexport default FilterTrigger;\nexport type { FilterTriggerProps };\n"],"names":["FilterTrigger","label","active","onClick","open","className","children","jsxs","classNames","styles","ChevronUp","jsx","ChevronDown"],"mappings":";;;;AAkBA,MAAMA,IAA8C,CAAC;AAAA,EACnD,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,UAAAC;AACF,MACE,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MAAW;AAAA,MAAuBC,EAAO,qBAAqB;AAAA,MACvEP,IACI,CAAC,yBAAyBO,EAAO,uBAAuB,CAAC,IACzD,CAAC,2BAA2BA,EAAO,yBAAyB,CAAC;AAAA,MACjEJ;AAAA,IAAA;AAAA,IAEF,SAAAF;AAAA,IAEC,UAAA;AAAA,MAAAG,KAAYL;AAAA,MACZG,MAAS,SACRA,sBACGM,GAAA,EAAU,WAAWF,EAAW,0BAA0BC,EAAO,wBAAwB,CAAC,EAAA,CAAG,IAE9F,gBAAAE,EAACC,GAAA,EAAY,WAAWJ,EAAW,0BAA0BC,EAAO,wBAAwB,CAAC,GAAG,IAE/FP,IAGH,gBAAAS,EAACD,KAAU,WAAWF,EAAW,0BAA0BC,EAAO,wBAAwB,CAAC,EAAA,CAAG,IAF9F,gBAAAE,EAACC,GAAA,EAAY,WAAWJ,EAAW,0BAA0BC,EAAO,wBAAwB,CAAC,GAAG;AAAA,IAEF;AAAA,EAAA;AAElG;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
const r = {
|
|
2
|
-
"filter-trigger-root": "_filter-trigger-
|
|
3
|
-
"filter-trigger-active": "_filter-trigger-
|
|
4
|
-
"filter-trigger-inactive": "_filter-trigger-
|
|
5
|
-
"filter-trigger-chevron": "_filter-trigger-
|
|
2
|
+
"filter-trigger-root": "_filter-trigger-root_nbyh1_1",
|
|
3
|
+
"filter-trigger-active": "_filter-trigger-active_nbyh1_12",
|
|
4
|
+
"filter-trigger-inactive": "_filter-trigger-inactive_nbyh1_18",
|
|
5
|
+
"filter-trigger-chevron": "_filter-trigger-chevron_nbyh1_26"
|
|
6
6
|
};
|
|
7
7
|
export {
|
|
8
8
|
r as default
|
|
@@ -17,7 +17,7 @@ export type { FilterPanelProps } from './FilterPanel';
|
|
|
17
17
|
export { FilterPanel };
|
|
18
18
|
export type { FilterPopoverProps } from './FilterPopover';
|
|
19
19
|
export { FilterPopover };
|
|
20
|
-
export type { FilterSelectProps } from './FilterSelect';
|
|
20
|
+
export type { FilterSelectProps, FilterSelectValue } from './FilterSelect';
|
|
21
21
|
export { FilterSelect };
|
|
22
22
|
export type { FilterInputProps } from './FilterInput';
|
|
23
23
|
export { FilterInput };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../../../src/components/Filter/types.ts"],"sourcesContent":["import type { MaybeFn, Visibility } from '@/utils/resolveMaybeFn';\nimport { resolveMaybeFn } from '@/utils/resolveMaybeFn';\n\n/** 筛选选项基础类型 */\nexport interface FilterOption {\n label: string;\n value: string | number;\n}\n\n/** 人员展示选项(仅 UI 字段,数据由消费方提供) */\nexport interface PersonOption extends FilterOption {\n departmentName?: string;\n email?: string;\n phone?: string;\n employeeId?: string;\n}\n\n/** 已选项 */\nexport interface SelectedItem {\n key: string;\n label: string;\n valueLabel: string;\n onRemove: () => void;\n}\n\n/** 所有筛选组件共用的 Props */\nexport interface BaseFilterProps {\n filterKey: string;\n label: string;\n active?: boolean;\n /** 隐藏;支持 boolean 或 (ctx) => boolean */\n hidden?: Visibility;\n /** 展示;与 hidden 二选一,display 优先 */\n display?: Visibility;\n}\n\nexport type FilterVisibilityContext = Record<string, unknown>;\n\n/** 解析 hidden(兼容旧 API,支持 MaybeFn) */\nexport function resolveHidden(\n hidden: MaybeFn<boolean, FilterVisibilityContext> | undefined,\n ctx: FilterVisibilityContext = {},\n): boolean {\n if (hidden === undefined) return false;\n return resolveMaybeFn(hidden, ctx, false);\n}\n\n/** 根据 display / hidden 计算筛选项是否可见 */\nexport function resolveFilterVisible(\n props: Pick<BaseFilterProps, 'display' | 'hidden'>,\n ctx: FilterVisibilityContext = {},\n): boolean {\n if (props.display !== undefined) {\n return resolveMaybeFn(props.display, ctx, true);\n }\n return !resolveHidden(props.hidden, ctx);\n}\n"],"names":["resolveHidden","hidden","ctx","resolveMaybeFn","resolveFilterVisible","props"],"mappings":";
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../src/components/Filter/types.ts"],"sourcesContent":["import type { MaybeFn, Visibility } from '@/utils/resolveMaybeFn';\nimport { resolveMaybeFn } from '@/utils/resolveMaybeFn';\n\n/** 筛选选项基础类型 */\nexport interface FilterOption {\n label: string;\n value: string | number;\n}\n\n/** 人员展示选项(仅 UI 字段,数据由消费方提供) */\nexport interface PersonOption extends FilterOption {\n departmentName?: string;\n email?: string;\n phone?: string;\n employeeId?: string;\n}\n\n/** 已选项 */\nexport interface SelectedItem {\n key: string;\n label: string;\n valueLabel: string;\n onRemove: () => void;\n /** 为 false 时不允许移除(如多选至少保留一项) */\n removable?: boolean;\n}\n\n/** 所有筛选组件共用的 Props */\nexport interface BaseFilterProps {\n filterKey: string;\n label: string;\n active?: boolean;\n /** 隐藏;支持 boolean 或 (ctx) => boolean */\n hidden?: Visibility;\n /** 展示;与 hidden 二选一,display 优先 */\n display?: Visibility;\n}\n\nexport type FilterVisibilityContext = Record<string, unknown>;\n\n/** 解析 hidden(兼容旧 API,支持 MaybeFn) */\nexport function resolveHidden(\n hidden: MaybeFn<boolean, FilterVisibilityContext> | undefined,\n ctx: FilterVisibilityContext = {},\n): boolean {\n if (hidden === undefined) return false;\n return resolveMaybeFn(hidden, ctx, false);\n}\n\n/** 根据 display / hidden 计算筛选项是否可见 */\nexport function resolveFilterVisible(\n props: Pick<BaseFilterProps, 'display' | 'hidden'>,\n ctx: FilterVisibilityContext = {},\n): boolean {\n if (props.display !== undefined) {\n return resolveMaybeFn(props.display, ctx, true);\n }\n return !resolveHidden(props.hidden, ctx);\n}\n"],"names":["resolveHidden","hidden","ctx","resolveMaybeFn","resolveFilterVisible","props"],"mappings":";AAyCO,SAASA,EACdC,GACAC,IAA+B,IACtB;AACT,SAAID,MAAW,SAAkB,KAC1BE,EAAeF,GAAQC,GAAK,EAAK;AAC1C;AAGO,SAASE,EACdC,GACAH,IAA+B,IACtB;AACT,SAAIG,EAAM,YAAY,SACbF,EAAeE,EAAM,SAASH,GAAK,EAAI,IAEzC,CAACF,EAAcK,EAAM,QAAQH,CAAG;AACzC;"}
|
|
@@ -1,35 +1,36 @@
|
|
|
1
1
|
import { jsx as m } from "react/jsx-runtime";
|
|
2
|
-
import { useContext as
|
|
2
|
+
import { useContext as v, useState as f, useCallback as a, useMemo as x, createContext as R } from "react";
|
|
3
3
|
const s = R(null);
|
|
4
|
-
function
|
|
5
|
-
return
|
|
4
|
+
function C() {
|
|
5
|
+
return v(s);
|
|
6
6
|
}
|
|
7
|
-
function
|
|
8
|
-
const [
|
|
9
|
-
n((
|
|
10
|
-
const
|
|
11
|
-
return
|
|
7
|
+
function F() {
|
|
8
|
+
const [o, n] = f({}), u = a((t, e) => {
|
|
9
|
+
n((l) => {
|
|
10
|
+
const r = l[t];
|
|
11
|
+
return r && r.label === e.label && r.valueLabel === e.valueLabel && (r.removable ?? !0) === (e.removable ?? !0) && r.onRemove === e.onRemove ? l : { ...l, [t]: e };
|
|
12
12
|
});
|
|
13
|
-
}, []),
|
|
14
|
-
n((
|
|
15
|
-
if (!(
|
|
16
|
-
const
|
|
17
|
-
return delete
|
|
13
|
+
}, []), i = a((t) => {
|
|
14
|
+
n((e) => {
|
|
15
|
+
if (!(t in e)) return e;
|
|
16
|
+
const l = { ...e };
|
|
17
|
+
return delete l[t], l;
|
|
18
18
|
});
|
|
19
|
-
}, []),
|
|
20
|
-
Object.values(
|
|
21
|
-
}, [
|
|
22
|
-
key:
|
|
23
|
-
label:
|
|
24
|
-
valueLabel:
|
|
25
|
-
onRemove:
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
}, []), c = a(() => {
|
|
20
|
+
Object.values(o).forEach((t) => t.onRemove()), n({});
|
|
21
|
+
}, [o]), b = x(() => Object.entries(o).filter(([, t]) => !!t.valueLabel).map(([t, e]) => ({
|
|
22
|
+
key: t,
|
|
23
|
+
label: e.label,
|
|
24
|
+
valueLabel: e.valueLabel,
|
|
25
|
+
onRemove: e.onRemove,
|
|
26
|
+
removable: e.removable ?? !0
|
|
27
|
+
})), [o]);
|
|
28
|
+
return { registrations: o, selectedItems: b, register: u, unregister: i, clearAll: c };
|
|
28
29
|
}
|
|
29
|
-
const
|
|
30
|
+
const j = ({ children: o, ctx: n }) => /* @__PURE__ */ m(s.Provider, { value: n, children: o });
|
|
30
31
|
export {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
j as FilterProvider,
|
|
33
|
+
C as useFilterRegister,
|
|
34
|
+
F as useFilterState
|
|
34
35
|
};
|
|
35
36
|
//# sourceMappingURL=useFilterState.js.map
|