@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
|
@@ -27,7 +27,10 @@ export interface SourceCapability {
|
|
|
27
27
|
canLocalFilter: boolean;
|
|
28
28
|
/** 搜索交给后端 */
|
|
29
29
|
canSearch: boolean;
|
|
30
|
+
/** 能按值精确回显:单条或批量任一即可 */
|
|
30
31
|
canResolve: boolean;
|
|
32
|
+
/** 声明了批量接口,表格列可以一次查多条 */
|
|
33
|
+
canResolveMany: boolean;
|
|
31
34
|
requiredParams: string[];
|
|
32
35
|
namespace?: () => string;
|
|
33
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/biz-select/normalize.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE1D,MAAM,MAAM,aAAa;AACvB,gBAAgB;AACd,MAAM;AACR,oBAAoB;GAClB,MAAM;AACR,oBAAoB;GAClB,QAAQ;AACV,sBAAsB;GACpB,QAAQ;AACV,6BAA6B;GAC3B,MAAM;AACR,mBAAmB;GACjB,SAAS,CAAC;AAEd,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,aAAa,EAAE,aAAa,CAAC;IAC7B,gBAAgB;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/biz-select/normalize.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE1D,MAAM,MAAM,aAAa;AACvB,gBAAgB;AACd,MAAM;AACR,oBAAoB;GAClB,MAAM;AACR,oBAAoB;GAClB,QAAQ;AACV,sBAAsB;GACpB,QAAQ;AACV,6BAA6B;GAC3B,MAAM;AACR,mBAAmB;GACjB,SAAS,CAAC;AAEd,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,aAAa,EAAE,aAAa,CAAC;IAC7B,gBAAgB;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,wBAAwB;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,yBAAyB;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,gBAAgB,CA2BvE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,EAC9B,MAAM,EAAE,YAAY,GAAG,SAAS,GAC/B,OAAO,CAQT"}
|
|
@@ -2,7 +2,9 @@ export function normalizeSource(source) {
|
|
|
2
2
|
const hasOptions = Array.isArray(source?.options);
|
|
3
3
|
const canLoad = typeof source?.load === 'function';
|
|
4
4
|
const canSearch = typeof source?.search === 'function';
|
|
5
|
-
const
|
|
5
|
+
const canResolveMany = typeof source?.resolveMany === 'function';
|
|
6
|
+
// 只有批量接口也能单条用:批量一条就是单条,不必逼调用方再写一个 resolve
|
|
7
|
+
const canResolve = typeof source?.resolve === 'function' || canResolveMany;
|
|
6
8
|
let candidateMode;
|
|
7
9
|
if (hasOptions)
|
|
8
10
|
candidateMode = 'sync';
|
|
@@ -23,6 +25,7 @@ export function normalizeSource(source) {
|
|
|
23
25
|
canLocalFilter: hasOptions || canLoad,
|
|
24
26
|
canSearch,
|
|
25
27
|
canResolve,
|
|
28
|
+
canResolveMany,
|
|
26
29
|
requiredParams: source?.requiredParams ?? [],
|
|
27
30
|
namespace: source?.namespace,
|
|
28
31
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/biz-select/normalize.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/biz-select/normalize.ts"],"names":[],"mappings":"AAuCA,MAAM,UAAU,eAAe,CAAC,MAAqB;IACnD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,OAAO,MAAM,EAAE,IAAI,KAAK,UAAU,CAAC;IACnD,MAAM,SAAS,GAAG,OAAO,MAAM,EAAE,MAAM,KAAK,UAAU,CAAC;IACvD,MAAM,cAAc,GAAG,OAAO,MAAM,EAAE,WAAW,KAAK,UAAU,CAAC;IACjE,0CAA0C;IAC1C,MAAM,UAAU,GAAG,OAAO,MAAM,EAAE,OAAO,KAAK,UAAU,IAAI,cAAc,CAAC;IAE3E,IAAI,aAA4B,CAAC;IACjC,IAAI,UAAU;QAAE,aAAa,GAAG,MAAM,CAAC;SAClC,IAAI,OAAO,IAAI,SAAS;QAAE,aAAa,GAAG,QAAQ,CAAC;SACnD,IAAI,OAAO;QAAE,aAAa,GAAG,MAAM,CAAC;SACpC,IAAI,SAAS;QAAE,aAAa,GAAG,QAAQ,CAAC;SACxC,IAAI,UAAU;QAAE,aAAa,GAAG,MAAM,CAAC;;QACvC,aAAa,GAAG,SAAS,CAAC;IAE/B,OAAO;QACL,MAAM;QACN,aAAa;QACb,UAAU,EAAE,aAAa,KAAK,MAAM,IAAI,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,QAAQ;QAChG,cAAc,EAAE,UAAU,IAAI,OAAO;QACrC,SAAS;QACT,UAAU;QACV,cAAc;QACd,cAAc,EAAE,MAAM,EAAE,cAAc,IAAI,EAAE;QAC5C,SAAS,EAAE,MAAM,EAAE,SAAS;KAC7B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAA8B,EAC9B,MAAgC;IAEhC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;YAAE,OAAO,KAAK,CAAC;QACxE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import type { SelectSource } from './types.js';
|
|
2
2
|
export declare function subscribeSelectSourceVersion(name: string, listener: () => void): () => void;
|
|
3
3
|
export declare function registerSelectSource(name: string, source: SelectSource): void;
|
|
4
|
-
/**
|
|
5
|
-
|
|
4
|
+
/**
|
|
5
|
+
* 批量注册:应用启动时一次写完。
|
|
6
|
+
*
|
|
7
|
+
* 传 `scope` 时注册名会拼成 `${scope}:${name}`,用于页面私有源与全局源共存;
|
|
8
|
+
* 返回值是「短名 → 最终注册名」的映射,使用点写 `S.province` 即可,不用手写前缀。
|
|
9
|
+
*
|
|
10
|
+
* 名字和 scope 只做合法性告警,不拒绝注册(空名字跳过该条):注册发生在模块顶层
|
|
11
|
+
* (eager import 的启动期),抛错会连带整个子应用起不来。同名仍然是后注册覆盖,这是既有行为。
|
|
12
|
+
*/
|
|
13
|
+
export declare function defineSelectSources<T extends Record<string, SelectSource>>(map: T, scope?: string): {
|
|
14
|
+
[K in keyof T]: string;
|
|
15
|
+
};
|
|
6
16
|
export declare function unregisterSelectSource(name: string): void;
|
|
7
17
|
/** 让已挂载的实例重新取数:版本 +1 换 key,同时清掉旧结果 */
|
|
8
18
|
export declare function invalidateSelectSource(name: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/biz-select/registry.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAY5C,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAQ3F;AAYD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAM7E;AAED
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/biz-select/registry.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAY5C,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAQ3F;AAYD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAM7E;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EACxE,GAAG,EAAE,CAAC,EACN,KAAK,CAAC,EAAE,MAAM,GACb;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CAAE,CAyB5B;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAKzD;AAED,sCAAsC;AACtC,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIzD;AAED,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEvE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,+BAA+B;AAC/B,wBAAgB,mBAAmB,CACjC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,GAC7B,YAAY,GAAG,SAAS,CAG1B;AAED,wBAAgB,8BAA8B,IAAI,MAAM,EAAE,CAEzD;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAMzC"}
|
|
@@ -39,10 +39,35 @@ export function registerSelectSource(name, source) {
|
|
|
39
39
|
// 同名重注册(HMR / 动态切换)后旧缓存不再代表当前实现
|
|
40
40
|
clearPrevious(name, previous);
|
|
41
41
|
}
|
|
42
|
-
/**
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
/**
|
|
43
|
+
* 批量注册:应用启动时一次写完。
|
|
44
|
+
*
|
|
45
|
+
* 传 `scope` 时注册名会拼成 `${scope}:${name}`,用于页面私有源与全局源共存;
|
|
46
|
+
* 返回值是「短名 → 最终注册名」的映射,使用点写 `S.province` 即可,不用手写前缀。
|
|
47
|
+
*
|
|
48
|
+
* 名字和 scope 只做合法性告警,不拒绝注册(空名字跳过该条):注册发生在模块顶层
|
|
49
|
+
* (eager import 的启动期),抛错会连带整个子应用起不来。同名仍然是后注册覆盖,这是既有行为。
|
|
50
|
+
*/
|
|
51
|
+
export function defineSelectSources(map, scope) {
|
|
52
|
+
const prefix = scope && scope.length > 0 ? scope : undefined;
|
|
53
|
+
if (prefix && (prefix.includes(':') || /\s/.test(prefix))) {
|
|
54
|
+
console.warn(`[schema] defineSelectSources 的 scope 不合法: ${JSON.stringify(prefix)};` +
|
|
55
|
+
'应为非空、不含 ":" 与空白的短标识。仍按原样注册。');
|
|
56
|
+
}
|
|
57
|
+
const names = {};
|
|
58
|
+
for (const [name, source] of Object.entries(map)) {
|
|
59
|
+
if (!name) {
|
|
60
|
+
console.warn('[schema] defineSelectSources 存在空注册名,已跳过');
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (name.includes(':')) {
|
|
64
|
+
console.warn(`[schema] 数据源名不应包含 ":"(前缀由 scope 生成): ${JSON.stringify(name)};仍按原样注册。`);
|
|
65
|
+
}
|
|
66
|
+
const key = prefix ? `${prefix}:${name}` : name;
|
|
67
|
+
registerSelectSource(key, source);
|
|
68
|
+
names[name] = key;
|
|
69
|
+
}
|
|
70
|
+
return names;
|
|
46
71
|
}
|
|
47
72
|
export function unregisterSelectSource(name) {
|
|
48
73
|
const previous = versions.get(name) ?? 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/biz-select/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;AAChD,uCAAuC;AACvC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE3C;;;GAGG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA2B,CAAC;AAE5D,MAAM,UAAU,4BAA4B,CAAC,IAAY,EAAE,QAAoB;IAC7E,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAc,CAAC;IACtE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACtC,OAAO,GAAG,EAAE;QACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,IAAI;YAAE,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,mCAAmC;AACnC,SAAS,aAAa,CAAC,IAAY,EAAE,eAAuB;IAC1D,wBAAwB,CAAC,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,MAAoB;IACrE,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1B,WAAW,CAAC,IAAI,CAAC,CAAC;IAClB,gCAAgC;IAChC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/biz-select/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { BizOption, SelectParams, SelectSource, SelectValue } from './types.js';
|
|
2
|
+
/** 每批最多多少个编码。接口有更小的上限时由调用方传 batchSize */
|
|
3
|
+
export declare const DEFAULT_BATCH_SIZE = 100;
|
|
4
|
+
export interface ResolveCodesOptions {
|
|
5
|
+
/** 已经解析过的源对象(注册名要先经 resolveSelectSource 换掉) */
|
|
6
|
+
source?: SelectSource;
|
|
7
|
+
/** 来源键,和组件共用同一个身份,缓存才对得上 */
|
|
8
|
+
sourceKey: string;
|
|
9
|
+
/** 租户/权限作用域,缺省取源自己的 namespace */
|
|
10
|
+
scope?: string;
|
|
11
|
+
params?: SelectParams;
|
|
12
|
+
/** 一屏里出现的所有编码,重复的会被去掉 */
|
|
13
|
+
codes: ReadonlyArray<SelectValue | null | undefined>;
|
|
14
|
+
batchSize?: number;
|
|
15
|
+
/** 绕开缓存重查:`reload()` 用,否则重新查一遍还是命中同一份结果 */
|
|
16
|
+
force?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface ResolveCodesResult {
|
|
19
|
+
/** 编码 → 选项,键是 `lookupKeyOf(编码)`,不带类型前缀,列表行原始值能直接查 */
|
|
20
|
+
byCode: Map<string, BizOption>;
|
|
21
|
+
/** 没解析到的编码(接口没返回、或返回了别的值) */
|
|
22
|
+
missing: string[];
|
|
23
|
+
/** 缺 requiredParams,一个请求都没发 */
|
|
24
|
+
blocked: boolean;
|
|
25
|
+
/** 实际发起的请求数;开发态用它判断这个页面是不是真的需要批量接口 */
|
|
26
|
+
requests: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 单条解析:源只声明了批量接口时,批量一条等价于单条,
|
|
30
|
+
* 不必逼调用方再写一个一模一样的 `resolve`。
|
|
31
|
+
*/
|
|
32
|
+
export declare function resolveOne(source: SelectSource | undefined, value: SelectValue, params: SelectParams): Promise<BizOption | null>;
|
|
33
|
+
export declare function resolveCodes(options: ResolveCodesOptions): Promise<ResolveCodesResult>;
|
|
34
|
+
//# sourceMappingURL=resolveBatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveBatch.d.ts","sourceRoot":"","sources":["../../src/biz-select/resolveBatch.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAElF,yCAAyC;AACzC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,MAAM,WAAW,mBAAmB;IAClC,+CAA+C;IAC/C,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,yBAAyB;IACzB,KAAK,EAAE,aAAa,CAAC,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC/B,6BAA6B;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,+BAA+B;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAQ3B;AAiCD,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAqE5F"}
|
|
@@ -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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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { normalizeBizSelectSchema } from './compile.js';
|
|
2
2
|
export { normalizeBizSelectSchema };
|
|
3
|
-
export type { BizSelectSchemaProps } from './compile.js';
|
|
3
|
+
export type { BizSelectSchemaProps, ParamsFromEntry } from './compile.js';
|
|
4
4
|
export declare function registerBizSelectField(): void;
|
|
5
5
|
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/biz-select/schema.tsx"],"names":[],"mappings":"
|
|
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"}
|
|
@@ -3,9 +3,11 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
3
3
|
* BizSelect 的字段类型注册。
|
|
4
4
|
*
|
|
5
5
|
* 刻意不自动执行:包默认只提供标准 antd 控件,使用方需要时调一次
|
|
6
|
-
* `registerBizSelectField()
|
|
6
|
+
* `registerBizSelectField()`。单选和多选一起注册,不然使用方要记住调两次。
|
|
7
7
|
*/
|
|
8
8
|
import { registerField } from '../registry.js';
|
|
9
|
+
import { BizMultiSelect } from './BizMultiSelect.js';
|
|
10
|
+
import { BizMultiSelectDisplay } from './BizMultiSelectDisplay.js';
|
|
9
11
|
import { BizSelect } from './BizSelect.js';
|
|
10
12
|
import { BizSelectDisplay } from './BizSelectDisplay.js';
|
|
11
13
|
import { normalizeBizSelectSchema } from './compile.js';
|
|
@@ -17,5 +19,10 @@ export function registerBizSelectField() {
|
|
|
17
19
|
// 只读态复用同一套解析,不挂载交互组件
|
|
18
20
|
renderRead: (value, props) => (_jsx(BizSelectDisplay, { value: value, ...props })),
|
|
19
21
|
}, { override: true });
|
|
22
|
+
registerField('BizMultiSelect', {
|
|
23
|
+
component: BizMultiSelect,
|
|
24
|
+
normalize: normalizeBizSelectSchema,
|
|
25
|
+
renderRead: (value, props) => (_jsx(BizMultiSelectDisplay, { value: value, ...props })),
|
|
26
|
+
}, { override: true });
|
|
20
27
|
}
|
|
21
28
|
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +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,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;AACJ,CAAC"}
|
|
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"}
|
|
@@ -1,38 +1,63 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* BizSelect 的类型契约。
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* 对外只有一个「数据源」概念:能给出候选、能按值解析名称。
|
|
5
5
|
* 具体是前端常量、一次拉全量还是关键词翻页,由源**提供了哪些能力**决定,
|
|
6
6
|
* 不再用 kind 之类的标签分类。
|
|
7
|
+
*
|
|
8
|
+
* 选项统一用 `value` / `label`:组件是渲染层,和 antd 同词汇,存量字典可以直接用。
|
|
9
|
+
* 后端记录叫 `code` / `name`、`userId` / `userName` 都不影响契约——
|
|
10
|
+
* 那是数据入口的方言,由源的 `recordFields` 映射一次,运行时只有一种形状。
|
|
7
11
|
*/
|
|
8
12
|
import type { ReactNode } from 'react';
|
|
9
13
|
import type { SelectProps } from 'antd';
|
|
10
|
-
export type
|
|
11
|
-
/**
|
|
14
|
+
export type SelectValue = string | number;
|
|
15
|
+
/**
|
|
16
|
+
* 契约层的标准选项。
|
|
17
|
+
*
|
|
18
|
+
* `label` 刻意限定为字符串:它要参与前端过滤匹配、要回写进对象值。
|
|
19
|
+
* 富文本标签不在范围内,需要时走 `renderRead` 或注册自定义字段类型。
|
|
20
|
+
*/
|
|
12
21
|
export interface BizOption<T = unknown> {
|
|
13
|
-
|
|
14
|
-
|
|
22
|
+
value: SelectValue;
|
|
23
|
+
label?: string;
|
|
15
24
|
disabled?: boolean;
|
|
16
25
|
/** 原始接口记录,原样带回给业务回调 */
|
|
17
26
|
raw?: T;
|
|
18
27
|
}
|
|
19
|
-
/**
|
|
28
|
+
/** 展示模式:值 / 值-名称 / 名称 */
|
|
20
29
|
export type DisplayMode = 'V' | 'V-L' | 'L';
|
|
21
30
|
/** 前端过滤时匹配哪些字段 */
|
|
22
|
-
export type SearchFields = '
|
|
23
|
-
/**
|
|
31
|
+
export type SearchFields = 'value' | 'label' | 'both';
|
|
32
|
+
/** 值形态:标量值,或自带名称的对象 */
|
|
24
33
|
export type ValueMode = 'primitive' | 'object';
|
|
25
34
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
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`。
|
|
28
51
|
*/
|
|
29
52
|
export interface ValueFieldMap {
|
|
30
|
-
|
|
31
|
-
|
|
53
|
+
value?: string;
|
|
54
|
+
label?: string;
|
|
32
55
|
}
|
|
33
56
|
export type SelectParams = Record<string, unknown>;
|
|
34
57
|
/** 对象形态的值;具体键名由 valueFields 决定,所以只能约束到 Record */
|
|
35
58
|
export type BizObjectValue = Record<string, unknown>;
|
|
59
|
+
/** 多选的值:标量数组或对象数组 */
|
|
60
|
+
export type SelectValues = SelectValue[] | BizObjectValue[];
|
|
36
61
|
/**
|
|
37
62
|
* 数据源契约。只有能力声明,不认识 URL、method、低代码控件配置。
|
|
38
63
|
*
|
|
@@ -49,8 +74,16 @@ export interface SelectSource<P extends SelectParams = SelectParams> {
|
|
|
49
74
|
load?: (params: P, signal?: AbortSignal) => Promise<BizOption[]>;
|
|
50
75
|
/** 关键词搜索:分页接口固定取第一页 */
|
|
51
76
|
search?: (keyword: string, params: P, signal?: AbortSignal) => Promise<BizOption[]>;
|
|
52
|
-
/**
|
|
53
|
-
resolve?: (
|
|
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[]>;
|
|
54
87
|
/** 缺任一参数就不发请求:用空条件查可能拿到别家数据 */
|
|
55
88
|
requiredParams?: string[];
|
|
56
89
|
/** 租户/权限隔离,参与缓存键 */
|
|
@@ -67,13 +100,19 @@ type BaseAntProps = Omit<SelectProps, 'value' | 'defaultValue' | 'onChange' | 'o
|
|
|
67
100
|
interface CoreProps {
|
|
68
101
|
/** 注册名或内联源;schema 里只能是字符串 */
|
|
69
102
|
source?: string | SelectSource;
|
|
103
|
+
/**
|
|
104
|
+
* 候选简写:等价于 `source={{ options }}`。
|
|
105
|
+
* 只表达「候选是这组常量」;需要 load / search / resolve 时仍用 `source`。
|
|
106
|
+
* 同时给时以 `source` 为准。
|
|
107
|
+
*/
|
|
108
|
+
options?: BizOption[];
|
|
70
109
|
/** 传给 load/search/resolve,参与缓存键 */
|
|
71
110
|
params?: SelectParams;
|
|
72
111
|
/** 下拉与回显文本,默认 L */
|
|
73
112
|
displayMode?: DisplayMode;
|
|
74
113
|
/** 前端过滤匹配的字段,缺省随 displayMode 推导 */
|
|
75
114
|
searchFields?: SearchFields;
|
|
76
|
-
/**
|
|
115
|
+
/** 详情已带回的候选,省掉一次 resolve */
|
|
77
116
|
seedOptions?: BizOption[];
|
|
78
117
|
/** 远程搜索防抖,默认 300ms */
|
|
79
118
|
debounceMs?: number;
|
|
@@ -82,12 +121,13 @@ interface CoreProps {
|
|
|
82
121
|
/** 门禁提示文案 */
|
|
83
122
|
blockedText?: ReactNode;
|
|
84
123
|
valueMode?: ValueMode;
|
|
124
|
+
/** 对象值里哪个键装值/名称,默认 `{ value, label }` */
|
|
85
125
|
valueFields?: ValueFieldMap;
|
|
86
126
|
}
|
|
87
127
|
interface PrimitiveModeProps {
|
|
88
128
|
valueMode?: 'primitive';
|
|
89
|
-
value?:
|
|
90
|
-
onChange?: (value:
|
|
129
|
+
value?: SelectValue | null;
|
|
130
|
+
onChange?: (value: SelectValue | undefined, option?: BizOption) => void;
|
|
91
131
|
}
|
|
92
132
|
interface ObjectModeProps {
|
|
93
133
|
valueMode: 'object';
|
|
@@ -96,9 +136,31 @@ interface ObjectModeProps {
|
|
|
96
136
|
}
|
|
97
137
|
export type BizSelectProps = CoreProps & BaseAntProps & (PrimitiveModeProps | ObjectModeProps);
|
|
98
138
|
export interface BizSelectDisplayProps extends CoreProps {
|
|
99
|
-
value?:
|
|
139
|
+
value?: SelectValue | BizObjectValue | null;
|
|
140
|
+
/** 只读占位 */
|
|
141
|
+
emptyText?: ReactNode;
|
|
142
|
+
}
|
|
143
|
+
interface MultiPrimitiveModeProps {
|
|
144
|
+
valueMode?: 'primitive';
|
|
145
|
+
value?: SelectValue[] | SelectValue | null;
|
|
146
|
+
/**
|
|
147
|
+
* 清空时给 `undefined` 而不是 `[]`:与 `ctx.clear()` 一致,
|
|
148
|
+
* 也让 antd 的 `required` 规则天然生效(它拿空数组没辙)。
|
|
149
|
+
*/
|
|
150
|
+
onChange?: (value: SelectValue[] | undefined, options: BizOption[]) => void;
|
|
151
|
+
}
|
|
152
|
+
interface MultiObjectModeProps {
|
|
153
|
+
valueMode: 'object';
|
|
154
|
+
value?: BizObjectValue[] | BizObjectValue | null;
|
|
155
|
+
onChange?: (value: BizObjectValue[] | undefined, options: BizOption[]) => void;
|
|
156
|
+
}
|
|
157
|
+
export type BizMultiSelectProps = CoreProps & BaseAntProps & (MultiPrimitiveModeProps | MultiObjectModeProps);
|
|
158
|
+
export interface BizMultiSelectDisplayProps extends CoreProps {
|
|
159
|
+
value?: SelectValues | SelectValue | BizObjectValue | null;
|
|
100
160
|
/** 只读占位 */
|
|
101
161
|
emptyText?: ReactNode;
|
|
162
|
+
/** 多值分隔符,默认 `、`(与 read.tsx 保持一致) */
|
|
163
|
+
separator?: string;
|
|
102
164
|
}
|
|
103
165
|
export {};
|
|
104
166
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/biz-select/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/biz-select/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBizSource.d.ts","sourceRoot":"","sources":["../../src/biz-select/useBizSource.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvD,wBAAgB,YAAY,CAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,EAC9B,OAAO,CAAC,EAAE,SAAS,EAAE,GACpB,MAAM,GAAG,YAAY,GAAG,SAAS,CAEnC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 组件的候选入口:`options` 是 `source={{ options }}` 的简写。
|
|
3
|
+
*
|
|
4
|
+
* 同时给时以 `source` 为准——它承载完整协议(load / search / resolve / requiredParams),
|
|
5
|
+
* 简写只表达「候选就是这组常量」。简写对象按 options 引用缓存:
|
|
6
|
+
* 模块级常量不会每次渲染都换一个源身份。
|
|
7
|
+
*/
|
|
8
|
+
import { useMemo } from 'react';
|
|
9
|
+
export function useBizSource(source, options) {
|
|
10
|
+
return useMemo(() => source ?? (options ? { options } : undefined), [source, options]);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=useBizSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBizSource.js","sourceRoot":"","sources":["../../src/biz-select/useBizSource.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAIhC,MAAM,UAAU,YAAY,CAC1B,MAA8B,EAC9B,OAAqB;IAErB,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AACzF,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { BizOption, SelectParams, SelectSource, SelectValue } from './types.js';
|
|
2
|
+
export interface UseResolvedLabelsOptions {
|
|
3
|
+
/** 注册名或内联源;解析与来源键都在 Hook 内完成,调用方别自己拼 */
|
|
4
|
+
source?: string | SelectSource;
|
|
5
|
+
/** 这一屏出现的编码,重复的、空值的会被去掉 */
|
|
6
|
+
values?: ReadonlyArray<SelectValue | null | undefined>;
|
|
7
|
+
/** 传给源的查询条件,参与缓存键;缺 requiredParams 就不查 */
|
|
8
|
+
params?: SelectParams;
|
|
9
|
+
/** 内联源需要跨实例共享缓存时显式指定;注册名自带稳定键 */
|
|
10
|
+
cacheKey?: string;
|
|
11
|
+
/** 每批最多多少个编码,按接口上限配,默认 100 */
|
|
12
|
+
batchSize?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface UseResolvedLabelsResult {
|
|
15
|
+
/** 编码 → 选项,键不带类型前缀,列表行里的原始值能直接查 */
|
|
16
|
+
byCode: Map<string, BizOption>;
|
|
17
|
+
/** 解析到的全部选项,可直接当 `seedOptions` 传给表格单元格 */
|
|
18
|
+
options: BizOption[];
|
|
19
|
+
loading: boolean;
|
|
20
|
+
error: boolean;
|
|
21
|
+
/** 缺 requiredParams,一个请求都没发 */
|
|
22
|
+
blocked: boolean;
|
|
23
|
+
/** 这次实际发起的请求数;没声明 `resolveMany` 时等于不同编码的个数 */
|
|
24
|
+
requests: number;
|
|
25
|
+
reload(): void;
|
|
26
|
+
}
|
|
27
|
+
export declare function useResolvedLabels({ source: sourceProp, values, params, cacheKey, batchSize, }: UseResolvedLabelsOptions): UseResolvedLabelsResult;
|
|
28
|
+
//# sourceMappingURL=useResolvedLabels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useResolvedLabels.d.ts","sourceRoot":"","sources":["../../src/biz-select/useResolvedLabels.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAElF,MAAM,WAAW,wBAAwB;IACvC,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAC/B,2BAA2B;IAC3B,MAAM,CAAC,EAAE,aAAa,CAAC,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACvD,0CAA0C;IAC1C,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,mCAAmC;IACnC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC/B,0CAA0C;IAC1C,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,+BAA+B;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,IAAI,IAAI,CAAC;CAChB;AA8BD,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EAAE,UAAU,EAClB,MAAM,EACN,MAAM,EACN,QAAQ,EACR,SAA8B,GAC/B,EAAE,wBAAwB,GAAG,uBAAuB,CA6HpD"}
|