@tianyr/schema-antd 0.1.0 → 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 +57 -12
- package/dist/SchemaField.d.ts +1 -1
- 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 +3 -0
- package/dist/biz-select/BizSelect.d.ts.map +1 -0
- package/dist/biz-select/BizSelect.js +87 -0
- package/dist/biz-select/BizSelect.js.map +1 -0
- package/dist/biz-select/BizSelectDisplay.d.ts +3 -0
- package/dist/biz-select/BizSelectDisplay.d.ts.map +1 -0
- package/dist/biz-select/BizSelectDisplay.js +58 -0
- package/dist/biz-select/BizSelectDisplay.js.map +1 -0
- package/dist/biz-select/cache.d.ts +23 -0
- package/dist/biz-select/cache.d.ts.map +1 -0
- package/dist/biz-select/cache.js +141 -0
- package/dist/biz-select/cache.js.map +1 -0
- package/dist/biz-select/compile.d.ts +36 -0
- package/dist/biz-select/compile.d.ts.map +1 -0
- package/dist/biz-select/compile.js +103 -0
- package/dist/biz-select/compile.js.map +1 -0
- package/dist/biz-select/factories.d.ts +32 -0
- package/dist/biz-select/factories.d.ts.map +1 -0
- package/dist/biz-select/factories.js +67 -0
- package/dist/biz-select/factories.js.map +1 -0
- package/dist/biz-select/format.d.ts +66 -0
- package/dist/biz-select/format.d.ts.map +1 -0
- package/dist/biz-select/format.js +175 -0
- package/dist/biz-select/format.js.map +1 -0
- package/dist/biz-select/index.d.ts +28 -0
- package/dist/biz-select/index.d.ts.map +1 -0
- package/dist/biz-select/index.js +26 -0
- package/dist/biz-select/index.js.map +1 -0
- package/dist/biz-select/key.d.ts +25 -0
- package/dist/biz-select/key.d.ts.map +1 -0
- package/dist/biz-select/key.js +83 -0
- package/dist/biz-select/key.js.map +1 -0
- package/dist/biz-select/normalize.d.ts +43 -0
- package/dist/biz-select/normalize.d.ts.map +1 -0
- package/dist/biz-select/normalize.js +49 -0
- package/dist/biz-select/normalize.js.map +1 -0
- package/dist/biz-select/registry.d.ts +15 -0
- package/dist/biz-select/registry.d.ts.map +1 -0
- package/dist/biz-select/registry.js +81 -0
- package/dist/biz-select/registry.js.map +1 -0
- 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 +5 -0
- package/dist/biz-select/schema.d.ts.map +1 -0
- package/dist/biz-select/schema.js +28 -0
- package/dist/biz-select/schema.js.map +1 -0
- package/dist/biz-select/source-id.d.ts +8 -0
- package/dist/biz-select/source-id.d.ts.map +1 -0
- package/dist/biz-select/source-id.js +10 -0
- package/dist/biz-select/source-id.js.map +1 -0
- package/dist/biz-select/types.d.ts +160 -0
- package/dist/biz-select/types.d.ts.map +1 -0
- package/dist/{app-select → biz-select}/types.js.map +1 -1
- package/dist/biz-select/useCandidates.d.ts +40 -0
- package/dist/biz-select/useCandidates.d.ts.map +1 -0
- package/dist/biz-select/useCandidates.js +292 -0
- package/dist/biz-select/useCandidates.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 +18 -0
- package/dist/biz-select/useSelectedLabel.d.ts.map +1 -0
- package/dist/biz-select/useSelectedLabel.js +156 -0
- package/dist/biz-select/useSelectedLabel.js.map +1 -0
- 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/biz-select/useStableSourceKey.d.ts +3 -0
- package/dist/biz-select/useStableSourceKey.d.ts.map +1 -0
- package/dist/biz-select/useStableSourceKey.js +48 -0
- package/dist/biz-select/useStableSourceKey.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/form/SchemaFormField.d.ts.map +1 -1
- package/dist/form/SchemaFormField.js +4 -3
- package/dist/form/SchemaFormField.js.map +1 -1
- package/dist/form/derive.d.ts +3 -8
- package/dist/form/derive.d.ts.map +1 -1
- package/dist/form/derive.js +28 -0
- package/dist/form/derive.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/registry.d.ts +6 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js.map +1 -1
- package/dist/types.d.ts +7 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/app-select/AppSelect.d.ts +0 -3
- package/dist/app-select/AppSelect.d.ts.map +0 -1
- package/dist/app-select/AppSelect.js +0 -56
- package/dist/app-select/AppSelect.js.map +0 -1
- package/dist/app-select/AppSelectDisplay.d.ts +0 -3
- package/dist/app-select/AppSelectDisplay.d.ts.map +0 -1
- package/dist/app-select/AppSelectDisplay.js +0 -39
- package/dist/app-select/AppSelectDisplay.js.map +0 -1
- package/dist/app-select/cache.d.ts +0 -26
- package/dist/app-select/cache.d.ts.map +0 -1
- package/dist/app-select/cache.js +0 -82
- package/dist/app-select/cache.js.map +0 -1
- package/dist/app-select/hooks.d.ts +0 -56
- package/dist/app-select/hooks.d.ts.map +0 -1
- package/dist/app-select/hooks.js +0 -322
- package/dist/app-select/hooks.js.map +0 -1
- package/dist/app-select/index.d.ts +0 -7
- package/dist/app-select/index.d.ts.map +0 -1
- package/dist/app-select/index.js +0 -6
- package/dist/app-select/index.js.map +0 -1
- package/dist/app-select/register.d.ts +0 -2
- package/dist/app-select/register.d.ts.map +0 -1
- package/dist/app-select/register.js +0 -10
- package/dist/app-select/register.js.map +0 -1
- package/dist/app-select/sources.d.ts +0 -20
- package/dist/app-select/sources.d.ts.map +0 -1
- package/dist/app-select/sources.js +0 -59
- package/dist/app-select/sources.js.map +0 -1
- package/dist/app-select/types.d.ts +0 -68
- package/dist/app-select/types.d.ts.map +0 -1
- package/dist/app-select/utils.d.ts +0 -30
- package/dist/app-select/utils.d.ts.map +0 -1
- package/dist/app-select/utils.js +0 -76
- package/dist/app-select/utils.js.map +0 -1
- /package/dist/{app-select → biz-select}/types.js +0 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 批量按值解析:把「一屏几十个编码各发一次」收成一次请求。
|
|
3
|
+
*
|
|
4
|
+
* 只在源声明了 `resolveMany` 时才批量;没声明就退回逐条,和以前完全一样。
|
|
5
|
+
* 所以这块是**加速**,不是新的解析体系:批量结果按编码拆开写进同一条
|
|
6
|
+
* `resolveCache`,之后任何单条 resolve 都直接命中。
|
|
7
|
+
*
|
|
8
|
+
* 为什么不放进组件:逐行 resolve 是表格列的需求,单个下拉只有一个值。
|
|
9
|
+
* 由页面显式调一次、把结果当 `seedOptions` 传下去,比在组件里攒时间窗更可预测
|
|
10
|
+
* ——批窗口对详情页是纯延迟,一次批量失败又会同时打掉整列的错误态。
|
|
11
|
+
*/
|
|
12
|
+
import { dropResolvedCache, peekResolved, resolveCodeWithCache } from './cache.js';
|
|
13
|
+
import { isEmptyValue } from './format.js';
|
|
14
|
+
import { lookupKeyOf, paramsKeyOf, resolveCacheKey } from './key.js';
|
|
15
|
+
import { hasRequiredParams } from './normalize.js';
|
|
16
|
+
/** 每批最多多少个编码。接口有更小的上限时由调用方传 batchSize */
|
|
17
|
+
export const DEFAULT_BATCH_SIZE = 100;
|
|
18
|
+
/**
|
|
19
|
+
* 单条解析:源只声明了批量接口时,批量一条等价于单条,
|
|
20
|
+
* 不必逼调用方再写一个一模一样的 `resolve`。
|
|
21
|
+
*/
|
|
22
|
+
export function resolveOne(source, value, params) {
|
|
23
|
+
if (source?.resolve)
|
|
24
|
+
return source.resolve(value, params);
|
|
25
|
+
if (!source?.resolveMany)
|
|
26
|
+
return Promise.resolve(null);
|
|
27
|
+
return source.resolveMany([value], params).then((list) => {
|
|
28
|
+
const hit = (list ?? []).find((item) => lookupKeyOf(item.value) === lookupKeyOf(value));
|
|
29
|
+
// 编码归一到调用方的类型:否则选项 value 与 Select 的 value 对不上,标签等于白解析
|
|
30
|
+
return hit ? { ...hit, value } : null;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/** 去掉空值、按 `lookupKeyOf` 去重,保持出现顺序 */
|
|
34
|
+
function uniqueCodes(codes) {
|
|
35
|
+
const seen = new Set();
|
|
36
|
+
const out = [];
|
|
37
|
+
for (const code of codes) {
|
|
38
|
+
if (isEmptyValue(code))
|
|
39
|
+
continue;
|
|
40
|
+
const key = lookupKeyOf(code);
|
|
41
|
+
if (seen.has(key))
|
|
42
|
+
continue;
|
|
43
|
+
seen.add(key);
|
|
44
|
+
out.push(code);
|
|
45
|
+
}
|
|
46
|
+
return out;
|
|
47
|
+
}
|
|
48
|
+
function chunkOf(list, size) {
|
|
49
|
+
const chunks = [];
|
|
50
|
+
for (let index = 0; index < list.length; index += size) {
|
|
51
|
+
chunks.push(list.slice(index, index + size));
|
|
52
|
+
}
|
|
53
|
+
return chunks;
|
|
54
|
+
}
|
|
55
|
+
function indexByCode(list) {
|
|
56
|
+
const map = new Map();
|
|
57
|
+
for (const option of list ?? []) {
|
|
58
|
+
if (!option || isEmptyValue(option.value))
|
|
59
|
+
continue;
|
|
60
|
+
map.set(lookupKeyOf(option.value), option);
|
|
61
|
+
}
|
|
62
|
+
return map;
|
|
63
|
+
}
|
|
64
|
+
export async function resolveCodes(options) {
|
|
65
|
+
const { source, sourceKey, batchSize = DEFAULT_BATCH_SIZE } = options;
|
|
66
|
+
const params = options.params ?? {};
|
|
67
|
+
const paramsKey = paramsKeyOf(options.params);
|
|
68
|
+
const scope = options.scope ?? source?.namespace?.() ?? '';
|
|
69
|
+
const byCode = new Map();
|
|
70
|
+
const missing = [];
|
|
71
|
+
const unique = uniqueCodes(options.codes);
|
|
72
|
+
if (!unique.length)
|
|
73
|
+
return { byCode, missing, blocked: false, requests: 0 };
|
|
74
|
+
// 缺参数时不查:用空条件查可能拿到别家数据,批量只会放大这个问题
|
|
75
|
+
if (!hasRequiredParams(source?.requiredParams, params)) {
|
|
76
|
+
return { byCode, missing: unique.map(lookupKeyOf), blocked: true, requests: 0 };
|
|
77
|
+
}
|
|
78
|
+
const collect = (code, option) => {
|
|
79
|
+
if (!option) {
|
|
80
|
+
missing.push(lookupKeyOf(code));
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
// 接口可能把 1 回成 '1':值类型归到调用方给的那个,展示与回显才对得上
|
|
84
|
+
byCode.set(lookupKeyOf(code), option.value === code ? option : { ...option, value: code });
|
|
85
|
+
};
|
|
86
|
+
const waits = [];
|
|
87
|
+
const misses = [];
|
|
88
|
+
for (const code of unique) {
|
|
89
|
+
const key = resolveCacheKey(scope, sourceKey, code, paramsKey);
|
|
90
|
+
if (options.force)
|
|
91
|
+
dropResolvedCache(key);
|
|
92
|
+
const hit = peekResolved(key);
|
|
93
|
+
if (hit) {
|
|
94
|
+
// 已解析过的不占批量请求的位置
|
|
95
|
+
waits.push(hit.then((option) => collect(code, option)));
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
misses.push(code);
|
|
99
|
+
}
|
|
100
|
+
let requests = 0;
|
|
101
|
+
for (const codes of chunkOf(misses, Math.max(1, batchSize))) {
|
|
102
|
+
if (source?.resolveMany) {
|
|
103
|
+
requests += 1;
|
|
104
|
+
const index = source.resolveMany(codes, params).then(indexByCode);
|
|
105
|
+
for (const code of codes) {
|
|
106
|
+
const key = resolveCacheKey(scope, sourceKey, code, paramsKey);
|
|
107
|
+
// 逐条登记:同键的单条请求能和这批共享同一份 promise,批量不会绕开在途去重
|
|
108
|
+
const pending = resolveCodeWithCache(key, () => index.then((map) => map.get(lookupKeyOf(code)) ?? null));
|
|
109
|
+
waits.push(pending.then((option) => collect(code, option)));
|
|
110
|
+
}
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
// 没有批量接口就是逐条,和以前一样;调用方据 requests 判断该不该加接口
|
|
114
|
+
for (const code of codes) {
|
|
115
|
+
requests += 1;
|
|
116
|
+
const key = resolveCacheKey(scope, sourceKey, code, paramsKey);
|
|
117
|
+
waits.push(resolveCodeWithCache(key, () => resolveOne(source, code, params)).then((option) => collect(code, option)));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// 批量失败时这一片全部落空:不自动降级成逐条重试,否则一次故障会放大成 N 个请求
|
|
121
|
+
await Promise.all(waits);
|
|
122
|
+
return { byCode, missing, blocked: false, requests };
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=resolveBatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveBatch.js","sourceRoot":"","sources":["../../src/biz-select/resolveBatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/biz-select/schema.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAGrD,OAAO,EAAE,wBAAwB,EAAE,CAAC;AACpC,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEvE,wBAAgB,sBAAsB,IAAI,IAAI,CA+B7C"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* BizSelect 的字段类型注册。
|
|
4
|
+
*
|
|
5
|
+
* 刻意不自动执行:包默认只提供标准 antd 控件,使用方需要时调一次
|
|
6
|
+
* `registerBizSelectField()`。单选和多选一起注册,不然使用方要记住调两次。
|
|
7
|
+
*/
|
|
8
|
+
import { registerField } from '../registry.js';
|
|
9
|
+
import { BizMultiSelect } from './BizMultiSelect.js';
|
|
10
|
+
import { BizMultiSelectDisplay } from './BizMultiSelectDisplay.js';
|
|
11
|
+
import { BizSelect } from './BizSelect.js';
|
|
12
|
+
import { BizSelectDisplay } from './BizSelectDisplay.js';
|
|
13
|
+
import { normalizeBizSelectSchema } from './compile.js';
|
|
14
|
+
export { normalizeBizSelectSchema };
|
|
15
|
+
export function registerBizSelectField() {
|
|
16
|
+
registerField('BizSelect', {
|
|
17
|
+
component: BizSelect,
|
|
18
|
+
normalize: normalizeBizSelectSchema,
|
|
19
|
+
// 只读态复用同一套解析,不挂载交互组件
|
|
20
|
+
renderRead: (value, props) => (_jsx(BizSelectDisplay, { value: value, ...props })),
|
|
21
|
+
}, { override: true });
|
|
22
|
+
registerField('BizMultiSelect', {
|
|
23
|
+
component: BizMultiSelect,
|
|
24
|
+
normalize: normalizeBizSelectSchema,
|
|
25
|
+
renderRead: (value, props) => (_jsx(BizMultiSelectDisplay, { value: value, ...props })),
|
|
26
|
+
}, { override: true });
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/biz-select/schema.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAGrD,OAAO,EAAE,wBAAwB,EAAE,CAAC;AAGpC,MAAM,UAAU,sBAAsB;IACpC,aAAa,CACX,WAAW,EACX;QACE,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,wBAAwB;QACnC,qBAAqB;QACrB,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAC5B,KAAC,gBAAgB,IACf,KAAK,EAAE,KAAc,KAChB,KAA0C,GAC/C,CACH;KACF,EACD,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB,CAAC;IAEF,aAAa,CACX,gBAAgB,EAChB;QACE,SAAS,EAAE,cAAc;QACzB,SAAS,EAAE,wBAAwB;QACnC,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAC5B,KAAC,qBAAqB,IACpB,KAAK,EAAE,KAAc,KAChB,KAA+C,GACpD,CACH;KACF,EACD,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-id.d.ts","sourceRoot":"","sources":["../../src/biz-select/source-id.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-id.js","sourceRoot":"","sources":["../../src/biz-select/source-id.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAe;IACzD,OAAO,KAAK,IAAI,IAAI,OAAO,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BizSelect 的类型契约。
|
|
3
|
+
*
|
|
4
|
+
* 对外只有一个「数据源」概念:能给出候选、能按值解析名称。
|
|
5
|
+
* 具体是前端常量、一次拉全量还是关键词翻页,由源**提供了哪些能力**决定,
|
|
6
|
+
* 不再用 kind 之类的标签分类。
|
|
7
|
+
*
|
|
8
|
+
* 选项统一用 `value` / `label`:组件是渲染层,和 antd 同词汇,存量字典可以直接用。
|
|
9
|
+
* 后端记录叫 `code` / `name`、`userId` / `userName` 都不影响契约——
|
|
10
|
+
* 那是数据入口的方言,由源的 `recordFields` 映射一次,运行时只有一种形状。
|
|
11
|
+
*/
|
|
12
|
+
import type { ReactNode } from 'react';
|
|
13
|
+
import type { SelectProps } from 'antd';
|
|
14
|
+
export type SelectValue = string | number;
|
|
15
|
+
/**
|
|
16
|
+
* 契约层的标准选项。
|
|
17
|
+
*
|
|
18
|
+
* `label` 刻意限定为字符串:它要参与前端过滤匹配、要回写进对象值。
|
|
19
|
+
* 富文本标签不在范围内,需要时走 `renderRead` 或注册自定义字段类型。
|
|
20
|
+
*/
|
|
21
|
+
export interface BizOption<T = unknown> {
|
|
22
|
+
value: SelectValue;
|
|
23
|
+
label?: string;
|
|
24
|
+
disabled?: boolean;
|
|
25
|
+
/** 原始接口记录,原样带回给业务回调 */
|
|
26
|
+
raw?: T;
|
|
27
|
+
}
|
|
28
|
+
/** 展示模式:值 / 值-名称 / 名称 */
|
|
29
|
+
export type DisplayMode = 'V' | 'V-L' | 'L';
|
|
30
|
+
/** 前端过滤时匹配哪些字段 */
|
|
31
|
+
export type SearchFields = 'value' | 'label' | 'both';
|
|
32
|
+
/** 值形态:标量值,或自带名称的对象 */
|
|
33
|
+
export type ValueMode = 'primitive' | 'object';
|
|
34
|
+
/**
|
|
35
|
+
* 源返回的记录里,哪个字段是值、哪个字段是名称。
|
|
36
|
+
* 不给就按 `{ value, label }` 原样使用。
|
|
37
|
+
*
|
|
38
|
+
* 和 `ValueFieldMap` 是两条通道,只是形状相同:
|
|
39
|
+
* - 本类型在**源工厂**上声明,管「接口记录怎么读」(`tenantUserId` → `value`)
|
|
40
|
+
* - `ValueFieldMap` 在组件 / schema 上声明,管「值对象怎么存」(`userId` → 值)
|
|
41
|
+
*/
|
|
42
|
+
export interface RecordFieldNames {
|
|
43
|
+
value?: string;
|
|
44
|
+
label?: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 对象值里哪个键装值、哪个键装名称。
|
|
48
|
+
* 默认 `{ value: 'value', label: 'label' }`;后端存 `{ code, name }` 时配成对应的键。
|
|
49
|
+
*
|
|
50
|
+
* 只管存储形状,不参与读接口记录,见 `RecordFieldNames`。
|
|
51
|
+
*/
|
|
52
|
+
export interface ValueFieldMap {
|
|
53
|
+
value?: string;
|
|
54
|
+
label?: string;
|
|
55
|
+
}
|
|
56
|
+
export type SelectParams = Record<string, unknown>;
|
|
57
|
+
/** 对象形态的值;具体键名由 valueFields 决定,所以只能约束到 Record */
|
|
58
|
+
export type BizObjectValue = Record<string, unknown>;
|
|
59
|
+
/** 多选的值:标量数组或对象数组 */
|
|
60
|
+
export type SelectValues = SelectValue[] | BizObjectValue[];
|
|
61
|
+
/**
|
|
62
|
+
* 数据源契约。只有能力声明,不认识 URL、method、低代码控件配置。
|
|
63
|
+
*
|
|
64
|
+
* 行为推导:
|
|
65
|
+
* - 只有 `options` → 同步全集,前端过滤
|
|
66
|
+
* - 只有 `load` → 需要时加载一次,前端过滤
|
|
67
|
+
* - 只有 `search` → 后端过滤
|
|
68
|
+
* - `load` + `search` → 空关键词走 load 缓存,有关键词走后端
|
|
69
|
+
*/
|
|
70
|
+
export interface SelectSource<P extends SelectParams = SelectParams> {
|
|
71
|
+
/** 同步全集:纯前端常量,没有请求也没有 loading */
|
|
72
|
+
options?: BizOption[];
|
|
73
|
+
/** 异步全集:一次拉完,之后前端过滤 */
|
|
74
|
+
load?: (params: P, signal?: AbortSignal) => Promise<BizOption[]>;
|
|
75
|
+
/** 关键词搜索:分页接口固定取第一页 */
|
|
76
|
+
search?: (keyword: string, params: P, signal?: AbortSignal) => Promise<BizOption[]>;
|
|
77
|
+
/** 按值精确查:远程回显,不能用模糊搜索冒充 */
|
|
78
|
+
resolve?: (value: SelectValue, params: P, signal?: AbortSignal) => Promise<BizOption | null>;
|
|
79
|
+
/**
|
|
80
|
+
* 批量按值精确查:一屏几十个编码收成一次请求。
|
|
81
|
+
*
|
|
82
|
+
* 只有接口真的支持 IN 过滤时才声明——参数名对不上、或有返回条数上限都不算支持,
|
|
83
|
+
* 声明了却查不全,会把「接口没返回」当成「记录不存在」。
|
|
84
|
+
* 返回的记录和 `search` 用同一份 `recordFields`;形状不同就在函数里先归一化。
|
|
85
|
+
*/
|
|
86
|
+
resolveMany?: (values: SelectValue[], params: P, signal?: AbortSignal) => Promise<BizOption[]>;
|
|
87
|
+
/** 缺任一参数就不发请求:用空条件查可能拿到别家数据 */
|
|
88
|
+
requiredParams?: string[];
|
|
89
|
+
/** 租户/权限隔离,参与缓存键 */
|
|
90
|
+
namespace?: () => string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 受控通道与搜索协议由组件接管,这些属性传进来要么被静默忽略、要么直接把控件弄坏:
|
|
94
|
+
* - `searchValue`:antd 的受控搜索框,传了会锁死用户输入(组件自己维护 keyword)
|
|
95
|
+
* - `showSearch` / `filterOption` / `optionFilterProp` / `onSearch`:搜索行为由源的能力决定
|
|
96
|
+
* - `optionLabelProp`:标签取哪个字段由 displayMode 决定
|
|
97
|
+
*/
|
|
98
|
+
type BaseAntProps = Omit<SelectProps, 'value' | 'defaultValue' | 'onChange' | 'options' | 'labelInValue' | 'mode' | 'onSearch' | 'searchValue' | 'showSearch' | 'filterOption' | 'optionFilterProp' | 'optionLabelProp'>;
|
|
99
|
+
/** 与 antd 无关的公共属性:可编辑与只读都吃这一份 */
|
|
100
|
+
interface CoreProps {
|
|
101
|
+
/** 注册名或内联源;schema 里只能是字符串 */
|
|
102
|
+
source?: string | SelectSource;
|
|
103
|
+
/** 传给 load/search/resolve,参与缓存键 */
|
|
104
|
+
params?: SelectParams;
|
|
105
|
+
/** 下拉与回显文本,默认 L */
|
|
106
|
+
displayMode?: DisplayMode;
|
|
107
|
+
/** 前端过滤匹配的字段,缺省随 displayMode 推导 */
|
|
108
|
+
searchFields?: SearchFields;
|
|
109
|
+
/** 详情已带回的候选,省掉一次 resolve */
|
|
110
|
+
seedOptions?: BizOption[];
|
|
111
|
+
/** 远程搜索防抖,默认 300ms */
|
|
112
|
+
debounceMs?: number;
|
|
113
|
+
/** 内联源需要跨实例共享缓存时显式指定 */
|
|
114
|
+
cacheKey?: string;
|
|
115
|
+
/** 门禁提示文案 */
|
|
116
|
+
blockedText?: ReactNode;
|
|
117
|
+
valueMode?: ValueMode;
|
|
118
|
+
/** 对象值里哪个键装值/名称,默认 `{ value, label }` */
|
|
119
|
+
valueFields?: ValueFieldMap;
|
|
120
|
+
}
|
|
121
|
+
interface PrimitiveModeProps {
|
|
122
|
+
valueMode?: 'primitive';
|
|
123
|
+
value?: SelectValue | null;
|
|
124
|
+
onChange?: (value: SelectValue | undefined, option?: BizOption) => void;
|
|
125
|
+
}
|
|
126
|
+
interface ObjectModeProps {
|
|
127
|
+
valueMode: 'object';
|
|
128
|
+
value?: BizObjectValue | null;
|
|
129
|
+
onChange?: (value: BizObjectValue | undefined, option?: BizOption) => void;
|
|
130
|
+
}
|
|
131
|
+
export type BizSelectProps = CoreProps & BaseAntProps & (PrimitiveModeProps | ObjectModeProps);
|
|
132
|
+
export interface BizSelectDisplayProps extends CoreProps {
|
|
133
|
+
value?: SelectValue | BizObjectValue | null;
|
|
134
|
+
/** 只读占位 */
|
|
135
|
+
emptyText?: ReactNode;
|
|
136
|
+
}
|
|
137
|
+
interface MultiPrimitiveModeProps {
|
|
138
|
+
valueMode?: 'primitive';
|
|
139
|
+
value?: SelectValue[] | SelectValue | null;
|
|
140
|
+
/**
|
|
141
|
+
* 清空时给 `undefined` 而不是 `[]`:与 `ctx.clear()` 一致,
|
|
142
|
+
* 也让 antd 的 `required` 规则天然生效(它拿空数组没辙)。
|
|
143
|
+
*/
|
|
144
|
+
onChange?: (value: SelectValue[] | undefined, options: BizOption[]) => void;
|
|
145
|
+
}
|
|
146
|
+
interface MultiObjectModeProps {
|
|
147
|
+
valueMode: 'object';
|
|
148
|
+
value?: BizObjectValue[] | BizObjectValue | null;
|
|
149
|
+
onChange?: (value: BizObjectValue[] | undefined, options: BizOption[]) => void;
|
|
150
|
+
}
|
|
151
|
+
export type BizMultiSelectProps = CoreProps & BaseAntProps & (MultiPrimitiveModeProps | MultiObjectModeProps);
|
|
152
|
+
export interface BizMultiSelectDisplayProps extends CoreProps {
|
|
153
|
+
value?: SelectValues | SelectValue | BizObjectValue | null;
|
|
154
|
+
/** 只读占位 */
|
|
155
|
+
emptyText?: ReactNode;
|
|
156
|
+
/** 多值分隔符,默认 `、`(与 read.tsx 保持一致) */
|
|
157
|
+
separator?: string;
|
|
158
|
+
}
|
|
159
|
+
export {};
|
|
160
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/biz-select/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/biz-select/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { BizOption, SearchFields, SelectParams, SelectSource } from './types.js';
|
|
2
|
+
export interface UseCandidatesOptions {
|
|
3
|
+
/**
|
|
4
|
+
* 注册名或内联源。解析与来源键都在 Hook 内完成:
|
|
5
|
+
* 让调用方自己拼 sourceKey 就会绕开注册名的版本身份,组件和 Hook 表现不一致。
|
|
6
|
+
*/
|
|
7
|
+
source?: string | SelectSource;
|
|
8
|
+
/** 内联源需要跨实例共享缓存时显式指定;注册名自带稳定键 */
|
|
9
|
+
cacheKey?: string;
|
|
10
|
+
params?: SelectParams;
|
|
11
|
+
/** 前端过滤匹配哪些字段 */
|
|
12
|
+
searchFields: SearchFields;
|
|
13
|
+
debounceMs?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface UseCandidatesResult {
|
|
16
|
+
/** 解析后的来源键,和组件用的是同一个身份;要传给别的 Hook 时直接用它 */
|
|
17
|
+
sourceKey: string;
|
|
18
|
+
/** 当前该给下拉看的候选:本地过滤型已按 keyword 过滤 */
|
|
19
|
+
options: BizOption[];
|
|
20
|
+
/**
|
|
21
|
+
* 回显专用候选:优先取未过滤的全集。
|
|
22
|
+
* 已选中的项可能被关键词过滤掉,用它查名称才不会退回编码。
|
|
23
|
+
*/
|
|
24
|
+
echoOptions: BizOption[];
|
|
25
|
+
/** 当前关键词:搜索中不要往结果里补回已选项 */
|
|
26
|
+
keyword: string;
|
|
27
|
+
loading: boolean;
|
|
28
|
+
error: boolean;
|
|
29
|
+
/** 缺少必需参数,主动不查 */
|
|
30
|
+
blocked: boolean;
|
|
31
|
+
/** 展开下拉:`load` 型在这里才发第一次请求 */
|
|
32
|
+
open(): void;
|
|
33
|
+
/** 输入关键词:后端搜索型防抖请求;本地过滤型只更新关键字 */
|
|
34
|
+
search(keyword: string): void;
|
|
35
|
+
/** 收起下拉时清掉关键字:不发请求,避免下次打开看到上次的过滤结果 */
|
|
36
|
+
resetKeyword(): void;
|
|
37
|
+
reload(): void;
|
|
38
|
+
}
|
|
39
|
+
export declare function useCandidates({ source: sourceProp, cacheKey, params, searchFields, debounceMs, }: UseCandidatesOptions): UseCandidatesResult;
|
|
40
|
+
//# sourceMappingURL=useCandidates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCandidates.d.ts","sourceRoot":"","sources":["../../src/biz-select/useCandidates.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGnF,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAC/B,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,iBAAiB;IACjB,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB;;;OAGG;IACH,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,kBAAkB;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,IAAI,IAAI,IAAI,CAAC;IACb,kCAAkC;IAClC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,sCAAsC;IACtC,YAAY,IAAI,IAAI,CAAC;IACrB,MAAM,IAAI,IAAI,CAAC;CAChB;AAuBD,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EAAE,UAAU,EAClB,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,UAAgB,GACjB,EAAE,oBAAoB,GAAG,mBAAmB,CA0S5C"}
|