@tianyr/schema-antd 0.1.0 → 0.1.1
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 +42 -12
- package/dist/SchemaField.d.ts +1 -1
- 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 +16 -0
- package/dist/biz-select/cache.d.ts.map +1 -0
- package/dist/biz-select/cache.js +130 -0
- package/dist/biz-select/cache.js.map +1 -0
- package/dist/biz-select/compile.d.ts +25 -0
- package/dist/biz-select/compile.d.ts.map +1 -0
- package/dist/biz-select/compile.js +82 -0
- package/dist/biz-select/compile.js.map +1 -0
- package/dist/biz-select/factories.d.ts +23 -0
- package/dist/biz-select/factories.d.ts.map +1 -0
- package/dist/biz-select/factories.js +17 -0
- package/dist/biz-select/factories.js.map +1 -0
- package/dist/biz-select/format.d.ts +48 -0
- package/dist/biz-select/format.d.ts.map +1 -0
- package/dist/biz-select/format.js +110 -0
- package/dist/biz-select/format.js.map +1 -0
- package/dist/biz-select/index.d.ts +23 -0
- package/dist/biz-select/index.d.ts.map +1 -0
- package/dist/biz-select/index.js +22 -0
- package/dist/biz-select/index.js.map +1 -0
- package/dist/biz-select/key.d.ts +15 -0
- package/dist/biz-select/key.d.ts.map +1 -0
- package/dist/biz-select/key.js +69 -0
- package/dist/biz-select/key.js.map +1 -0
- package/dist/biz-select/normalize.d.ts +40 -0
- package/dist/biz-select/normalize.d.ts.map +1 -0
- package/dist/biz-select/normalize.js +46 -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/schema.d.ts +5 -0
- package/dist/biz-select/schema.d.ts.map +1 -0
- package/dist/biz-select/schema.js +21 -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 +104 -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/useSelectedLabel.d.ts +18 -0
- package/dist/biz-select/useSelectedLabel.d.ts.map +1 -0
- package/dist/biz-select/useSelectedLabel.js +158 -0
- package/dist/biz-select/useSelectedLabel.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/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 +1 -1
- package/dist/index.js +2 -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,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 展示与取值:纯函数,不依赖 React,可直接单测。
|
|
3
|
+
*
|
|
4
|
+
* 展示模式统一走「先取首选字段,缺失再降级」,不写三套分支;
|
|
5
|
+
* 编码 0 是合法值,判空一律用 present,不能用真值判断。
|
|
6
|
+
*/
|
|
7
|
+
import type { BizObjectValue, BizOption, DisplayMode, SearchFields, SelectCode, ValueFieldMap, ValueMode } from './types.js';
|
|
8
|
+
/** 与 read.tsx 的 EMPTY_TEXT 保持一致;接 BMS 时由覆盖层决定最终观感 */
|
|
9
|
+
export declare const EMPTY = "\u2014";
|
|
10
|
+
/** `V-L` 的连接符:场景不多,不做配置 */
|
|
11
|
+
export declare const LABEL_SEPARATOR = "-";
|
|
12
|
+
export declare function present(value: unknown): boolean;
|
|
13
|
+
export declare function isEmptyCode(value: SelectCode | null | undefined): boolean;
|
|
14
|
+
/** 展示模式 → 默认的搜索字段 */
|
|
15
|
+
export declare function defaultSearchFields(mode: DisplayMode): SearchFields;
|
|
16
|
+
/**
|
|
17
|
+
* 拼接展示文本。
|
|
18
|
+
* 降级规则:`L` 缺名称用编码,`V` 缺编码用名称,`V-L` 缺一侧就只显示另一侧。
|
|
19
|
+
*/
|
|
20
|
+
export declare function formatLabel(option: Pick<BizOption, 'code' | 'name'>, mode: DisplayMode, separator?: string): string;
|
|
21
|
+
/** 关键字是否命中:空关键字一律命中,前端过滤只管 `options` / `load` 两类源 */
|
|
22
|
+
export declare function matchKeyword(option: BizOption, keyword: string, fields: SearchFields): boolean;
|
|
23
|
+
/** 本地过滤:候选全集已在前端时用;关键词为空直接返回原数组,避免多余遍历 */
|
|
24
|
+
export declare function filterOptions(list: BizOption[], keyword: string, fields: SearchFields): BizOption[];
|
|
25
|
+
/** 按内容判断候选是否真的变了:内联数组每次新建也能对上 */
|
|
26
|
+
export declare function optionsContentKey(list?: BizOption[] | null): string;
|
|
27
|
+
/** 契约选项 → antd 需要的 `{ value, label }` */
|
|
28
|
+
export declare function toAntOption(option: BizOption, mode: DisplayMode): {
|
|
29
|
+
value: SelectCode;
|
|
30
|
+
label: string;
|
|
31
|
+
disabled: boolean | undefined;
|
|
32
|
+
raw: BizOption<unknown>;
|
|
33
|
+
};
|
|
34
|
+
export declare function resolveValueFields(fields?: ValueFieldMap): Required<ValueFieldMap>;
|
|
35
|
+
/** 从值里取出编码,标量与对象两种形态统一到一处 */
|
|
36
|
+
export declare function readCode(value: SelectCode | BizObjectValue | null | undefined, valueMode: ValueMode, fields?: ValueFieldMap): SelectCode | undefined;
|
|
37
|
+
/** 从对象值里取出已带的名称,命中就不必再 resolve */
|
|
38
|
+
export declare function readObjectName(value: SelectCode | BizObjectValue | null | undefined, valueMode: ValueMode, fields?: ValueFieldMap): string | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* 标量编码 + 选项 → 对象值;名称缺失时留空串,由展示层降级到编码。
|
|
41
|
+
*
|
|
42
|
+
* 只输出 valueFields 指定的两个键。改选是换成另一条记录,旧对象上的 id /
|
|
43
|
+
* 部门等字段属于上一条,跟着搬过去就是串数据;拿不到新名称时也不能沿用旧名称,
|
|
44
|
+
* 那会把「张三」显示成「李四」的编码。需要附加字段的业务从 onChange 的
|
|
45
|
+
* 第二个参数 `option.raw` 里取。
|
|
46
|
+
*/
|
|
47
|
+
export declare function buildObjectValue(code: SelectCode, option: BizOption | undefined, fields?: ValueFieldMap): BizObjectValue;
|
|
48
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/biz-select/format.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,WAAW,EACX,YAAY,EACZ,UAAU,EACV,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,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEzE;AAED,qBAAqB;AACrB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAInE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,EACxC,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,yCAAyC;AACzC,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,QAAQ,CACtB,KAAK,EAAE,UAAU,GAAG,cAAc,GAAG,IAAI,GAAG,SAAS,EACrD,SAAS,EAAE,SAAS,EACpB,MAAM,CAAC,EAAE,aAAa,GACrB,UAAU,GAAG,SAAS,CAOxB;AAED,kCAAkC;AAClC,wBAAgB,cAAc,CAC5B,KAAK,EAAE,UAAU,GAAG,cAAc,GAAG,IAAI,GAAG,SAAS,EACrD,SAAS,EAAE,SAAS,EACpB,MAAM,CAAC,EAAE,aAAa,GACrB,MAAM,GAAG,SAAS,CAKpB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,SAAS,GAAG,SAAS,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,cAAc,CAGhB"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/** 与 read.tsx 的 EMPTY_TEXT 保持一致;接 BMS 时由覆盖层决定最终观感 */
|
|
2
|
+
export const EMPTY = '—';
|
|
3
|
+
/** `V-L` 的连接符:场景不多,不做配置 */
|
|
4
|
+
export const LABEL_SEPARATOR = '-';
|
|
5
|
+
const DEFAULT_VALUE_FIELDS = { code: 'value', name: 'label' };
|
|
6
|
+
export function present(value) {
|
|
7
|
+
return value !== undefined && value !== null && value !== '';
|
|
8
|
+
}
|
|
9
|
+
export function isEmptyCode(value) {
|
|
10
|
+
return value === undefined || value === null || value === '';
|
|
11
|
+
}
|
|
12
|
+
/** 展示模式 → 默认的搜索字段 */
|
|
13
|
+
export function defaultSearchFields(mode) {
|
|
14
|
+
if (mode === 'V')
|
|
15
|
+
return 'code';
|
|
16
|
+
if (mode === 'V-L')
|
|
17
|
+
return 'both';
|
|
18
|
+
return 'name';
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 拼接展示文本。
|
|
22
|
+
* 降级规则:`L` 缺名称用编码,`V` 缺编码用名称,`V-L` 缺一侧就只显示另一侧。
|
|
23
|
+
*/
|
|
24
|
+
export function formatLabel(option, mode, separator = LABEL_SEPARATOR) {
|
|
25
|
+
const { code, name } = option;
|
|
26
|
+
if (mode === 'V-L') {
|
|
27
|
+
// 缺一侧时不留下悬挂的分隔符
|
|
28
|
+
return [code, name].filter(present).join(separator) || EMPTY;
|
|
29
|
+
}
|
|
30
|
+
const preferred = mode === 'V' ? code : name;
|
|
31
|
+
const fallback = mode === 'V' ? name : code;
|
|
32
|
+
const text = present(preferred) ? preferred : present(fallback) ? fallback : EMPTY;
|
|
33
|
+
return String(text);
|
|
34
|
+
}
|
|
35
|
+
/** 关键字是否命中:空关键字一律命中,前端过滤只管 `options` / `load` 两类源 */
|
|
36
|
+
export function matchKeyword(option, keyword, fields) {
|
|
37
|
+
const word = keyword.trim().toLowerCase();
|
|
38
|
+
if (!word)
|
|
39
|
+
return true;
|
|
40
|
+
const code = present(option.code) ? String(option.code).toLowerCase() : '';
|
|
41
|
+
const name = present(option.name) ? String(option.name).toLowerCase() : '';
|
|
42
|
+
// 名称缺失时回退编码:展示层是这么降级的,搜索必须同口径,否则「看得见却搜不到」
|
|
43
|
+
if (!name)
|
|
44
|
+
return code.includes(word);
|
|
45
|
+
if (fields === 'code')
|
|
46
|
+
return code.includes(word);
|
|
47
|
+
if (fields === 'name')
|
|
48
|
+
return name.includes(word);
|
|
49
|
+
return code.includes(word) || name.includes(word);
|
|
50
|
+
}
|
|
51
|
+
/** 本地过滤:候选全集已在前端时用;关键词为空直接返回原数组,避免多余遍历 */
|
|
52
|
+
export function filterOptions(list, keyword, fields) {
|
|
53
|
+
if (!keyword.trim())
|
|
54
|
+
return list;
|
|
55
|
+
return list.filter((item) => matchKeyword(item, keyword, fields));
|
|
56
|
+
}
|
|
57
|
+
/** 按内容判断候选是否真的变了:内联数组每次新建也能对上 */
|
|
58
|
+
export function optionsContentKey(list) {
|
|
59
|
+
if (!list || !list.length)
|
|
60
|
+
return '';
|
|
61
|
+
return JSON.stringify(list.map((item) => [typeof item.code, item.code, item.name ?? null, item.disabled ?? false]));
|
|
62
|
+
}
|
|
63
|
+
/** 契约选项 → antd 需要的 `{ value, label }` */
|
|
64
|
+
export function toAntOption(option, mode) {
|
|
65
|
+
return {
|
|
66
|
+
value: option.code,
|
|
67
|
+
label: formatLabel(option, mode),
|
|
68
|
+
disabled: option.disabled,
|
|
69
|
+
raw: option,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
export function resolveValueFields(fields) {
|
|
73
|
+
return {
|
|
74
|
+
code: fields?.code || DEFAULT_VALUE_FIELDS.code,
|
|
75
|
+
name: fields?.name || DEFAULT_VALUE_FIELDS.name,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/** 从值里取出编码,标量与对象两种形态统一到一处 */
|
|
79
|
+
export function readCode(value, valueMode, fields) {
|
|
80
|
+
if (isEmptyCode(value))
|
|
81
|
+
return undefined;
|
|
82
|
+
if (valueMode === 'primitive')
|
|
83
|
+
return value;
|
|
84
|
+
if (!value || typeof value !== 'object')
|
|
85
|
+
return undefined;
|
|
86
|
+
const { code } = resolveValueFields(fields);
|
|
87
|
+
const raw = value[code];
|
|
88
|
+
return isEmptyCode(raw) ? undefined : raw;
|
|
89
|
+
}
|
|
90
|
+
/** 从对象值里取出已带的名称,命中就不必再 resolve */
|
|
91
|
+
export function readObjectName(value, valueMode, fields) {
|
|
92
|
+
if (valueMode !== 'object' || !value || typeof value !== 'object')
|
|
93
|
+
return undefined;
|
|
94
|
+
const { name } = resolveValueFields(fields);
|
|
95
|
+
const raw = value[name];
|
|
96
|
+
return present(raw) ? String(raw) : undefined;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* 标量编码 + 选项 → 对象值;名称缺失时留空串,由展示层降级到编码。
|
|
100
|
+
*
|
|
101
|
+
* 只输出 valueFields 指定的两个键。改选是换成另一条记录,旧对象上的 id /
|
|
102
|
+
* 部门等字段属于上一条,跟着搬过去就是串数据;拿不到新名称时也不能沿用旧名称,
|
|
103
|
+
* 那会把「张三」显示成「李四」的编码。需要附加字段的业务从 onChange 的
|
|
104
|
+
* 第二个参数 `option.raw` 里取。
|
|
105
|
+
*/
|
|
106
|
+
export function buildObjectValue(code, option, fields) {
|
|
107
|
+
const keys = resolveValueFields(fields);
|
|
108
|
+
return { [keys.code]: code, [keys.name]: option?.name ?? '' };
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/biz-select/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BizSelect 对外出口。
|
|
3
|
+
*
|
|
4
|
+
* 刻意不在这里 import './schema.js':字段类型由使用方显式注册,
|
|
5
|
+
* 包默认只提供标准 antd 控件,避免导入即产生副作用。
|
|
6
|
+
*
|
|
7
|
+
* 公开面刻意收窄:只导出发出去就形成兼容责任的东西。
|
|
8
|
+
* 键推导、能力归一化、AntD 选项转换、格式化这些都留在内部模块,
|
|
9
|
+
* 需要时直接从对应文件引用,不要经由本文件对外承诺。
|
|
10
|
+
*/
|
|
11
|
+
export { BizSelect } from './BizSelect.js';
|
|
12
|
+
export { BizSelectDisplay } from './BizSelectDisplay.js';
|
|
13
|
+
export { registerBizSelectField } from './schema.js';
|
|
14
|
+
export type { BizSelectSchemaProps } from './schema.js';
|
|
15
|
+
/** 候选取数:给下拉以外的 UI(树 / 弹窗列表)复用同一份数据 */
|
|
16
|
+
export { useCandidates } from './useCandidates.js';
|
|
17
|
+
export type { UseCandidatesOptions, UseCandidatesResult } from './useCandidates.js';
|
|
18
|
+
/** 源工厂:三种能力组合,别处不再分类 */
|
|
19
|
+
export { staticList, loaded, remote } from './factories.js';
|
|
20
|
+
export { registerSelectSource, defineSelectSources, unregisterSelectSource, invalidateSelectSource, getSelectSource, getRegisteredSelectSourceNames, clearSelectSources, } from './registry.js';
|
|
21
|
+
export { clearSelectCache } from './cache.js';
|
|
22
|
+
export type { BizObjectValue, BizOption, BizSelectDisplayProps, BizSelectProps, DisplayMode, SearchFields, SelectCode, SelectParams, SelectSource, ValueFieldMap, ValueMode, } from './types.js';
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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;AAErD,sCAAsC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEjF,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,cAAc,EACd,SAAS,EACT,qBAAqB,EACrB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,SAAS,GACV,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BizSelect 对外出口。
|
|
3
|
+
*
|
|
4
|
+
* 刻意不在这里 import './schema.js':字段类型由使用方显式注册,
|
|
5
|
+
* 包默认只提供标准 antd 控件,避免导入即产生副作用。
|
|
6
|
+
*
|
|
7
|
+
* 公开面刻意收窄:只导出发出去就形成兼容责任的东西。
|
|
8
|
+
* 键推导、能力归一化、AntD 选项转换、格式化这些都留在内部模块,
|
|
9
|
+
* 需要时直接从对应文件引用,不要经由本文件对外承诺。
|
|
10
|
+
*/
|
|
11
|
+
export { BizSelect } from './BizSelect.js';
|
|
12
|
+
export { BizSelectDisplay } from './BizSelectDisplay.js';
|
|
13
|
+
export { registerBizSelectField } from './schema.js';
|
|
14
|
+
/** 候选取数:给下拉以外的 UI(树 / 弹窗列表)复用同一份数据 */
|
|
15
|
+
export { useCandidates } from './useCandidates.js';
|
|
16
|
+
/** 源工厂:三种能力组合,别处不再分类 */
|
|
17
|
+
export { staticList, loaded, remote } from './factories.js';
|
|
18
|
+
export { registerSelectSource, defineSelectSources, unregisterSelectSource, invalidateSelectSource, getSelectSource, getRegisteredSelectSourceNames, clearSelectSources, } from './registry.js';
|
|
19
|
+
// 源解析与来源键不对外:useCandidates 内部已经做好,放出去只会让调用方自己拼身份、
|
|
20
|
+
// 绕开注册名的版本订阅。确实需要读源的话用 getSelectSource。
|
|
21
|
+
export { clearSelectCache } from './cache.js';
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SelectCode, SelectParams, SelectSource } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* 源的稳定身份,参与缓存键。
|
|
4
|
+
*
|
|
5
|
+
* 注册名带版本号:重新注册或主动失效后,已挂载的实例会换 key 重新取数,
|
|
6
|
+
* 而不是继续用挂载时捕获的旧函数。
|
|
7
|
+
*/
|
|
8
|
+
export declare function selectSourceKey(source?: string | SelectSource, cacheKey?: string): string;
|
|
9
|
+
/** 键序稳定的序列化:对象字面量顺序不同不算参数变化 */
|
|
10
|
+
export declare function stableStringify(value: unknown): string;
|
|
11
|
+
export declare function paramsKeyOf(params?: SelectParams): string;
|
|
12
|
+
/** 来源键固定占第二段,清理单个源的缓存时按它匹配 */
|
|
13
|
+
export declare function candidatesCacheKey(scope: string, sourceKey: string, paramsKey: string): string;
|
|
14
|
+
export declare function resolveCacheKey(scope: string, sourceKey: string, code: SelectCode, paramsKey: string): string;
|
|
15
|
+
//# sourceMappingURL=key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key.d.ts","sourceRoot":"","sources":["../../src/biz-select/key.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAetE;;;;;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,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,UAAU,EAChB,SAAS,EAAE,MAAM,GAChB,MAAM,CAER"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 稳定键推导。
|
|
3
|
+
*
|
|
4
|
+
* 缓存和 effect 都只认一个字符串,所以「源是谁」必须能算成一个 key。
|
|
5
|
+
* 四档由强到弱:注册名 → 显式 cacheKey → 纯数据内容 → 函数引用。
|
|
6
|
+
* 只有最后一档会在内联箭头函数下抖动,此时退化为实例级缓存(见设计文档 §7)。
|
|
7
|
+
*/
|
|
8
|
+
import { getSelectSourceVersion } from './registry.js';
|
|
9
|
+
import { nameSourceKey } from './source-id.js';
|
|
10
|
+
import { optionsContentKey } from './format.js';
|
|
11
|
+
const fnIds = new WeakMap();
|
|
12
|
+
let fnIdSeq = 0;
|
|
13
|
+
/** 函数引用 → 稳定编号;模块级导出的函数因此可以跨实例共享缓存 */
|
|
14
|
+
function fnId(fn) {
|
|
15
|
+
const hit = fnIds.get(fn);
|
|
16
|
+
if (hit !== undefined)
|
|
17
|
+
return hit;
|
|
18
|
+
fnIdSeq += 1;
|
|
19
|
+
fnIds.set(fn, fnIdSeq);
|
|
20
|
+
return fnIdSeq;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 源的稳定身份,参与缓存键。
|
|
24
|
+
*
|
|
25
|
+
* 注册名带版本号:重新注册或主动失效后,已挂载的实例会换 key 重新取数,
|
|
26
|
+
* 而不是继续用挂载时捕获的旧函数。
|
|
27
|
+
*/
|
|
28
|
+
export function selectSourceKey(source, cacheKey) {
|
|
29
|
+
// 注册名本身就是跨实例稳定的身份,版本号也在里面:再传 cacheKey 只会把它盖掉,
|
|
30
|
+
// 连带绕过 invalidate / 重注册的失效机制。cacheKey 只服务内联源。
|
|
31
|
+
if (typeof source === 'string') {
|
|
32
|
+
return nameSourceKey(source, getSelectSourceVersion(source));
|
|
33
|
+
}
|
|
34
|
+
if (cacheKey)
|
|
35
|
+
return `c:${cacheKey}`;
|
|
36
|
+
if (!source)
|
|
37
|
+
return '';
|
|
38
|
+
const parts = [source.load, source.search, source.resolve, source.namespace].map((fn) => fn ? fnId(fn) : '-');
|
|
39
|
+
if (parts.every((part) => part === '-')) {
|
|
40
|
+
// 纯数据源没有闭包,按内容识别才安全,且写在 JSX 里也能命中同一份缓存
|
|
41
|
+
return `d:${optionsContentKey(source.options)}`;
|
|
42
|
+
}
|
|
43
|
+
return `f:${parts.join('.')}`;
|
|
44
|
+
}
|
|
45
|
+
/** 键序稳定的序列化:对象字面量顺序不同不算参数变化 */
|
|
46
|
+
export function stableStringify(value) {
|
|
47
|
+
if (value === undefined)
|
|
48
|
+
return 'undefined';
|
|
49
|
+
if (value === null || typeof value !== 'object')
|
|
50
|
+
return JSON.stringify(value);
|
|
51
|
+
if (Array.isArray(value))
|
|
52
|
+
return `[${value.map(stableStringify).join(',')}]`;
|
|
53
|
+
const record = value;
|
|
54
|
+
const keys = Object.keys(record).sort();
|
|
55
|
+
return `{${keys
|
|
56
|
+
.map((key) => `${JSON.stringify(key)}:${stableStringify(record[key])}`)
|
|
57
|
+
.join(',')}}`;
|
|
58
|
+
}
|
|
59
|
+
export function paramsKeyOf(params) {
|
|
60
|
+
return stableStringify(params ?? null);
|
|
61
|
+
}
|
|
62
|
+
/** 来源键固定占第二段,清理单个源的缓存时按它匹配 */
|
|
63
|
+
export function candidatesCacheKey(scope, sourceKey, paramsKey) {
|
|
64
|
+
return `${scope}|${sourceKey}|${paramsKey}`;
|
|
65
|
+
}
|
|
66
|
+
export function resolveCacheKey(scope, sourceKey, code, paramsKey) {
|
|
67
|
+
return `${scope}|${sourceKey}|r|${typeof code}:${code}|${paramsKey}`;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key.js","sourceRoot":"","sources":["../../src/biz-select/key.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 能力推导:从源「提供了什么」推「该怎么做」,不看类型标签。
|
|
3
|
+
*
|
|
4
|
+
* 这张推导表同时解释了三种来源(静态 / 有限枚举 / 无限表)——
|
|
5
|
+
* 它们不是三种类型,是三种能力组合。
|
|
6
|
+
*/
|
|
7
|
+
import type { SelectParams, SelectSource } from './types.js';
|
|
8
|
+
export type CandidateMode =
|
|
9
|
+
/** 同步全集,无需请求 */
|
|
10
|
+
'sync'
|
|
11
|
+
/** 异步全集,一次拉完前端过滤 */
|
|
12
|
+
| 'load'
|
|
13
|
+
/** 只有关键词搜索,过滤在后端 */
|
|
14
|
+
| 'search'
|
|
15
|
+
/** 空关键词走全集,有关键词走后端 */
|
|
16
|
+
| 'hybrid'
|
|
17
|
+
/** 没有候选能力,只能按编码解析(只读展示可用) */
|
|
18
|
+
| 'none'
|
|
19
|
+
/** 什么能力都没有,配置非法 */
|
|
20
|
+
| 'invalid';
|
|
21
|
+
export interface SourceCapability {
|
|
22
|
+
source?: SelectSource;
|
|
23
|
+
candidateMode: CandidateMode;
|
|
24
|
+
/** 候选是否需要发请求 */
|
|
25
|
+
needsFetch: boolean;
|
|
26
|
+
/** 是否在前端做关键词过滤 */
|
|
27
|
+
canLocalFilter: boolean;
|
|
28
|
+
/** 搜索交给后端 */
|
|
29
|
+
canSearch: boolean;
|
|
30
|
+
canResolve: boolean;
|
|
31
|
+
requiredParams: string[];
|
|
32
|
+
namespace?: () => string;
|
|
33
|
+
}
|
|
34
|
+
export declare function normalizeSource(source?: SelectSource): SourceCapability;
|
|
35
|
+
/**
|
|
36
|
+
* 必需的查询参数是否齐备。
|
|
37
|
+
* 缺任何一个都不该发请求——用空条件查,可能拿到别的租户/省份的记录。
|
|
38
|
+
*/
|
|
39
|
+
export declare function hasRequiredParams(required: string[] | undefined, params: SelectParams | undefined): boolean;
|
|
40
|
+
//# sourceMappingURL=normalize.d.ts.map
|
|
@@ -0,0 +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,CAwBvE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,EAC9B,MAAM,EAAE,YAAY,GAAG,SAAS,GAC/B,OAAO,CAQT"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export function normalizeSource(source) {
|
|
2
|
+
const hasOptions = Array.isArray(source?.options);
|
|
3
|
+
const canLoad = typeof source?.load === 'function';
|
|
4
|
+
const canSearch = typeof source?.search === 'function';
|
|
5
|
+
const canResolve = typeof source?.resolve === 'function';
|
|
6
|
+
let candidateMode;
|
|
7
|
+
if (hasOptions)
|
|
8
|
+
candidateMode = 'sync';
|
|
9
|
+
else if (canLoad && canSearch)
|
|
10
|
+
candidateMode = 'hybrid';
|
|
11
|
+
else if (canLoad)
|
|
12
|
+
candidateMode = 'load';
|
|
13
|
+
else if (canSearch)
|
|
14
|
+
candidateMode = 'search';
|
|
15
|
+
else if (canResolve)
|
|
16
|
+
candidateMode = 'none';
|
|
17
|
+
else
|
|
18
|
+
candidateMode = 'invalid';
|
|
19
|
+
return {
|
|
20
|
+
source,
|
|
21
|
+
candidateMode,
|
|
22
|
+
needsFetch: candidateMode === 'load' || candidateMode === 'search' || candidateMode === 'hybrid',
|
|
23
|
+
canLocalFilter: hasOptions || canLoad,
|
|
24
|
+
canSearch,
|
|
25
|
+
canResolve,
|
|
26
|
+
requiredParams: source?.requiredParams ?? [],
|
|
27
|
+
namespace: source?.namespace,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 必需的查询参数是否齐备。
|
|
32
|
+
* 缺任何一个都不该发请求——用空条件查,可能拿到别的租户/省份的记录。
|
|
33
|
+
*/
|
|
34
|
+
export function hasRequiredParams(required, params) {
|
|
35
|
+
if (!required || !required.length)
|
|
36
|
+
return true;
|
|
37
|
+
return required.every((key) => {
|
|
38
|
+
const value = params?.[key];
|
|
39
|
+
if (value === undefined || value === null || value === '')
|
|
40
|
+
return false;
|
|
41
|
+
if (Array.isArray(value) && value.length === 0)
|
|
42
|
+
return false;
|
|
43
|
+
return true;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/biz-select/normalize.ts"],"names":[],"mappings":"AAoCA,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,UAAU,GAAG,OAAO,MAAM,EAAE,OAAO,KAAK,UAAU,CAAC;IAEzD,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,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,15 @@
|
|
|
1
|
+
import type { SelectSource } from './types.js';
|
|
2
|
+
export declare function subscribeSelectSourceVersion(name: string, listener: () => void): () => void;
|
|
3
|
+
export declare function registerSelectSource(name: string, source: SelectSource): void;
|
|
4
|
+
/** 批量注册:应用启动时一次写完 */
|
|
5
|
+
export declare function defineSelectSources(map: Record<string, SelectSource>): void;
|
|
6
|
+
export declare function unregisterSelectSource(name: string): void;
|
|
7
|
+
/** 让已挂载的实例重新取数:版本 +1 换 key,同时清掉旧结果 */
|
|
8
|
+
export declare function invalidateSelectSource(name: string): void;
|
|
9
|
+
export declare function getSelectSource(name?: string): SelectSource | undefined;
|
|
10
|
+
export declare function getSelectSourceVersion(name: string): number;
|
|
11
|
+
/** 注册名或内联源统一解析;传对象时直接用,不看名字 */
|
|
12
|
+
export declare function resolveSelectSource(source?: string | SelectSource): SelectSource | undefined;
|
|
13
|
+
export declare function getRegisteredSelectSourceNames(): string[];
|
|
14
|
+
export declare function clearSelectSources(): void;
|
|
15
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +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,qBAAqB;AACrB,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,IAAI,CAE3E;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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 业务下拉数据源注册表。
|
|
3
|
+
*
|
|
4
|
+
* 注册表存在的两个理由:给缓存一个稳定标识,给 schema 一个可序列化的引用
|
|
5
|
+
* (schema 是数据,装不下函数)。
|
|
6
|
+
*/
|
|
7
|
+
import { clearSelectCache, clearSelectCacheOfSource } from './cache.js';
|
|
8
|
+
import { nameSourceKey } from './source-id.js';
|
|
9
|
+
const sources = new Map();
|
|
10
|
+
/** 每次注册/失效都递增,进入来源键:已挂载实例因此能感知到源被换掉 */
|
|
11
|
+
const versions = new Map();
|
|
12
|
+
/**
|
|
13
|
+
* 版本订阅。版本号只存在 Map 里,单单改值不会让任何组件重渲染,
|
|
14
|
+
* 所以「失效后已挂载实例重新取数」必须靠订阅把变化推给组件。
|
|
15
|
+
*/
|
|
16
|
+
const versionListeners = new Map();
|
|
17
|
+
export function subscribeSelectSourceVersion(name, listener) {
|
|
18
|
+
const listeners = versionListeners.get(name) ?? new Set();
|
|
19
|
+
listeners.add(listener);
|
|
20
|
+
versionListeners.set(name, listeners);
|
|
21
|
+
return () => {
|
|
22
|
+
listeners.delete(listener);
|
|
23
|
+
if (!listeners.size)
|
|
24
|
+
versionListeners.delete(name);
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function bumpVersion(name) {
|
|
28
|
+
versions.set(name, (versions.get(name) ?? 0) + 1);
|
|
29
|
+
versionListeners.get(name)?.forEach((listener) => listener());
|
|
30
|
+
}
|
|
31
|
+
/** 换实现时清掉上一版的缓存,否则旧结果会留到 TTL 结束 */
|
|
32
|
+
function clearPrevious(name, previousVersion) {
|
|
33
|
+
clearSelectCacheOfSource(nameSourceKey(name, previousVersion));
|
|
34
|
+
}
|
|
35
|
+
export function registerSelectSource(name, source) {
|
|
36
|
+
const previous = versions.get(name) ?? 0;
|
|
37
|
+
sources.set(name, source);
|
|
38
|
+
bumpVersion(name);
|
|
39
|
+
// 同名重注册(HMR / 动态切换)后旧缓存不再代表当前实现
|
|
40
|
+
clearPrevious(name, previous);
|
|
41
|
+
}
|
|
42
|
+
/** 批量注册:应用启动时一次写完 */
|
|
43
|
+
export function defineSelectSources(map) {
|
|
44
|
+
for (const [name, source] of Object.entries(map))
|
|
45
|
+
registerSelectSource(name, source);
|
|
46
|
+
}
|
|
47
|
+
export function unregisterSelectSource(name) {
|
|
48
|
+
const previous = versions.get(name) ?? 0;
|
|
49
|
+
sources.delete(name);
|
|
50
|
+
bumpVersion(name);
|
|
51
|
+
clearPrevious(name, previous);
|
|
52
|
+
}
|
|
53
|
+
/** 让已挂载的实例重新取数:版本 +1 换 key,同时清掉旧结果 */
|
|
54
|
+
export function invalidateSelectSource(name) {
|
|
55
|
+
const previous = versions.get(name) ?? 0;
|
|
56
|
+
bumpVersion(name);
|
|
57
|
+
clearPrevious(name, previous);
|
|
58
|
+
}
|
|
59
|
+
export function getSelectSource(name) {
|
|
60
|
+
return name ? sources.get(name) : undefined;
|
|
61
|
+
}
|
|
62
|
+
export function getSelectSourceVersion(name) {
|
|
63
|
+
return versions.get(name) ?? 0;
|
|
64
|
+
}
|
|
65
|
+
/** 注册名或内联源统一解析;传对象时直接用,不看名字 */
|
|
66
|
+
export function resolveSelectSource(source) {
|
|
67
|
+
if (!source)
|
|
68
|
+
return undefined;
|
|
69
|
+
return typeof source === 'string' ? sources.get(source) : source;
|
|
70
|
+
}
|
|
71
|
+
export function getRegisteredSelectSourceNames() {
|
|
72
|
+
return [...sources.keys()];
|
|
73
|
+
}
|
|
74
|
+
export function clearSelectSources() {
|
|
75
|
+
sources.clear();
|
|
76
|
+
versions.clear();
|
|
77
|
+
// 版本 Map 一起清掉了,不主动通知的话订阅方永远等不到变化
|
|
78
|
+
versionListeners.forEach((listeners) => listeners.forEach((listener) => listener()));
|
|
79
|
+
clearSelectCache();
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/biz-select/registry.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":"AASA,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAGrD,OAAO,EAAE,wBAAwB,EAAE,CAAC;AACpC,YAAY,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEtD,wBAAgB,sBAAsB,IAAI,IAAI,CAgB7C"}
|
|
@@ -0,0 +1,21 @@
|
|
|
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 { BizSelect } from './BizSelect.js';
|
|
10
|
+
import { BizSelectDisplay } from './BizSelectDisplay.js';
|
|
11
|
+
import { normalizeBizSelectSchema } from './compile.js';
|
|
12
|
+
export { normalizeBizSelectSchema };
|
|
13
|
+
export function registerBizSelectField() {
|
|
14
|
+
registerField('BizSelect', {
|
|
15
|
+
component: BizSelect,
|
|
16
|
+
normalize: normalizeBizSelectSchema,
|
|
17
|
+
// 只读态复用同一套解析,不挂载交互组件
|
|
18
|
+
renderRead: (value, props) => (_jsx(BizSelectDisplay, { value: value, ...props })),
|
|
19
|
+
}, { override: true });
|
|
20
|
+
}
|
|
21
|
+
//# 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,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"}
|
|
@@ -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"}
|