@tianyr/schema-antd 0.1.1 → 0.3.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 +41 -3
- 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 +124 -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 +63 -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 +12 -8
- package/dist/biz-select/BizSelect.js.map +1 -1
- package/dist/biz-select/BizSelectDisplay.d.ts.map +1 -1
- package/dist/biz-select/BizSelectDisplay.js +13 -9
- 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 +15 -2
- package/dist/biz-select/compile.d.ts.map +1 -1
- package/dist/biz-select/compile.js +25 -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/registry.d.ts +12 -2
- package/dist/biz-select/registry.d.ts.map +1 -1
- package/dist/biz-select/registry.js +29 -4
- package/dist/biz-select/registry.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 +80 -18
- package/dist/biz-select/types.d.ts.map +1 -1
- package/dist/biz-select/useBizSource.d.ts +3 -0
- package/dist/biz-select/useBizSource.d.ts.map +1 -0
- package/dist/biz-select/useBizSource.js +12 -0
- package/dist/biz-select/useBizSource.js.map +1 -0
- 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 +5 -1
- package/dist/index.js.map +1 -1
- package/package.json +6 -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
|
|
|
@@ -19,6 +19,18 @@ npm i react react-dom antd dayjs @ant-design/icons
|
|
|
19
19
|
|
|
20
20
|
要求:React 18.2+、antd 5.20+、Node 18+(仅构建期)。只提供 ESM。
|
|
21
21
|
|
|
22
|
+
包有两个入口,按职责分开:
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
// 表单、字段、表格
|
|
26
|
+
import { SchemaForm, SchemaField, EditableTable } from '@tianyr/schema-antd'
|
|
27
|
+
|
|
28
|
+
// 业务下拉:组件、Hook、源工厂、注册表、类型
|
|
29
|
+
import { BizSelect, defineSelectSources } from '@tianyr/schema-antd/biz-select'
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
根入口暂时还导出下拉能力(标了 `@deprecated`),下个大版本移除,存量写法不会立刻失效。
|
|
33
|
+
|
|
22
34
|
## 表单
|
|
23
35
|
|
|
24
36
|
```tsx
|
|
@@ -124,12 +136,13 @@ const columns: EditableColumn<OrderRow>[] = [
|
|
|
124
136
|
值默认是标量编码(`valueMode="object"` 可存对象),字段类型由使用方显式注册。
|
|
125
137
|
|
|
126
138
|
```ts
|
|
127
|
-
import { defineSelectSources, loaded, remote, staticList } from '@tianyr/schema-antd'
|
|
139
|
+
import { defineSelectSources, loaded, remote, staticList } from '@tianyr/schema-antd/biz-select'
|
|
128
140
|
|
|
129
141
|
defineSelectSources({
|
|
130
142
|
province: staticList(PROVINCES), // 前端常量,不发请求
|
|
131
143
|
currency: loaded(api.listCurrency), // 一次拉全量,之后前端过滤
|
|
132
144
|
material: remote({ // 关键词交给后端,另配编码精确回显
|
|
145
|
+
recordFields: { value: 'code', label: 'name' }, // 后端记录字段名 → 契约 { value, label }
|
|
133
146
|
search: (keyword, params, signal) => api.pageMaterial({ keyword, ...params }, signal),
|
|
134
147
|
resolve: (code, params, signal) => api.getMaterial(code, params, signal),
|
|
135
148
|
requiredParams: ['warehouseCode'], // 缺参数不发请求,避免查到别家数据
|
|
@@ -137,14 +150,32 @@ defineSelectSources({
|
|
|
137
150
|
})
|
|
138
151
|
```
|
|
139
152
|
|
|
153
|
+
页面私有的源传第二个参数声明 scope,注册名变成 `pur:currency`,与全局的 `currency` 互不覆盖。
|
|
154
|
+
返回值是「短名 → 最终注册名」的映射,使用点写 `S.currency` 即可,不用手写前缀:
|
|
155
|
+
|
|
156
|
+
```ts
|
|
157
|
+
// 页面模块
|
|
158
|
+
const S = defineSelectSources({ currency: loaded(api.listCurrency) }, 'pur')
|
|
159
|
+
// S.currency === 'pur:currency'
|
|
160
|
+
|
|
161
|
+
{ type: 'BizSelect', name: 'currency', label: '币种', source: S.currency }
|
|
162
|
+
```
|
|
163
|
+
|
|
140
164
|
```tsx
|
|
141
165
|
// 独立使用:受控,value / onChange 必配
|
|
142
166
|
<BizSelect source="currency" value={currency} onChange={setCurrency} />
|
|
143
167
|
|
|
144
168
|
// 只读:同一套名称解析,不挂 Select
|
|
145
169
|
<BizSelectDisplay source="material" params={{ warehouseCode }} value={materialCode} />
|
|
170
|
+
|
|
171
|
+
// 多选:独立组件,值是编码数组(schema 里的类型名是 'BizMultiSelect')
|
|
172
|
+
<BizMultiSelect source="material" params={{ warehouseCode }} value={codes} onChange={setCodes} />
|
|
146
173
|
```
|
|
147
174
|
|
|
175
|
+
多选刻意不做成 `mode` 属性:值类型属于 API 面,合并会把 `BizSelectProps.value` 拓宽成联合。
|
|
176
|
+
候选、搜索、展示转换、批量解析与单选完全共用;清空时输出 `undefined`(不是 `[]`),
|
|
177
|
+
这样 `required` 规则天然生效。
|
|
178
|
+
|
|
148
179
|
在 schema 里用,级联一行配完(先调一次 `registerBizSelectField()` 注册类型):
|
|
149
180
|
|
|
150
181
|
```tsx
|
|
@@ -160,11 +191,18 @@ defineSelectSources({
|
|
|
160
191
|
|
|
161
192
|
约定:
|
|
162
193
|
|
|
194
|
+
- 选项契约是 `{ value, label }`,和 antd 同词汇;后端 `{ code, name }`、`{ userId, userName }` 在源的
|
|
195
|
+
`recordFields` 上映射一次(`staticList(list, recordFields)`,`loaded(load, { recordFields })`,`remote({ recordFields })`)。
|
|
196
|
+
没声明就视为已经是 `{ value, label }`,不做自动嗅探。
|
|
163
197
|
- 行为由源的能力推导:`options` 前端常量、`load` 一次拉全量后前端过滤、`search` 后端搜索,三者可组合。
|
|
164
|
-
- `resolve(
|
|
198
|
+
- `resolve(value)` 专用于按值精确回显,不要用模糊搜索冒充。
|
|
165
199
|
- `requiredParams` 不齐时进入 `blocked`:候选为空、不发请求。
|
|
166
200
|
- `invalidateSelectSource(name)` 让已挂载的实例重新取数;`useCandidates` 可把同一份候选给树、弹窗复用。
|
|
201
|
+
- 表格列只有 id 时用 `useResolvedLabels` 批量解析:源声明了 `resolveMany` 才会合并成一次请求,
|
|
202
|
+
没声明就逐条(开发态告警一次)。有限枚举的列应该用 `load` 型源一次拉全量,不必逐条解析。
|
|
167
203
|
- 内联源要跨实例共享缓存,就传导入的函数或显式 `cacheKey`;内联箭头每次渲染都换键,缓存命中不了。
|
|
204
|
+
- 已经是 `{ value, label }` 形状的本地枚举(数据字典、常量表)直接 `staticList` 即可,不必再写 `recordFields`;
|
|
205
|
+
分组选项和树形选项不在范围内(契约是扁平结构)。详见 `src/biz-select/README.md` §4。
|
|
168
206
|
|
|
169
207
|
## 其他导出
|
|
170
208
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BizMultiSelect.d.ts","sourceRoot":"","sources":["../../src/biz-select/BizMultiSelect.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,mBAAmB,EAAqC,MAAM,SAAS,CAAC;AAetF,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,+BAyIxD"}
|
|
@@ -0,0 +1,124 @@
|
|
|
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 { useBizSource } from './useBizSource.js';
|
|
15
|
+
import { useCandidates } from './useCandidates.js';
|
|
16
|
+
import { useSelectedLabels } from './useSelectedLabels.js';
|
|
17
|
+
import { buildObjectValues, defaultSearchFields, readObjectLabels, readValues, toAntOption, } from './format.js';
|
|
18
|
+
const DEFAULT_BLOCKED_TEXT = '请先选择上级';
|
|
19
|
+
/** antd 在多选下回传的是已选项数组;单选偶发单个对象,两种都接住 */
|
|
20
|
+
function pickedOptions(antOption) {
|
|
21
|
+
const list = Array.isArray(antOption) ? antOption : antOption ? [antOption] : [];
|
|
22
|
+
const picked = [];
|
|
23
|
+
for (const item of list) {
|
|
24
|
+
const raw = item?.raw;
|
|
25
|
+
if (raw)
|
|
26
|
+
picked.push(raw);
|
|
27
|
+
}
|
|
28
|
+
return picked;
|
|
29
|
+
}
|
|
30
|
+
export function BizMultiSelect(props) {
|
|
31
|
+
const { source,
|
|
32
|
+
// 候选简写:等价于 source={{ options }},与 source 同给时以 source 为准
|
|
33
|
+
options: staticOptions, params, displayMode = 'L', searchFields, seedOptions, debounceMs, cacheKey, blockedText = DEFAULT_BLOCKED_TEXT, valueMode = 'primitive', valueFields, value, onChange, disabled, placeholder, ...rest } = props;
|
|
34
|
+
const codes = readValues(value, valueMode, valueFields);
|
|
35
|
+
const valueNames = readObjectLabels(value, valueMode, valueFields);
|
|
36
|
+
const effectiveSource = useBizSource(source, staticOptions);
|
|
37
|
+
const sourceObj = resolveSelectSource(effectiveSource);
|
|
38
|
+
const candidates = useCandidates({
|
|
39
|
+
source: effectiveSource,
|
|
40
|
+
cacheKey,
|
|
41
|
+
params,
|
|
42
|
+
searchFields: searchFields ?? defaultSearchFields(displayMode),
|
|
43
|
+
debounceMs,
|
|
44
|
+
});
|
|
45
|
+
const { sourceKey } = candidates;
|
|
46
|
+
const selected = useSelectedLabels({
|
|
47
|
+
source: effectiveSource,
|
|
48
|
+
cacheKey,
|
|
49
|
+
sourceKey,
|
|
50
|
+
codes,
|
|
51
|
+
valueNames,
|
|
52
|
+
seedOptions,
|
|
53
|
+
// 回显查未过滤全集,否则输入关键词后已选项会被筛掉、名称退回编码
|
|
54
|
+
candidates: candidates.echoOptions,
|
|
55
|
+
params,
|
|
56
|
+
});
|
|
57
|
+
// load 型没有 resolve,名称只能从全集里找:只要有编码说不清名字就先拉一次
|
|
58
|
+
const needEchoLoad = selected.status === 'missing' && normalizeSource(sourceObj).candidateMode === 'load';
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
if (needEchoLoad)
|
|
61
|
+
candidates.open();
|
|
62
|
+
}, [needEchoLoad, sourceKey, candidates.open]);
|
|
63
|
+
const byCode = useMemo(() => {
|
|
64
|
+
const map = new Map();
|
|
65
|
+
for (const option of candidates.options)
|
|
66
|
+
map.set(String(option.value), option);
|
|
67
|
+
for (const option of selected.options)
|
|
68
|
+
map.set(String(option.value), option);
|
|
69
|
+
return map;
|
|
70
|
+
}, [candidates.options, selected.options]);
|
|
71
|
+
/**
|
|
72
|
+
* 已选项始终补回候选。
|
|
73
|
+
*
|
|
74
|
+
* 单选在搜索态会跳过补回(避免结果里混进一条不匹配的记录),多选不能这么做:
|
|
75
|
+
* antd 的 tag 文本是从候选里查的,候选里没有就退化成裸编码,搜索时整排 tag 一起变编码,
|
|
76
|
+
* 比多一行已选项难看得多。
|
|
77
|
+
*/
|
|
78
|
+
const antOptions = useMemo(() => {
|
|
79
|
+
const list = candidates.options.map((item) => toAntOption(item, displayMode));
|
|
80
|
+
const present = new Set(list.map((item) => String(item.value)));
|
|
81
|
+
for (const option of selected.options) {
|
|
82
|
+
const key = String(option.value);
|
|
83
|
+
if (present.has(key))
|
|
84
|
+
continue;
|
|
85
|
+
present.add(key);
|
|
86
|
+
list.push(toAntOption(option, displayMode));
|
|
87
|
+
}
|
|
88
|
+
return list;
|
|
89
|
+
}, [candidates.options, selected.options, displayMode]);
|
|
90
|
+
const handleChange = (next, antOption) => {
|
|
91
|
+
const list = (Array.isArray(next) ? next : []).filter((item) => item !== undefined && item !== null && item !== '');
|
|
92
|
+
const emit = onChange;
|
|
93
|
+
// 清空给 undefined 而不是 []:与 ctx.clear() 一致,也让 required 规则天然生效
|
|
94
|
+
if (!list.length) {
|
|
95
|
+
emit?.(undefined, []);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
// 刚选中/刚取消的项 antd 会给回来:以它为准,再退回候选和已解析结果
|
|
99
|
+
const picked = new Map();
|
|
100
|
+
for (const option of pickedOptions(antOption))
|
|
101
|
+
picked.set(String(option.value), option);
|
|
102
|
+
const lookup = (code) => picked.get(String(code)) ?? byCode.get(String(code));
|
|
103
|
+
const options = list.map((code) => lookup(code) ?? { value: code });
|
|
104
|
+
if (valueMode === 'object') {
|
|
105
|
+
const objectMap = new Map();
|
|
106
|
+
for (const option of options)
|
|
107
|
+
objectMap.set(String(option.value), option);
|
|
108
|
+
emit?.(buildObjectValues(list, objectMap, valueFields), options);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
emit?.(list, options);
|
|
112
|
+
};
|
|
113
|
+
return (_jsx(Select, { ...rest, mode: "multiple",
|
|
114
|
+
// 候选由数据源决定,一律关掉 antd 自带过滤:本地过滤已在 hook 里做
|
|
115
|
+
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 ? (
|
|
116
|
+
// 失败得能重试:静默给一个空列表等于让用户以为「确实没有」
|
|
117
|
+
_jsx("a", { onClick: () => candidates.reload(), children: "\u52A0\u8F7D\u5931\u8D25\uFF0C\u70B9\u51FB\u91CD\u8BD5" })) : (rest.notFoundContent), onSearch: candidates.search, onChange: handleChange, onDropdownVisibleChange: (opened) => {
|
|
118
|
+
if (opened)
|
|
119
|
+
candidates.open();
|
|
120
|
+
else
|
|
121
|
+
candidates.resetKeyword();
|
|
122
|
+
} }));
|
|
123
|
+
}
|
|
124
|
+
//# 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":"AAeA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAa1D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,0BAA0B,+BAqDtE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
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 { useBizSource } from './useBizSource.js';
|
|
13
|
+
import { useCandidates } from './useCandidates.js';
|
|
14
|
+
import { useSelectedLabels } from './useSelectedLabels.js';
|
|
15
|
+
/** 与 read.tsx 的 MULTI_SEPARATOR 保持一致 */
|
|
16
|
+
const DEFAULT_SEPARATOR = '、';
|
|
17
|
+
/** 状态说明挂在 title 上:不能把「没查到」误认为「业务值为空」 */
|
|
18
|
+
const STATUS_TITLE = {
|
|
19
|
+
loading: '正在解析名称',
|
|
20
|
+
missing: '部分名称未找到,显示原始值',
|
|
21
|
+
blocked: '缺少必需参数,未解析名称',
|
|
22
|
+
error: '名称解析失败,显示原始值',
|
|
23
|
+
};
|
|
24
|
+
export function BizMultiSelectDisplay(props) {
|
|
25
|
+
const { source,
|
|
26
|
+
// 候选简写:等价于 source={{ options }}
|
|
27
|
+
options: staticOptions, params, displayMode = 'L', seedOptions, cacheKey, emptyText = EMPTY, valueMode = 'primitive', valueFields, value, separator = DEFAULT_SEPARATOR, } = props;
|
|
28
|
+
const effectiveSource = useBizSource(source, staticOptions);
|
|
29
|
+
const sourceObj = resolveSelectSource(effectiveSource);
|
|
30
|
+
const codes = readValues(value, valueMode, valueFields);
|
|
31
|
+
const valueNames = readObjectLabels(value, valueMode, valueFields);
|
|
32
|
+
// 只有 load 型需要为回显拉一次全集:它没有 resolve,名称只能从全集里找
|
|
33
|
+
const candidates = useCandidates({
|
|
34
|
+
source: effectiveSource,
|
|
35
|
+
cacheKey,
|
|
36
|
+
params,
|
|
37
|
+
searchFields: defaultSearchFields(displayMode),
|
|
38
|
+
});
|
|
39
|
+
const { sourceKey } = candidates;
|
|
40
|
+
const selected = useSelectedLabels({
|
|
41
|
+
source: effectiveSource,
|
|
42
|
+
cacheKey,
|
|
43
|
+
sourceKey,
|
|
44
|
+
codes,
|
|
45
|
+
valueNames,
|
|
46
|
+
seedOptions,
|
|
47
|
+
candidates: candidates.echoOptions,
|
|
48
|
+
params,
|
|
49
|
+
});
|
|
50
|
+
const needEchoLoad = selected.status === 'missing' && normalizeSource(sourceObj).candidateMode === 'load';
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
if (needEchoLoad)
|
|
53
|
+
candidates.open();
|
|
54
|
+
}, [needEchoLoad, sourceKey, candidates.open]);
|
|
55
|
+
if (!codes.length)
|
|
56
|
+
return _jsx(_Fragment, { children: emptyText });
|
|
57
|
+
// 只返回内容本身:外层 schema-field-read 由 SchemaField 统一包,
|
|
58
|
+
// 这里再套一层会得到双层 span。title 只在解析异常时挂。
|
|
59
|
+
const text = selected.options.map((option) => formatLabel(option, displayMode)).join(separator);
|
|
60
|
+
const title = STATUS_TITLE[selected.status];
|
|
61
|
+
return title ? _jsx("span", { title: title, children: text }) : _jsx(_Fragment, { children: text });
|
|
62
|
+
}
|
|
63
|
+
//# 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,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,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;IACN,gCAAgC;IAChC,OAAO,EAAE,aAAa,EACtB,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,eAAe,GAAG,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACvD,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,EAAE,eAAe;QACvB,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,EAAE,eAAe;QACvB,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":"
|
|
1
|
+
{"version":3,"file":"BizSelect.d.ts","sourceRoot":"","sources":["../../src/biz-select/BizSelect.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAa,cAAc,EAA0B,MAAM,SAAS,CAAC;AAIjF,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,+BAsH9C"}
|
|
@@ -9,19 +9,23 @@ import { useEffect, useMemo } from 'react';
|
|
|
9
9
|
import { Select } from 'antd';
|
|
10
10
|
import { normalizeSource } from './normalize.js';
|
|
11
11
|
import { resolveSelectSource } from './registry.js';
|
|
12
|
+
import { useBizSource } from './useBizSource.js';
|
|
12
13
|
import { useCandidates } from './useCandidates.js';
|
|
13
14
|
import { useSelectedLabel } from './useSelectedLabel.js';
|
|
14
|
-
import { buildObjectValue, defaultSearchFields,
|
|
15
|
+
import { buildObjectValue, defaultSearchFields, readObjectLabel, readValue, toAntOption, } from './format.js';
|
|
15
16
|
const DEFAULT_BLOCKED_TEXT = '请先选择上级';
|
|
16
17
|
export function BizSelect(props) {
|
|
17
|
-
const { source,
|
|
18
|
-
|
|
18
|
+
const { source,
|
|
19
|
+
// 候选简写:等价于 source={{ options }},与 source 同给时以 source 为准
|
|
20
|
+
options: staticOptions, params, displayMode = 'L', searchFields, seedOptions, debounceMs, cacheKey, blockedText = DEFAULT_BLOCKED_TEXT, valueMode = 'primitive', valueFields, value, onChange, disabled, placeholder, ...rest } = props;
|
|
21
|
+
const effectiveSource = useBizSource(source, staticOptions);
|
|
22
|
+
const sourceObj = resolveSelectSource(effectiveSource);
|
|
19
23
|
const fields = searchFields ?? defaultSearchFields(displayMode);
|
|
20
|
-
const code =
|
|
21
|
-
const valueName =
|
|
24
|
+
const code = readValue(value, valueMode, valueFields);
|
|
25
|
+
const valueName = readObjectLabel(value, valueMode, valueFields);
|
|
22
26
|
// 源直接交给 Hook:解析与来源键(含版本订阅)都在里面,组件不再自己算一份
|
|
23
27
|
const candidates = useCandidates({
|
|
24
|
-
source,
|
|
28
|
+
source: effectiveSource,
|
|
25
29
|
cacheKey,
|
|
26
30
|
params,
|
|
27
31
|
searchFields: fields,
|
|
@@ -40,7 +44,7 @@ export function BizSelect(props) {
|
|
|
40
44
|
});
|
|
41
45
|
// 只有 load 型需要为了回显提前拉一次全集:它没有 resolve,名称只能从全集里找。
|
|
42
46
|
// 对象值自带名称、seed 已命中时不用拉。
|
|
43
|
-
const hasKnownName = Boolean(valueName) || Boolean(seedOptions?.some((item) => item.
|
|
47
|
+
const hasKnownName = Boolean(valueName) || Boolean(seedOptions?.some((item) => item.value === code));
|
|
44
48
|
const needEchoLoad = code !== undefined && !hasKnownName && normalizeSource(sourceObj).candidateMode === 'load';
|
|
45
49
|
useEffect(() => {
|
|
46
50
|
if (needEchoLoad)
|
|
@@ -56,7 +60,7 @@ export function BizSelect(props) {
|
|
|
56
60
|
if (searching || candidates.error)
|
|
57
61
|
return list;
|
|
58
62
|
const selectedOption = selected.option;
|
|
59
|
-
if (selectedOption && !list.some((item) => item.value === selectedOption.
|
|
63
|
+
if (selectedOption && !list.some((item) => item.value === selectedOption.value)) {
|
|
60
64
|
list.unshift(toAntOption(selectedOption, displayMode));
|
|
61
65
|
}
|
|
62
66
|
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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BizSelectDisplay.d.ts","sourceRoot":"","sources":["../../src/biz-select/BizSelectDisplay.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BizSelectDisplay.d.ts","sourceRoot":"","sources":["../../src/biz-select/BizSelectDisplay.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAUrD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,+BAsD5D"}
|
|
@@ -6,33 +6,37 @@ 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
|
+
import { useBizSource } from './useBizSource.js';
|
|
12
13
|
import { useCandidates } from './useCandidates.js';
|
|
13
14
|
import { useSelectedLabel } from './useSelectedLabel.js';
|
|
14
15
|
/** 状态说明挂在 title 上:用户不能把「没查到」误认为「业务值为空」 */
|
|
15
16
|
const STATUS_TITLE = {
|
|
16
17
|
loading: '正在解析名称',
|
|
17
|
-
missing: '
|
|
18
|
+
missing: '未找到对应名称,显示原始值',
|
|
18
19
|
blocked: '缺少必需参数,未解析名称',
|
|
19
|
-
error: '
|
|
20
|
+
error: '名称解析失败,显示原始值',
|
|
20
21
|
};
|
|
21
22
|
export function BizSelectDisplay(props) {
|
|
22
|
-
const { source,
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const
|
|
23
|
+
const { source,
|
|
24
|
+
// 候选简写:等价于 source={{ options }}
|
|
25
|
+
options: staticOptions, params, displayMode = 'L', seedOptions, cacheKey, emptyText = EMPTY, valueMode = 'primitive', valueFields, value, } = props;
|
|
26
|
+
const effectiveSource = useBizSource(source, staticOptions);
|
|
27
|
+
const sourceObj = resolveSelectSource(effectiveSource);
|
|
28
|
+
const code = readValue(value, valueMode, valueFields);
|
|
29
|
+
const valueName = readObjectLabel(value, valueMode, valueFields);
|
|
26
30
|
// 只有 load 型需要为回显拉一次全集:它没有 resolve,名称只能从全集里找
|
|
27
31
|
const candidates = useCandidates({
|
|
28
|
-
source,
|
|
32
|
+
source: effectiveSource,
|
|
29
33
|
cacheKey,
|
|
30
34
|
params,
|
|
31
35
|
searchFields: defaultSearchFields(displayMode),
|
|
32
36
|
});
|
|
33
37
|
const { sourceKey } = candidates;
|
|
34
38
|
// 对象值自带名称、seed 已命中时不用为了回显拉全集
|
|
35
|
-
const hasKnownName = Boolean(valueName) || Boolean(seedOptions?.some((item) => item.
|
|
39
|
+
const hasKnownName = Boolean(valueName) || Boolean(seedOptions?.some((item) => item.value === code));
|
|
36
40
|
const needEchoLoad = code !== undefined && !hasKnownName && normalizeSource(sourceObj).candidateMode === 'load';
|
|
37
41
|
useEffect(() => {
|
|
38
42
|
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,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,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;IACN,gCAAgC;IAChC,OAAO,EAAE,aAAa,EACtB,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,eAAe,GAAG,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACvD,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,EAAE,eAAe;QACvB,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,24 @@
|
|
|
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
|
-
|
|
18
|
+
/** 静态候选简写,等价于 `source={{ options }}`;与 `source` 同给时以 `source` 为准 */
|
|
19
|
+
options?: BizOption[];
|
|
20
|
+
/** 参数名 ← 表单字段名(或字段值里的某个键):`{ provinceCode: 'provinceCode' }` */
|
|
21
|
+
paramsFrom?: Record<string, ParamsFromEntry>;
|
|
9
22
|
valueMode?: ValueMode;
|
|
10
23
|
valueFields?: ValueFieldMap;
|
|
11
24
|
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,oEAAoE;IACpE,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,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;AAiFD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,kBAAkB,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CA2BnF"}
|
|
@@ -7,6 +7,7 @@ import { dedupeNamePaths } from '../form/namePath.js';
|
|
|
7
7
|
/** 需要下沉到 props 的专有属性:组件只认 props */
|
|
8
8
|
const SUNK_KEYS = [
|
|
9
9
|
'source',
|
|
10
|
+
'options',
|
|
10
11
|
'valueMode',
|
|
11
12
|
'valueFields',
|
|
12
13
|
'displayMode',
|
|
@@ -15,13 +16,33 @@ const SUNK_KEYS = [
|
|
|
15
16
|
'blockedText',
|
|
16
17
|
'debounceMs',
|
|
17
18
|
];
|
|
19
|
+
function isPickEntry(entry) {
|
|
20
|
+
return typeof entry === 'object' && entry !== null && !Array.isArray(entry);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 取参数值。
|
|
24
|
+
*
|
|
25
|
+
* `pick` 取不到(父值为空、不是对象、没这个键)一律给 `undefined`,
|
|
26
|
+
* 交给下游的 `requiredParams` 去挡请求——这里不能回退成整个对象,
|
|
27
|
+
* 把对象当参数传给后端是静默错误,比不查难查得多。
|
|
28
|
+
*/
|
|
29
|
+
function readParam(entry, ctx) {
|
|
30
|
+
if (!isPickEntry(entry))
|
|
31
|
+
return ctx.get(entry);
|
|
32
|
+
const value = ctx.get(entry.from);
|
|
33
|
+
if (!value || typeof value !== 'object')
|
|
34
|
+
return undefined;
|
|
35
|
+
return value[entry.pick];
|
|
36
|
+
}
|
|
18
37
|
/**
|
|
19
38
|
* 把 `paramsFrom` 编译成已有的两套机制:
|
|
20
39
|
* - `dynamic`:订阅父字段,把值映射成 `params` 传给组件
|
|
21
40
|
* - `linkage`:父值变化时清空本字段
|
|
22
41
|
*/
|
|
23
42
|
function compileParamsFrom(schema, entries) {
|
|
24
|
-
|
|
43
|
+
// 依赖必须挂在 from 上:linkage 的清空匹配用的是一级字段名,
|
|
44
|
+
// 写成 ['user','userId'] 这种子路径,父值变化时不会触发清空
|
|
45
|
+
const deps = dedupeNamePaths(entries.map(([, entry]) => (isPickEntry(entry) ? entry.from : entry)));
|
|
25
46
|
const base = schema.dynamic;
|
|
26
47
|
const inheritedProps = base?.props;
|
|
27
48
|
// 静态固定条件(如 props.params: { enabled: true })必须保留,否则查询会放宽
|
|
@@ -33,7 +54,7 @@ function compileParamsFrom(schema, entries) {
|
|
|
33
54
|
props: (ctx) => {
|
|
34
55
|
const inherited = typeof inheritedProps === 'function' ? inheritedProps(ctx) : (inheritedProps ?? {});
|
|
35
56
|
const inheritedParams = inherited.params;
|
|
36
|
-
const mapped = Object.fromEntries(entries.map(([param,
|
|
57
|
+
const mapped = Object.fromEntries(entries.map(([param, entry]) => [param, readParam(entry, ctx)]));
|
|
37
58
|
// 合并顺序:静态 props.params < dynamic.props().params < paramsFrom 映射。
|
|
38
59
|
// 越靠后的越"当前",同名时覆盖前面的
|
|
39
60
|
return {
|
|
@@ -55,7 +76,8 @@ function compileParamsFrom(schema, entries) {
|
|
|
55
76
|
*/
|
|
56
77
|
export function normalizeBizSelectSchema(schema) {
|
|
57
78
|
const ext = schema;
|
|
58
|
-
|
|
79
|
+
// 单选多选共用同一套:级联参数和清空语义与值的形态无关
|
|
80
|
+
if (ext.type !== 'BizSelect' && ext.type !== 'BizMultiSelect')
|
|
59
81
|
return schema;
|
|
60
82
|
const sunk = {};
|
|
61
83
|
for (const key of SUNK_KEYS) {
|