@hkyhy/marsun-components-core 0.1.119 → 0.1.121
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Filter/createKneFilterField.js +55 -53
- package/dist/components/Filter/createKneFilterField.js.map +1 -1
- package/dist/components/Form/SuperSelect.d.ts +1 -0
- package/dist/components/Form/SuperSelect.js +67 -58
- package/dist/components/Form/SuperSelect.js.map +1 -1
- package/dist/components/Form/createPagedSuperSelectApi.d.ts +60 -0
- package/dist/components/Form/createPagedSuperSelectApi.js +46 -0
- package/dist/components/Form/createPagedSuperSelectApi.js.map +1 -0
- package/dist/components/Form/index.d.ts +3 -0
- package/dist/components/Form/superSelectEmpty.d.ts +5 -0
- package/dist/components/Form/superSelectEmpty.js +11 -0
- package/dist/components/Form/superSelectEmpty.js.map +1 -0
- package/dist/components/FormInfo/fields.d.ts +2 -0
- package/dist/components/FormInfo/fields.js.map +1 -1
- package/dist/components/FormInfo/index.d.ts +2 -2
- package/dist/components/ReactFilter/fields/index.js +35 -27
- package/dist/components/ReactFilter/fields/index.js.map +1 -1
- package/dist/components/Tools/ActionTracking/Cancel/CancelExecutionModal.d.ts +20 -0
- package/dist/components/Tools/ActionTracking/Cancel/CancelExecutionModal.js +82 -0
- package/dist/components/Tools/ActionTracking/Cancel/CancelExecutionModal.js.map +1 -0
- package/dist/components/Tools/ActionTracking/Cancel/CancelExecutionModal.module.scss.js +7 -0
- package/dist/components/Tools/ActionTracking/Cancel/CancelExecutionModal.module.scss.js.map +1 -0
- package/dist/components/Tools/ActionTracking/Cancel/index.d.ts +3 -0
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.d.ts +25 -0
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.js +257 -0
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.js.map +1 -0
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.module.scss.js +10 -0
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.module.scss.js.map +1 -0
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionModal.d.ts +47 -0
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionModal.js +148 -0
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionModal.js.map +1 -0
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionModal.module.scss.js +7 -0
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionModal.module.scss.js.map +1 -0
- package/dist/components/Tools/ActionTracking/CreateAction/PersonRoleCascader.d.ts +18 -0
- package/dist/components/Tools/ActionTracking/CreateAction/PersonRoleCascader.js +73 -0
- package/dist/components/Tools/ActionTracking/CreateAction/PersonRoleCascader.js.map +1 -0
- package/dist/components/Tools/ActionTracking/CreateAction/PersonRoleCascader.module.scss.js +5 -0
- package/dist/components/Tools/ActionTracking/CreateAction/PersonRoleCascader.module.scss.js.map +1 -0
- package/dist/components/Tools/ActionTracking/CreateAction/PersonRoleCascaderField.d.ts +19 -0
- package/dist/components/Tools/ActionTracking/CreateAction/PersonRoleCascaderField.js +62 -0
- package/dist/components/Tools/ActionTracking/CreateAction/PersonRoleCascaderField.js.map +1 -0
- package/dist/components/Tools/ActionTracking/CreateAction/PersonRoleCascaderField.module.scss.js +8 -0
- package/dist/components/Tools/ActionTracking/CreateAction/PersonRoleCascaderField.module.scss.js.map +1 -0
- package/dist/components/Tools/ActionTracking/CreateAction/SetFormFields.d.ts +4 -0
- package/dist/components/Tools/ActionTracking/CreateAction/SetFormFields.js +14 -0
- package/dist/components/Tools/ActionTracking/CreateAction/SetFormFields.js.map +1 -0
- package/dist/components/Tools/ActionTracking/CreateAction/index.d.ts +12 -0
- package/dist/components/Tools/ActionTracking/CreateAction/personCascadePath.d.ts +5 -0
- package/dist/components/Tools/ActionTracking/CreateAction/personCascadePath.js +30 -0
- package/dist/components/Tools/ActionTracking/CreateAction/personCascadePath.js.map +1 -0
- package/dist/components/Tools/ActionTracking/CreateAction/submitHelpers.d.ts +8 -0
- package/dist/components/Tools/ActionTracking/CreateAction/submitHelpers.js +35 -0
- package/dist/components/Tools/ActionTracking/CreateAction/submitHelpers.js.map +1 -0
- package/dist/components/Tools/ActionTracking/CreateAction/types.d.ts +108 -0
- package/dist/components/Tools/ActionTracking/Follow/ActionFollowModal.d.ts +27 -0
- package/dist/components/Tools/ActionTracking/Follow/ActionFollowModal.js +107 -0
- package/dist/components/Tools/ActionTracking/Follow/ActionFollowModal.js.map +1 -0
- package/dist/components/Tools/ActionTracking/Follow/ActionFollowModal.module.scss.js +11 -0
- package/dist/components/Tools/ActionTracking/Follow/ActionFollowModal.module.scss.js.map +1 -0
- package/dist/components/Tools/ActionTracking/Follow/index.d.ts +3 -0
- package/dist/components/Tools/ActionTracking/List/ActionFilterBar.d.ts +23 -0
- package/dist/components/Tools/ActionTracking/List/ActionFilterBar.js +31 -0
- package/dist/components/Tools/ActionTracking/List/ActionFilterBar.js.map +1 -0
- package/dist/components/Tools/ActionTracking/List/ActionFilterBar.module.scss.js +8 -0
- package/dist/components/Tools/ActionTracking/List/ActionFilterBar.module.scss.js.map +1 -0
- package/dist/components/Tools/ActionTracking/List/ActionListTable.d.ts +29 -0
- package/dist/components/Tools/ActionTracking/List/ActionListTable.js +76 -0
- package/dist/components/Tools/ActionTracking/List/ActionListTable.js.map +1 -0
- package/dist/components/Tools/ActionTracking/List/ActionListTable.module.scss.js +8 -0
- package/dist/components/Tools/ActionTracking/List/ActionListTable.module.scss.js.map +1 -0
- package/dist/components/Tools/ActionTracking/List/filterDefaults.d.ts +15 -0
- package/dist/components/Tools/ActionTracking/List/filterDefaults.js +27 -0
- package/dist/components/Tools/ActionTracking/List/filterDefaults.js.map +1 -0
- package/dist/components/Tools/ActionTracking/List/index.d.ts +6 -0
- package/dist/components/Tools/ActionTracking/List/listTypes.d.ts +49 -0
- package/dist/components/Tools/ActionTracking/{ActionTrackingShell.d.ts → Shell/ActionTrackingShell.d.ts} +1 -1
- package/dist/components/Tools/ActionTracking/{ActionTrackingShell.js → Shell/ActionTrackingShell.js} +1 -1
- package/dist/components/Tools/ActionTracking/Shell/ActionTrackingShell.js.map +1 -0
- package/dist/components/Tools/ActionTracking/Shell/index.d.ts +3 -0
- package/dist/components/Tools/ActionTracking/index.d.ts +11 -2
- package/dist/components/Tools/ActionTracking/utils/index.d.ts +1 -0
- package/dist/components/Tools/ActionTracking/utils/sanitizeActionHtml.d.ts +2 -0
- package/dist/components/Tools/index.d.ts +2 -0
- package/dist/form-info.d.ts +3 -0
- package/dist/form-info.js +80 -72
- package/dist/form-info.js.map +1 -1
- package/dist/index.js +855 -811
- package/dist/index.js.map +1 -1
- package/dist/marsun-components-core.css +2 -2
- package/dist/styles/global.css +2 -2
- package/package.json +1 -1
- package/dist/components/Tools/ActionTracking/ActionTrackingShell.js.map +0 -1
- /package/dist/components/Tools/ActionTracking/{style.module.scss.js → Shell/style.module.scss.js} +0 -0
- /package/dist/components/Tools/ActionTracking/{style.module.scss.js.map → Shell/style.module.scss.js.map} +0 -0
|
@@ -1,107 +1,109 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { useRef as N, useState as
|
|
1
|
+
import { jsx as M } from "react/jsx-runtime";
|
|
2
|
+
import { useRef as N, useState as B, useEffect as y, useMemo as O } from "react";
|
|
3
3
|
import P from "./FilterPopover/index.js";
|
|
4
4
|
import { resolveFilterVisible as W } from "./types.js";
|
|
5
5
|
import { useFilterFieldBridge as $, useFilterRegister as q } from "./useFilterState.js";
|
|
6
|
-
import { marsunToKne as n, marsunValueLabel as z, kneValueLabel as G, mergeKneLabelMaps as
|
|
7
|
-
import
|
|
8
|
-
import
|
|
6
|
+
import { marsunToKne as n, marsunValueLabel as z, kneValueLabel as G, mergeKneLabelMaps as k, kneToMarsun as H } from "./kneValueAdapter.js";
|
|
7
|
+
import S from "./createKneFilterField.module.scss.js";
|
|
8
|
+
import V from "classnames";
|
|
9
9
|
import { renderSelectListItemContent as J } from "../ReactFilter/renderSelectListItemContent.js";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
import { defaultSuperSelectEmpty as Q } from "../Form/superSelectEmpty.js";
|
|
11
|
+
function er(p, a) {
|
|
12
|
+
const L = ({
|
|
13
|
+
filterKey: m,
|
|
14
|
+
label: D,
|
|
14
15
|
value: r,
|
|
15
16
|
onChange: e,
|
|
16
17
|
single: t = !1,
|
|
17
|
-
panelWidth:
|
|
18
|
-
active:
|
|
19
|
-
hidden:
|
|
18
|
+
panelWidth: T = (a == null ? void 0 : a.panelWidth) ?? 420,
|
|
19
|
+
active: v,
|
|
20
|
+
hidden: w,
|
|
20
21
|
display: A,
|
|
21
|
-
dependsOn:
|
|
22
|
-
clearOnDepsChange:
|
|
23
|
-
renderItemContent:
|
|
24
|
-
...
|
|
22
|
+
dependsOn: E,
|
|
23
|
+
clearOnDepsChange: I = !0,
|
|
24
|
+
renderItemContent: R,
|
|
25
|
+
...f
|
|
25
26
|
}) => {
|
|
26
27
|
const l = N({
|
|
27
28
|
labelMap: {},
|
|
28
29
|
itemMap: {}
|
|
29
|
-
}), [u,
|
|
30
|
+
}), [u, s] = B(
|
|
30
31
|
() => n(r, { single: t, ...l.current })
|
|
31
32
|
), o = N(e);
|
|
32
33
|
o.current = e;
|
|
33
|
-
const { resolvedLabel:
|
|
34
|
-
filterKey:
|
|
34
|
+
const { resolvedLabel: d } = $({
|
|
35
|
+
filterKey: m,
|
|
35
36
|
value: r,
|
|
36
|
-
label:
|
|
37
|
-
dependsOn:
|
|
38
|
-
clearOnDepsChange:
|
|
37
|
+
label: D,
|
|
38
|
+
dependsOn: E,
|
|
39
|
+
clearOnDepsChange: I,
|
|
39
40
|
onDepsClear: () => {
|
|
40
41
|
var i;
|
|
41
42
|
return (i = o.current) == null ? void 0 : i.call(o, void 0);
|
|
42
43
|
}
|
|
43
|
-
}), c = q(),
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
}), c = q(), F = W({ display: A, hidden: w });
|
|
45
|
+
y(() => {
|
|
46
|
+
s(n(r, { single: t, ...l.current }));
|
|
46
47
|
}, [r, t]);
|
|
47
|
-
const
|
|
48
|
+
const b = O(() => {
|
|
48
49
|
const i = z(r, l.current.labelMap);
|
|
49
50
|
return i || G(n(r, { single: t, ...l.current }), t);
|
|
50
51
|
}, [r, t]);
|
|
51
|
-
if (
|
|
52
|
+
if (y(() => {
|
|
52
53
|
if (c) {
|
|
53
|
-
if (!
|
|
54
|
-
c.unregister(
|
|
54
|
+
if (!F) {
|
|
55
|
+
c.unregister(m);
|
|
55
56
|
return;
|
|
56
57
|
}
|
|
57
|
-
|
|
58
|
-
label:
|
|
59
|
-
valueLabel:
|
|
58
|
+
b ? c.register(m, {
|
|
59
|
+
label: d,
|
|
60
|
+
valueLabel: b,
|
|
60
61
|
onRemove: () => e == null ? void 0 : e(void 0)
|
|
61
|
-
}) : c.unregister(
|
|
62
|
+
}) : c.unregister(m);
|
|
62
63
|
}
|
|
63
|
-
}, [
|
|
64
|
-
const
|
|
65
|
-
l.current =
|
|
64
|
+
}, [b, m, d, F]), !F) return null;
|
|
65
|
+
const j = Array.isArray(r) ? r.length > 0 : r != null && r !== "", x = (i) => {
|
|
66
|
+
l.current = k(i, l.current), s(i);
|
|
66
67
|
};
|
|
67
|
-
return /* @__PURE__ */
|
|
68
|
+
return /* @__PURE__ */ M(
|
|
68
69
|
P,
|
|
69
70
|
{
|
|
70
|
-
label:
|
|
71
|
-
active:
|
|
72
|
-
width:
|
|
71
|
+
label: d,
|
|
72
|
+
active: v || j,
|
|
73
|
+
width: T,
|
|
73
74
|
onOpenChange: (i) => {
|
|
74
|
-
i &&
|
|
75
|
+
i && s(n(r, { single: t, ...l.current }));
|
|
75
76
|
},
|
|
76
77
|
onConfirm: () => {
|
|
77
|
-
l.current =
|
|
78
|
+
l.current = k(u, l.current), e == null || e(H(u, t));
|
|
78
79
|
},
|
|
79
80
|
onReset: () => {
|
|
80
|
-
|
|
81
|
+
s(t ? null : []), e == null || e(void 0);
|
|
81
82
|
},
|
|
82
|
-
children: /* @__PURE__ */
|
|
83
|
-
|
|
83
|
+
children: /* @__PURE__ */ M("div", { className: V("kne-filter-field-panel", S["kne-filter-field-panel"]), children: /* @__PURE__ */ M(
|
|
84
|
+
p,
|
|
84
85
|
{
|
|
85
|
-
...
|
|
86
|
-
className:
|
|
86
|
+
...f,
|
|
87
|
+
className: V(
|
|
87
88
|
"kne-filter-field-inner",
|
|
88
|
-
|
|
89
|
-
|
|
89
|
+
S["kne-filter-field-inner"],
|
|
90
|
+
f.className
|
|
90
91
|
),
|
|
91
92
|
single: t,
|
|
92
93
|
allowClear: !1,
|
|
93
94
|
valueType: "all",
|
|
94
95
|
value: u ?? (t ? null : []),
|
|
95
|
-
onChange:
|
|
96
|
-
|
|
96
|
+
onChange: x,
|
|
97
|
+
empty: f.empty ?? Q(),
|
|
98
|
+
renderItemContent: R || J
|
|
97
99
|
}
|
|
98
100
|
) })
|
|
99
101
|
}
|
|
100
102
|
);
|
|
101
103
|
};
|
|
102
|
-
return
|
|
104
|
+
return L.displayName = `KneFilterField(${p.displayName || p.name || "Component"})`, L;
|
|
103
105
|
}
|
|
104
106
|
export {
|
|
105
|
-
|
|
107
|
+
er as createKneFilterField
|
|
106
108
|
};
|
|
107
109
|
//# sourceMappingURL=createKneFilterField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createKneFilterField.js","sources":["../../../src/components/Filter/createKneFilterField.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport FilterPopover from './FilterPopover';\nimport type { BaseFilterProps } from './types';\nimport { resolveFilterVisible } from './types';\nimport { useFilterFieldBridge, useFilterRegister } from './useFilterState';\nimport {\n kneToMarsun,\n kneValueLabel,\n marsunToKne,\n marsunValueLabel,\n mergeKneLabelMaps,\n type KneSelectItem,\n type MarsunSelectValue,\n} from './kneValueAdapter';\nimport styles from './createKneFilterField.module.scss';\nimport classNames from 'classnames';\nimport { renderSelectListItemContent } from '../ReactFilter/renderSelectListItemContent';\n\nexport type KneFilterFieldProps = BaseFilterProps & {\n value?: MarsunSelectValue;\n onChange?: (value: MarsunSelectValue) => void;\n /** 对齐 kne:true 单选 */\n single?: boolean;\n /** 面板宽度 */\n panelWidth?: number;\n /** 透传给 kne 组件的其余 props */\n [key: string]: unknown;\n};\n\ntype KneComponentProps = Record<string, unknown> & {\n value?: KneSelectItem | KneSelectItem[] | null;\n onChange?: (v: KneSelectItem | KneSelectItem[] | null) => void;\n single?: boolean;\n valueType?: string;\n allowClear?: boolean;\n className?: string;\n};\n\n/**\n * 将 kne SuperSelect / plus 选择器包进 CommonFilter:FilterPopover 壳 + Marsun 值适配。\n */\nexport function createKneFilterField(\n KneComponent: React.ComponentType<KneComponentProps>,\n defaults?: { panelWidth?: number },\n) {\n const KneFilterField: React.FC<KneFilterFieldProps> = ({\n filterKey,\n label,\n value,\n onChange,\n single = false,\n panelWidth = defaults?.panelWidth ?? 420,\n active,\n hidden,\n display,\n dependsOn,\n clearOnDepsChange = true,\n renderItemContent,\n ...kneRest\n }) => {\n const mapsRef = useRef({\n labelMap: {} as Record<string, string>,\n itemMap: {} as Record<string, KneSelectItem>,\n });\n const [draft, setDraft] = useState<KneSelectItem | KneSelectItem[] | null>(() =>\n marsunToKne(value, { single, ...mapsRef.current }),\n );\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const { resolvedLabel } = useFilterFieldBridge({\n filterKey,\n value,\n label,\n dependsOn,\n clearOnDepsChange,\n onDepsClear: () => onChangeRef.current?.(undefined),\n });\n\n const registerFn = useFilterRegister();\n const visible = resolveFilterVisible({ display, hidden });\n\n useEffect(() => {\n setDraft(marsunToKne(value, { single, ...mapsRef.current }));\n }, [value, single]);\n\n const valueLabel = useMemo(() => {\n const fromMaps = marsunValueLabel(value, mapsRef.current.labelMap);\n if (fromMaps) return fromMaps;\n return kneValueLabel(marsunToKne(value, { single, ...mapsRef.current }), single);\n }, [value, single]);\n\n useEffect(() => {\n if (!registerFn) return;\n if (!visible) {\n registerFn.unregister(filterKey);\n return;\n }\n if (valueLabel) {\n registerFn.register(filterKey, {\n label: resolvedLabel,\n valueLabel,\n onRemove: () => onChange?.(undefined),\n });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueLabel, filterKey, resolvedLabel, visible]);\n\n if (!visible) return null;\n\n const hasValue = Array.isArray(value) ? value.length > 0 : value != null && value !== '';\n\n const handleDraftChange = (next: KneSelectItem | KneSelectItem[] | null) => {\n mapsRef.current = mergeKneLabelMaps(next, mapsRef.current);\n setDraft(next);\n };\n\n return (\n <FilterPopover\n label={resolvedLabel}\n active={active || hasValue}\n width={panelWidth}\n onOpenChange={(open) => {\n if (open) setDraft(marsunToKne(value, { single, ...mapsRef.current }));\n }}\n onConfirm={() => {\n mapsRef.current = mergeKneLabelMaps(draft, mapsRef.current);\n onChange?.(kneToMarsun(draft, single));\n }}\n onReset={() => {\n setDraft(single ? null : []);\n onChange?.(undefined);\n }}\n >\n <div className={classNames('kne-filter-field-panel', styles['kne-filter-field-panel'])}>\n <KneComponent\n {...(kneRest as KneComponentProps)}\n className={classNames(\n 'kne-filter-field-inner',\n styles['kne-filter-field-inner'],\n kneRest.className as string | undefined,\n )}\n single={single}\n allowClear={false}\n valueType=\"all\"\n value={draft ?? (single ? null : [])}\n onChange={handleDraftChange}\n renderItemContent={\n (renderItemContent as ((ctx: unknown) => React.ReactNode) | undefined) ||\n renderSelectListItemContent\n }\n />\n </div>\n </FilterPopover>\n );\n };\n\n KneFilterField.displayName = `KneFilterField(${KneComponent.displayName || KneComponent.name || 'Component'})`;\n return KneFilterField;\n}\n"],"names":["createKneFilterField","KneComponent","defaults","KneFilterField","filterKey","label","value","onChange","single","panelWidth","active","hidden","display","dependsOn","clearOnDepsChange","renderItemContent","kneRest","mapsRef","useRef","draft","setDraft","useState","marsunToKne","onChangeRef","resolvedLabel","useFilterFieldBridge","_a","registerFn","useFilterRegister","visible","resolveFilterVisible","useEffect","valueLabel","useMemo","fromMaps","marsunValueLabel","kneValueLabel","hasValue","handleDraftChange","next","mergeKneLabelMaps","jsx","FilterPopover","open","kneToMarsun","classNames","styles","renderSelectListItemContent"],"mappings":"
|
|
1
|
+
{"version":3,"file":"createKneFilterField.js","sources":["../../../src/components/Filter/createKneFilterField.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport FilterPopover from './FilterPopover';\nimport type { BaseFilterProps } from './types';\nimport { resolveFilterVisible } from './types';\nimport { useFilterFieldBridge, useFilterRegister } from './useFilterState';\nimport {\n kneToMarsun,\n kneValueLabel,\n marsunToKne,\n marsunValueLabel,\n mergeKneLabelMaps,\n type KneSelectItem,\n type MarsunSelectValue,\n} from './kneValueAdapter';\nimport styles from './createKneFilterField.module.scss';\nimport classNames from 'classnames';\nimport { renderSelectListItemContent } from '../ReactFilter/renderSelectListItemContent';\nimport { defaultSuperSelectEmpty } from '../Form/superSelectEmpty';\n\nexport type KneFilterFieldProps = BaseFilterProps & {\n value?: MarsunSelectValue;\n onChange?: (value: MarsunSelectValue) => void;\n /** 对齐 kne:true 单选 */\n single?: boolean;\n /** 面板宽度 */\n panelWidth?: number;\n /** 透传给 kne 组件的其余 props */\n [key: string]: unknown;\n};\n\ntype KneComponentProps = Record<string, unknown> & {\n value?: KneSelectItem | KneSelectItem[] | null;\n onChange?: (v: KneSelectItem | KneSelectItem[] | null) => void;\n single?: boolean;\n valueType?: string;\n allowClear?: boolean;\n className?: string;\n};\n\n/**\n * 将 kne SuperSelect / plus 选择器包进 CommonFilter:FilterPopover 壳 + Marsun 值适配。\n */\nexport function createKneFilterField(\n KneComponent: React.ComponentType<KneComponentProps>,\n defaults?: { panelWidth?: number },\n) {\n const KneFilterField: React.FC<KneFilterFieldProps> = ({\n filterKey,\n label,\n value,\n onChange,\n single = false,\n panelWidth = defaults?.panelWidth ?? 420,\n active,\n hidden,\n display,\n dependsOn,\n clearOnDepsChange = true,\n renderItemContent,\n ...kneRest\n }) => {\n const mapsRef = useRef({\n labelMap: {} as Record<string, string>,\n itemMap: {} as Record<string, KneSelectItem>,\n });\n const [draft, setDraft] = useState<KneSelectItem | KneSelectItem[] | null>(() =>\n marsunToKne(value, { single, ...mapsRef.current }),\n );\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const { resolvedLabel } = useFilterFieldBridge({\n filterKey,\n value,\n label,\n dependsOn,\n clearOnDepsChange,\n onDepsClear: () => onChangeRef.current?.(undefined),\n });\n\n const registerFn = useFilterRegister();\n const visible = resolveFilterVisible({ display, hidden });\n\n useEffect(() => {\n setDraft(marsunToKne(value, { single, ...mapsRef.current }));\n }, [value, single]);\n\n const valueLabel = useMemo(() => {\n const fromMaps = marsunValueLabel(value, mapsRef.current.labelMap);\n if (fromMaps) return fromMaps;\n return kneValueLabel(marsunToKne(value, { single, ...mapsRef.current }), single);\n }, [value, single]);\n\n useEffect(() => {\n if (!registerFn) return;\n if (!visible) {\n registerFn.unregister(filterKey);\n return;\n }\n if (valueLabel) {\n registerFn.register(filterKey, {\n label: resolvedLabel,\n valueLabel,\n onRemove: () => onChange?.(undefined),\n });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueLabel, filterKey, resolvedLabel, visible]);\n\n if (!visible) return null;\n\n const hasValue = Array.isArray(value) ? value.length > 0 : value != null && value !== '';\n\n const handleDraftChange = (next: KneSelectItem | KneSelectItem[] | null) => {\n mapsRef.current = mergeKneLabelMaps(next, mapsRef.current);\n setDraft(next);\n };\n\n return (\n <FilterPopover\n label={resolvedLabel}\n active={active || hasValue}\n width={panelWidth}\n onOpenChange={(open) => {\n if (open) setDraft(marsunToKne(value, { single, ...mapsRef.current }));\n }}\n onConfirm={() => {\n mapsRef.current = mergeKneLabelMaps(draft, mapsRef.current);\n onChange?.(kneToMarsun(draft, single));\n }}\n onReset={() => {\n setDraft(single ? null : []);\n onChange?.(undefined);\n }}\n >\n <div className={classNames('kne-filter-field-panel', styles['kne-filter-field-panel'])}>\n <KneComponent\n {...(kneRest as KneComponentProps)}\n className={classNames(\n 'kne-filter-field-inner',\n styles['kne-filter-field-inner'],\n kneRest.className as string | undefined,\n )}\n single={single}\n allowClear={false}\n valueType=\"all\"\n value={draft ?? (single ? null : [])}\n onChange={handleDraftChange}\n empty={(kneRest.empty as React.ReactNode | undefined) ?? defaultSuperSelectEmpty()}\n renderItemContent={\n (renderItemContent as ((ctx: unknown) => React.ReactNode) | undefined) ||\n renderSelectListItemContent\n }\n />\n </div>\n </FilterPopover>\n );\n };\n\n KneFilterField.displayName = `KneFilterField(${KneComponent.displayName || KneComponent.name || 'Component'})`;\n return KneFilterField;\n}\n"],"names":["createKneFilterField","KneComponent","defaults","KneFilterField","filterKey","label","value","onChange","single","panelWidth","active","hidden","display","dependsOn","clearOnDepsChange","renderItemContent","kneRest","mapsRef","useRef","draft","setDraft","useState","marsunToKne","onChangeRef","resolvedLabel","useFilterFieldBridge","_a","registerFn","useFilterRegister","visible","resolveFilterVisible","useEffect","valueLabel","useMemo","fromMaps","marsunValueLabel","kneValueLabel","hasValue","handleDraftChange","next","mergeKneLabelMaps","jsx","FilterPopover","open","kneToMarsun","classNames","styles","defaultSuperSelectEmpty","renderSelectListItemContent"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ComponentType, ReactNode } from 'react';
|
|
2
2
|
/** 与 @kne/super-select 默认 `selectedAllValue.value` 对齐 */
|
|
3
3
|
export declare const SUPER_SELECT_ALL_VALUE = "all";
|
|
4
|
+
export { SUPER_SELECT_EMPTY_TEXT, defaultSuperSelectEmpty } from './superSelectEmpty';
|
|
4
5
|
export type SuperSelectOption = {
|
|
5
6
|
value: string | number;
|
|
6
7
|
label: string;
|
|
@@ -1,108 +1,117 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import
|
|
1
|
+
import { jsx as y } from "react/jsx-runtime";
|
|
2
|
+
import U from "@kne/super-select";
|
|
3
3
|
/* empty css */
|
|
4
|
-
import * as
|
|
5
|
-
import
|
|
6
|
-
import { useRef as
|
|
7
|
-
import { withNormalizedLabelTips as
|
|
8
|
-
import { marsunToKne as
|
|
9
|
-
import
|
|
10
|
-
import { renderSelectListItemContent as
|
|
11
|
-
|
|
12
|
-
|
|
4
|
+
import * as x from "@kne/react-form-antd";
|
|
5
|
+
import z from "classnames";
|
|
6
|
+
import { useRef as K, useMemo as g } from "react";
|
|
7
|
+
import { withNormalizedLabelTips as j } from "./normalizeLabelTips.js";
|
|
8
|
+
import { marsunToKne as D, mergeKneLabelMaps as G, kneToMarsun as O } from "../Filter/kneValueAdapter.js";
|
|
9
|
+
import X from "./SuperSelect.module.scss.js";
|
|
10
|
+
import { renderSelectListItemContent as Y } from "../ReactFilter/renderSelectListItemContent.js";
|
|
11
|
+
import { defaultSuperSelectEmpty as $ } from "./superSelectEmpty.js";
|
|
12
|
+
import { SUPER_SELECT_EMPTY_TEXT as ar } from "./superSelectEmpty.js";
|
|
13
|
+
const p = "all";
|
|
14
|
+
function q(r, t = p) {
|
|
13
15
|
return r == null || r === "" ? !1 : Array.isArray(r) ? r.length === 1 && String(r[0]) === String(t) : String(r) === String(t);
|
|
14
16
|
}
|
|
15
|
-
function
|
|
17
|
+
function nr(r, t = p) {
|
|
16
18
|
return r == null || r === "" ? !1 : Array.isArray(r) ? r.length === 1 && String(r[0]) === String(t) : String(r) === String(t);
|
|
17
19
|
}
|
|
18
|
-
const
|
|
20
|
+
const B = ({
|
|
19
21
|
value: r,
|
|
20
22
|
onChange: t,
|
|
21
23
|
disabled: a,
|
|
22
|
-
options:
|
|
24
|
+
options: i = [],
|
|
23
25
|
single: o = !1,
|
|
24
|
-
allowSelectedAll:
|
|
25
|
-
selectedAllValue: n = { value:
|
|
26
|
+
allowSelectedAll: M = !1,
|
|
27
|
+
selectedAllValue: n = { value: p, label: "全选" },
|
|
26
28
|
placeholder: L,
|
|
27
|
-
showSearch:
|
|
28
|
-
allowClear:
|
|
29
|
-
className:
|
|
30
|
-
api:
|
|
29
|
+
showSearch: c = !0,
|
|
30
|
+
allowClear: E = !0,
|
|
31
|
+
className: C,
|
|
32
|
+
api: u,
|
|
31
33
|
getSearchProps: l,
|
|
32
|
-
renderItemContent:
|
|
33
|
-
|
|
34
|
+
renderItemContent: P,
|
|
35
|
+
getPopupContainer: w,
|
|
36
|
+
empty: T,
|
|
37
|
+
...S
|
|
34
38
|
}) => {
|
|
35
|
-
const
|
|
39
|
+
const m = K({
|
|
36
40
|
labelMap: {},
|
|
37
41
|
itemMap: {}
|
|
38
|
-
}),
|
|
42
|
+
}), _ = u != null, k = w ?? (() => typeof document < "u" ? document.body : null), A = T ?? $(), f = g(() => {
|
|
39
43
|
const e = {};
|
|
40
|
-
for (const s of
|
|
44
|
+
for (const s of i)
|
|
41
45
|
e[String(s.value)] = s.label;
|
|
42
46
|
return e[String(n.value)] = n.label, e;
|
|
43
|
-
}, [
|
|
47
|
+
}, [i, n]), N = g(() => {
|
|
44
48
|
const e = {
|
|
45
|
-
labelMap: { ...
|
|
46
|
-
itemMap:
|
|
49
|
+
labelMap: { ...f, ...m.current.labelMap },
|
|
50
|
+
itemMap: m.current.itemMap
|
|
47
51
|
};
|
|
48
|
-
return
|
|
49
|
-
}, [r, o,
|
|
50
|
-
|
|
51
|
-
},
|
|
52
|
+
return q(r, n.value) ? [n] : D(r, { single: o, ...e });
|
|
53
|
+
}, [r, o, f, n]), h = (e) => {
|
|
54
|
+
m.current = G(e, m.current), t == null || t(O(e, o));
|
|
55
|
+
}, I = ({ searchText: e }) => ({
|
|
52
56
|
keyword: e || "",
|
|
53
57
|
currentPage: 1
|
|
54
58
|
});
|
|
55
|
-
return /* @__PURE__ */
|
|
59
|
+
return /* @__PURE__ */ y(
|
|
56
60
|
"div",
|
|
57
61
|
{
|
|
58
|
-
className:
|
|
62
|
+
className: z(
|
|
59
63
|
"marsun-form-super-select",
|
|
60
|
-
|
|
61
|
-
|
|
64
|
+
X["marsun-form-super-select"],
|
|
65
|
+
C
|
|
62
66
|
),
|
|
63
|
-
children: /* @__PURE__ */
|
|
64
|
-
|
|
67
|
+
children: /* @__PURE__ */ y(
|
|
68
|
+
U,
|
|
65
69
|
{
|
|
66
|
-
...
|
|
70
|
+
...S,
|
|
67
71
|
value: N,
|
|
68
72
|
onChange: h,
|
|
69
|
-
renderItemContent:
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
+
renderItemContent: P || Y,
|
|
74
|
+
getPopupContainer: k,
|
|
75
|
+
overlayStyle: { zIndex: 1400, ...S.overlayStyle },
|
|
76
|
+
empty: A,
|
|
77
|
+
..._ ? {
|
|
78
|
+
api: u,
|
|
79
|
+
getSearchProps: c ? l || I : l
|
|
73
80
|
} : {
|
|
74
|
-
options:
|
|
75
|
-
getSearchCallback:
|
|
81
|
+
options: i,
|
|
82
|
+
getSearchCallback: c ? ({ searchText: e }, s) => {
|
|
76
83
|
if (!e) return !0;
|
|
77
|
-
const
|
|
78
|
-
return
|
|
84
|
+
const d = e.toLowerCase(), R = String(s.label ?? "").toLowerCase(), F = String(s.value ?? "").toLowerCase();
|
|
85
|
+
return R.includes(d) || F.includes(d);
|
|
79
86
|
} : void 0
|
|
80
87
|
},
|
|
81
88
|
single: o,
|
|
82
|
-
allowSelectedAll: !o &&
|
|
89
|
+
allowSelectedAll: !o && M,
|
|
83
90
|
selectedAllValue: n,
|
|
84
91
|
placeholder: L,
|
|
85
92
|
isPopup: !0,
|
|
86
|
-
allowClear:
|
|
93
|
+
allowClear: E && !a,
|
|
87
94
|
disabled: a
|
|
88
95
|
}
|
|
89
96
|
)
|
|
90
97
|
}
|
|
91
98
|
);
|
|
92
|
-
},
|
|
93
|
-
const { useDecorator: t } =
|
|
99
|
+
}, b = (r) => {
|
|
100
|
+
const { useDecorator: t } = x.hooks;
|
|
94
101
|
return t({
|
|
95
102
|
fieldName: "superSelect",
|
|
96
103
|
...r
|
|
97
|
-
})(
|
|
104
|
+
})(B);
|
|
98
105
|
};
|
|
99
|
-
|
|
100
|
-
const
|
|
101
|
-
|
|
106
|
+
b.displayName = "SuperSelect";
|
|
107
|
+
const or = j(
|
|
108
|
+
b
|
|
102
109
|
);
|
|
103
110
|
export {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
111
|
+
p as SUPER_SELECT_ALL_VALUE,
|
|
112
|
+
ar as SUPER_SELECT_EMPTY_TEXT,
|
|
113
|
+
or as SuperSelect,
|
|
114
|
+
$ as defaultSuperSelectEmpty,
|
|
115
|
+
nr as isSuperSelectAllValue
|
|
107
116
|
};
|
|
108
117
|
//# sourceMappingURL=SuperSelect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SuperSelect.js","sources":["../../../src/components/Form/SuperSelect.tsx"],"sourcesContent":["/**\n * FormInfo · SuperSelect 字段(对位 kne-union SuperSelectField 精简版)。\n * 经 `hooks.useDecorator` 接入;多选可开 `allowSelectedAll`(值 sentinel 默认 `'all'`)。\n * 对外 form 值为 Marsun 标量/数组(string | string[]),面板内适配 kne `{ label, value }`。\n */\n// @ts-nocheck — @kne/super-select 无完整 TS 类型\nimport KneSuperSelect from '@kne/super-select';\nimport '@kne/super-select/dist/index.css';\nimport * as ReactFormAntd from '@kne/react-form-antd';\nimport classNames from 'classnames';\nimport type { ComponentType, FC, ReactNode } from 'react';\nimport { useMemo, useRef } from 'react';\nimport { withNormalizedLabelTips } from './normalizeLabelTips';\nimport {\n kneToMarsun,\n marsunToKne,\n mergeKneLabelMaps,\n type KneSelectItem,\n type MarsunSelectValue,\n} from '@/components/Filter/kneValueAdapter';\nimport styles from './SuperSelect.module.scss';\nimport { renderSelectListItemContent } from '@/components/ReactFilter/renderSelectListItemContent';\n\n/** 与 @kne/super-select 默认 `selectedAllValue.value` 对齐 */\nexport const SUPER_SELECT_ALL_VALUE = 'all';\n\nexport type SuperSelectOption = {\n value: string | number;\n label: string;\n disabled?: boolean;\n [key: string]: unknown;\n};\n\nexport type SuperSelectProps = {\n name: string;\n label?: ReactNode;\n labelTips?: ReactNode | ((props: SuperSelectProps) => ReactNode);\n rule?: string;\n disabled?: boolean;\n placeholder?: string;\n options?: SuperSelectOption[];\n /** true = 单选;默认多选 */\n single?: boolean;\n /** 多选时显示全选(form 值变为 `[selectedAllValue.value]`,默认 `'all'`) */\n allowSelectedAll?: boolean;\n /** 覆盖默认 `{ value: 'all', label: '全选' }` */\n selectedAllValue?: { value: string | number; label: string };\n showSearch?: boolean;\n allowClear?: boolean;\n className?: string;\n /** 透传 kne SuperSelect */\n [key: string]: unknown;\n};\n\ntype FieldRenderProps = {\n value?: MarsunSelectValue;\n onChange?: (v: MarsunSelectValue) => void;\n disabled?: boolean;\n id?: string;\n};\n\ntype KneHooks = {\n useDecorator: (\n opts: Record<string, unknown>,\n ) => (Comp: ComponentType<FieldRenderProps>) => ReactNode;\n};\n\nfunction isSelectAllMarsun(\n value: MarsunSelectValue,\n allValue: string | number = SUPER_SELECT_ALL_VALUE,\n): boolean {\n if (value == null || value === '') return false;\n if (Array.isArray(value)) {\n return value.length === 1 && String(value[0]) === String(allValue);\n }\n return String(value) === String(allValue);\n}\n\n/** 业务写路径:是否为全选 sentinel */\nexport function isSuperSelectAllValue(\n value: unknown,\n allValue: string | number = SUPER_SELECT_ALL_VALUE,\n): boolean {\n if (value == null || value === '') return false;\n if (Array.isArray(value)) {\n return value.length === 1 && String(value[0]) === String(allValue);\n }\n return String(value) === String(allValue);\n}\n\nconst SuperSelectField: FC<\n FieldRenderProps & {\n options?: SuperSelectOption[];\n single?: boolean;\n allowSelectedAll?: boolean;\n selectedAllValue?: { value: string | number; label: string };\n placeholder?: string;\n showSearch?: boolean;\n allowClear?: boolean;\n className?: string;\n /** 有 api 时走远程/分页加载,不再传 options(否则 kne 会忽略 api) */\n api?: unknown;\n getSearchProps?: (searchProps: { searchText?: string }) => Record<string, unknown>;\n [key: string]: unknown;\n }\n> = ({\n value,\n onChange,\n disabled,\n options = [],\n single = false,\n allowSelectedAll = false,\n selectedAllValue = { value: SUPER_SELECT_ALL_VALUE, label: '全选' },\n placeholder,\n showSearch = true,\n allowClear = true,\n className,\n api,\n getSearchProps: getSearchPropsProp,\n renderItemContent,\n ...kneRest\n}) => {\n const mapsRef = useRef({\n labelMap: {} as Record<string, string>,\n itemMap: {} as Record<string, KneSelectItem>,\n });\n const useApi = api != null;\n\n const labelMapFromOptions = useMemo(() => {\n const map: Record<string, string> = {};\n for (const o of options) {\n map[String(o.value)] = o.label;\n }\n map[String(selectedAllValue.value)] = selectedAllValue.label;\n return map;\n }, [options, selectedAllValue]);\n\n const kneValue = useMemo(() => {\n const maps = {\n labelMap: { ...labelMapFromOptions, ...mapsRef.current.labelMap },\n itemMap: mapsRef.current.itemMap,\n };\n if (isSelectAllMarsun(value, selectedAllValue.value)) {\n return [selectedAllValue as KneSelectItem];\n }\n return marsunToKne(value, { single, ...maps });\n }, [value, single, labelMapFromOptions, selectedAllValue]);\n\n const handleChange = (next: KneSelectItem | KneSelectItem[] | null) => {\n mapsRef.current = mergeKneLabelMaps(next, mapsRef.current);\n onChange?.(kneToMarsun(next, single));\n };\n\n const defaultGetSearchProps = ({ searchText }: { searchText?: string }) => ({\n keyword: searchText || '',\n currentPage: 1,\n });\n\n return (\n <div\n className={classNames(\n 'marsun-form-super-select',\n styles['marsun-form-super-select'],\n className,\n )}\n >\n <KneSuperSelect\n {...kneRest}\n value={kneValue}\n onChange={handleChange}\n renderItemContent={renderItemContent || renderSelectListItemContent}\n {...(useApi\n ? {\n api,\n getSearchProps: showSearch\n ? getSearchPropsProp || defaultGetSearchProps\n : getSearchPropsProp,\n }\n : {\n options,\n getSearchCallback: showSearch\n ? ({ searchText }: { searchText?: string }, item: KneSelectItem) => {\n if (!searchText) return true;\n const kw = searchText.toLowerCase();\n const label = String(item.label ?? '').toLowerCase();\n const val = String(item.value ?? '').toLowerCase();\n return label.includes(kw) || val.includes(kw);\n }\n : undefined,\n })}\n single={single}\n allowSelectedAll={!single && allowSelectedAll}\n selectedAllValue={selectedAllValue}\n placeholder={placeholder}\n isPopup\n allowClear={allowClear && !disabled}\n disabled={disabled}\n />\n </div>\n );\n};\n\nconst SuperSelectInner: FC<SuperSelectProps> = (props) => {\n const { useDecorator } = (ReactFormAntd as unknown as { hooks: KneHooks }).hooks;\n const render = useDecorator({\n fieldName: 'superSelect',\n ...props,\n });\n return render(SuperSelectField);\n};\n\nSuperSelectInner.displayName = 'SuperSelect';\n\nexport const SuperSelect = withNormalizedLabelTips(\n SuperSelectInner as ComponentType<SuperSelectProps>,\n) as ComponentType<SuperSelectProps>;\n\nexport default SuperSelect;\n"],"names":["SUPER_SELECT_ALL_VALUE","isSelectAllMarsun","value","allValue","isSuperSelectAllValue","SuperSelectField","onChange","disabled","options","single","allowSelectedAll","selectedAllValue","placeholder","showSearch","allowClear","className","api","getSearchPropsProp","renderItemContent","kneRest","mapsRef","useRef","useApi","labelMapFromOptions","useMemo","map","o","kneValue","maps","marsunToKne","handleChange","next","mergeKneLabelMaps","kneToMarsun","defaultGetSearchProps","searchText","jsx","classNames","styles","KneSuperSelect","renderSelectListItemContent","item","kw","label","val","SuperSelectInner","props","useDecorator","ReactFormAntd","SuperSelect","withNormalizedLabelTips"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SuperSelect.js","sources":["../../../src/components/Form/SuperSelect.tsx"],"sourcesContent":["/**\n * FormInfo · SuperSelect 字段(对位 kne-union SuperSelectField 精简版)。\n * 经 `hooks.useDecorator` 接入;多选可开 `allowSelectedAll`(值 sentinel 默认 `'all'`)。\n * 对外 form 值为 Marsun 标量/数组(string | string[]),面板内适配 kne `{ label, value }`。\n */\n// @ts-nocheck — @kne/super-select 无完整 TS 类型\nimport KneSuperSelect from '@kne/super-select';\nimport '@kne/super-select/dist/index.css';\nimport * as ReactFormAntd from '@kne/react-form-antd';\nimport classNames from 'classnames';\nimport type { ComponentType, FC, ReactNode } from 'react';\nimport { useMemo, useRef } from 'react';\nimport { withNormalizedLabelTips } from './normalizeLabelTips';\nimport {\n kneToMarsun,\n marsunToKne,\n mergeKneLabelMaps,\n type KneSelectItem,\n type MarsunSelectValue,\n} from '@/components/Filter/kneValueAdapter';\nimport styles from './SuperSelect.module.scss';\nimport { renderSelectListItemContent } from '@/components/ReactFilter/renderSelectListItemContent';\nimport { defaultSuperSelectEmpty } from './superSelectEmpty';\n\n/** 与 @kne/super-select 默认 `selectedAllValue.value` 对齐 */\nexport const SUPER_SELECT_ALL_VALUE = 'all';\nexport { SUPER_SELECT_EMPTY_TEXT, defaultSuperSelectEmpty } from './superSelectEmpty';\n\nexport type SuperSelectOption = {\n value: string | number;\n label: string;\n disabled?: boolean;\n [key: string]: unknown;\n};\n\nexport type SuperSelectProps = {\n name: string;\n label?: ReactNode;\n labelTips?: ReactNode | ((props: SuperSelectProps) => ReactNode);\n rule?: string;\n disabled?: boolean;\n placeholder?: string;\n options?: SuperSelectOption[];\n /** true = 单选;默认多选 */\n single?: boolean;\n /** 多选时显示全选(form 值变为 `[selectedAllValue.value]`,默认 `'all'`) */\n allowSelectedAll?: boolean;\n /** 覆盖默认 `{ value: 'all', label: '全选' }` */\n selectedAllValue?: { value: string | number; label: string };\n showSearch?: boolean;\n allowClear?: boolean;\n className?: string;\n /** 透传 kne SuperSelect */\n [key: string]: unknown;\n};\n\ntype FieldRenderProps = {\n value?: MarsunSelectValue;\n onChange?: (v: MarsunSelectValue) => void;\n disabled?: boolean;\n id?: string;\n};\n\ntype KneHooks = {\n useDecorator: (\n opts: Record<string, unknown>,\n ) => (Comp: ComponentType<FieldRenderProps>) => ReactNode;\n};\n\nfunction isSelectAllMarsun(\n value: MarsunSelectValue,\n allValue: string | number = SUPER_SELECT_ALL_VALUE,\n): boolean {\n if (value == null || value === '') return false;\n if (Array.isArray(value)) {\n return value.length === 1 && String(value[0]) === String(allValue);\n }\n return String(value) === String(allValue);\n}\n\n/** 业务写路径:是否为全选 sentinel */\nexport function isSuperSelectAllValue(\n value: unknown,\n allValue: string | number = SUPER_SELECT_ALL_VALUE,\n): boolean {\n if (value == null || value === '') return false;\n if (Array.isArray(value)) {\n return value.length === 1 && String(value[0]) === String(allValue);\n }\n return String(value) === String(allValue);\n}\n\nconst SuperSelectField: FC<\n FieldRenderProps & {\n options?: SuperSelectOption[];\n single?: boolean;\n allowSelectedAll?: boolean;\n selectedAllValue?: { value: string | number; label: string };\n placeholder?: string;\n showSearch?: boolean;\n allowClear?: boolean;\n className?: string;\n /** 有 api 时走远程/分页加载,不再传 options(否则 kne 会忽略 api) */\n api?: unknown;\n getSearchProps?: (searchProps: { searchText?: string }) => Record<string, unknown>;\n [key: string]: unknown;\n }\n> = ({\n value,\n onChange,\n disabled,\n options = [],\n single = false,\n allowSelectedAll = false,\n selectedAllValue = { value: SUPER_SELECT_ALL_VALUE, label: '全选' },\n placeholder,\n showSearch = true,\n allowClear = true,\n className,\n api,\n getSearchProps: getSearchPropsProp,\n renderItemContent,\n getPopupContainer: getPopupContainerProp,\n empty: emptyProp,\n ...kneRest\n}) => {\n const mapsRef = useRef({\n labelMap: {} as Record<string, string>,\n itemMap: {} as Record<string, KneSelectItem>,\n });\n const useApi = api != null;\n /** Modal 内 kne boundary 会把列表 Empty 挂进弹层底栏;默认挂 body(可覆盖) */\n const getPopupContainer =\n getPopupContainerProp ??\n (() => (typeof document !== 'undefined' ? document.body : (null as unknown as HTMLElement)));\n const empty = emptyProp ?? defaultSuperSelectEmpty();\n\n const labelMapFromOptions = useMemo(() => {\n const map: Record<string, string> = {};\n for (const o of options) {\n map[String(o.value)] = o.label;\n }\n map[String(selectedAllValue.value)] = selectedAllValue.label;\n return map;\n }, [options, selectedAllValue]);\n\n const kneValue = useMemo(() => {\n const maps = {\n labelMap: { ...labelMapFromOptions, ...mapsRef.current.labelMap },\n itemMap: mapsRef.current.itemMap,\n };\n if (isSelectAllMarsun(value, selectedAllValue.value)) {\n return [selectedAllValue as KneSelectItem];\n }\n return marsunToKne(value, { single, ...maps });\n }, [value, single, labelMapFromOptions, selectedAllValue]);\n\n const handleChange = (next: KneSelectItem | KneSelectItem[] | null) => {\n mapsRef.current = mergeKneLabelMaps(next, mapsRef.current);\n onChange?.(kneToMarsun(next, single));\n };\n\n const defaultGetSearchProps = ({ searchText }: { searchText?: string }) => ({\n keyword: searchText || '',\n currentPage: 1,\n });\n\n return (\n <div\n className={classNames(\n 'marsun-form-super-select',\n styles['marsun-form-super-select'],\n className,\n )}\n >\n <KneSuperSelect\n {...kneRest}\n value={kneValue}\n onChange={handleChange}\n renderItemContent={renderItemContent || renderSelectListItemContent}\n getPopupContainer={getPopupContainer}\n overlayStyle={{ zIndex: 1400, ...(kneRest.overlayStyle as object | undefined) }}\n empty={empty}\n {...(useApi\n ? {\n api,\n getSearchProps: showSearch\n ? getSearchPropsProp || defaultGetSearchProps\n : getSearchPropsProp,\n }\n : {\n options,\n getSearchCallback: showSearch\n ? ({ searchText }: { searchText?: string }, item: KneSelectItem) => {\n if (!searchText) return true;\n const kw = searchText.toLowerCase();\n const label = String(item.label ?? '').toLowerCase();\n const val = String(item.value ?? '').toLowerCase();\n return label.includes(kw) || val.includes(kw);\n }\n : undefined,\n })}\n single={single}\n allowSelectedAll={!single && allowSelectedAll}\n selectedAllValue={selectedAllValue}\n placeholder={placeholder}\n isPopup\n allowClear={allowClear && !disabled}\n disabled={disabled}\n />\n </div>\n );\n};\n\nconst SuperSelectInner: FC<SuperSelectProps> = (props) => {\n const { useDecorator } = (ReactFormAntd as unknown as { hooks: KneHooks }).hooks;\n const render = useDecorator({\n fieldName: 'superSelect',\n ...props,\n });\n return render(SuperSelectField);\n};\n\nSuperSelectInner.displayName = 'SuperSelect';\n\nexport const SuperSelect = withNormalizedLabelTips(\n SuperSelectInner as ComponentType<SuperSelectProps>,\n) as ComponentType<SuperSelectProps>;\n\nexport default SuperSelect;\n"],"names":["SUPER_SELECT_ALL_VALUE","isSelectAllMarsun","value","allValue","isSuperSelectAllValue","SuperSelectField","onChange","disabled","options","single","allowSelectedAll","selectedAllValue","placeholder","showSearch","allowClear","className","api","getSearchPropsProp","renderItemContent","getPopupContainerProp","emptyProp","kneRest","mapsRef","useRef","useApi","getPopupContainer","empty","defaultSuperSelectEmpty","labelMapFromOptions","useMemo","map","o","kneValue","maps","marsunToKne","handleChange","next","mergeKneLabelMaps","kneToMarsun","defaultGetSearchProps","searchText","jsx","classNames","styles","KneSuperSelect","renderSelectListItemContent","item","kw","label","val","SuperSelectInner","props","useDecorator","ReactFormAntd","SuperSelect","withNormalizedLabelTips"],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kne SuperSelect 远程分页下拉(对齐 EAM CycleForm / materialFilterRemoteSelect)。
|
|
3
|
+
* App 注入 loadPage;core 禁直连业务 API。
|
|
4
|
+
*/
|
|
5
|
+
export declare const PAGED_SUPER_SELECT_PAGE_SIZE = 50;
|
|
6
|
+
export type PagedSuperSelectOption = {
|
|
7
|
+
label: string;
|
|
8
|
+
value: string;
|
|
9
|
+
};
|
|
10
|
+
export type PagedSuperSelectQuery = {
|
|
11
|
+
keyword?: string;
|
|
12
|
+
currentPage: number;
|
|
13
|
+
pageSize: number;
|
|
14
|
+
};
|
|
15
|
+
export type PagedSuperSelectPage = {
|
|
16
|
+
pageData: PagedSuperSelectOption[];
|
|
17
|
+
totalCount: number;
|
|
18
|
+
};
|
|
19
|
+
export type CreatePagedSuperSelectApiOptions = {
|
|
20
|
+
pageSize?: number;
|
|
21
|
+
loadPage: (query: PagedSuperSelectQuery) => Promise<PagedSuperSelectPage>;
|
|
22
|
+
/** 失败时回调(如 message.error);未传则静默空页 */
|
|
23
|
+
onError?: (error: unknown) => void;
|
|
24
|
+
};
|
|
25
|
+
type KneLoaderData = {
|
|
26
|
+
currentPage?: number;
|
|
27
|
+
perPage?: number;
|
|
28
|
+
keyword?: string;
|
|
29
|
+
};
|
|
30
|
+
/** kne SuperSelect.api:data + loader → { pageData, totalCount } */
|
|
31
|
+
export declare function createPagedSuperSelectApi(options: CreatePagedSuperSelectApiOptions): {
|
|
32
|
+
data: {
|
|
33
|
+
currentPage: number;
|
|
34
|
+
perPage: number;
|
|
35
|
+
keyword: string;
|
|
36
|
+
};
|
|
37
|
+
loader: ({ data }: {
|
|
38
|
+
data?: KneLoaderData;
|
|
39
|
+
}) => Promise<PagedSuperSelectPage>;
|
|
40
|
+
};
|
|
41
|
+
/** kne SuperSelect.getSearchProps:搜索重置到第 1 页 */
|
|
42
|
+
export declare function pagedSuperSelectGetSearchProps(pageSize?: number): (args: {
|
|
43
|
+
searchText?: string;
|
|
44
|
+
}) => {
|
|
45
|
+
keyword: string;
|
|
46
|
+
currentPage: number;
|
|
47
|
+
perPage: number;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* kne FetchScrollLoader:`open:false` = 滚动加载(非翻页器)。
|
|
51
|
+
* 与 EAM machineFilterPagination / energyMaterialFilterPagination 同口径。
|
|
52
|
+
*/
|
|
53
|
+
export declare function pagedSuperSelectPagination(pageSize?: number): {
|
|
54
|
+
open: false;
|
|
55
|
+
paramsType: 'data';
|
|
56
|
+
current: 'currentPage';
|
|
57
|
+
pageSizeName: 'perPage';
|
|
58
|
+
pageSize: number;
|
|
59
|
+
};
|
|
60
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
const c = 50;
|
|
2
|
+
function g(e) {
|
|
3
|
+
const E = e.pageSize ?? 50;
|
|
4
|
+
return {
|
|
5
|
+
data: {
|
|
6
|
+
currentPage: 1,
|
|
7
|
+
perPage: E,
|
|
8
|
+
keyword: ""
|
|
9
|
+
},
|
|
10
|
+
loader: async ({ data: r }) => {
|
|
11
|
+
var P;
|
|
12
|
+
try {
|
|
13
|
+
return await e.loadPage({
|
|
14
|
+
keyword: r == null ? void 0 : r.keyword,
|
|
15
|
+
currentPage: (r == null ? void 0 : r.currentPage) ?? 1,
|
|
16
|
+
pageSize: (r == null ? void 0 : r.perPage) ?? E
|
|
17
|
+
});
|
|
18
|
+
} catch (S) {
|
|
19
|
+
return (P = e.onError) == null || P.call(e, S), { pageData: [], totalCount: 0 };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function n(e = 50) {
|
|
25
|
+
return ({ searchText: E }) => ({
|
|
26
|
+
keyword: E || "",
|
|
27
|
+
currentPage: 1,
|
|
28
|
+
perPage: e
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
function u(e = 50) {
|
|
32
|
+
return {
|
|
33
|
+
open: !1,
|
|
34
|
+
paramsType: "data",
|
|
35
|
+
current: "currentPage",
|
|
36
|
+
pageSizeName: "perPage",
|
|
37
|
+
pageSize: e
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export {
|
|
41
|
+
c as PAGED_SUPER_SELECT_PAGE_SIZE,
|
|
42
|
+
g as createPagedSuperSelectApi,
|
|
43
|
+
n as pagedSuperSelectGetSearchProps,
|
|
44
|
+
u as pagedSuperSelectPagination
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=createPagedSuperSelectApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createPagedSuperSelectApi.js","sources":["../../../src/components/Form/createPagedSuperSelectApi.ts"],"sourcesContent":["/**\n * kne SuperSelect 远程分页下拉(对齐 EAM CycleForm / materialFilterRemoteSelect)。\n * App 注入 loadPage;core 禁直连业务 API。\n */\n\nexport const PAGED_SUPER_SELECT_PAGE_SIZE = 50;\n\nexport type PagedSuperSelectOption = {\n label: string;\n value: string;\n};\n\nexport type PagedSuperSelectQuery = {\n keyword?: string;\n currentPage: number;\n pageSize: number;\n};\n\nexport type PagedSuperSelectPage = {\n pageData: PagedSuperSelectOption[];\n totalCount: number;\n};\n\nexport type CreatePagedSuperSelectApiOptions = {\n pageSize?: number;\n loadPage: (query: PagedSuperSelectQuery) => Promise<PagedSuperSelectPage>;\n /** 失败时回调(如 message.error);未传则静默空页 */\n onError?: (error: unknown) => void;\n};\n\ntype KneLoaderData = {\n currentPage?: number;\n perPage?: number;\n keyword?: string;\n};\n\n/** kne SuperSelect.api:data + loader → { pageData, totalCount } */\nexport function createPagedSuperSelectApi(options: CreatePagedSuperSelectApiOptions) {\n const pageSize = options.pageSize ?? PAGED_SUPER_SELECT_PAGE_SIZE;\n return {\n data: {\n currentPage: 1,\n perPage: pageSize,\n keyword: '',\n },\n loader: async ({ data }: { data?: KneLoaderData }) => {\n try {\n return await options.loadPage({\n keyword: data?.keyword,\n currentPage: data?.currentPage ?? 1,\n pageSize: data?.perPage ?? pageSize,\n });\n } catch (error) {\n options.onError?.(error);\n return { pageData: [] as PagedSuperSelectOption[], totalCount: 0 };\n }\n },\n };\n}\n\n/** kne SuperSelect.getSearchProps:搜索重置到第 1 页 */\nexport function pagedSuperSelectGetSearchProps(\n pageSize: number = PAGED_SUPER_SELECT_PAGE_SIZE,\n): (args: { searchText?: string }) => {\n keyword: string;\n currentPage: number;\n perPage: number;\n} {\n return ({ searchText }) => ({\n keyword: searchText || '',\n currentPage: 1,\n perPage: pageSize,\n });\n}\n\n/**\n * kne FetchScrollLoader:`open:false` = 滚动加载(非翻页器)。\n * 与 EAM machineFilterPagination / energyMaterialFilterPagination 同口径。\n */\nexport function pagedSuperSelectPagination(pageSize: number = PAGED_SUPER_SELECT_PAGE_SIZE): {\n open: false;\n paramsType: 'data';\n current: 'currentPage';\n pageSizeName: 'perPage';\n pageSize: number;\n} {\n return {\n open: false,\n paramsType: 'data',\n current: 'currentPage',\n pageSizeName: 'perPage',\n pageSize,\n };\n}\n"],"names":["PAGED_SUPER_SELECT_PAGE_SIZE","createPagedSuperSelectApi","options","pageSize","data","_a","error","pagedSuperSelectGetSearchProps","searchText","pagedSuperSelectPagination"],"mappings":"AAKO,MAAMA,IAA+B;AAgCrC,SAASC,EAA0BC,GAA2C;AACnF,QAAMC,IAAWD,EAAQ,YAAY;AACrC,SAAO;AAAA,IACL,MAAM;AAAA,MACJ,aAAa;AAAA,MACb,SAASC;AAAA,MACT,SAAS;AAAA,IAAA;AAAA,IAEX,QAAQ,OAAO,EAAE,MAAAC,QAAqC;AAxCnD,UAAAC;AAyCD,UAAI;AACF,eAAO,MAAMH,EAAQ,SAAS;AAAA,UAC5B,SAASE,KAAA,gBAAAA,EAAM;AAAA,UACf,cAAaA,KAAA,gBAAAA,EAAM,gBAAe;AAAA,UAClC,WAAUA,KAAA,gBAAAA,EAAM,YAAWD;AAAA,QAAA,CAC5B;AAAA,MACH,SAASG,GAAO;AACd,gBAAAD,IAAAH,EAAQ,YAAR,QAAAG,EAAA,KAAAH,GAAkBI,IACX,EAAE,UAAU,IAAgC,YAAY,EAAA;AAAA,MACjE;AAAA,IACF;AAAA,EAAA;AAEJ;AAGO,SAASC,EACdJ,IAAmB,IAKnB;AACA,SAAO,CAAC,EAAE,YAAAK,SAAkB;AAAA,IAC1B,SAASA,KAAc;AAAA,IACvB,aAAa;AAAA,IACb,SAASL;AAAA,EAAA;AAEb;AAMO,SAASM,EAA2BN,IAAmB,IAM5D;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,cAAc;AAAA,IACd,UAAAA;AAAA,EAAA;AAEJ;"}
|
|
@@ -14,6 +14,9 @@ export { inputRangeRules, validateRangeAsc, RANGE_ASC_RULE_NAME } from './inputR
|
|
|
14
14
|
export type { KneRuleResult } from './inputRangeRules';
|
|
15
15
|
export { SuperSelect, SUPER_SELECT_ALL_VALUE, isSuperSelectAllValue } from './SuperSelect';
|
|
16
16
|
export type { SuperSelectProps, SuperSelectOption } from './SuperSelect';
|
|
17
|
+
export { SUPER_SELECT_EMPTY_TEXT, defaultSuperSelectEmpty } from './superSelectEmpty';
|
|
18
|
+
export { createPagedSuperSelectApi, pagedSuperSelectGetSearchProps, pagedSuperSelectPagination, PAGED_SUPER_SELECT_PAGE_SIZE, } from './createPagedSuperSelectApi';
|
|
19
|
+
export type { PagedSuperSelectOption, PagedSuperSelectQuery, PagedSuperSelectPage, CreatePagedSuperSelectApiOptions, } from './createPagedSuperSelectApi';
|
|
17
20
|
/** @kne/form-info — 业务从包根导入,勿直连 @kne/form-info */
|
|
18
21
|
export { FormInfo, Form, FormModal, FormSteps, FormStepsModal, List, TableList, MultiField, Input, TextArea, Select, TreeSelect, InputNumber, Switch, RadioGroup, SubmitButton, ResetButton, CancelButton, } from './kneFormInfo';
|
|
19
22
|
export type { FormInfoProps, FormProps, FormModalProps, FormStepsProps, FormStepsModalProps, ListProps, TableListProps, MultiFieldProps, } from './kneFormInfo';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { Empty as E } from "antd";
|
|
3
|
+
const r = "暂无数据";
|
|
4
|
+
function m() {
|
|
5
|
+
return /* @__PURE__ */ t(E, { image: E.PRESENTED_IMAGE_SIMPLE, description: r });
|
|
6
|
+
}
|
|
7
|
+
export {
|
|
8
|
+
r as SUPER_SELECT_EMPTY_TEXT,
|
|
9
|
+
m as defaultSuperSelectEmpty
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=superSelectEmpty.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"superSelectEmpty.js","sources":["../../../src/components/Form/superSelectEmpty.tsx"],"sourcesContent":["import { Empty } from 'antd';\nimport type { ReactNode } from 'react';\n\n/** kne SuperSelect / Filter 空列表文案(禁组件默认英文空态) */\nexport const SUPER_SELECT_EMPTY_TEXT = '暂无数据';\n\n/** kne `empty` 默认节点;调用方可覆盖 */\nexport function defaultSuperSelectEmpty(): ReactNode {\n return <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={SUPER_SELECT_EMPTY_TEXT} />;\n}\n"],"names":["SUPER_SELECT_EMPTY_TEXT","defaultSuperSelectEmpty","Empty"],"mappings":";;AAIO,MAAMA,IAA0B;AAGhC,SAASC,IAAqC;AACnD,2BAAQC,GAAA,EAAM,OAAOA,EAAM,wBAAwB,aAAaF,GAAyB;AAC3F;"}
|
|
@@ -31,6 +31,8 @@ export declare const Select: ComponentType<FieldProps>;
|
|
|
31
31
|
export declare const TreeSelect: ComponentType<FieldProps>;
|
|
32
32
|
export { SuperSelect, SUPER_SELECT_ALL_VALUE, isSuperSelectAllValue, } from '../Form/SuperSelect';
|
|
33
33
|
export type { SuperSelectProps, SuperSelectOption } from '../Form/SuperSelect';
|
|
34
|
+
export { createPagedSuperSelectApi, pagedSuperSelectGetSearchProps, pagedSuperSelectPagination, PAGED_SUPER_SELECT_PAGE_SIZE, } from '../Form/createPagedSuperSelectApi';
|
|
35
|
+
export type { PagedSuperSelectOption, PagedSuperSelectQuery, PagedSuperSelectPage, CreatePagedSuperSelectApiOptions, } from '../Form/createPagedSuperSelectApi';
|
|
34
36
|
export declare const InputNumber: ComponentType<FieldProps>;
|
|
35
37
|
export declare const Switch: ComponentType<FieldProps>;
|
|
36
38
|
export declare const RadioGroup: ComponentType<FieldProps>;
|