@tianyr/schema-antd 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -2
- package/dist/biz-select/BizMultiSelect.d.ts +3 -0
- package/dist/biz-select/BizMultiSelect.d.ts.map +1 -0
- package/dist/biz-select/BizMultiSelect.js +120 -0
- package/dist/biz-select/BizMultiSelect.js.map +1 -0
- package/dist/biz-select/BizMultiSelectDisplay.d.ts +3 -0
- package/dist/biz-select/BizMultiSelectDisplay.d.ts.map +1 -0
- package/dist/biz-select/BizMultiSelectDisplay.js +59 -0
- package/dist/biz-select/BizMultiSelectDisplay.js.map +1 -0
- package/dist/biz-select/BizSelect.d.ts.map +1 -1
- package/dist/biz-select/BizSelect.js +5 -5
- package/dist/biz-select/BizSelect.js.map +1 -1
- package/dist/biz-select/BizSelectDisplay.js +6 -6
- package/dist/biz-select/BizSelectDisplay.js.map +1 -1
- package/dist/biz-select/cache.d.ts +7 -0
- package/dist/biz-select/cache.d.ts.map +1 -1
- package/dist/biz-select/cache.js +11 -0
- package/dist/biz-select/cache.js.map +1 -1
- package/dist/biz-select/compile.d.ts +13 -2
- package/dist/biz-select/compile.d.ts.map +1 -1
- package/dist/biz-select/compile.js +24 -3
- package/dist/biz-select/compile.js.map +1 -1
- package/dist/biz-select/factories.d.ts +22 -13
- package/dist/biz-select/factories.d.ts.map +1 -1
- package/dist/biz-select/factories.js +57 -7
- package/dist/biz-select/factories.js.map +1 -1
- package/dist/biz-select/format.d.ts +29 -11
- package/dist/biz-select/format.d.ts.map +1 -1
- package/dist/biz-select/format.js +100 -35
- package/dist/biz-select/format.js.map +1 -1
- package/dist/biz-select/index.d.ts +7 -2
- package/dist/biz-select/index.d.ts.map +1 -1
- package/dist/biz-select/index.js +4 -0
- package/dist/biz-select/index.js.map +1 -1
- package/dist/biz-select/key.d.ts +12 -2
- package/dist/biz-select/key.d.ts.map +1 -1
- package/dist/biz-select/key.js +14 -0
- package/dist/biz-select/key.js.map +1 -1
- package/dist/biz-select/normalize.d.ts +3 -0
- package/dist/biz-select/normalize.d.ts.map +1 -1
- package/dist/biz-select/normalize.js +4 -1
- package/dist/biz-select/normalize.js.map +1 -1
- package/dist/biz-select/resolveBatch.d.ts +34 -0
- package/dist/biz-select/resolveBatch.d.ts.map +1 -0
- package/dist/biz-select/resolveBatch.js +124 -0
- package/dist/biz-select/resolveBatch.js.map +1 -0
- package/dist/biz-select/schema.d.ts +1 -1
- package/dist/biz-select/schema.d.ts.map +1 -1
- package/dist/biz-select/schema.js +8 -1
- package/dist/biz-select/schema.js.map +1 -1
- package/dist/biz-select/types.d.ts +74 -18
- package/dist/biz-select/types.d.ts.map +1 -1
- package/dist/biz-select/useResolvedLabels.d.ts +28 -0
- package/dist/biz-select/useResolvedLabels.d.ts.map +1 -0
- package/dist/biz-select/useResolvedLabels.js +151 -0
- package/dist/biz-select/useResolvedLabels.js.map +1 -0
- package/dist/biz-select/useSelectedLabel.d.ts +2 -2
- package/dist/biz-select/useSelectedLabel.d.ts.map +1 -1
- package/dist/biz-select/useSelectedLabel.js +14 -16
- package/dist/biz-select/useSelectedLabel.js.map +1 -1
- package/dist/biz-select/useSelectedLabels.d.ts +26 -0
- package/dist/biz-select/useSelectedLabels.d.ts.map +1 -0
- package/dist/biz-select/useSelectedLabels.js +88 -0
- package/dist/biz-select/useSelectedLabels.js.map +1 -0
- package/dist/flat.d.ts +43 -0
- package/dist/flat.d.ts.map +1 -0
- package/dist/flat.js +91 -0
- package/dist/flat.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,17 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 三个工厂:只做形状收敛,不注册、不缓存、不发请求。
|
|
3
|
+
*
|
|
4
|
+
* 之所以保留工厂而不是让调用方直接写 `{ load, search }`:
|
|
5
|
+
* 工厂承载了「这个源属于哪种能力组合」的语义,写法越短,越不容易写出
|
|
6
|
+
* `resolve` 用模糊搜索冒充精确查这类错误。
|
|
7
|
+
*
|
|
8
|
+
* 后端字段名不同的记录(`{ code, name }`、`{ userId, userName }`)在这一层用
|
|
9
|
+
* `recordFields` 映射一次,组件和其它所有下游只认 `{ value, label }`。
|
|
10
|
+
* 映射只发生在数据入口,不做「看到 code 就当 value」的自动嗅探。
|
|
11
|
+
*/
|
|
12
|
+
import { present } from './format.js';
|
|
13
|
+
/** 原始记录 → 契约选项;未声明 recordFields 时原样返回(视为已经是契约形状) */
|
|
14
|
+
function mapRecord(record, fields) {
|
|
15
|
+
if (!fields)
|
|
16
|
+
return record;
|
|
17
|
+
const source = record;
|
|
18
|
+
const valueKey = fields.value ?? 'value';
|
|
19
|
+
const labelKey = fields.label ?? 'label';
|
|
20
|
+
const label = source[labelKey];
|
|
21
|
+
const mapped = {
|
|
22
|
+
value: source[valueKey],
|
|
23
|
+
label: present(label) ? String(label) : undefined,
|
|
24
|
+
// 映射过的记录,原样记录就是业务需要的附加字段
|
|
25
|
+
raw: source.raw ?? source,
|
|
26
|
+
};
|
|
27
|
+
if (source.disabled !== undefined)
|
|
28
|
+
mapped.disabled = Boolean(source.disabled);
|
|
29
|
+
return mapped;
|
|
30
|
+
}
|
|
31
|
+
/** 列表型能力(options / load / search)的包装:取出后统一映射 */
|
|
32
|
+
function wrapList(fn, fields) {
|
|
33
|
+
return async (...args) => (await fn(...args)).map((item) => mapRecord(item, fields));
|
|
34
|
+
}
|
|
35
|
+
/** 单条能力(resolve)的包装:null 原样返回 */
|
|
36
|
+
function wrapOne(fn, fields) {
|
|
37
|
+
return async (...args) => {
|
|
38
|
+
const record = await fn(...args);
|
|
39
|
+
return record ? mapRecord(record, fields) : null;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
1
42
|
/** ① 纯前端常量:同步可用,没有请求也没有 loading */
|
|
2
|
-
export function staticList(list) {
|
|
3
|
-
return { options:
|
|
43
|
+
export function staticList(list, recordFields) {
|
|
44
|
+
return { options: list.map((item) => mapRecord(item, recordFields)) };
|
|
4
45
|
}
|
|
5
46
|
/**
|
|
6
47
|
* ② 有限远程枚举:一次拉全量,之后由前端过滤。
|
|
7
48
|
* 传导入的函数(如 `api.listCurrency`)而不是内联箭头,才能跨实例共享缓存。
|
|
8
49
|
*/
|
|
9
|
-
export function loaded(load,
|
|
10
|
-
|
|
50
|
+
export function loaded(load, options = {}) {
|
|
51
|
+
const { recordFields, ...rest } = options;
|
|
52
|
+
return { load: wrapList(load, recordFields), ...rest };
|
|
11
53
|
}
|
|
12
|
-
/** ③ 无限远程:关键词搜索 +
|
|
54
|
+
/** ③ 无限远程:关键词搜索 + 按值回显 */
|
|
13
55
|
export function remote(config) {
|
|
14
|
-
const { search, resolve, requiredParams, namespace } = config;
|
|
15
|
-
return {
|
|
56
|
+
const { search, resolve, resolveMany, requiredParams, namespace, recordFields } = config;
|
|
57
|
+
return {
|
|
58
|
+
search: wrapList(search, recordFields),
|
|
59
|
+
resolve: resolve ? wrapOne(resolve, recordFields) : undefined,
|
|
60
|
+
resolveMany: resolveMany
|
|
61
|
+
? wrapList(resolveMany, recordFields)
|
|
62
|
+
: undefined,
|
|
63
|
+
requiredParams,
|
|
64
|
+
namespace,
|
|
65
|
+
};
|
|
16
66
|
}
|
|
17
67
|
//# sourceMappingURL=factories.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factories.js","sourceRoot":"","sources":["../../src/biz-select/factories.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"factories.js","sourceRoot":"","sources":["../../src/biz-select/factories.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAgBnC,oDAAoD;AACpD,SAAS,SAAS,CAAC,MAAgC,EAAE,MAAyB;IAC5E,IAAI,CAAC,MAAM;QAAE,OAAO,MAAmB,CAAC;IACxC,MAAM,MAAM,GAAG,MAAiC,CAAC;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC;IACzC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAc;QACxB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAgB;QACtC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QACjD,yBAAyB;QACzB,GAAG,EAAG,MAAM,CAAC,GAAe,IAAI,MAAM;KACvC,CAAC;IACF,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;QAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gDAAgD;AAChD,SAAS,QAAQ,CACf,EAA4D,EAC5D,MAAyB;IAEzB,OAAO,KAAK,EAAE,GAAG,IAAO,EAAwB,EAAE,CAChD,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,iCAAiC;AACjC,SAAS,OAAO,CACd,EAA4D,EAC5D,MAAyB;IAEzB,OAAO,KAAK,EAAE,GAAG,IAAO,EAA6B,EAAE;QACrD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACjC,OAAO,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnD,CAAC,CAAC;AACJ,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,UAAU,CACxB,IAA6C,EAC7C,YAA+B;IAE/B,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;AACxE,CAAC;AAQD;;;GAGG;AACH,MAAM,UAAU,MAAM,CACpB,IAAmF,EACnF,UAAyB,EAAE;IAE3B,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAC1C,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAA4B,EAAE,GAAG,IAAI,EAAE,CAAC;AACpF,CAAC;AAoBD,0BAA0B;AAC1B,MAAM,UAAU,MAAM,CACpB,MAAwB;IAExB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;IACzF,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAA8B;QACnE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAE,OAAO,CAAC,OAAO,EAAE,YAAY,CAAgC,CAAC,CAAC,CAAC,SAAS;QAC7F,WAAW,EAAE,WAAW;YACtB,CAAC,CAAE,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAoC;YACzE,CAAC,CAAC,SAAS;QACb,cAAc;QACd,SAAS;KACV,CAAC;AACJ,CAAC"}
|
|
@@ -2,47 +2,65 @@
|
|
|
2
2
|
* 展示与取值:纯函数,不依赖 React,可直接单测。
|
|
3
3
|
*
|
|
4
4
|
* 展示模式统一走「先取首选字段,缺失再降级」,不写三套分支;
|
|
5
|
-
*
|
|
5
|
+
* 值 0 是合法值,判空一律用 present,不能用真值判断。
|
|
6
|
+
*
|
|
7
|
+
* 注意区分两套键名:
|
|
8
|
+
* - 选项用 `{ value, label }`(契约,和 antd 一致)
|
|
9
|
+
* - 存储的对象值键名由 `valueFields` 决定,默认也是 `{ value, label }`
|
|
6
10
|
*/
|
|
7
|
-
import type { BizObjectValue, BizOption, DisplayMode, SearchFields,
|
|
11
|
+
import type { BizObjectValue, BizOption, DisplayMode, SearchFields, SelectValue, SelectValues, ValueFieldMap, ValueMode } from './types.js';
|
|
8
12
|
/** 与 read.tsx 的 EMPTY_TEXT 保持一致;接 BMS 时由覆盖层决定最终观感 */
|
|
9
13
|
export declare const EMPTY = "\u2014";
|
|
10
14
|
/** `V-L` 的连接符:场景不多,不做配置 */
|
|
11
15
|
export declare const LABEL_SEPARATOR = "-";
|
|
12
16
|
export declare function present(value: unknown): boolean;
|
|
13
|
-
export declare function
|
|
17
|
+
export declare function isEmptyValue(value: SelectValue | null | undefined): boolean;
|
|
14
18
|
/** 展示模式 → 默认的搜索字段 */
|
|
15
19
|
export declare function defaultSearchFields(mode: DisplayMode): SearchFields;
|
|
16
20
|
/**
|
|
17
21
|
* 拼接展示文本。
|
|
18
|
-
* 降级规则:`L`
|
|
22
|
+
* 降级规则:`L` 缺名称用值,`V` 缺值用名称,`V-L` 缺一侧就只显示另一侧。
|
|
19
23
|
*/
|
|
20
|
-
export declare function formatLabel(option: Pick<BizOption, '
|
|
24
|
+
export declare function formatLabel(option: Pick<BizOption, 'value' | 'label'>, mode: DisplayMode, separator?: string): string;
|
|
21
25
|
/** 关键字是否命中:空关键字一律命中,前端过滤只管 `options` / `load` 两类源 */
|
|
22
26
|
export declare function matchKeyword(option: BizOption, keyword: string, fields: SearchFields): boolean;
|
|
23
27
|
/** 本地过滤:候选全集已在前端时用;关键词为空直接返回原数组,避免多余遍历 */
|
|
24
28
|
export declare function filterOptions(list: BizOption[], keyword: string, fields: SearchFields): BizOption[];
|
|
25
29
|
/** 按内容判断候选是否真的变了:内联数组每次新建也能对上 */
|
|
26
30
|
export declare function optionsContentKey(list?: BizOption[] | null): string;
|
|
27
|
-
/** 契约选项 → antd 需要的 `{ value, label }
|
|
31
|
+
/** 契约选项 → antd 需要的 `{ value, label }`;形状一致,这里只负责拼展示文本 */
|
|
28
32
|
export declare function toAntOption(option: BizOption, mode: DisplayMode): {
|
|
29
|
-
value:
|
|
33
|
+
value: SelectValue;
|
|
30
34
|
label: string;
|
|
31
35
|
disabled: boolean | undefined;
|
|
32
36
|
raw: BizOption<unknown>;
|
|
33
37
|
};
|
|
34
38
|
export declare function resolveValueFields(fields?: ValueFieldMap): Required<ValueFieldMap>;
|
|
35
39
|
/** 从值里取出编码,标量与对象两种形态统一到一处 */
|
|
36
|
-
export declare function
|
|
40
|
+
export declare function readValue(value: SelectValue | BizObjectValue | null | undefined, valueMode: ValueMode, fields?: ValueFieldMap): SelectValue | undefined;
|
|
37
41
|
/** 从对象值里取出已带的名称,命中就不必再 resolve */
|
|
38
|
-
export declare function
|
|
42
|
+
export declare function readObjectLabel(value: SelectValue | BizObjectValue | null | undefined, valueMode: ValueMode, fields?: ValueFieldMap): string | undefined;
|
|
39
43
|
/**
|
|
40
|
-
*
|
|
44
|
+
* 标量值 + 选项 → 对象值;名称缺失时留空串,由展示层降级到值本身。
|
|
41
45
|
*
|
|
42
46
|
* 只输出 valueFields 指定的两个键。改选是换成另一条记录,旧对象上的 id /
|
|
43
47
|
* 部门等字段属于上一条,跟着搬过去就是串数据;拿不到新名称时也不能沿用旧名称,
|
|
44
48
|
* 那会把「张三」显示成「李四」的编码。需要附加字段的业务从 onChange 的
|
|
45
49
|
* 第二个参数 `option.raw` 里取。
|
|
46
50
|
*/
|
|
47
|
-
export declare function buildObjectValue(
|
|
51
|
+
export declare function buildObjectValue(value: SelectValue, option: BizOption | undefined, fields?: ValueFieldMap): BizObjectValue;
|
|
52
|
+
/**
|
|
53
|
+
* 值 → 编码数组。
|
|
54
|
+
*
|
|
55
|
+
* 输入接受 `undefined` / `null` / `[]` 和各种混杂形态,输出永远是数组;
|
|
56
|
+
* 空值一律给 `[]`(调用方判断"有没有值"用长度,不用再区分 undefined)。
|
|
57
|
+
*/
|
|
58
|
+
export declare function readValues(value: SelectValues | SelectValue | BizObjectValue | null | undefined, valueMode: ValueMode, fields?: ValueFieldMap): SelectValue[];
|
|
59
|
+
/**
|
|
60
|
+
* 对象数组 → 编码 → 名称的映射。
|
|
61
|
+
* 只服务于回显里的第一优先级「值自己带着名称」,没有名称的键不写。
|
|
62
|
+
*/
|
|
63
|
+
export declare function readObjectLabels(value: SelectValues | SelectValue | BizObjectValue | null | undefined, valueMode: ValueMode, fields?: ValueFieldMap): Map<string, string>;
|
|
64
|
+
/** 编码数组 + 已解析选项 → 对象数组;缺名称的留空串,由展示层降级到编码本身 */
|
|
65
|
+
export declare function buildObjectValues(codes: SelectValue[], options: Map<string, BizOption>, fields?: ValueFieldMap): BizObjectValue[];
|
|
48
66
|
//# sourceMappingURL=format.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/biz-select/format.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/biz-select/format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,WAAW,EACX,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,aAAa,EACb,SAAS,EACV,MAAM,SAAS,CAAC;AAEjB,qDAAqD;AACrD,eAAO,MAAM,KAAK,WAAM,CAAC;AAEzB,2BAA2B;AAC3B,eAAO,MAAM,eAAe,MAAM,CAAC;AAInC,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE/C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE3E;AAED,qBAAqB;AACrB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAInE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,EAC1C,IAAI,EAAE,WAAW,EACjB,SAAS,SAAkB,GAC1B,MAAM,CAUR;AAED,qDAAqD;AACrD,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAU9F;AAED,0CAA0C;AAC1C,wBAAgB,aAAa,CAC3B,IAAI,EAAE,SAAS,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,GACnB,SAAS,EAAE,CAGb;AAED,iCAAiC;AACjC,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,GAAG,MAAM,CAKnE;AAED,yDAAyD;AACzD,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW;;;;;EAO/D;AAED,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,CAKlF;AAED,6BAA6B;AAC7B,wBAAgB,SAAS,CACvB,KAAK,EAAE,WAAW,GAAG,cAAc,GAAG,IAAI,GAAG,SAAS,EACtD,SAAS,EAAE,SAAS,EACpB,MAAM,CAAC,EAAE,aAAa,GACrB,WAAW,GAAG,SAAS,CAOzB;AAED,kCAAkC;AAClC,wBAAgB,eAAe,CAC7B,KAAK,EAAE,WAAW,GAAG,cAAc,GAAG,IAAI,GAAG,SAAS,EACtD,SAAS,EAAE,SAAS,EACpB,MAAM,CAAC,EAAE,aAAa,GACrB,MAAM,GAAG,SAAS,CAKpB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,SAAS,GAAG,SAAS,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,cAAc,CAGhB;AAUD;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,IAAI,GAAG,SAAS,EACrE,SAAS,EAAE,SAAS,EACpB,MAAM,CAAC,EAAE,aAAa,GACrB,WAAW,EAAE,CAgBf;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,IAAI,GAAG,SAAS,EACrE,SAAS,EAAE,SAAS,EACpB,MAAM,CAAC,EAAE,aAAa,GACrB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAcrB;AAED,8CAA8C;AAC9C,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,EAAE,EACpB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAC/B,MAAM,CAAC,EAAE,aAAa,GACrB,cAAc,EAAE,CAMlB"}
|
|
@@ -2,33 +2,33 @@
|
|
|
2
2
|
export const EMPTY = '—';
|
|
3
3
|
/** `V-L` 的连接符:场景不多,不做配置 */
|
|
4
4
|
export const LABEL_SEPARATOR = '-';
|
|
5
|
-
const DEFAULT_VALUE_FIELDS = {
|
|
5
|
+
const DEFAULT_VALUE_FIELDS = { value: 'value', label: 'label' };
|
|
6
6
|
export function present(value) {
|
|
7
7
|
return value !== undefined && value !== null && value !== '';
|
|
8
8
|
}
|
|
9
|
-
export function
|
|
9
|
+
export function isEmptyValue(value) {
|
|
10
10
|
return value === undefined || value === null || value === '';
|
|
11
11
|
}
|
|
12
12
|
/** 展示模式 → 默认的搜索字段 */
|
|
13
13
|
export function defaultSearchFields(mode) {
|
|
14
14
|
if (mode === 'V')
|
|
15
|
-
return '
|
|
15
|
+
return 'value';
|
|
16
16
|
if (mode === 'V-L')
|
|
17
17
|
return 'both';
|
|
18
|
-
return '
|
|
18
|
+
return 'label';
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
21
|
* 拼接展示文本。
|
|
22
|
-
* 降级规则:`L`
|
|
22
|
+
* 降级规则:`L` 缺名称用值,`V` 缺值用名称,`V-L` 缺一侧就只显示另一侧。
|
|
23
23
|
*/
|
|
24
24
|
export function formatLabel(option, mode, separator = LABEL_SEPARATOR) {
|
|
25
|
-
const {
|
|
25
|
+
const { value, label } = option;
|
|
26
26
|
if (mode === 'V-L') {
|
|
27
27
|
// 缺一侧时不留下悬挂的分隔符
|
|
28
|
-
return [
|
|
28
|
+
return [value, label].filter(present).join(separator) || EMPTY;
|
|
29
29
|
}
|
|
30
|
-
const preferred = mode === 'V' ?
|
|
31
|
-
const fallback = mode === 'V' ?
|
|
30
|
+
const preferred = mode === 'V' ? value : label;
|
|
31
|
+
const fallback = mode === 'V' ? label : value;
|
|
32
32
|
const text = present(preferred) ? preferred : present(fallback) ? fallback : EMPTY;
|
|
33
33
|
return String(text);
|
|
34
34
|
}
|
|
@@ -37,16 +37,16 @@ export function matchKeyword(option, keyword, fields) {
|
|
|
37
37
|
const word = keyword.trim().toLowerCase();
|
|
38
38
|
if (!word)
|
|
39
39
|
return true;
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
//
|
|
43
|
-
if (!
|
|
44
|
-
return
|
|
45
|
-
if (fields === '
|
|
46
|
-
return
|
|
47
|
-
if (fields === '
|
|
48
|
-
return
|
|
49
|
-
return
|
|
40
|
+
const value = present(option.value) ? String(option.value).toLowerCase() : '';
|
|
41
|
+
const label = present(option.label) ? String(option.label).toLowerCase() : '';
|
|
42
|
+
// 名称缺失时回退值:展示层是这么降级的,搜索必须同口径,否则「看得见却搜不到」
|
|
43
|
+
if (!label)
|
|
44
|
+
return value.includes(word);
|
|
45
|
+
if (fields === 'value')
|
|
46
|
+
return value.includes(word);
|
|
47
|
+
if (fields === 'label')
|
|
48
|
+
return label.includes(word);
|
|
49
|
+
return value.includes(word) || label.includes(word);
|
|
50
50
|
}
|
|
51
51
|
/** 本地过滤:候选全集已在前端时用;关键词为空直接返回原数组,避免多余遍历 */
|
|
52
52
|
export function filterOptions(list, keyword, fields) {
|
|
@@ -58,12 +58,12 @@ export function filterOptions(list, keyword, fields) {
|
|
|
58
58
|
export function optionsContentKey(list) {
|
|
59
59
|
if (!list || !list.length)
|
|
60
60
|
return '';
|
|
61
|
-
return JSON.stringify(list.map((item) => [typeof item.
|
|
61
|
+
return JSON.stringify(list.map((item) => [typeof item.value, item.value, item.label ?? null, item.disabled ?? false]));
|
|
62
62
|
}
|
|
63
|
-
/** 契约选项 → antd 需要的 `{ value, label }
|
|
63
|
+
/** 契约选项 → antd 需要的 `{ value, label }`;形状一致,这里只负责拼展示文本 */
|
|
64
64
|
export function toAntOption(option, mode) {
|
|
65
65
|
return {
|
|
66
|
-
value: option.
|
|
66
|
+
value: option.value,
|
|
67
67
|
label: formatLabel(option, mode),
|
|
68
68
|
disabled: option.disabled,
|
|
69
69
|
raw: option,
|
|
@@ -71,40 +71,105 @@ export function toAntOption(option, mode) {
|
|
|
71
71
|
}
|
|
72
72
|
export function resolveValueFields(fields) {
|
|
73
73
|
return {
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
value: fields?.value || DEFAULT_VALUE_FIELDS.value,
|
|
75
|
+
label: fields?.label || DEFAULT_VALUE_FIELDS.label,
|
|
76
76
|
};
|
|
77
77
|
}
|
|
78
78
|
/** 从值里取出编码,标量与对象两种形态统一到一处 */
|
|
79
|
-
export function
|
|
80
|
-
if (
|
|
79
|
+
export function readValue(value, valueMode, fields) {
|
|
80
|
+
if (isEmptyValue(value))
|
|
81
81
|
return undefined;
|
|
82
82
|
if (valueMode === 'primitive')
|
|
83
83
|
return value;
|
|
84
84
|
if (!value || typeof value !== 'object')
|
|
85
85
|
return undefined;
|
|
86
|
-
const
|
|
87
|
-
const raw = value[
|
|
88
|
-
return
|
|
86
|
+
const keys = resolveValueFields(fields);
|
|
87
|
+
const raw = value[keys.value];
|
|
88
|
+
return isEmptyValue(raw) ? undefined : raw;
|
|
89
89
|
}
|
|
90
90
|
/** 从对象值里取出已带的名称,命中就不必再 resolve */
|
|
91
|
-
export function
|
|
91
|
+
export function readObjectLabel(value, valueMode, fields) {
|
|
92
92
|
if (valueMode !== 'object' || !value || typeof value !== 'object')
|
|
93
93
|
return undefined;
|
|
94
|
-
const
|
|
95
|
-
const raw = value[
|
|
94
|
+
const keys = resolveValueFields(fields);
|
|
95
|
+
const raw = value[keys.label];
|
|
96
96
|
return present(raw) ? String(raw) : undefined;
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
99
|
-
*
|
|
99
|
+
* 标量值 + 选项 → 对象值;名称缺失时留空串,由展示层降级到值本身。
|
|
100
100
|
*
|
|
101
101
|
* 只输出 valueFields 指定的两个键。改选是换成另一条记录,旧对象上的 id /
|
|
102
102
|
* 部门等字段属于上一条,跟着搬过去就是串数据;拿不到新名称时也不能沿用旧名称,
|
|
103
103
|
* 那会把「张三」显示成「李四」的编码。需要附加字段的业务从 onChange 的
|
|
104
104
|
* 第二个参数 `option.raw` 里取。
|
|
105
105
|
*/
|
|
106
|
-
export function buildObjectValue(
|
|
106
|
+
export function buildObjectValue(value, option, fields) {
|
|
107
|
+
const keys = resolveValueFields(fields);
|
|
108
|
+
return { [keys.value]: value, [keys.label]: option?.label ?? '' };
|
|
109
|
+
}
|
|
110
|
+
// ---------------------------------------------------------------------------
|
|
111
|
+
// 多选
|
|
112
|
+
//
|
|
113
|
+
// 空值一律归成空数组,对外只输出 `undefined`:
|
|
114
|
+
// 与 `ctx.clear()` 一致,也让 antd 的 `required` 规则天然生效(它拿 `[]` 没辙)。
|
|
115
|
+
// 不认逗号串、不把单值当数组——猜形状比报错难查。
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
/**
|
|
118
|
+
* 值 → 编码数组。
|
|
119
|
+
*
|
|
120
|
+
* 输入接受 `undefined` / `null` / `[]` 和各种混杂形态,输出永远是数组;
|
|
121
|
+
* 空值一律给 `[]`(调用方判断"有没有值"用长度,不用再区分 undefined)。
|
|
122
|
+
*/
|
|
123
|
+
export function readValues(value, valueMode, fields) {
|
|
124
|
+
if (value === undefined || value === null)
|
|
125
|
+
return [];
|
|
126
|
+
const list = Array.isArray(value) ? value : [value];
|
|
127
|
+
const codes = [];
|
|
128
|
+
for (const item of list) {
|
|
129
|
+
if (valueMode === 'primitive') {
|
|
130
|
+
if (isEmptyValue(item))
|
|
131
|
+
continue;
|
|
132
|
+
codes.push(item);
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
if (!item || typeof item !== 'object')
|
|
136
|
+
continue;
|
|
137
|
+
const raw = item[resolveValueFields(fields).value];
|
|
138
|
+
if (isEmptyValue(raw))
|
|
139
|
+
continue;
|
|
140
|
+
codes.push(raw);
|
|
141
|
+
}
|
|
142
|
+
return codes;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* 对象数组 → 编码 → 名称的映射。
|
|
146
|
+
* 只服务于回显里的第一优先级「值自己带着名称」,没有名称的键不写。
|
|
147
|
+
*/
|
|
148
|
+
export function readObjectLabels(value, valueMode, fields) {
|
|
149
|
+
const names = new Map();
|
|
150
|
+
if (valueMode !== 'object' || value === undefined || value === null)
|
|
151
|
+
return names;
|
|
152
|
+
const keys = resolveValueFields(fields);
|
|
153
|
+
const list = Array.isArray(value) ? value : [value];
|
|
154
|
+
for (const item of list) {
|
|
155
|
+
if (!item || typeof item !== 'object')
|
|
156
|
+
continue;
|
|
157
|
+
const record = item;
|
|
158
|
+
const raw = record[keys.value];
|
|
159
|
+
if (isEmptyValue(raw))
|
|
160
|
+
continue;
|
|
161
|
+
const name = record[keys.label];
|
|
162
|
+
if (present(name))
|
|
163
|
+
names.set(String(raw), String(name));
|
|
164
|
+
}
|
|
165
|
+
return names;
|
|
166
|
+
}
|
|
167
|
+
/** 编码数组 + 已解析选项 → 对象数组;缺名称的留空串,由展示层降级到编码本身 */
|
|
168
|
+
export function buildObjectValues(codes, options, fields) {
|
|
107
169
|
const keys = resolveValueFields(fields);
|
|
108
|
-
return
|
|
170
|
+
return codes.map((code) => ({
|
|
171
|
+
[keys.value]: code,
|
|
172
|
+
[keys.label]: options.get(String(code))?.label ?? '',
|
|
173
|
+
}));
|
|
109
174
|
}
|
|
110
175
|
//# sourceMappingURL=format.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/biz-select/format.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/biz-select/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,14 +10,19 @@
|
|
|
10
10
|
*/
|
|
11
11
|
export { BizSelect } from './BizSelect.js';
|
|
12
12
|
export { BizSelectDisplay } from './BizSelectDisplay.js';
|
|
13
|
+
export { BizMultiSelect } from './BizMultiSelect.js';
|
|
14
|
+
export { BizMultiSelectDisplay } from './BizMultiSelectDisplay.js';
|
|
13
15
|
export { registerBizSelectField } from './schema.js';
|
|
14
|
-
export type { BizSelectSchemaProps } from './schema.js';
|
|
16
|
+
export type { BizSelectSchemaProps, ParamsFromEntry } from './schema.js';
|
|
15
17
|
/** 候选取数:给下拉以外的 UI(树 / 弹窗列表)复用同一份数据 */
|
|
16
18
|
export { useCandidates } from './useCandidates.js';
|
|
17
19
|
export type { UseCandidatesOptions, UseCandidatesResult } from './useCandidates.js';
|
|
20
|
+
/** 批量按值解析:表格列这类「只有 id、没有名称」的一屏回显 */
|
|
21
|
+
export { useResolvedLabels } from './useResolvedLabels.js';
|
|
22
|
+
export type { UseResolvedLabelsOptions, UseResolvedLabelsResult } from './useResolvedLabels.js';
|
|
18
23
|
/** 源工厂:三种能力组合,别处不再分类 */
|
|
19
24
|
export { staticList, loaded, remote } from './factories.js';
|
|
20
25
|
export { registerSelectSource, defineSelectSources, unregisterSelectSource, invalidateSelectSource, getSelectSource, getRegisteredSelectSourceNames, clearSelectSources, } from './registry.js';
|
|
21
26
|
export { clearSelectCache } from './cache.js';
|
|
22
|
-
export type { BizObjectValue, BizOption, BizSelectDisplayProps, BizSelectProps, DisplayMode,
|
|
27
|
+
export type { BizMultiSelectDisplayProps, BizMultiSelectProps, BizObjectValue, BizOption, BizSelectDisplayProps, BizSelectProps, DisplayMode, RecordFieldNames, SearchFields, SelectParams, SelectSource, SelectValue, SelectValues, ValueFieldMap, ValueMode, } from './types.js';
|
|
23
28
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/biz-select/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/biz-select/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEtE,sCAAsC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEjF,oCAAoC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE7F,wBAAwB;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,8BAA8B,EAC9B,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,YAAY,EACV,0BAA0B,EAC1B,mBAAmB,EACnB,cAAc,EACd,SAAS,EACT,qBAAqB,EACrB,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,aAAa,EACb,SAAS,GACV,MAAM,SAAS,CAAC"}
|
package/dist/biz-select/index.js
CHANGED
|
@@ -10,9 +10,13 @@
|
|
|
10
10
|
*/
|
|
11
11
|
export { BizSelect } from './BizSelect.js';
|
|
12
12
|
export { BizSelectDisplay } from './BizSelectDisplay.js';
|
|
13
|
+
export { BizMultiSelect } from './BizMultiSelect.js';
|
|
14
|
+
export { BizMultiSelectDisplay } from './BizMultiSelectDisplay.js';
|
|
13
15
|
export { registerBizSelectField } from './schema.js';
|
|
14
16
|
/** 候选取数:给下拉以外的 UI(树 / 弹窗列表)复用同一份数据 */
|
|
15
17
|
export { useCandidates } from './useCandidates.js';
|
|
18
|
+
/** 批量按值解析:表格列这类「只有 id、没有名称」的一屏回显 */
|
|
19
|
+
export { useResolvedLabels } from './useResolvedLabels.js';
|
|
16
20
|
/** 源工厂:三种能力组合,别处不再分类 */
|
|
17
21
|
export { staticList, loaded, remote } from './factories.js';
|
|
18
22
|
export { registerSelectSource, defineSelectSources, unregisterSelectSource, invalidateSelectSource, getSelectSource, getRegisteredSelectSourceNames, clearSelectSources, } from './registry.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/biz-select/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAGlD,sCAAsC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,wBAAwB;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,8BAA8B,EAC9B,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,kDAAkD;AAClD,wCAAwC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/biz-select/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAGlD,sCAAsC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,oCAAoC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,wBAAwB;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,8BAA8B,EAC9B,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,kDAAkD;AAClD,wCAAwC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/biz-select/key.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SelectParams, SelectSource, SelectValue } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* 源的稳定身份,参与缓存键。
|
|
4
4
|
*
|
|
@@ -9,7 +9,17 @@ export declare function selectSourceKey(source?: string | SelectSource, cacheKey
|
|
|
9
9
|
/** 键序稳定的序列化:对象字面量顺序不同不算参数变化 */
|
|
10
10
|
export declare function stableStringify(value: unknown): string;
|
|
11
11
|
export declare function paramsKeyOf(params?: SelectParams): string;
|
|
12
|
+
/**
|
|
13
|
+
* 编码的字符串身份:带类型前缀,缓存键用它区分 1 和 '1'。
|
|
14
|
+
* 给调用方查表时用 `lookupKeyOf`——那里反过来要求两种类型能对上。
|
|
15
|
+
*/
|
|
16
|
+
export declare function codeKeyOf(value: SelectValue | null | undefined): string;
|
|
17
|
+
/**
|
|
18
|
+
* 对外查表用的键:**不带类型**。
|
|
19
|
+
* 后端常把 1 序列化成 '1',调用方拿着列表行里的原始值来查,必须能命中。
|
|
20
|
+
*/
|
|
21
|
+
export declare function lookupKeyOf(value: SelectValue | null | undefined): string;
|
|
12
22
|
/** 来源键固定占第二段,清理单个源的缓存时按它匹配 */
|
|
13
23
|
export declare function candidatesCacheKey(scope: string, sourceKey: string, paramsKey: string): string;
|
|
14
|
-
export declare function resolveCacheKey(scope: string, sourceKey: string, code:
|
|
24
|
+
export declare function resolveCacheKey(scope: string, sourceKey: string, code: SelectValue, paramsKey: string): string;
|
|
15
25
|
//# sourceMappingURL=key.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key.d.ts","sourceRoot":"","sources":["../../src/biz-select/key.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"key.d.ts","sourceRoot":"","sources":["../../src/biz-select/key.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAevE;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,EAC9B,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAiBR;AAED,+BAA+B;AAC/B,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAStD;AAED,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAEvE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAEzE;AAED,8BAA8B;AAC9B,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9F;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,CAER"}
|
package/dist/biz-select/key.js
CHANGED
|
@@ -59,6 +59,20 @@ export function stableStringify(value) {
|
|
|
59
59
|
export function paramsKeyOf(params) {
|
|
60
60
|
return stableStringify(params ?? null);
|
|
61
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* 编码的字符串身份:带类型前缀,缓存键用它区分 1 和 '1'。
|
|
64
|
+
* 给调用方查表时用 `lookupKeyOf`——那里反过来要求两种类型能对上。
|
|
65
|
+
*/
|
|
66
|
+
export function codeKeyOf(value) {
|
|
67
|
+
return value === undefined || value === null ? '' : `${typeof value}:${value}`;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 对外查表用的键:**不带类型**。
|
|
71
|
+
* 后端常把 1 序列化成 '1',调用方拿着列表行里的原始值来查,必须能命中。
|
|
72
|
+
*/
|
|
73
|
+
export function lookupKeyOf(value) {
|
|
74
|
+
return value === undefined || value === null ? '' : String(value);
|
|
75
|
+
}
|
|
62
76
|
/** 来源键固定占第二段,清理单个源的缓存时按它匹配 */
|
|
63
77
|
export function candidatesCacheKey(scope, sourceKey, paramsKey) {
|
|
64
78
|
return `${scope}|${sourceKey}|${paramsKey}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key.js","sourceRoot":"","sources":["../../src/biz-select/key.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"key.js","sourceRoot":"","sources":["../../src/biz-select/key.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|
|
@@ -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"}
|