@tianyr/schema-antd 0.1.1 → 0.2.0
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 +17 -2
- package/dist/biz-select/BizMultiSelect.d.ts +3 -0
- package/dist/biz-select/BizMultiSelect.d.ts.map +1 -0
- package/dist/biz-select/BizMultiSelect.js +120 -0
- package/dist/biz-select/BizMultiSelect.js.map +1 -0
- package/dist/biz-select/BizMultiSelectDisplay.d.ts +3 -0
- package/dist/biz-select/BizMultiSelectDisplay.d.ts.map +1 -0
- package/dist/biz-select/BizMultiSelectDisplay.js +59 -0
- package/dist/biz-select/BizMultiSelectDisplay.js.map +1 -0
- package/dist/biz-select/BizSelect.d.ts.map +1 -1
- package/dist/biz-select/BizSelect.js +5 -5
- package/dist/biz-select/BizSelect.js.map +1 -1
- package/dist/biz-select/BizSelectDisplay.js +6 -6
- package/dist/biz-select/BizSelectDisplay.js.map +1 -1
- package/dist/biz-select/cache.d.ts +7 -0
- package/dist/biz-select/cache.d.ts.map +1 -1
- package/dist/biz-select/cache.js +11 -0
- package/dist/biz-select/cache.js.map +1 -1
- package/dist/biz-select/compile.d.ts +13 -2
- package/dist/biz-select/compile.d.ts.map +1 -1
- package/dist/biz-select/compile.js +24 -3
- package/dist/biz-select/compile.js.map +1 -1
- package/dist/biz-select/factories.d.ts +22 -13
- package/dist/biz-select/factories.d.ts.map +1 -1
- package/dist/biz-select/factories.js +57 -7
- package/dist/biz-select/factories.js.map +1 -1
- package/dist/biz-select/format.d.ts +29 -11
- package/dist/biz-select/format.d.ts.map +1 -1
- package/dist/biz-select/format.js +100 -35
- package/dist/biz-select/format.js.map +1 -1
- package/dist/biz-select/index.d.ts +7 -2
- package/dist/biz-select/index.d.ts.map +1 -1
- package/dist/biz-select/index.js +4 -0
- package/dist/biz-select/index.js.map +1 -1
- package/dist/biz-select/key.d.ts +12 -2
- package/dist/biz-select/key.d.ts.map +1 -1
- package/dist/biz-select/key.js +14 -0
- package/dist/biz-select/key.js.map +1 -1
- package/dist/biz-select/normalize.d.ts +3 -0
- package/dist/biz-select/normalize.d.ts.map +1 -1
- package/dist/biz-select/normalize.js +4 -1
- package/dist/biz-select/normalize.js.map +1 -1
- package/dist/biz-select/resolveBatch.d.ts +34 -0
- package/dist/biz-select/resolveBatch.d.ts.map +1 -0
- package/dist/biz-select/resolveBatch.js +124 -0
- package/dist/biz-select/resolveBatch.js.map +1 -0
- package/dist/biz-select/schema.d.ts +1 -1
- package/dist/biz-select/schema.d.ts.map +1 -1
- package/dist/biz-select/schema.js +8 -1
- package/dist/biz-select/schema.js.map +1 -1
- package/dist/biz-select/types.d.ts +74 -18
- package/dist/biz-select/types.d.ts.map +1 -1
- package/dist/biz-select/useResolvedLabels.d.ts +28 -0
- package/dist/biz-select/useResolvedLabels.d.ts.map +1 -0
- package/dist/biz-select/useResolvedLabels.js +151 -0
- package/dist/biz-select/useResolvedLabels.js.map +1 -0
- package/dist/biz-select/useSelectedLabel.d.ts +2 -2
- package/dist/biz-select/useSelectedLabel.d.ts.map +1 -1
- package/dist/biz-select/useSelectedLabel.js +14 -16
- package/dist/biz-select/useSelectedLabel.js.map +1 -1
- package/dist/biz-select/useSelectedLabels.d.ts +26 -0
- package/dist/biz-select/useSelectedLabels.d.ts.map +1 -0
- package/dist/biz-select/useSelectedLabels.js +88 -0
- package/dist/biz-select/useSelectedLabels.js.map +1 -0
- package/dist/flat.d.ts +43 -0
- package/dist/flat.d.ts.map +1 -0
- package/dist/flat.js +91 -0
- package/dist/flat.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
- **不内置 antd**:`antd` / `react` 全部是 peer 依赖,产物只有 ESM 与类型声明
|
|
7
7
|
- **一份绑定层**:普通表单和两种表格的行复用同一个字段绑定,联动语义完全一致
|
|
8
8
|
- **可编辑列三态**:`true` 编辑、`'read'` 只读但跟随本行 Form(能看到联动带出的值)、`false` 直接读行记录
|
|
9
|
-
- **业务下拉**:`BizSelect`
|
|
9
|
+
- **业务下拉**:`BizSelect` 把候选来源、名称回显、级联接入收进一个组件,值默认存标量;选项契约 `{ value, label }`
|
|
10
10
|
|
|
11
11
|
## 安装
|
|
12
12
|
|
|
@@ -130,6 +130,7 @@ defineSelectSources({
|
|
|
130
130
|
province: staticList(PROVINCES), // 前端常量,不发请求
|
|
131
131
|
currency: loaded(api.listCurrency), // 一次拉全量,之后前端过滤
|
|
132
132
|
material: remote({ // 关键词交给后端,另配编码精确回显
|
|
133
|
+
recordFields: { value: 'code', label: 'name' }, // 后端记录字段名 → 契约 { value, label }
|
|
133
134
|
search: (keyword, params, signal) => api.pageMaterial({ keyword, ...params }, signal),
|
|
134
135
|
resolve: (code, params, signal) => api.getMaterial(code, params, signal),
|
|
135
136
|
requiredParams: ['warehouseCode'], // 缺参数不发请求,避免查到别家数据
|
|
@@ -143,8 +144,15 @@ defineSelectSources({
|
|
|
143
144
|
|
|
144
145
|
// 只读:同一套名称解析,不挂 Select
|
|
145
146
|
<BizSelectDisplay source="material" params={{ warehouseCode }} value={materialCode} />
|
|
147
|
+
|
|
148
|
+
// 多选:独立组件,值是编码数组(schema 里的类型名是 'BizMultiSelect')
|
|
149
|
+
<BizMultiSelect source="material" params={{ warehouseCode }} value={codes} onChange={setCodes} />
|
|
146
150
|
```
|
|
147
151
|
|
|
152
|
+
多选刻意不做成 `mode` 属性:值类型属于 API 面,合并会把 `BizSelectProps.value` 拓宽成联合。
|
|
153
|
+
候选、搜索、展示转换、批量解析与单选完全共用;清空时输出 `undefined`(不是 `[]`),
|
|
154
|
+
这样 `required` 规则天然生效。
|
|
155
|
+
|
|
148
156
|
在 schema 里用,级联一行配完(先调一次 `registerBizSelectField()` 注册类型):
|
|
149
157
|
|
|
150
158
|
```tsx
|
|
@@ -160,11 +168,18 @@ defineSelectSources({
|
|
|
160
168
|
|
|
161
169
|
约定:
|
|
162
170
|
|
|
171
|
+
- 选项契约是 `{ value, label }`,和 antd 同词汇;后端 `{ code, name }`、`{ userId, userName }` 在源的
|
|
172
|
+
`recordFields` 上映射一次(`staticList(list, recordFields)`,`loaded(load, { recordFields })`,`remote({ recordFields })`)。
|
|
173
|
+
没声明就视为已经是 `{ value, label }`,不做自动嗅探。
|
|
163
174
|
- 行为由源的能力推导:`options` 前端常量、`load` 一次拉全量后前端过滤、`search` 后端搜索,三者可组合。
|
|
164
|
-
- `resolve(
|
|
175
|
+
- `resolve(value)` 专用于按值精确回显,不要用模糊搜索冒充。
|
|
165
176
|
- `requiredParams` 不齐时进入 `blocked`:候选为空、不发请求。
|
|
166
177
|
- `invalidateSelectSource(name)` 让已挂载的实例重新取数;`useCandidates` 可把同一份候选给树、弹窗复用。
|
|
178
|
+
- 表格列只有 id 时用 `useResolvedLabels` 批量解析:源声明了 `resolveMany` 才会合并成一次请求,
|
|
179
|
+
没声明就逐条(开发态告警一次)。有限枚举的列应该用 `load` 型源一次拉全量,不必逐条解析。
|
|
167
180
|
- 内联源要跨实例共享缓存,就传导入的函数或显式 `cacheKey`;内联箭头每次渲染都换键,缓存命中不了。
|
|
181
|
+
- 已经是 `{ value, label }` 形状的本地枚举(数据字典、常量表)直接 `staticList` 即可,不必再写 `recordFields`;
|
|
182
|
+
分组选项和树形选项不在范围内(契约是扁平结构)。详见 `src/biz-select/README.md` §4。
|
|
168
183
|
|
|
169
184
|
## 其他导出
|
|
170
185
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BizMultiSelect.d.ts","sourceRoot":"","sources":["../../src/biz-select/BizMultiSelect.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,mBAAmB,EAAqC,MAAM,SAAS,CAAC;AAetF,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,+BAsIxD"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* BizMultiSelect:业务下拉的多选态。
|
|
4
|
+
*
|
|
5
|
+
* 和 `BizSelect` 共用候选、展示转换和批量解析,差别只在值:
|
|
6
|
+
* 一个是标量/对象,一个是它们的数组。刻意做成独立组件而不是 `mode` 属性,
|
|
7
|
+
* 因为值类型属于 API 面——合并会把 `BizSelectProps.value` 拓宽成联合,
|
|
8
|
+
* 所有存量调用点跟着变宽,而我们没有任何地方需要这种兼容。
|
|
9
|
+
*/
|
|
10
|
+
import { useEffect, useMemo } from 'react';
|
|
11
|
+
import { Select } from 'antd';
|
|
12
|
+
import { normalizeSource } from './normalize.js';
|
|
13
|
+
import { resolveSelectSource } from './registry.js';
|
|
14
|
+
import { useCandidates } from './useCandidates.js';
|
|
15
|
+
import { useSelectedLabels } from './useSelectedLabels.js';
|
|
16
|
+
import { buildObjectValues, defaultSearchFields, readObjectLabels, readValues, toAntOption, } from './format.js';
|
|
17
|
+
const DEFAULT_BLOCKED_TEXT = '请先选择上级';
|
|
18
|
+
/** antd 在多选下回传的是已选项数组;单选偶发单个对象,两种都接住 */
|
|
19
|
+
function pickedOptions(antOption) {
|
|
20
|
+
const list = Array.isArray(antOption) ? antOption : antOption ? [antOption] : [];
|
|
21
|
+
const picked = [];
|
|
22
|
+
for (const item of list) {
|
|
23
|
+
const raw = item?.raw;
|
|
24
|
+
if (raw)
|
|
25
|
+
picked.push(raw);
|
|
26
|
+
}
|
|
27
|
+
return picked;
|
|
28
|
+
}
|
|
29
|
+
export function BizMultiSelect(props) {
|
|
30
|
+
const { source, params, displayMode = 'L', searchFields, seedOptions, debounceMs, cacheKey, blockedText = DEFAULT_BLOCKED_TEXT, valueMode = 'primitive', valueFields, value, onChange, disabled, placeholder, ...rest } = props;
|
|
31
|
+
const codes = readValues(value, valueMode, valueFields);
|
|
32
|
+
const valueNames = readObjectLabels(value, valueMode, valueFields);
|
|
33
|
+
const sourceObj = resolveSelectSource(source);
|
|
34
|
+
const candidates = useCandidates({
|
|
35
|
+
source,
|
|
36
|
+
cacheKey,
|
|
37
|
+
params,
|
|
38
|
+
searchFields: searchFields ?? defaultSearchFields(displayMode),
|
|
39
|
+
debounceMs,
|
|
40
|
+
});
|
|
41
|
+
const { sourceKey } = candidates;
|
|
42
|
+
const selected = useSelectedLabels({
|
|
43
|
+
source,
|
|
44
|
+
cacheKey,
|
|
45
|
+
sourceKey,
|
|
46
|
+
codes,
|
|
47
|
+
valueNames,
|
|
48
|
+
seedOptions,
|
|
49
|
+
// 回显查未过滤全集,否则输入关键词后已选项会被筛掉、名称退回编码
|
|
50
|
+
candidates: candidates.echoOptions,
|
|
51
|
+
params,
|
|
52
|
+
});
|
|
53
|
+
// load 型没有 resolve,名称只能从全集里找:只要有编码说不清名字就先拉一次
|
|
54
|
+
const needEchoLoad = selected.status === 'missing' && normalizeSource(sourceObj).candidateMode === 'load';
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
if (needEchoLoad)
|
|
57
|
+
candidates.open();
|
|
58
|
+
}, [needEchoLoad, sourceKey, candidates.open]);
|
|
59
|
+
const byCode = useMemo(() => {
|
|
60
|
+
const map = new Map();
|
|
61
|
+
for (const option of candidates.options)
|
|
62
|
+
map.set(String(option.value), option);
|
|
63
|
+
for (const option of selected.options)
|
|
64
|
+
map.set(String(option.value), option);
|
|
65
|
+
return map;
|
|
66
|
+
}, [candidates.options, selected.options]);
|
|
67
|
+
/**
|
|
68
|
+
* 已选项始终补回候选。
|
|
69
|
+
*
|
|
70
|
+
* 单选在搜索态会跳过补回(避免结果里混进一条不匹配的记录),多选不能这么做:
|
|
71
|
+
* antd 的 tag 文本是从候选里查的,候选里没有就退化成裸编码,搜索时整排 tag 一起变编码,
|
|
72
|
+
* 比多一行已选项难看得多。
|
|
73
|
+
*/
|
|
74
|
+
const antOptions = useMemo(() => {
|
|
75
|
+
const list = candidates.options.map((item) => toAntOption(item, displayMode));
|
|
76
|
+
const present = new Set(list.map((item) => String(item.value)));
|
|
77
|
+
for (const option of selected.options) {
|
|
78
|
+
const key = String(option.value);
|
|
79
|
+
if (present.has(key))
|
|
80
|
+
continue;
|
|
81
|
+
present.add(key);
|
|
82
|
+
list.push(toAntOption(option, displayMode));
|
|
83
|
+
}
|
|
84
|
+
return list;
|
|
85
|
+
}, [candidates.options, selected.options, displayMode]);
|
|
86
|
+
const handleChange = (next, antOption) => {
|
|
87
|
+
const list = (Array.isArray(next) ? next : []).filter((item) => item !== undefined && item !== null && item !== '');
|
|
88
|
+
const emit = onChange;
|
|
89
|
+
// 清空给 undefined 而不是 []:与 ctx.clear() 一致,也让 required 规则天然生效
|
|
90
|
+
if (!list.length) {
|
|
91
|
+
emit?.(undefined, []);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
// 刚选中/刚取消的项 antd 会给回来:以它为准,再退回候选和已解析结果
|
|
95
|
+
const picked = new Map();
|
|
96
|
+
for (const option of pickedOptions(antOption))
|
|
97
|
+
picked.set(String(option.value), option);
|
|
98
|
+
const lookup = (code) => picked.get(String(code)) ?? byCode.get(String(code));
|
|
99
|
+
const options = list.map((code) => lookup(code) ?? { value: code });
|
|
100
|
+
if (valueMode === 'object') {
|
|
101
|
+
const objectMap = new Map();
|
|
102
|
+
for (const option of options)
|
|
103
|
+
objectMap.set(String(option.value), option);
|
|
104
|
+
emit?.(buildObjectValues(list, objectMap, valueFields), options);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
emit?.(list, options);
|
|
108
|
+
};
|
|
109
|
+
return (_jsx(Select, { ...rest, mode: "multiple",
|
|
110
|
+
// 候选由数据源决定,一律关掉 antd 自带过滤:本地过滤已在 hook 里做
|
|
111
|
+
filterOption: false, showSearch: true, options: antOptions, value: codes, loading: candidates.loading || selected.status === 'loading' || rest.loading, disabled: disabled || candidates.blocked, placeholder: candidates.blocked ? blockedText : placeholder, notFoundContent: candidates.blocked ? (blockedText) : candidates.error ? (
|
|
112
|
+
// 失败得能重试:静默给一个空列表等于让用户以为「确实没有」
|
|
113
|
+
_jsx("a", { onClick: () => candidates.reload(), children: "\u52A0\u8F7D\u5931\u8D25\uFF0C\u70B9\u51FB\u91CD\u8BD5" })) : (rest.notFoundContent), onSearch: candidates.search, onChange: handleChange, onDropdownVisibleChange: (opened) => {
|
|
114
|
+
if (opened)
|
|
115
|
+
candidates.open();
|
|
116
|
+
else
|
|
117
|
+
candidates.resetKeyword();
|
|
118
|
+
} }));
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=BizMultiSelect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BizMultiSelect.js","sourceRoot":"","sources":["../../src/biz-select/BizMultiSelect.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BizMultiSelectDisplay.d.ts","sourceRoot":"","sources":["../../src/biz-select/BizMultiSelectDisplay.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAa1D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,0BAA0B,+BAkDtE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* BizMultiSelect 的只读态。
|
|
4
|
+
*
|
|
5
|
+
* 与 `BizSelectDisplay` 对称:复用同一套名称解析,不挂载 Select。
|
|
6
|
+
* 解析不出的编码原样显示——宁可露出「查不到」,也不要编一个名字出来。
|
|
7
|
+
*/
|
|
8
|
+
import { useEffect } from 'react';
|
|
9
|
+
import { EMPTY, defaultSearchFields, formatLabel, readObjectLabels, readValues } from './format.js';
|
|
10
|
+
import { normalizeSource } from './normalize.js';
|
|
11
|
+
import { resolveSelectSource } from './registry.js';
|
|
12
|
+
import { useCandidates } from './useCandidates.js';
|
|
13
|
+
import { useSelectedLabels } from './useSelectedLabels.js';
|
|
14
|
+
/** 与 read.tsx 的 MULTI_SEPARATOR 保持一致 */
|
|
15
|
+
const DEFAULT_SEPARATOR = '、';
|
|
16
|
+
/** 状态说明挂在 title 上:不能把「没查到」误认为「业务值为空」 */
|
|
17
|
+
const STATUS_TITLE = {
|
|
18
|
+
loading: '正在解析名称',
|
|
19
|
+
missing: '部分名称未找到,显示原始值',
|
|
20
|
+
blocked: '缺少必需参数,未解析名称',
|
|
21
|
+
error: '名称解析失败,显示原始值',
|
|
22
|
+
};
|
|
23
|
+
export function BizMultiSelectDisplay(props) {
|
|
24
|
+
const { source, params, displayMode = 'L', seedOptions, cacheKey, emptyText = EMPTY, valueMode = 'primitive', valueFields, value, separator = DEFAULT_SEPARATOR, } = props;
|
|
25
|
+
const sourceObj = resolveSelectSource(source);
|
|
26
|
+
const codes = readValues(value, valueMode, valueFields);
|
|
27
|
+
const valueNames = readObjectLabels(value, valueMode, valueFields);
|
|
28
|
+
// 只有 load 型需要为回显拉一次全集:它没有 resolve,名称只能从全集里找
|
|
29
|
+
const candidates = useCandidates({
|
|
30
|
+
source,
|
|
31
|
+
cacheKey,
|
|
32
|
+
params,
|
|
33
|
+
searchFields: defaultSearchFields(displayMode),
|
|
34
|
+
});
|
|
35
|
+
const { sourceKey } = candidates;
|
|
36
|
+
const selected = useSelectedLabels({
|
|
37
|
+
source,
|
|
38
|
+
cacheKey,
|
|
39
|
+
sourceKey,
|
|
40
|
+
codes,
|
|
41
|
+
valueNames,
|
|
42
|
+
seedOptions,
|
|
43
|
+
candidates: candidates.echoOptions,
|
|
44
|
+
params,
|
|
45
|
+
});
|
|
46
|
+
const needEchoLoad = selected.status === 'missing' && normalizeSource(sourceObj).candidateMode === 'load';
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (needEchoLoad)
|
|
49
|
+
candidates.open();
|
|
50
|
+
}, [needEchoLoad, sourceKey, candidates.open]);
|
|
51
|
+
if (!codes.length)
|
|
52
|
+
return _jsx(_Fragment, { children: emptyText });
|
|
53
|
+
// 只返回内容本身:外层 schema-field-read 由 SchemaField 统一包,
|
|
54
|
+
// 这里再套一层会得到双层 span。title 只在解析异常时挂。
|
|
55
|
+
const text = selected.options.map((option) => formatLabel(option, displayMode)).join(separator);
|
|
56
|
+
const title = STATUS_TITLE[selected.status];
|
|
57
|
+
return title ? _jsx("span", { title: title, children: text }) : _jsx(_Fragment, { children: text });
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=BizMultiSelectDisplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BizMultiSelectDisplay.js","sourceRoot":"","sources":["../../src/biz-select/BizMultiSelectDisplay.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAIxD,wCAAwC;AACxC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B,wCAAwC;AACxC,MAAM,YAAY,GAA4C;IAC5D,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,eAAe;IACxB,OAAO,EAAE,cAAc;IACvB,KAAK,EAAE,cAAc;CACtB,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,KAAiC;IACrE,MAAM,EACJ,MAAM,EACN,MAAM,EACN,WAAW,GAAG,GAAG,EACjB,WAAW,EACX,QAAQ,EACR,SAAS,GAAG,KAAK,EACjB,SAAS,GAAG,WAAW,EACvB,WAAW,EACX,KAAK,EACL,SAAS,GAAG,iBAAiB,GAC9B,GAAG,KAAK,CAAC;IAEV,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAEnE,4CAA4C;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC;QAC/B,MAAM;QACN,QAAQ;QACR,MAAM;QACN,YAAY,EAAE,mBAAmB,CAAC,WAAW,CAAC;KAC/C,CAAC,CAAC;IACH,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC;IAEjC,MAAM,QAAQ,GAAG,iBAAiB,CAAC;QACjC,MAAM;QACN,QAAQ;QACR,SAAS;QACT,KAAK;QACL,UAAU;QACV,WAAW;QACX,UAAU,EAAE,UAAU,CAAC,WAAW;QAClC,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC,aAAa,KAAK,MAAM,CAAC;IAC1G,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY;YAAE,UAAU,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAE/C,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,4BAAG,SAAS,GAAI,CAAC;IAE3C,kDAAkD;IAClD,mCAAmC;IACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChG,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,KAAK,CAAC,CAAC,CAAC,eAAM,KAAK,EAAE,KAAK,YAAG,IAAI,GAAQ,CAAC,CAAC,CAAC,4BAAG,IAAI,GAAI,CAAC;AACjE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BizSelect.d.ts","sourceRoot":"","sources":["../../src/biz-select/BizSelect.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAa,cAAc,
|
|
1
|
+
{"version":3,"file":"BizSelect.d.ts","sourceRoot":"","sources":["../../src/biz-select/BizSelect.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAa,cAAc,EAA0B,MAAM,SAAS,CAAC;AAIjF,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,+BAmH9C"}
|
|
@@ -11,14 +11,14 @@ import { normalizeSource } from './normalize.js';
|
|
|
11
11
|
import { resolveSelectSource } from './registry.js';
|
|
12
12
|
import { useCandidates } from './useCandidates.js';
|
|
13
13
|
import { useSelectedLabel } from './useSelectedLabel.js';
|
|
14
|
-
import { buildObjectValue, defaultSearchFields,
|
|
14
|
+
import { buildObjectValue, defaultSearchFields, readObjectLabel, readValue, toAntOption, } from './format.js';
|
|
15
15
|
const DEFAULT_BLOCKED_TEXT = '请先选择上级';
|
|
16
16
|
export function BizSelect(props) {
|
|
17
17
|
const { source, params, displayMode = 'L', searchFields, seedOptions, debounceMs, cacheKey, blockedText = DEFAULT_BLOCKED_TEXT, valueMode = 'primitive', valueFields, value, onChange, disabled, placeholder, ...rest } = props;
|
|
18
18
|
const sourceObj = resolveSelectSource(source);
|
|
19
19
|
const fields = searchFields ?? defaultSearchFields(displayMode);
|
|
20
|
-
const code =
|
|
21
|
-
const valueName =
|
|
20
|
+
const code = readValue(value, valueMode, valueFields);
|
|
21
|
+
const valueName = readObjectLabel(value, valueMode, valueFields);
|
|
22
22
|
// 源直接交给 Hook:解析与来源键(含版本订阅)都在里面,组件不再自己算一份
|
|
23
23
|
const candidates = useCandidates({
|
|
24
24
|
source,
|
|
@@ -40,7 +40,7 @@ export function BizSelect(props) {
|
|
|
40
40
|
});
|
|
41
41
|
// 只有 load 型需要为了回显提前拉一次全集:它没有 resolve,名称只能从全集里找。
|
|
42
42
|
// 对象值自带名称、seed 已命中时不用拉。
|
|
43
|
-
const hasKnownName = Boolean(valueName) || Boolean(seedOptions?.some((item) => item.
|
|
43
|
+
const hasKnownName = Boolean(valueName) || Boolean(seedOptions?.some((item) => item.value === code));
|
|
44
44
|
const needEchoLoad = code !== undefined && !hasKnownName && normalizeSource(sourceObj).candidateMode === 'load';
|
|
45
45
|
useEffect(() => {
|
|
46
46
|
if (needEchoLoad)
|
|
@@ -56,7 +56,7 @@ export function BizSelect(props) {
|
|
|
56
56
|
if (searching || candidates.error)
|
|
57
57
|
return list;
|
|
58
58
|
const selectedOption = selected.option;
|
|
59
|
-
if (selectedOption && !list.some((item) => item.value === selectedOption.
|
|
59
|
+
if (selectedOption && !list.some((item) => item.value === selectedOption.value)) {
|
|
60
60
|
list.unshift(toAntOption(selectedOption, displayMode));
|
|
61
61
|
}
|
|
62
62
|
return list;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BizSelect.js","sourceRoot":"","sources":["../../src/biz-select/BizSelect.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AACH,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"BizSelect.js","sourceRoot":"","sources":["../../src/biz-select/BizSelect.tsx"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
|
6
6
|
* 不该为了显示一个名称付出一个交互组件的代价。
|
|
7
7
|
*/
|
|
8
8
|
import { useEffect } from 'react';
|
|
9
|
-
import { EMPTY, defaultSearchFields, formatLabel,
|
|
9
|
+
import { EMPTY, defaultSearchFields, formatLabel, readObjectLabel, readValue } from './format.js';
|
|
10
10
|
import { normalizeSource } from './normalize.js';
|
|
11
11
|
import { resolveSelectSource } from './registry.js';
|
|
12
12
|
import { useCandidates } from './useCandidates.js';
|
|
@@ -14,15 +14,15 @@ import { useSelectedLabel } from './useSelectedLabel.js';
|
|
|
14
14
|
/** 状态说明挂在 title 上:用户不能把「没查到」误认为「业务值为空」 */
|
|
15
15
|
const STATUS_TITLE = {
|
|
16
16
|
loading: '正在解析名称',
|
|
17
|
-
missing: '
|
|
17
|
+
missing: '未找到对应名称,显示原始值',
|
|
18
18
|
blocked: '缺少必需参数,未解析名称',
|
|
19
|
-
error: '
|
|
19
|
+
error: '名称解析失败,显示原始值',
|
|
20
20
|
};
|
|
21
21
|
export function BizSelectDisplay(props) {
|
|
22
22
|
const { source, params, displayMode = 'L', seedOptions, cacheKey, emptyText = EMPTY, valueMode = 'primitive', valueFields, value, } = props;
|
|
23
23
|
const sourceObj = resolveSelectSource(source);
|
|
24
|
-
const code =
|
|
25
|
-
const valueName =
|
|
24
|
+
const code = readValue(value, valueMode, valueFields);
|
|
25
|
+
const valueName = readObjectLabel(value, valueMode, valueFields);
|
|
26
26
|
// 只有 load 型需要为回显拉一次全集:它没有 resolve,名称只能从全集里找
|
|
27
27
|
const candidates = useCandidates({
|
|
28
28
|
source,
|
|
@@ -32,7 +32,7 @@ export function BizSelectDisplay(props) {
|
|
|
32
32
|
});
|
|
33
33
|
const { sourceKey } = candidates;
|
|
34
34
|
// 对象值自带名称、seed 已命中时不用为了回显拉全集
|
|
35
|
-
const hasKnownName = Boolean(valueName) || Boolean(seedOptions?.some((item) => item.
|
|
35
|
+
const hasKnownName = Boolean(valueName) || Boolean(seedOptions?.some((item) => item.value === code));
|
|
36
36
|
const needEchoLoad = code !== undefined && !hasKnownName && normalizeSource(sourceObj).candidateMode === 'load';
|
|
37
37
|
useEffect(() => {
|
|
38
38
|
if (needEchoLoad)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BizSelectDisplay.js","sourceRoot":"","sources":["../../src/biz-select/BizSelectDisplay.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"BizSelectDisplay.js","sourceRoot":"","sources":["../../src/biz-select/BizSelectDisplay.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAItD,0CAA0C;AAC1C,MAAM,YAAY,GAA4C;IAC5D,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,eAAe;IACxB,OAAO,EAAE,cAAc;IACvB,KAAK,EAAE,cAAc;CACtB,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,KAA4B;IAC3D,MAAM,EACJ,MAAM,EACN,MAAM,EACN,WAAW,GAAG,GAAG,EACjB,WAAW,EACX,QAAQ,EACR,SAAS,GAAG,KAAK,EACjB,SAAS,GAAG,WAAW,EACvB,WAAW,EACX,KAAK,GACN,GAAG,KAAK,CAAC;IAEV,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAEjE,4CAA4C;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC;QAC/B,MAAM;QACN,QAAQ;QACR,MAAM;QACN,YAAY,EAAE,mBAAmB,CAAC,WAAW,CAAC;KAC/C,CAAC,CAAC;IACH,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC;IACjC,6BAA6B;IAC7B,MAAM,YAAY,GAChB,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC;IAClF,MAAM,YAAY,GAChB,IAAI,KAAK,SAAS,IAAI,CAAC,YAAY,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC,aAAa,KAAK,MAAM,CAAC;IAC7F,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY;YAAE,UAAU,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAE/C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC;QAC1C,MAAM,EAAE,SAAS;QACjB,SAAS;QACT,IAAI;QACJ,SAAS;QACT,WAAW;QACX,UAAU,EAAE,UAAU,CAAC,WAAW;QAClC,MAAM;KACP,CAAC,CAAC;IAEH,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,MAAM;QAAE,OAAO,4BAAG,SAAS,GAAI,CAAC;IAE3D,kDAAkD;IAClD,8CAA8C;IAC9C,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,CAAC,CAAC,eAAM,KAAK,EAAE,KAAK,YAAG,IAAI,GAAQ,CAAC,CAAC,CAAC,4BAAG,IAAI,GAAI,CAAC;AACjE,CAAC"}
|
|
@@ -9,6 +9,13 @@ import type { BizOption } from './types.js';
|
|
|
9
9
|
export declare function loadCandidatesWithCache(key: string, loader: () => Promise<BizOption[]>): Promise<BizOption[]>;
|
|
10
10
|
/** 丢掉单条候选缓存:reload() 要真正重取,不能又命中同一份 */
|
|
11
11
|
export declare function dropCandidateCache(key: string): void;
|
|
12
|
+
/**
|
|
13
|
+
* 只看缓存、不发起请求:批量解析用它先把已命中的挑出来,
|
|
14
|
+
* 免得已经查过的编码还被塞进批量请求里占位。
|
|
15
|
+
*/
|
|
16
|
+
export declare function peekResolved(key: string): Promise<BizOption | null> | undefined;
|
|
17
|
+
/** 丢掉单条解析缓存:`reload()` 要真正重查,不能又命中同一份 */
|
|
18
|
+
export declare function dropResolvedCache(key: string): void;
|
|
12
19
|
export declare function resolveCodeWithCache(key: string, loader: () => Promise<BizOption | null>): Promise<BizOption | null>;
|
|
13
20
|
export declare function clearSelectCacheOfSource(sourceKey: string): void;
|
|
14
21
|
export declare function clearSelectCache(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/biz-select/cache.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AA2FzC,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,GACjC,OAAO,CAAC,SAAS,EAAE,CAAC,CA2BtB;AAED,uCAAuC;AACvC,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GACtC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAgB3B;AAOD,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAQhE;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/biz-select/cache.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AA2FzC,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,GACjC,OAAO,CAAC,SAAS,EAAE,CAAC,CA2BtB;AAED,uCAAuC;AACvC,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,SAAS,CAE/E;AAED,yCAAyC;AACzC,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEnD;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GACtC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAgB3B;AAOD,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAQhE;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}
|
package/dist/biz-select/cache.js
CHANGED
|
@@ -87,6 +87,17 @@ export function loadCandidatesWithCache(key, loader) {
|
|
|
87
87
|
export function dropCandidateCache(key) {
|
|
88
88
|
candidateCache.delete(key);
|
|
89
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* 只看缓存、不发起请求:批量解析用它先把已命中的挑出来,
|
|
92
|
+
* 免得已经查过的编码还被塞进批量请求里占位。
|
|
93
|
+
*/
|
|
94
|
+
export function peekResolved(key) {
|
|
95
|
+
return take(resolveCache, key);
|
|
96
|
+
}
|
|
97
|
+
/** 丢掉单条解析缓存:`reload()` 要真正重查,不能又命中同一份 */
|
|
98
|
+
export function dropResolvedCache(key) {
|
|
99
|
+
resolveCache.delete(key);
|
|
100
|
+
}
|
|
90
101
|
export function resolveCodeWithCache(key, loader) {
|
|
91
102
|
const cached = take(resolveCache, key);
|
|
92
103
|
if (cached)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/biz-select/cache.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/biz-select/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
import type { AnyFormFieldSchema, NamePath } from '../types.js';
|
|
2
2
|
import type { BizOption, DisplayMode, SearchFields, ValueFieldMap, ValueMode } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* `paramsFrom` 的两种写法,别的不认:
|
|
5
|
+
* - `NamePath`:字段值原样当参数
|
|
6
|
+
* - `{ from, pick }`:字段值是对象时取其中一个键当参数。
|
|
7
|
+
* 给「接口平铺 userId/userName、前端临时组装成 user 对象」这类场景用;
|
|
8
|
+
* 只声明键名,不做「看到对象就猜该取哪个键」的自动推导。
|
|
9
|
+
*/
|
|
10
|
+
export type ParamsFromEntry = NamePath | {
|
|
11
|
+
from: NamePath;
|
|
12
|
+
pick: string;
|
|
13
|
+
};
|
|
3
14
|
/** BizSelect 在 schema 里额外认的专有属性 */
|
|
4
15
|
export interface BizSelectSchemaProps {
|
|
5
16
|
/** 数据源注册名;schema 里不允许写函数 */
|
|
6
17
|
source?: string;
|
|
7
|
-
/** 参数名 ←
|
|
8
|
-
paramsFrom?: Record<string,
|
|
18
|
+
/** 参数名 ← 表单字段名(或字段值里的某个键):`{ provinceCode: 'provinceCode' }` */
|
|
19
|
+
paramsFrom?: Record<string, ParamsFromEntry>;
|
|
9
20
|
valueMode?: ValueMode;
|
|
10
21
|
valueFields?: ValueFieldMap;
|
|
11
22
|
displayMode?: DisplayMode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/biz-select/compile.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,kBAAkB,EAIlB,QAAQ,EAET,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,YAAY,EAEZ,aAAa,EACb,SAAS,EACV,MAAM,SAAS,CAAC;AAEjB,mCAAmC;AACnC,MAAM,WAAW,oBAAoB;IACnC,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/biz-select/compile.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,kBAAkB,EAIlB,QAAQ,EAET,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,YAAY,EAEZ,aAAa,EACb,SAAS,EACV,MAAM,SAAS,CAAC;AAEjB;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E,mCAAmC;AACnC,MAAM,WAAW,oBAAoB;IACnC,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;IAC1B,yBAAyB;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAgFD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,kBAAkB,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CA2BnF"}
|
|
@@ -15,13 +15,33 @@ const SUNK_KEYS = [
|
|
|
15
15
|
'blockedText',
|
|
16
16
|
'debounceMs',
|
|
17
17
|
];
|
|
18
|
+
function isPickEntry(entry) {
|
|
19
|
+
return typeof entry === 'object' && entry !== null && !Array.isArray(entry);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 取参数值。
|
|
23
|
+
*
|
|
24
|
+
* `pick` 取不到(父值为空、不是对象、没这个键)一律给 `undefined`,
|
|
25
|
+
* 交给下游的 `requiredParams` 去挡请求——这里不能回退成整个对象,
|
|
26
|
+
* 把对象当参数传给后端是静默错误,比不查难查得多。
|
|
27
|
+
*/
|
|
28
|
+
function readParam(entry, ctx) {
|
|
29
|
+
if (!isPickEntry(entry))
|
|
30
|
+
return ctx.get(entry);
|
|
31
|
+
const value = ctx.get(entry.from);
|
|
32
|
+
if (!value || typeof value !== 'object')
|
|
33
|
+
return undefined;
|
|
34
|
+
return value[entry.pick];
|
|
35
|
+
}
|
|
18
36
|
/**
|
|
19
37
|
* 把 `paramsFrom` 编译成已有的两套机制:
|
|
20
38
|
* - `dynamic`:订阅父字段,把值映射成 `params` 传给组件
|
|
21
39
|
* - `linkage`:父值变化时清空本字段
|
|
22
40
|
*/
|
|
23
41
|
function compileParamsFrom(schema, entries) {
|
|
24
|
-
|
|
42
|
+
// 依赖必须挂在 from 上:linkage 的清空匹配用的是一级字段名,
|
|
43
|
+
// 写成 ['user','userId'] 这种子路径,父值变化时不会触发清空
|
|
44
|
+
const deps = dedupeNamePaths(entries.map(([, entry]) => (isPickEntry(entry) ? entry.from : entry)));
|
|
25
45
|
const base = schema.dynamic;
|
|
26
46
|
const inheritedProps = base?.props;
|
|
27
47
|
// 静态固定条件(如 props.params: { enabled: true })必须保留,否则查询会放宽
|
|
@@ -33,7 +53,7 @@ function compileParamsFrom(schema, entries) {
|
|
|
33
53
|
props: (ctx) => {
|
|
34
54
|
const inherited = typeof inheritedProps === 'function' ? inheritedProps(ctx) : (inheritedProps ?? {});
|
|
35
55
|
const inheritedParams = inherited.params;
|
|
36
|
-
const mapped = Object.fromEntries(entries.map(([param,
|
|
56
|
+
const mapped = Object.fromEntries(entries.map(([param, entry]) => [param, readParam(entry, ctx)]));
|
|
37
57
|
// 合并顺序:静态 props.params < dynamic.props().params < paramsFrom 映射。
|
|
38
58
|
// 越靠后的越"当前",同名时覆盖前面的
|
|
39
59
|
return {
|
|
@@ -55,7 +75,8 @@ function compileParamsFrom(schema, entries) {
|
|
|
55
75
|
*/
|
|
56
76
|
export function normalizeBizSelectSchema(schema) {
|
|
57
77
|
const ext = schema;
|
|
58
|
-
|
|
78
|
+
// 单选多选共用同一套:级联参数和清空语义与值的形态无关
|
|
79
|
+
if (ext.type !== 'BizSelect' && ext.type !== 'BizMultiSelect')
|
|
59
80
|
return schema;
|
|
60
81
|
const sunk = {};
|
|
61
82
|
for (const key of SUNK_KEYS) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/biz-select/compile.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/biz-select/compile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,32 @@
|
|
|
1
|
+
import type { BizOption, RecordFieldNames, SelectParams, SelectSource, SelectValue } from './types.js';
|
|
1
2
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* 工厂承载了「这个源属于哪种能力组合」的语义,写法越短,越不容易写出
|
|
6
|
-
* `resolve` 用模糊搜索冒充精确查这类错误。
|
|
3
|
+
* 源返回的原始记录:字段名由 recordFields 声明。
|
|
4
|
+
* 刻意不收窄成 `Record<string, unknown>`——业务侧传的是 interface,
|
|
5
|
+
* 没有索引签名就赋不进来;形状对不对由 recordFields 声明负责,类型系统管不到这一步。
|
|
7
6
|
*/
|
|
8
|
-
|
|
7
|
+
type OptionRecord = object;
|
|
9
8
|
/** ① 纯前端常量:同步可用,没有请求也没有 loading */
|
|
10
|
-
export declare function staticList
|
|
9
|
+
export declare function staticList(list: ReadonlyArray<BizOption | OptionRecord>, recordFields?: RecordFieldNames): SelectSource;
|
|
10
|
+
export interface LoadedOptions {
|
|
11
|
+
requiredParams?: string[];
|
|
12
|
+
namespace?: () => string;
|
|
13
|
+
recordFields?: RecordFieldNames;
|
|
14
|
+
}
|
|
11
15
|
/**
|
|
12
16
|
* ② 有限远程枚举:一次拉全量,之后由前端过滤。
|
|
13
17
|
* 传导入的函数(如 `api.listCurrency`)而不是内联箭头,才能跨实例共享缓存。
|
|
14
18
|
*/
|
|
15
|
-
export declare function loaded<P extends SelectParams = SelectParams>(load: (params: P, signal?: AbortSignal) => Promise<BizOption
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
export declare function loaded<P extends SelectParams = SelectParams>(load: (params: P, signal?: AbortSignal) => Promise<Array<BizOption | OptionRecord>>, options?: LoadedOptions): SelectSource<P>;
|
|
20
|
+
export interface RemoteOptions<P extends SelectParams = SelectParams> {
|
|
21
|
+
search: (keyword: string, params: P, signal?: AbortSignal) => Promise<Array<BizOption | OptionRecord>>;
|
|
22
|
+
resolve?: (value: SelectValue, params: P, signal?: AbortSignal) => Promise<BizOption | OptionRecord | null>;
|
|
23
|
+
/** 批量按值查:接口有 IN 参数时才声明,见 SelectSource.resolveMany */
|
|
24
|
+
resolveMany?: (values: SelectValue[], params: P, signal?: AbortSignal) => Promise<Array<BizOption | OptionRecord>>;
|
|
20
25
|
requiredParams?: string[];
|
|
21
26
|
namespace?: () => string;
|
|
22
|
-
|
|
27
|
+
recordFields?: RecordFieldNames;
|
|
28
|
+
}
|
|
29
|
+
/** ③ 无限远程:关键词搜索 + 按值回显 */
|
|
30
|
+
export declare function remote<P extends SelectParams = SelectParams>(config: RemoteOptions<P>): SelectSource<P>;
|
|
31
|
+
export {};
|
|
23
32
|
//# sourceMappingURL=factories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../../src/biz-select/factories.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../../src/biz-select/factories.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,WAAW,EACZ,MAAM,SAAS,CAAC;AAEjB;;;;GAIG;AACH,KAAK,YAAY,GAAG,MAAM,CAAC;AAuC3B,mCAAmC;AACnC,wBAAgB,UAAU,CACxB,IAAI,EAAE,aAAa,CAAC,SAAS,GAAG,YAAY,CAAC,EAC7C,YAAY,CAAC,EAAE,gBAAgB,GAC9B,YAAY,CAEd;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAC1D,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC,CAAC,EACnF,OAAO,GAAE,aAAkB,GAC1B,YAAY,CAAC,CAAC,CAAC,CAGjB;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY;IAClE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC;IACvG,OAAO,CAAC,EAAE,CACR,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,CAAC,EACT,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,SAAS,GAAG,YAAY,GAAG,IAAI,CAAC,CAAC;IAC9C,qDAAqD;IACrD,WAAW,CAAC,EAAE,CACZ,MAAM,EAAE,WAAW,EAAE,EACrB,MAAM,EAAE,CAAC,EACT,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC;IAC9C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAED,0BAA0B;AAC1B,wBAAgB,MAAM,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAC1D,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,GACvB,YAAY,CAAC,CAAC,CAAC,CAWjB"}
|