@hkyhy/marsun-components-core 0.1.2
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 +99 -0
- package/dist/components/AgentHub/AgentHubAccessGuard.js +12 -0
- package/dist/components/AgentHub/AgentHubAccessGuard.js.map +1 -0
- package/dist/components/AgentHub/AgentHubIndexRedirect.js +11 -0
- package/dist/components/AgentHub/AgentHubIndexRedirect.js.map +1 -0
- package/dist/components/AgentHub/ChatSessionAccessGuard.js +11 -0
- package/dist/components/AgentHub/ChatSessionAccessGuard.js.map +1 -0
- package/dist/components/Auth/PermissionGuard.js +18 -0
- package/dist/components/Auth/PermissionGuard.js.map +1 -0
- package/dist/components/Auth/ProtectedRoute.js +21 -0
- package/dist/components/Auth/ProtectedRoute.js.map +1 -0
- package/dist/components/Auth/hasPermission.js +7 -0
- package/dist/components/Auth/hasPermission.js.map +1 -0
- package/dist/components/Descriptions/CommonDescriptions.js +14 -0
- package/dist/components/Descriptions/CommonDescriptions.js.map +1 -0
- package/dist/components/File/FileItem/index.js +82 -0
- package/dist/components/File/FileItem/index.js.map +1 -0
- package/dist/components/File/FileItem/style.module.scss.js +18 -0
- package/dist/components/File/FileItem/style.module.scss.js.map +1 -0
- package/dist/components/File/FileLink/index.js +27 -0
- package/dist/components/File/FileLink/index.js.map +1 -0
- package/dist/components/File/FileLink/style.module.scss.js +10 -0
- package/dist/components/File/FileLink/style.module.scss.js.map +1 -0
- package/dist/components/File/FilePreview/index.js +49 -0
- package/dist/components/File/FilePreview/index.js.map +1 -0
- package/dist/components/File/FilePreview/style.module.scss.js +5 -0
- package/dist/components/File/FilePreview/style.module.scss.js.map +1 -0
- package/dist/components/File/FilePreviewModal/index.js +12 -0
- package/dist/components/File/FilePreviewModal/index.js.map +1 -0
- package/dist/components/File/fileDisplay.js +67 -0
- package/dist/components/File/fileDisplay.js.map +1 -0
- package/dist/components/Filter/CommonFilter/index.js +81 -0
- package/dist/components/Filter/CommonFilter/index.js.map +1 -0
- package/dist/components/Filter/CommonFilter/style.module.scss.js +20 -0
- package/dist/components/Filter/CommonFilter/style.module.scss.js.map +1 -0
- package/dist/components/Filter/FilterDateRange/index.js +97 -0
- package/dist/components/Filter/FilterDateRange/index.js.map +1 -0
- package/dist/components/Filter/FilterDateRange/style.module.scss.js +10 -0
- package/dist/components/Filter/FilterDateRange/style.module.scss.js.map +1 -0
- package/dist/components/Filter/FilterInput/index.js +56 -0
- package/dist/components/Filter/FilterInput/index.js.map +1 -0
- package/dist/components/Filter/FilterNumberRange/index.js +81 -0
- package/dist/components/Filter/FilterNumberRange/index.js.map +1 -0
- package/dist/components/Filter/FilterNumberRange/style.module.scss.js +9 -0
- package/dist/components/Filter/FilterNumberRange/style.module.scss.js.map +1 -0
- package/dist/components/Filter/FilterPanel/index.js +21 -0
- package/dist/components/Filter/FilterPanel/index.js.map +1 -0
- package/dist/components/Filter/FilterPanel/style.module.scss.js +8 -0
- package/dist/components/Filter/FilterPanel/style.module.scss.js.map +1 -0
- package/dist/components/Filter/FilterPopover/index.js +52 -0
- package/dist/components/Filter/FilterPopover/index.js.map +1 -0
- package/dist/components/Filter/FilterSelect/index.js +160 -0
- package/dist/components/Filter/FilterSelect/index.js.map +1 -0
- package/dist/components/Filter/FilterSelect/style.module.scss.js +16 -0
- package/dist/components/Filter/FilterSelect/style.module.scss.js.map +1 -0
- package/dist/components/Filter/FilterTreeSelect/index.js +249 -0
- package/dist/components/Filter/FilterTreeSelect/index.js.map +1 -0
- package/dist/components/Filter/FilterTreeSelect/style.module.scss.js +19 -0
- package/dist/components/Filter/FilterTreeSelect/style.module.scss.js.map +1 -0
- package/dist/components/Filter/FilterTrigger/index.js +31 -0
- package/dist/components/Filter/FilterTrigger/index.js.map +1 -0
- package/dist/components/Filter/FilterTrigger/style.module.scss.js +10 -0
- package/dist/components/Filter/FilterTrigger/style.module.scss.js.map +1 -0
- package/dist/components/Filter/types.js +12 -0
- package/dist/components/Filter/types.js.map +1 -0
- package/dist/components/Filter/useFilterState.js +35 -0
- package/dist/components/Filter/useFilterState.js.map +1 -0
- package/dist/components/Form/FetchSelect.js +37 -0
- package/dist/components/Form/FetchSelect.js.map +1 -0
- package/dist/components/Form/FetchTreeSelect.js +28 -0
- package/dist/components/Form/FetchTreeSelect.js.map +1 -0
- package/dist/components/Form/PersonOptionRow/index.js +37 -0
- package/dist/components/Form/PersonOptionRow/index.js.map +1 -0
- package/dist/components/Form/PersonOptionRow/style.module.scss.js +11 -0
- package/dist/components/Form/PersonOptionRow/style.module.scss.js.map +1 -0
- package/dist/components/Form/StepForm.js +34 -0
- package/dist/components/Form/StepForm.js.map +1 -0
- package/dist/components/Icons/index.js +245 -0
- package/dist/components/Icons/index.js.map +1 -0
- package/dist/components/Layout/PageHeaderLayout/index.js +41 -0
- package/dist/components/Layout/PageHeaderLayout/index.js.map +1 -0
- package/dist/components/Layout/PageHeaderLayout/style.module.scss.js +10 -0
- package/dist/components/Layout/PageHeaderLayout/style.module.scss.js.map +1 -0
- package/dist/components/Modal/StepModal/index.js +64 -0
- package/dist/components/Modal/StepModal/index.js.map +1 -0
- package/dist/components/Modal/StepModal/style.module.scss.js +9 -0
- package/dist/components/Modal/StepModal/style.module.scss.js.map +1 -0
- package/dist/components/Stat/StatCard/index.js +34 -0
- package/dist/components/Stat/StatCard/index.js.map +1 -0
- package/dist/components/Stat/StatCard/style.module.scss.js +7 -0
- package/dist/components/Stat/StatCard/style.module.scss.js.map +1 -0
- package/dist/components/Stat/StatCardList.js +20 -0
- package/dist/components/Stat/StatCardList.js.map +1 -0
- package/dist/components/Stat/StatPendingBreakdown/index.js +38 -0
- package/dist/components/Stat/StatPendingBreakdown/index.js.map +1 -0
- package/dist/components/Stat/StatPendingBreakdown/style.module.scss.js +9 -0
- package/dist/components/Stat/StatPendingBreakdown/style.module.scss.js.map +1 -0
- package/dist/components/Tag/FileTags.js +8 -0
- package/dist/components/Tag/FileTags.js.map +1 -0
- package/dist/components/Tag/SemanticTag.js +92 -0
- package/dist/components/Tag/SemanticTag.js.map +1 -0
- package/dist/components/Tag/Tags/index.js +32 -0
- package/dist/components/Tag/Tags/index.js.map +1 -0
- package/dist/components/Tag/Tags/style.module.scss.js +9 -0
- package/dist/components/Tag/Tags/style.module.scss.js.map +1 -0
- package/dist/components/TooltipInfo/TooltipInfo.js +31 -0
- package/dist/components/TooltipInfo/TooltipInfo.js.map +1 -0
- package/dist/components/Tour/AppTour/index.js +40 -0
- package/dist/components/Tour/AppTour/index.js.map +1 -0
- package/dist/components/Tour/AppTour/style.module.scss.js +7 -0
- package/dist/components/Tour/AppTour/style.module.scss.js.map +1 -0
- package/dist/components/VirtualScrollbar/VirtualScrollbar/index.js +97 -0
- package/dist/components/VirtualScrollbar/VirtualScrollbar/index.js.map +1 -0
- package/dist/components/VirtualScrollbar/VirtualScrollbar/style.module.scss.js +12 -0
- package/dist/components/VirtualScrollbar/VirtualScrollbar/style.module.scss.js.map +1 -0
- package/dist/components/VirtualScrollbar/useVirtualScrollbar.js +97 -0
- package/dist/components/VirtualScrollbar/useVirtualScrollbar.js.map +1 -0
- package/dist/hooks/useFetchData.js +69 -0
- package/dist/hooks/useFetchData.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.js +182 -0
- package/dist/index.js.map +1 -0
- package/dist/marsun-components-core.css +1 -0
- package/dist/provider/MarsunCoreProvider.js +51 -0
- package/dist/provider/MarsunCoreProvider.js.map +1 -0
- package/dist/provider/context.js +27 -0
- package/dist/provider/context.js.map +1 -0
- package/dist/theme/constants.js +15 -0
- package/dist/theme/constants.js.map +1 -0
- package/dist/theme/index.d.ts +2 -0
- package/dist/theme/index.js +9 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme.js +286 -0
- package/dist/theme/theme.js.map +1 -0
- package/dist/utils/format.js +9 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/resolveMaybeFn.js +11 -0
- package/dist/utils/resolveMaybeFn.js.map +1 -0
- package/package.json +83 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { jsxs as h, jsx as d } from "react/jsx-runtime";
|
|
2
|
+
import { Check as H, X as J } from "../../Icons/index.js";
|
|
3
|
+
import { Input as Q, Checkbox as U, Space as W } from "antd";
|
|
4
|
+
import { useState as y, useRef as Y, useMemo as P, useEffect as j } from "react";
|
|
5
|
+
import Z from "../../Form/PersonOptionRow/index.js";
|
|
6
|
+
import _ from "../FilterPopover/index.js";
|
|
7
|
+
import { resolveFilterVisible as A } from "../types.js";
|
|
8
|
+
import { useFilterRegister as C } from "../useFilterState.js";
|
|
9
|
+
import a from "./style.module.scss.js";
|
|
10
|
+
import f from "classnames";
|
|
11
|
+
const { Search: K } = Q;
|
|
12
|
+
function V(t) {
|
|
13
|
+
const i = [t.label];
|
|
14
|
+
return t.departmentName && i.push(t.departmentName), i.join(" · ");
|
|
15
|
+
}
|
|
16
|
+
function ee(t, i) {
|
|
17
|
+
const o = i.toLowerCase();
|
|
18
|
+
return [t.label, t.departmentName, t.email, t.phone, t.employeeId].filter(Boolean).some((m) => String(m).toLowerCase().includes(o));
|
|
19
|
+
}
|
|
20
|
+
function D(t, i, o) {
|
|
21
|
+
if (o) return t ?? [];
|
|
22
|
+
if (!(i !== void 0 && t === i))
|
|
23
|
+
return t;
|
|
24
|
+
}
|
|
25
|
+
const me = ({
|
|
26
|
+
filterKey: t,
|
|
27
|
+
label: i,
|
|
28
|
+
options: o = [],
|
|
29
|
+
value: m,
|
|
30
|
+
onChange: n,
|
|
31
|
+
defaultValue: v,
|
|
32
|
+
searchable: T = !1,
|
|
33
|
+
multiple: s = !1,
|
|
34
|
+
variant: z = "default",
|
|
35
|
+
active: I,
|
|
36
|
+
hidden: w,
|
|
37
|
+
display: L
|
|
38
|
+
}) => {
|
|
39
|
+
const u = z === "person", [M, x] = y(!1), [N, O] = y(""), B = D(m, v, s), [r, b] = y(
|
|
40
|
+
B ?? (s ? [] : void 0)
|
|
41
|
+
), S = C(), p = Y(n);
|
|
42
|
+
p.current = n;
|
|
43
|
+
const R = P(
|
|
44
|
+
() => () => {
|
|
45
|
+
var e;
|
|
46
|
+
(e = p.current) == null || e.call(p, void 0);
|
|
47
|
+
},
|
|
48
|
+
[]
|
|
49
|
+
);
|
|
50
|
+
j(() => {
|
|
51
|
+
const e = D(m, v, s);
|
|
52
|
+
b(e ?? (s ? [] : void 0)), (e == null || Array.isArray(e) && e.length === 0) && O("");
|
|
53
|
+
}, [m, v, s]);
|
|
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);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
g && !s ? S.register(t, {
|
|
73
|
+
label: i,
|
|
74
|
+
valueLabel: g,
|
|
75
|
+
onRemove: R
|
|
76
|
+
}) : S.unregister(t);
|
|
77
|
+
}, [g, t, i, w, L, s, R]), !A({ display: L, hidden: w }, { filterKey: t, label: i, value: m })) return null;
|
|
78
|
+
const F = N ? o.filter(
|
|
79
|
+
(e) => u ? ee(e, N) : e.label.toLowerCase().includes(N.toLowerCase())
|
|
80
|
+
) : o, E = () => {
|
|
81
|
+
n == null || n(r), x(!1);
|
|
82
|
+
}, X = () => {
|
|
83
|
+
b(s ? [] : void 0), O(""), n == null || n(void 0), x(!1);
|
|
84
|
+
}, $ = (e) => {
|
|
85
|
+
if (!s) {
|
|
86
|
+
const c = v !== void 0 && e === v;
|
|
87
|
+
let l;
|
|
88
|
+
r === e || c ? l = void 0 : l = e, b(l), n == null || n(l), x(!1);
|
|
89
|
+
}
|
|
90
|
+
}, q = (e) => {
|
|
91
|
+
const c = r || [], l = c.includes(e) ? c.filter((k) => k !== e) : [...c, e];
|
|
92
|
+
b(l);
|
|
93
|
+
};
|
|
94
|
+
return /* @__PURE__ */ h(
|
|
95
|
+
_,
|
|
96
|
+
{
|
|
97
|
+
label: i,
|
|
98
|
+
active: I || (s ? Array.isArray(r) && r.length > 0 : r != null && r !== ""),
|
|
99
|
+
open: M,
|
|
100
|
+
onOpenChange: x,
|
|
101
|
+
onConfirm: s ? E : void 0,
|
|
102
|
+
onReset: s ? X : void 0,
|
|
103
|
+
children: [
|
|
104
|
+
T && /* @__PURE__ */ d(
|
|
105
|
+
K,
|
|
106
|
+
{
|
|
107
|
+
placeholder: `搜索${i}`,
|
|
108
|
+
allowClear: !0,
|
|
109
|
+
size: "middle",
|
|
110
|
+
className: f("filter-select-search", a["filter-select-search"]),
|
|
111
|
+
value: N,
|
|
112
|
+
onChange: (e) => O(e.target.value)
|
|
113
|
+
}
|
|
114
|
+
),
|
|
115
|
+
/* @__PURE__ */ h("div", { className: f("filter-select-options", a["filter-select-options"]), children: [
|
|
116
|
+
F.map((e) => /* @__PURE__ */ h(
|
|
117
|
+
"div",
|
|
118
|
+
{
|
|
119
|
+
className: f(
|
|
120
|
+
"filter-select-option",
|
|
121
|
+
a["filter-select-option"],
|
|
122
|
+
!s && r === e.value && f("filter-select-option-selected", a["filter-select-option-selected"])
|
|
123
|
+
),
|
|
124
|
+
onClick: () => $(e.value),
|
|
125
|
+
children: [
|
|
126
|
+
s && /* @__PURE__ */ d(U, { checked: r == null ? void 0 : r.includes(e.value) }),
|
|
127
|
+
u ? /* @__PURE__ */ d(Z, { option: e }) : /* @__PURE__ */ d("span", { children: e.label }),
|
|
128
|
+
!s && !u && r === e.value && /* @__PURE__ */ d(H, { className: f("filter-select-option-check", a["filter-select-option-check"]) })
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
String(e.value)
|
|
132
|
+
)),
|
|
133
|
+
F.length === 0 && /* @__PURE__ */ d("div", { className: f("filter-select-empty", a["filter-select-empty"]), children: "暂无数据" })
|
|
134
|
+
] }),
|
|
135
|
+
s && (r == null ? void 0 : r.length) > 0 && /* @__PURE__ */ h("div", { className: f("filter-select-selected-bar", a["filter-select-selected-bar"]), children: [
|
|
136
|
+
/* @__PURE__ */ d("div", { className: f("filter-select-selected-label", a["filter-select-selected-label"]), children: "已选:" }),
|
|
137
|
+
/* @__PURE__ */ d(W, { size: [4, 4], wrap: !0, children: r.map((e) => {
|
|
138
|
+
const c = o.find((l) => l.value === e);
|
|
139
|
+
return /* @__PURE__ */ h(
|
|
140
|
+
"span",
|
|
141
|
+
{
|
|
142
|
+
className: f("filter-select-selected-tag", a["filter-select-selected-tag"]),
|
|
143
|
+
onClick: () => q(e),
|
|
144
|
+
children: [
|
|
145
|
+
(c == null ? void 0 : c.label) ?? String(e),
|
|
146
|
+
/* @__PURE__ */ d(J, { className: f("filter-select-selected-remove", a["filter-select-selected-remove"]) })
|
|
147
|
+
]
|
|
148
|
+
},
|
|
149
|
+
String(e)
|
|
150
|
+
);
|
|
151
|
+
}) })
|
|
152
|
+
] })
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
);
|
|
156
|
+
};
|
|
157
|
+
export {
|
|
158
|
+
me as default
|
|
159
|
+
};
|
|
160
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const e = {
|
|
2
|
+
"filter-select-search": "_filter-select-search_1esgk_1",
|
|
3
|
+
"filter-select-options": "_filter-select-options_1esgk_5",
|
|
4
|
+
"filter-select-option": "_filter-select-option_1esgk_5",
|
|
5
|
+
"filter-select-option-selected": "_filter-select-option-selected_1esgk_23",
|
|
6
|
+
"filter-select-option-check": "_filter-select-option-check_1esgk_28",
|
|
7
|
+
"filter-select-empty": "_filter-select-empty_1esgk_34",
|
|
8
|
+
"filter-select-selected-bar": "_filter-select-selected-bar_1esgk_42",
|
|
9
|
+
"filter-select-selected-label": "_filter-select-selected-label_1esgk_49",
|
|
10
|
+
"filter-select-selected-tag": "_filter-select-selected-tag_1esgk_55",
|
|
11
|
+
"filter-select-selected-remove": "_filter-select-selected-remove_1esgk_68"
|
|
12
|
+
};
|
|
13
|
+
export {
|
|
14
|
+
e as default
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=style.module.scss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { jsxs as F, jsx as m } from "react/jsx-runtime";
|
|
2
|
+
import { ChevronDown as ie, ChevronRight as ne, Check as le, X as oe } from "../../Icons/index.js";
|
|
3
|
+
import { useFetchData as fe } from "../../../hooks/useFetchData.js";
|
|
4
|
+
import { Input as ae, Checkbox as de, Space as he } from "antd";
|
|
5
|
+
import V from "classnames";
|
|
6
|
+
import { useState as R, useEffect as X, useMemo as S, useCallback as j } from "react";
|
|
7
|
+
import pe from "../FilterPopover/index.js";
|
|
8
|
+
import { resolveFilterVisible as Z } from "../types.js";
|
|
9
|
+
import { useFilterRegister as ue } from "../useFilterState.js";
|
|
10
|
+
import u from "./style.module.scss.js";
|
|
11
|
+
import { useMarsunFetch as me } from "../../../provider/context.js";
|
|
12
|
+
const { Search: ge } = ae;
|
|
13
|
+
function _(d, i = 0, g = null) {
|
|
14
|
+
var w;
|
|
15
|
+
const f = [];
|
|
16
|
+
for (const a of d)
|
|
17
|
+
f.push({ id: a.id, name: a.name, depth: i, parentId: g }), (w = a.children) != null && w.length && f.push(..._(a.children, i + 1, a.id));
|
|
18
|
+
return f;
|
|
19
|
+
}
|
|
20
|
+
function xe(d, i) {
|
|
21
|
+
if (!i) return d;
|
|
22
|
+
const g = i.toLowerCase();
|
|
23
|
+
function f(w) {
|
|
24
|
+
var L;
|
|
25
|
+
const a = [];
|
|
26
|
+
for (const n of w) {
|
|
27
|
+
const r = (L = n.children) != null && L.length ? f(n.children) : [];
|
|
28
|
+
(n.name.toLowerCase().includes(g) || r.length > 0) && a.push({ ...n, children: r.length > 0 ? r : void 0 });
|
|
29
|
+
}
|
|
30
|
+
return a;
|
|
31
|
+
}
|
|
32
|
+
return f(d);
|
|
33
|
+
}
|
|
34
|
+
function C(d) {
|
|
35
|
+
var g;
|
|
36
|
+
const i = [];
|
|
37
|
+
for (const f of d)
|
|
38
|
+
(g = f.children) != null && g.length && (i.push(f.id), i.push(...C(f.children)));
|
|
39
|
+
return i;
|
|
40
|
+
}
|
|
41
|
+
function Me(d, i) {
|
|
42
|
+
const g = /* @__PURE__ */ new Map(), f = (w) => {
|
|
43
|
+
for (const a of w)
|
|
44
|
+
g.set(a.id, i(a)), a.children && f(a.children);
|
|
45
|
+
};
|
|
46
|
+
return f(d), g;
|
|
47
|
+
}
|
|
48
|
+
const ze = ({
|
|
49
|
+
filterKey: d,
|
|
50
|
+
label: i,
|
|
51
|
+
treeData: g,
|
|
52
|
+
fetchUrl: f,
|
|
53
|
+
fetchOptions: w,
|
|
54
|
+
transformData: a,
|
|
55
|
+
enabled: L = !0,
|
|
56
|
+
value: n,
|
|
57
|
+
onChange: r,
|
|
58
|
+
showSearch: b = !1,
|
|
59
|
+
multiple: l = !1,
|
|
60
|
+
active: I,
|
|
61
|
+
hidden: D,
|
|
62
|
+
display: P,
|
|
63
|
+
getNodeLabel: $ = (T) => T.name
|
|
64
|
+
}) => {
|
|
65
|
+
const T = me(), { data: K } = fe({
|
|
66
|
+
data: g,
|
|
67
|
+
fetchUrl: f,
|
|
68
|
+
fetchOptions: w,
|
|
69
|
+
transformData: a,
|
|
70
|
+
enabled: L,
|
|
71
|
+
baseUrl: T.baseUrl,
|
|
72
|
+
defaultHeaders: T.headers,
|
|
73
|
+
timeoutMs: T.timeoutMs
|
|
74
|
+
}), x = K ?? [], [ee, y] = R(!1), [h, M] = R(
|
|
75
|
+
n ?? (l ? [] : void 0)
|
|
76
|
+
), [O, q] = R(/* @__PURE__ */ new Set()), [N, U] = R(""), E = ue(), A = { filterKey: d, label: i, value: n };
|
|
77
|
+
X(() => {
|
|
78
|
+
M(n ?? (l ? [] : void 0)), n == null && U("");
|
|
79
|
+
}, [n, l]), X(() => {
|
|
80
|
+
x.length && q(new Set(C(x)));
|
|
81
|
+
}, [x]);
|
|
82
|
+
const z = S(
|
|
83
|
+
() => Me(x, $),
|
|
84
|
+
[x, $]
|
|
85
|
+
), B = S(() => {
|
|
86
|
+
if (!x.length || n == null) return "";
|
|
87
|
+
if (l) {
|
|
88
|
+
const e = n;
|
|
89
|
+
return e.length > 0 ? e.map((t) => z.get(t) ?? t).join("、") : "";
|
|
90
|
+
}
|
|
91
|
+
return z.get(n) ?? "";
|
|
92
|
+
}, [x, n, l, z]);
|
|
93
|
+
X(() => {
|
|
94
|
+
if (E) {
|
|
95
|
+
if (!Z({ display: P, hidden: D }, A)) {
|
|
96
|
+
E.unregister(d);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
B ? E.register(d, {
|
|
100
|
+
label: i,
|
|
101
|
+
valueLabel: B,
|
|
102
|
+
onRemove: () => r == null ? void 0 : r(l ? [] : void 0)
|
|
103
|
+
}) : E.unregister(d);
|
|
104
|
+
}
|
|
105
|
+
}, [B, d, i, P, D, E, r, l, A]);
|
|
106
|
+
const k = S(
|
|
107
|
+
() => b && N ? xe(x, N) : x,
|
|
108
|
+
[b, N, x]
|
|
109
|
+
), G = S(() => _(k), [k]), te = S(() => {
|
|
110
|
+
const e = /* @__PURE__ */ new Map(), t = (o) => {
|
|
111
|
+
var c;
|
|
112
|
+
for (const s of o)
|
|
113
|
+
e.set(s.id, !!((c = s.children) != null && c.length)), s.children && t(s.children);
|
|
114
|
+
};
|
|
115
|
+
return t(k), e;
|
|
116
|
+
}, [k]), H = S(() => {
|
|
117
|
+
const e = /* @__PURE__ */ new Map(), t = (o) => {
|
|
118
|
+
var c;
|
|
119
|
+
for (const s of o)
|
|
120
|
+
if ((c = s.children) != null && c.length) {
|
|
121
|
+
const p = [], v = (W) => {
|
|
122
|
+
var Y;
|
|
123
|
+
p.push(W.id), (Y = W.children) == null || Y.forEach(v);
|
|
124
|
+
};
|
|
125
|
+
s.children.forEach(v), e.set(s.id, p), t(s.children);
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
return t(k), e;
|
|
129
|
+
}, [k]), J = S(() => {
|
|
130
|
+
const e = /* @__PURE__ */ new Map(), t = (o) => {
|
|
131
|
+
var c;
|
|
132
|
+
for (const s of o)
|
|
133
|
+
if ((c = s.children) != null && c.length) {
|
|
134
|
+
for (const p of s.children) e.set(p.id, s.id);
|
|
135
|
+
t(s.children);
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
return t(k), e;
|
|
139
|
+
}, [k]), se = j(
|
|
140
|
+
(e) => {
|
|
141
|
+
const t = h === e ? void 0 : e;
|
|
142
|
+
M(t), r == null || r(t), y(!1);
|
|
143
|
+
},
|
|
144
|
+
[h, r]
|
|
145
|
+
), Q = j(
|
|
146
|
+
(e) => {
|
|
147
|
+
const t = (h || []).slice(), o = H.get(e), c = J.get(e);
|
|
148
|
+
if (o)
|
|
149
|
+
if (t.includes(e)) {
|
|
150
|
+
const p = /* @__PURE__ */ new Set([e, ...o]);
|
|
151
|
+
M(t.filter((v) => !p.has(v)));
|
|
152
|
+
} else
|
|
153
|
+
M([.../* @__PURE__ */ new Set([...t, e, ...o])]);
|
|
154
|
+
else if (t.includes(e)) {
|
|
155
|
+
const s = t.filter((p) => p !== e);
|
|
156
|
+
M(c && s.includes(c) ? s.filter((p) => p !== c) : s);
|
|
157
|
+
} else {
|
|
158
|
+
const s = [...t, e];
|
|
159
|
+
c && (H.get(c) || []).every((v) => s.includes(v)) ? M([.../* @__PURE__ */ new Set([...s, c])]) : M(s);
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
[h, H, J]
|
|
163
|
+
), re = j((e) => {
|
|
164
|
+
q((t) => {
|
|
165
|
+
const o = new Set(t);
|
|
166
|
+
return o.has(e) ? o.delete(e) : o.add(e), o;
|
|
167
|
+
});
|
|
168
|
+
}, []), ce = j(
|
|
169
|
+
(e) => e.parentId === null || b && N ? !0 : O.has(e.parentId),
|
|
170
|
+
[O, b, N]
|
|
171
|
+
);
|
|
172
|
+
return Z({ display: P, hidden: D }, A) ? /* @__PURE__ */ F(
|
|
173
|
+
pe,
|
|
174
|
+
{
|
|
175
|
+
label: i,
|
|
176
|
+
active: I || (l ? (h == null ? void 0 : h.length) > 0 : !!n),
|
|
177
|
+
open: ee,
|
|
178
|
+
onOpenChange: y,
|
|
179
|
+
onConfirm: l ? () => {
|
|
180
|
+
r == null || r(h), y(!1);
|
|
181
|
+
} : void 0,
|
|
182
|
+
onReset: () => {
|
|
183
|
+
const e = l ? [] : void 0;
|
|
184
|
+
M(e), U(""), r == null || r(e), y(!1);
|
|
185
|
+
},
|
|
186
|
+
children: [
|
|
187
|
+
b && /* @__PURE__ */ m(
|
|
188
|
+
ge,
|
|
189
|
+
{
|
|
190
|
+
placeholder: `搜索${i}`,
|
|
191
|
+
allowClear: !0,
|
|
192
|
+
size: "middle",
|
|
193
|
+
className: V("filter-tree-select-search", u["filter-tree-select-search"]),
|
|
194
|
+
value: N,
|
|
195
|
+
onChange: (e) => U(e.target.value)
|
|
196
|
+
}
|
|
197
|
+
),
|
|
198
|
+
/* @__PURE__ */ F("div", { className: V("filter-tree-select-options", u["filter-tree-select-options"]), children: [
|
|
199
|
+
G.map((e) => {
|
|
200
|
+
if (!ce(e)) return null;
|
|
201
|
+
const t = !te.get(e.id), o = O.has(e.id), c = !l && h === e.id, s = l && (h || []).includes(e.id);
|
|
202
|
+
return /* @__PURE__ */ F(
|
|
203
|
+
"div",
|
|
204
|
+
{
|
|
205
|
+
className: V(
|
|
206
|
+
"filter-tree-select-option",
|
|
207
|
+
u["filter-tree-select-option"],
|
|
208
|
+
c && u["filter-tree-select-option-selected"]
|
|
209
|
+
),
|
|
210
|
+
style: { paddingLeft: 8 + e.depth * 20 },
|
|
211
|
+
onClick: () => l ? Q(e.id) : se(e.id),
|
|
212
|
+
children: [
|
|
213
|
+
t ? /* @__PURE__ */ m("span", { className: u["filter-tree-select-expand-placeholder"] }) : /* @__PURE__ */ m(
|
|
214
|
+
"span",
|
|
215
|
+
{
|
|
216
|
+
className: u["filter-tree-select-expand-icon"],
|
|
217
|
+
onClick: (p) => {
|
|
218
|
+
p.stopPropagation(), re(e.id);
|
|
219
|
+
},
|
|
220
|
+
children: o || b && N ? /* @__PURE__ */ m(ie, { style: { fontSize: 10 } }) : /* @__PURE__ */ m(ne, { style: { fontSize: 10 } })
|
|
221
|
+
}
|
|
222
|
+
),
|
|
223
|
+
l && /* @__PURE__ */ m(de, { checked: s }),
|
|
224
|
+
/* @__PURE__ */ m("span", { className: u["filter-tree-select-node-label"], children: e.name }),
|
|
225
|
+
!l && c && /* @__PURE__ */ m(le, { className: u["filter-tree-select-option-check"] })
|
|
226
|
+
]
|
|
227
|
+
},
|
|
228
|
+
e.id
|
|
229
|
+
);
|
|
230
|
+
}),
|
|
231
|
+
G.length === 0 && /* @__PURE__ */ m("div", { className: u["filter-tree-select-empty"], children: "暂无数据" })
|
|
232
|
+
] }),
|
|
233
|
+
l && (h == null ? void 0 : h.length) > 0 && /* @__PURE__ */ F("div", { className: u["filter-tree-select-selected-bar"], children: [
|
|
234
|
+
/* @__PURE__ */ m("div", { className: u["filter-tree-select-selected-label"], children: "已选:" }),
|
|
235
|
+
/* @__PURE__ */ m(he, { size: [4, 4], wrap: !0, children: h.map((e) => /* @__PURE__ */ F("span", { className: u["filter-tree-select-selected-tag"], onClick: (t) => {
|
|
236
|
+
t.stopPropagation(), Q(e);
|
|
237
|
+
}, children: [
|
|
238
|
+
z.get(e) ?? e,
|
|
239
|
+
/* @__PURE__ */ m(oe, { className: u["filter-tree-select-selected-remove"] })
|
|
240
|
+
] }, e)) })
|
|
241
|
+
] })
|
|
242
|
+
]
|
|
243
|
+
}
|
|
244
|
+
) : null;
|
|
245
|
+
};
|
|
246
|
+
export {
|
|
247
|
+
ze as default
|
|
248
|
+
};
|
|
249
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterTreeSelect/index.tsx"],"sourcesContent":["import { Check, ChevronDown, ChevronRight, X } from '@/components/Icons';\nimport { useMarsunFetch } from '@/provider';\nimport { useFetchData } from '@/hooks/useFetchData';\nimport { Checkbox, Input, Space } from 'antd';\nimport classNames from 'classnames';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps } from '../types';\nimport { resolveFilterVisible } from '../types';\nimport { useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\n\nconst { Search } = Input;\n\nexport interface TreeFilterNode {\n id: string;\n name: string;\n children?: TreeFilterNode[];\n}\n\nexport interface FilterTreeSelectProps extends BaseFilterProps {\n treeData?: TreeFilterNode[];\n fetchUrl?: string;\n fetchOptions?: RequestInit;\n transformData?: (raw: unknown) => TreeFilterNode[];\n enabled?: boolean;\n value?: string | string[] | undefined;\n onChange?: (value: string | string[] | undefined) => void;\n showSearch?: boolean;\n multiple?: boolean;\n /** 自定义节点展示标签(默认 name) */\n getNodeLabel?: (node: TreeFilterNode) => string;\n}\n\ninterface FlatNode {\n id: string;\n name: string;\n depth: number;\n parentId: string | null;\n}\n\nfunction flattenTree(nodes: TreeFilterNode[], depth = 0, parentId: string | null = null): FlatNode[] {\n const result: FlatNode[] = [];\n for (const node of nodes) {\n result.push({ id: node.id, name: node.name, depth, parentId });\n if (node.children?.length) {\n result.push(...flattenTree(node.children, depth + 1, node.id));\n }\n }\n return result;\n}\n\nfunction filterByKeyword(nodes: TreeFilterNode[], keyword: string): TreeFilterNode[] {\n if (!keyword) return nodes;\n const lower = keyword.toLowerCase();\n function matchTree(items: TreeFilterNode[]): TreeFilterNode[] {\n const result: TreeFilterNode[] = [];\n for (const item of items) {\n const children = item.children?.length ? matchTree(item.children) : [];\n const selfMatch = item.name.toLowerCase().includes(lower);\n if (selfMatch || children.length > 0) {\n result.push({ ...item, children: children.length > 0 ? children : undefined });\n }\n }\n return result;\n }\n return matchTree(nodes);\n}\n\nfunction collectExpandableIds(nodes: TreeFilterNode[]): string[] {\n const ids: string[] = [];\n for (const node of nodes) {\n if (node.children?.length) {\n ids.push(node.id);\n ids.push(...collectExpandableIds(node.children));\n }\n }\n return ids;\n}\n\nfunction buildLabelMap(nodes: TreeFilterNode[], getLabel: (n: TreeFilterNode) => string): Map<string, string> {\n const map = new Map<string, string>();\n const walk = (items: TreeFilterNode[]) => {\n for (const n of items) {\n map.set(n.id, getLabel(n));\n if (n.children) walk(n.children);\n }\n };\n walk(nodes);\n return map;\n}\n\nconst FilterTreeSelect: React.FC<FilterTreeSelectProps> = ({\n filterKey,\n label,\n treeData: propsTreeData,\n fetchUrl,\n fetchOptions,\n transformData,\n enabled = true,\n value,\n onChange,\n showSearch = false,\n multiple = false,\n active,\n hidden,\n display,\n getNodeLabel = (n) => n.name,\n}) => {\n const fetchCtx = useMarsunFetch();\n const { data: fetchedTree } = useFetchData<TreeFilterNode[]>({\n data: propsTreeData,\n fetchUrl,\n fetchOptions,\n transformData,\n enabled,\n baseUrl: fetchCtx.baseUrl,\n defaultHeaders: fetchCtx.headers,\n timeoutMs: fetchCtx.timeoutMs,\n });\n\n const sourceTree = fetchedTree ?? [];\n\n const [open, setOpen] = useState(false);\n const [localValue, setLocalValue] = useState<string | string[] | undefined>(\n value ?? (multiple ? [] : undefined),\n );\n const [expandedKeys, setExpandedKeys] = useState<Set<string>>(new Set());\n const [searchText, setSearchText] = useState('');\n\n const registerFn = useFilterRegister();\n const visibilityCtx = { filterKey, label, value };\n\n useEffect(() => {\n setLocalValue(value ?? (multiple ? [] : undefined));\n if (value === undefined || value === null) setSearchText('');\n }, [value, multiple]);\n\n useEffect(() => {\n if (sourceTree.length) {\n setExpandedKeys(new Set(collectExpandableIds(sourceTree)));\n }\n }, [sourceTree]);\n\n const labelMap = useMemo(\n () => buildLabelMap(sourceTree, getNodeLabel),\n [sourceTree, getNodeLabel],\n );\n\n const confirmedValueLabel = useMemo(() => {\n if (!sourceTree.length || 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 }, [sourceTree, value, multiple, labelMap]);\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,\n valueLabel: confirmedValueLabel,\n onRemove: () => onChange?.(multiple ? [] : undefined),\n });\n } else {\n registerFn.unregister(filterKey);\n }\n }, [confirmedValueLabel, filterKey, label, display, hidden, registerFn, onChange, multiple, visibilityCtx]);\n\n const filteredTree = useMemo(\n () => (showSearch && searchText ? filterByKeyword(sourceTree, searchText) : sourceTree),\n [showSearch, searchText, sourceTree],\n );\n\n const flatNodes = useMemo(() => flattenTree(filteredTree), [filteredTree]);\n\n const hasChildrenMap = useMemo(() => {\n const map = new Map<string, boolean>();\n const walk = (nodes: TreeFilterNode[]) => {\n for (const n of nodes) {\n map.set(n.id, !!n.children?.length);\n if (n.children) walk(n.children);\n }\n };\n walk(filteredTree);\n return map;\n }, [filteredTree]);\n\n const childrenMap = useMemo(() => {\n const map = new Map<string, string[]>();\n const walk = (nodes: TreeFilterNode[]) => {\n for (const n of nodes) {\n if (n.children?.length) {\n const childIds: string[] = [];\n const collectAll = (node: TreeFilterNode) => {\n childIds.push(node.id);\n node.children?.forEach(collectAll);\n };\n n.children.forEach(collectAll);\n map.set(n.id, childIds);\n walk(n.children);\n }\n }\n };\n walk(filteredTree);\n return map;\n }, [filteredTree]);\n\n const parentMap = useMemo(() => {\n const map = new Map<string, string>();\n const walk = (nodes: TreeFilterNode[]) => {\n for (const n of nodes) {\n if (n.children?.length) {\n for (const child of n.children) map.set(child.id, n.id);\n walk(n.children);\n }\n }\n };\n walk(filteredTree);\n return map;\n }, [filteredTree]);\n\n const handleSingleSelect = useCallback(\n (nodeId: string) => {\n const next = localValue === nodeId ? undefined : nodeId;\n setLocalValue(next);\n onChange?.(next);\n setOpen(false);\n },\n [localValue, onChange],\n );\n\n const handleToggleMulti = useCallback(\n (nodeId: string) => {\n const arr = ((localValue as string[]) || []).slice();\n const childIds = childrenMap.get(nodeId);\n const parentId = parentMap.get(nodeId);\n if (childIds) {\n const isChecked = arr.includes(nodeId);\n if (isChecked) {\n const removeSet = new Set([nodeId, ...childIds]);\n setLocalValue(arr.filter((v) => !removeSet.has(v)));\n } else {\n setLocalValue([...new Set([...arr, nodeId, ...childIds])]);\n }\n } else if (arr.includes(nodeId)) {\n const next = arr.filter((v) => v !== nodeId);\n setLocalValue(parentId && next.includes(parentId) ? next.filter((v) => v !== parentId) : next);\n } else {\n const next = [...arr, nodeId];\n if (parentId) {\n const siblingIds = childrenMap.get(parentId) || [];\n if (siblingIds.every((id) => next.includes(id))) {\n setLocalValue([...new Set([...next, parentId])]);\n } else {\n setLocalValue(next);\n }\n } else {\n setLocalValue(next);\n }\n }\n },\n [localValue, childrenMap, parentMap],\n );\n\n const toggleExpand = useCallback((nodeId: string) => {\n setExpandedKeys((prev) => {\n const next = new Set(prev);\n if (next.has(nodeId)) next.delete(nodeId);\n else next.add(nodeId);\n return next;\n });\n }, []);\n\n const isVisible = useCallback(\n (node: FlatNode) => {\n if (node.parentId === null) return true;\n if (showSearch && searchText) return true;\n return expandedKeys.has(node.parentId);\n },\n [expandedKeys, showSearch, searchText],\n );\n\n if (!resolveFilterVisible({ display, hidden }, visibilityCtx)) return null;\n\n return (\n <FilterPopover\n label={label}\n active={active || (multiple ? (localValue as string[])?.length > 0 : !!value)}\n open={open}\n onOpenChange={setOpen}\n onConfirm={multiple ? () => { onChange?.(localValue); setOpen(false); } : undefined}\n onReset={() => {\n const next = multiple ? [] : undefined;\n setLocalValue(next);\n setSearchText('');\n onChange?.(next);\n setOpen(false);\n }}\n >\n {showSearch && (\n <Search\n placeholder={`搜索${label}`}\n allowClear\n size=\"middle\"\n className={classNames('filter-tree-select-search', styles['filter-tree-select-search'])}\n value={searchText}\n onChange={(e) => setSearchText(e.target.value)}\n />\n )}\n <div className={classNames('filter-tree-select-options', styles['filter-tree-select-options'])}>\n {flatNodes.map((node) => {\n if (!isVisible(node)) return null;\n const isLeaf = !hasChildrenMap.get(node.id);\n const isExpanded = expandedKeys.has(node.id);\n const isSingleSelected = !multiple && localValue === node.id;\n const isMultiChecked = multiple && ((localValue as string[]) || []).includes(node.id);\n return (\n <div\n key={node.id}\n className={classNames(\n 'filter-tree-select-option',\n styles['filter-tree-select-option'],\n isSingleSelected && styles['filter-tree-select-option-selected'],\n )}\n style={{ paddingLeft: 8 + node.depth * 20 }}\n onClick={() => (multiple ? handleToggleMulti(node.id) : handleSingleSelect(node.id))}\n >\n {!isLeaf ? (\n <span\n className={styles['filter-tree-select-expand-icon']}\n onClick={(e) => { e.stopPropagation(); toggleExpand(node.id); }}\n >\n {isExpanded || (showSearch && !!searchText) ? <ChevronDown style={{ fontSize: 10 }} /> : <ChevronRight style={{ fontSize: 10 }} />}\n </span>\n ) : (\n <span className={styles['filter-tree-select-expand-placeholder']} />\n )}\n {multiple && <Checkbox checked={isMultiChecked} />}\n <span className={styles['filter-tree-select-node-label']}>{node.name}</span>\n {!multiple && isSingleSelected && <Check className={styles['filter-tree-select-option-check']} />}\n </div>\n );\n })}\n {flatNodes.length === 0 && <div className={styles['filter-tree-select-empty']}>暂无数据</div>}\n </div>\n {multiple && (localValue as string[])?.length > 0 && (\n <div className={styles['filter-tree-select-selected-bar']}>\n <div className={styles['filter-tree-select-selected-label']}>已选:</div>\n <Space size={[4, 4]} wrap>\n {(localValue as string[]).map((v) => (\n <span key={v} className={styles['filter-tree-select-selected-tag']} onClick={(e) => { e.stopPropagation(); handleToggleMulti(v); }}>\n {labelMap.get(v) ?? v}\n <X className={styles['filter-tree-select-selected-remove']} />\n </span>\n ))}\n </Space>\n </div>\n )}\n </FilterPopover>\n );\n};\n\nexport default FilterTreeSelect;\n"],"names":["Search","Input","flattenTree","nodes","depth","parentId","result","node","_a","filterByKeyword","keyword","lower","matchTree","items","item","children","collectExpandableIds","ids","buildLabelMap","getLabel","map","walk","n","FilterTreeSelect","filterKey","label","propsTreeData","fetchUrl","fetchOptions","transformData","enabled","value","onChange","showSearch","multiple","active","hidden","display","getNodeLabel","fetchCtx","useMarsunFetch","fetchedTree","useFetchData","sourceTree","open","setOpen","useState","localValue","setLocalValue","expandedKeys","setExpandedKeys","searchText","setSearchText","registerFn","useFilterRegister","visibilityCtx","useEffect","labelMap","useMemo","confirmedValueLabel","arr","v","resolveFilterVisible","filteredTree","flatNodes","hasChildrenMap","childrenMap","childIds","collectAll","parentMap","child","handleSingleSelect","useCallback","nodeId","next","handleToggleMulti","removeSet","id","toggleExpand","prev","isVisible","jsxs","FilterPopover","jsx","classNames","styles","isLeaf","isExpanded","isSingleSelected","isMultiChecked","e","ChevronDown","ChevronRight","Checkbox","Check","Space","X"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const e = {
|
|
2
|
+
"filter-tree-select-search": "_filter-tree-select-search_he1ck_1",
|
|
3
|
+
"filter-tree-select-options": "_filter-tree-select-options_he1ck_5",
|
|
4
|
+
"filter-tree-select-option": "_filter-tree-select-option_he1ck_5",
|
|
5
|
+
"filter-tree-select-option-selected": "_filter-tree-select-option-selected_he1ck_23",
|
|
6
|
+
"filter-tree-select-option-check": "_filter-tree-select-option-check_he1ck_28",
|
|
7
|
+
"filter-tree-select-expand-icon": "_filter-tree-select-expand-icon_he1ck_34",
|
|
8
|
+
"filter-tree-select-expand-placeholder": "_filter-tree-select-expand-placeholder_he1ck_44",
|
|
9
|
+
"filter-tree-select-node-label": "_filter-tree-select-node-label_he1ck_50",
|
|
10
|
+
"filter-tree-select-empty": "_filter-tree-select-empty_he1ck_54",
|
|
11
|
+
"filter-tree-select-selected-bar": "_filter-tree-select-selected-bar_he1ck_62",
|
|
12
|
+
"filter-tree-select-selected-label": "_filter-tree-select-selected-label_he1ck_69",
|
|
13
|
+
"filter-tree-select-selected-tag": "_filter-tree-select-selected-tag_he1ck_75",
|
|
14
|
+
"filter-tree-select-selected-remove": "_filter-tree-select-selected-remove_he1ck_88"
|
|
15
|
+
};
|
|
16
|
+
export {
|
|
17
|
+
e as default
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=style.module.scss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsxs as n, jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { ChevronUp as o, ChevronDown as l } from "../../Icons/index.js";
|
|
3
|
+
import e from "classnames";
|
|
4
|
+
import r from "./style.module.scss.js";
|
|
5
|
+
const N = ({
|
|
6
|
+
label: s,
|
|
7
|
+
active: i,
|
|
8
|
+
onClick: c,
|
|
9
|
+
open: g,
|
|
10
|
+
className: f = "",
|
|
11
|
+
children: a
|
|
12
|
+
}) => /* @__PURE__ */ n(
|
|
13
|
+
"span",
|
|
14
|
+
{
|
|
15
|
+
className: e(
|
|
16
|
+
"filter-trigger-root",
|
|
17
|
+
r["filter-trigger-root"],
|
|
18
|
+
i ? ["filter-trigger-active", r["filter-trigger-active"]] : ["filter-trigger-inactive", r["filter-trigger-inactive"]],
|
|
19
|
+
f
|
|
20
|
+
),
|
|
21
|
+
onClick: c,
|
|
22
|
+
children: [
|
|
23
|
+
a ?? s,
|
|
24
|
+
g !== void 0 ? g ? /* @__PURE__ */ t(o, { className: e("filter-trigger-chevron", r["filter-trigger-chevron"]) }) : /* @__PURE__ */ t(l, { className: e("filter-trigger-chevron", r["filter-trigger-chevron"]) }) : i ? /* @__PURE__ */ t(o, { className: e("filter-trigger-chevron", r["filter-trigger-chevron"]) }) : /* @__PURE__ */ t(l, { className: e("filter-trigger-chevron", r["filter-trigger-chevron"]) })
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
export {
|
|
29
|
+
N as default
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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 * 未选中:文字 + 下箭头\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;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const r = {
|
|
2
|
+
"filter-trigger-root": "_filter-trigger-root_115kh_1",
|
|
3
|
+
"filter-trigger-active": "_filter-trigger-active_115kh_12",
|
|
4
|
+
"filter-trigger-inactive": "_filter-trigger-inactive_115kh_17",
|
|
5
|
+
"filter-trigger-chevron": "_filter-trigger-chevron_115kh_25"
|
|
6
|
+
};
|
|
7
|
+
export {
|
|
8
|
+
r as default
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=style.module.scss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { resolveMaybeFn as i } from "../../utils/resolveMaybeFn.js";
|
|
2
|
+
function n(e, r = {}) {
|
|
3
|
+
return e === void 0 ? !1 : i(e, r, !1);
|
|
4
|
+
}
|
|
5
|
+
function t(e, r = {}) {
|
|
6
|
+
return e.display !== void 0 ? i(e.display, r, !0) : !n(e.hidden, r);
|
|
7
|
+
}
|
|
8
|
+
export {
|
|
9
|
+
t as resolveFilterVisible,
|
|
10
|
+
n as resolveHidden
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +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":";AAuCO,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;"}
|