@tianyr/schema-antd 0.0.0-stage → 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/LICENSE +21 -0
- package/README.md +188 -2
- package/dist/SchemaField.d.ts +15 -0
- package/dist/SchemaField.d.ts.map +1 -0
- package/dist/SchemaField.js +107 -0
- package/dist/SchemaField.js.map +1 -0
- package/dist/SchemaForm.d.ts +22 -0
- package/dist/SchemaForm.d.ts.map +1 -0
- package/dist/SchemaForm.js +19 -0
- package/dist/SchemaForm.js.map +1 -0
- package/dist/TableFooter.d.ts +38 -0
- package/dist/TableFooter.d.ts.map +1 -0
- package/dist/TableFooter.js +16 -0
- package/dist/TableFooter.js.map +1 -0
- package/dist/biz-select/BizSelect.d.ts +3 -0
- package/dist/biz-select/BizSelect.d.ts.map +1 -0
- package/dist/biz-select/BizSelect.js +87 -0
- package/dist/biz-select/BizSelect.js.map +1 -0
- package/dist/biz-select/BizSelectDisplay.d.ts +3 -0
- package/dist/biz-select/BizSelectDisplay.d.ts.map +1 -0
- package/dist/biz-select/BizSelectDisplay.js +58 -0
- package/dist/biz-select/BizSelectDisplay.js.map +1 -0
- package/dist/biz-select/cache.d.ts +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/biz-select/types.js +2 -0
- package/dist/biz-select/types.js.map +1 -0
- 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/editable-table/EditableTable.d.ts +3 -0
- package/dist/editable-table/EditableTable.d.ts.map +1 -0
- package/dist/editable-table/EditableTable.js +499 -0
- package/dist/editable-table/EditableTable.js.map +1 -0
- package/dist/editable-table/dirty.d.ts +17 -0
- package/dist/editable-table/dirty.d.ts.map +1 -0
- package/dist/editable-table/dirty.js +72 -0
- package/dist/editable-table/dirty.js.map +1 -0
- package/dist/editable-table/index.d.ts +4 -0
- package/dist/editable-table/index.d.ts.map +1 -0
- package/dist/editable-table/index.js +3 -0
- package/dist/editable-table/index.js.map +1 -0
- package/dist/editable-table/types.d.ts +109 -0
- package/dist/editable-table/types.d.ts.map +1 -0
- package/dist/editable-table/types.js +2 -0
- package/dist/editable-table/types.js.map +1 -0
- package/dist/env.d.ts +3 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +11 -0
- package/dist/env.js.map +1 -0
- package/dist/form/FormRuntimeHost.d.ts +39 -0
- package/dist/form/FormRuntimeHost.d.ts.map +1 -0
- package/dist/form/FormRuntimeHost.js +184 -0
- package/dist/form/FormRuntimeHost.js.map +1 -0
- package/dist/form/SchemaFormField.d.ts +15 -0
- package/dist/form/SchemaFormField.d.ts.map +1 -0
- package/dist/form/SchemaFormField.js +143 -0
- package/dist/form/SchemaFormField.js.map +1 -0
- package/dist/form/derive.d.ts +28 -0
- package/dist/form/derive.d.ts.map +1 -0
- package/dist/form/derive.js +87 -0
- package/dist/form/derive.js.map +1 -0
- package/dist/form/namePath.d.ts +12 -0
- package/dist/form/namePath.d.ts.map +1 -0
- package/dist/form/namePath.js +33 -0
- package/dist/form/namePath.js.map +1 -0
- package/dist/full-editable-table/EditableCell.d.ts +12 -0
- package/dist/full-editable-table/EditableCell.d.ts.map +1 -0
- package/dist/full-editable-table/EditableCell.js +8 -0
- package/dist/full-editable-table/EditableCell.js.map +1 -0
- package/dist/full-editable-table/EditableRow.d.ts +8 -0
- package/dist/full-editable-table/EditableRow.d.ts.map +1 -0
- package/dist/full-editable-table/EditableRow.js +23 -0
- package/dist/full-editable-table/EditableRow.js.map +1 -0
- package/dist/full-editable-table/FullEditableTable.d.ts +3 -0
- package/dist/full-editable-table/FullEditableTable.d.ts.map +1 -0
- package/dist/full-editable-table/FullEditableTable.js +384 -0
- package/dist/full-editable-table/FullEditableTable.js.map +1 -0
- package/dist/full-editable-table/context.d.ts +4 -0
- package/dist/full-editable-table/context.d.ts.map +1 -0
- package/dist/full-editable-table/context.js +6 -0
- package/dist/full-editable-table/context.js.map +1 -0
- package/dist/full-editable-table/index.d.ts +3 -0
- package/dist/full-editable-table/index.d.ts.map +1 -0
- package/dist/full-editable-table/index.js +2 -0
- package/dist/full-editable-table/index.js.map +1 -0
- package/dist/full-editable-table/types.d.ts +95 -0
- package/dist/full-editable-table/types.d.ts.map +1 -0
- package/dist/full-editable-table/types.js +2 -0
- package/dist/full-editable-table/types.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/read.d.ts +14 -0
- package/dist/read.d.ts.map +1 -0
- package/dist/read.js +151 -0
- package/dist/read.js.map +1 -0
- package/dist/registry.d.ts +29 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +49 -0
- package/dist/registry.js.map +1 -0
- package/dist/rowMerge.d.ts +2 -0
- package/dist/rowMerge.d.ts.map +1 -0
- package/dist/rowMerge.js +32 -0
- package/dist/rowMerge.js.map +1 -0
- package/dist/tableScroll.d.ts +10 -0
- package/dist/tableScroll.d.ts.map +1 -0
- package/dist/tableScroll.js +14 -0
- package/dist/tableScroll.js.map +1 -0
- package/dist/types.d.ts +133 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +60 -4
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* BizSelect 的只读态。
|
|
4
|
+
*
|
|
5
|
+
* 复用同一套名称解析,但不挂载 Select:只读列表里成百上千个单元格
|
|
6
|
+
* 不该为了显示一个名称付出一个交互组件的代价。
|
|
7
|
+
*/
|
|
8
|
+
import { useEffect } from 'react';
|
|
9
|
+
import { EMPTY, defaultSearchFields, formatLabel, readCode, readObjectName } from './format.js';
|
|
10
|
+
import { normalizeSource } from './normalize.js';
|
|
11
|
+
import { resolveSelectSource } from './registry.js';
|
|
12
|
+
import { useCandidates } from './useCandidates.js';
|
|
13
|
+
import { useSelectedLabel } from './useSelectedLabel.js';
|
|
14
|
+
/** 状态说明挂在 title 上:用户不能把「没查到」误认为「业务值为空」 */
|
|
15
|
+
const STATUS_TITLE = {
|
|
16
|
+
loading: '正在解析名称',
|
|
17
|
+
missing: '未找到对应名称,显示原始编码',
|
|
18
|
+
blocked: '缺少必需参数,未解析名称',
|
|
19
|
+
error: '名称解析失败,显示原始编码',
|
|
20
|
+
};
|
|
21
|
+
export function BizSelectDisplay(props) {
|
|
22
|
+
const { source, params, displayMode = 'L', seedOptions, cacheKey, emptyText = EMPTY, valueMode = 'primitive', valueFields, value, } = props;
|
|
23
|
+
const sourceObj = resolveSelectSource(source);
|
|
24
|
+
const code = readCode(value, valueMode, valueFields);
|
|
25
|
+
const valueName = readObjectName(value, valueMode, valueFields);
|
|
26
|
+
// 只有 load 型需要为回显拉一次全集:它没有 resolve,名称只能从全集里找
|
|
27
|
+
const candidates = useCandidates({
|
|
28
|
+
source,
|
|
29
|
+
cacheKey,
|
|
30
|
+
params,
|
|
31
|
+
searchFields: defaultSearchFields(displayMode),
|
|
32
|
+
});
|
|
33
|
+
const { sourceKey } = candidates;
|
|
34
|
+
// 对象值自带名称、seed 已命中时不用为了回显拉全集
|
|
35
|
+
const hasKnownName = Boolean(valueName) || Boolean(seedOptions?.some((item) => item.code === code));
|
|
36
|
+
const needEchoLoad = code !== undefined && !hasKnownName && normalizeSource(sourceObj).candidateMode === 'load';
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
if (needEchoLoad)
|
|
39
|
+
candidates.open();
|
|
40
|
+
}, [needEchoLoad, sourceKey, candidates.open]);
|
|
41
|
+
const { option, status } = useSelectedLabel({
|
|
42
|
+
source: sourceObj,
|
|
43
|
+
sourceKey,
|
|
44
|
+
code,
|
|
45
|
+
valueName,
|
|
46
|
+
seedOptions,
|
|
47
|
+
candidates: candidates.echoOptions,
|
|
48
|
+
params,
|
|
49
|
+
});
|
|
50
|
+
if (status === 'empty' || !option)
|
|
51
|
+
return _jsx(_Fragment, { children: emptyText });
|
|
52
|
+
// 只返回内容本身:外层 schema-field-read 由 SchemaField 统一包,
|
|
53
|
+
// 这里再套一层会得到双层 span。title 只在解析异常时挂,正常态不产生额外节点。
|
|
54
|
+
const text = formatLabel(option, displayMode);
|
|
55
|
+
const title = STATUS_TITLE[status];
|
|
56
|
+
return title ? _jsx("span", { title: title, children: text }) : _jsx(_Fragment, { children: text });
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=BizSelectDisplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BizSelectDisplay.js","sourceRoot":"","sources":["../../src/biz-select/BizSelectDisplay.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAItD,0CAA0C;AAC1C,MAAM,YAAY,GAA4C;IAC5D,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,gBAAgB;IACzB,OAAO,EAAE,cAAc;IACvB,KAAK,EAAE,eAAe;CACvB,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,KAA4B;IAC3D,MAAM,EACJ,MAAM,EACN,MAAM,EACN,WAAW,GAAG,GAAG,EACjB,WAAW,EACX,QAAQ,EACR,SAAS,GAAG,KAAK,EACjB,SAAS,GAAG,WAAW,EACvB,WAAW,EACX,KAAK,GACN,GAAG,KAAK,CAAC;IAEV,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAEhE,4CAA4C;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC;QAC/B,MAAM;QACN,QAAQ;QACR,MAAM;QACN,YAAY,EAAE,mBAAmB,CAAC,WAAW,CAAC;KAC/C,CAAC,CAAC;IACH,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC;IACjC,6BAA6B;IAC7B,MAAM,YAAY,GAChB,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;IACjF,MAAM,YAAY,GAChB,IAAI,KAAK,SAAS,IAAI,CAAC,YAAY,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC,aAAa,KAAK,MAAM,CAAC;IAC7F,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY;YAAE,UAAU,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAE/C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC;QAC1C,MAAM,EAAE,SAAS;QACjB,SAAS;QACT,IAAI;QACJ,SAAS;QACT,WAAW;QACX,UAAU,EAAE,UAAU,CAAC,WAAW;QAClC,MAAM;KACP,CAAC,CAAC;IAEH,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,MAAM;QAAE,OAAO,4BAAG,SAAS,GAAI,CAAC;IAE3D,kDAAkD;IAClD,8CAA8C;IAC9C,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,CAAC,CAAC,eAAM,KAAK,EAAE,KAAK,YAAG,IAAI,GAAQ,CAAC,CAAC,CAAC,4BAAG,IAAI,GAAI,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 候选与解析的共享缓存。
|
|
3
|
+
*
|
|
4
|
+
* 表格式页面里同一列的几十个单元格会各调一次源,因此在**来源键**这一层共享:
|
|
5
|
+
* 同键并发只发一次请求,失败不缓存。
|
|
6
|
+
* 调用方各自的取消只影响自己的状态更新,不打断共享中的请求。
|
|
7
|
+
*/
|
|
8
|
+
import type { BizOption } from './types.js';
|
|
9
|
+
export declare function loadCandidatesWithCache(key: string, loader: () => Promise<BizOption[]>): Promise<BizOption[]>;
|
|
10
|
+
/** 丢掉单条候选缓存:reload() 要真正重取,不能又命中同一份 */
|
|
11
|
+
export declare function dropCandidateCache(key: string): void;
|
|
12
|
+
export declare function resolveCodeWithCache(key: string, loader: () => Promise<BizOption | null>): Promise<BizOption | null>;
|
|
13
|
+
export declare function clearSelectCacheOfSource(sourceKey: string): void;
|
|
14
|
+
export declare function clearSelectCache(): void;
|
|
15
|
+
export declare function getSelectCacheSize(): number;
|
|
16
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/biz-select/cache.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AA2FzC,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,GACjC,OAAO,CAAC,SAAS,EAAE,CAAC,CA2BtB;AAED,uCAAuC;AACvC,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GACtC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAgB3B;AAOD,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAQhE;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/** 命中后的存活时间 */
|
|
2
|
+
const HIT_TTL = 5 * 60 * 1000;
|
|
3
|
+
/** 空结果的存活时间:别把「暂时查不到」当成长久不存在 */
|
|
4
|
+
const MISS_TTL = 30 * 1000;
|
|
5
|
+
/**
|
|
6
|
+
* 条目上限。过期只在读到同一个 key 时才清理,没有上限的话,
|
|
7
|
+
* 大量编码 × 参数组合会一直堆着。这里按插入顺序淘汰(FIFO),够用即可。
|
|
8
|
+
*/
|
|
9
|
+
const MAX_ENTRIES = 500;
|
|
10
|
+
/**
|
|
11
|
+
* 缓存代次:clear 只清 Map,已经在途的请求稍后回来照样会写回旧数据。
|
|
12
|
+
* 每次 clear 递增一代,写回时比对代次就能丢掉上一代的结果。
|
|
13
|
+
*/
|
|
14
|
+
let generation = 0;
|
|
15
|
+
const candidateCache = new Map();
|
|
16
|
+
const resolveCache = new Map();
|
|
17
|
+
function take(store, key) {
|
|
18
|
+
const hit = store.get(key);
|
|
19
|
+
if (!hit)
|
|
20
|
+
return undefined;
|
|
21
|
+
if (hit.expiresAt <= Date.now()) {
|
|
22
|
+
store.delete(key);
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
return hit.promise;
|
|
26
|
+
}
|
|
27
|
+
function evict(store) {
|
|
28
|
+
while (store.size > MAX_ENTRIES) {
|
|
29
|
+
const oldest = store.keys().next();
|
|
30
|
+
if (oldest.done)
|
|
31
|
+
return;
|
|
32
|
+
store.delete(oldest.value);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** 请求发出后缓存被清过:这份结果属于上一代 */
|
|
36
|
+
function staleGeneration(startedGeneration) {
|
|
37
|
+
return startedGeneration !== generation;
|
|
38
|
+
}
|
|
39
|
+
/** 首次登记:只占位,不覆盖同键已有的请求(并发调用共享同一份 promise) */
|
|
40
|
+
function register(store, key, promise, ttl, startedGeneration) {
|
|
41
|
+
if (staleGeneration(startedGeneration) || store.has(key))
|
|
42
|
+
return;
|
|
43
|
+
store.set(key, { promise, expiresAt: Date.now() + ttl });
|
|
44
|
+
evict(store);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 结果写回:条目必须仍属于这次请求。
|
|
48
|
+
*
|
|
49
|
+
* 「条目不存在」也算失效——reload 换过一轮、新请求又失败了,此时写回去
|
|
50
|
+
* 就是让旧数据复活。所以不能只看 `current && current.promise !== owner`。
|
|
51
|
+
*/
|
|
52
|
+
function settle(store, key, owner, value, ttl, startedGeneration) {
|
|
53
|
+
if (staleGeneration(startedGeneration))
|
|
54
|
+
return;
|
|
55
|
+
const current = store.get(key);
|
|
56
|
+
if (!current || current.promise !== owner)
|
|
57
|
+
return;
|
|
58
|
+
store.set(key, { promise: Promise.resolve(value), expiresAt: Date.now() + ttl });
|
|
59
|
+
}
|
|
60
|
+
/** 失败清场:只删自己那一条,别误删已经接手的新请求 */
|
|
61
|
+
function dropOwn(store, key, owner) {
|
|
62
|
+
if (store.get(key)?.promise === owner)
|
|
63
|
+
store.delete(key);
|
|
64
|
+
}
|
|
65
|
+
export function loadCandidatesWithCache(key, loader) {
|
|
66
|
+
const cached = take(candidateCache, key);
|
|
67
|
+
if (cached)
|
|
68
|
+
return cached;
|
|
69
|
+
const startedGeneration = generation;
|
|
70
|
+
const promise = Promise.resolve()
|
|
71
|
+
.then(loader)
|
|
72
|
+
.then((list) => {
|
|
73
|
+
const options = list ?? [];
|
|
74
|
+
// 空结果只短暂记住
|
|
75
|
+
settle(candidateCache, key, promise, options, options.length ? HIT_TTL : MISS_TTL, startedGeneration);
|
|
76
|
+
return options;
|
|
77
|
+
})
|
|
78
|
+
.catch((error) => {
|
|
79
|
+
// 失败不缓存,下一次仍可重试
|
|
80
|
+
dropOwn(candidateCache, key, promise);
|
|
81
|
+
throw error;
|
|
82
|
+
});
|
|
83
|
+
register(candidateCache, key, promise, HIT_TTL, startedGeneration);
|
|
84
|
+
return promise;
|
|
85
|
+
}
|
|
86
|
+
/** 丢掉单条候选缓存:reload() 要真正重取,不能又命中同一份 */
|
|
87
|
+
export function dropCandidateCache(key) {
|
|
88
|
+
candidateCache.delete(key);
|
|
89
|
+
}
|
|
90
|
+
export function resolveCodeWithCache(key, loader) {
|
|
91
|
+
const cached = take(resolveCache, key);
|
|
92
|
+
if (cached)
|
|
93
|
+
return cached;
|
|
94
|
+
const startedGeneration = generation;
|
|
95
|
+
const promise = loader()
|
|
96
|
+
.then((option) => {
|
|
97
|
+
settle(resolveCache, key, promise, option, option ? HIT_TTL : MISS_TTL, startedGeneration);
|
|
98
|
+
return option;
|
|
99
|
+
})
|
|
100
|
+
.catch((error) => {
|
|
101
|
+
dropOwn(resolveCache, key, promise);
|
|
102
|
+
throw error;
|
|
103
|
+
});
|
|
104
|
+
register(resolveCache, key, promise, HIT_TTL, startedGeneration);
|
|
105
|
+
return promise;
|
|
106
|
+
}
|
|
107
|
+
/** 来源键在缓存键里固定占第二段,因此用两侧分隔符即可精确匹配 */
|
|
108
|
+
function matchesSource(key, sourceKey) {
|
|
109
|
+
return key.startsWith(`${sourceKey}|`) || key.includes(`|${sourceKey}|`);
|
|
110
|
+
}
|
|
111
|
+
export function clearSelectCacheOfSource(sourceKey) {
|
|
112
|
+
generation += 1;
|
|
113
|
+
for (const key of candidateCache.keys()) {
|
|
114
|
+
if (matchesSource(key, sourceKey))
|
|
115
|
+
candidateCache.delete(key);
|
|
116
|
+
}
|
|
117
|
+
for (const key of resolveCache.keys()) {
|
|
118
|
+
if (matchesSource(key, sourceKey))
|
|
119
|
+
resolveCache.delete(key);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
export function clearSelectCache() {
|
|
123
|
+
generation += 1;
|
|
124
|
+
candidateCache.clear();
|
|
125
|
+
resolveCache.clear();
|
|
126
|
+
}
|
|
127
|
+
export function getSelectCacheSize() {
|
|
128
|
+
return candidateCache.size + resolveCache.size;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/biz-select/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AnyFormFieldSchema, NamePath } from '../types.js';
|
|
2
|
+
import type { BizOption, DisplayMode, SearchFields, ValueFieldMap, ValueMode } from './types.js';
|
|
3
|
+
/** BizSelect 在 schema 里额外认的专有属性 */
|
|
4
|
+
export interface BizSelectSchemaProps {
|
|
5
|
+
/** 数据源注册名;schema 里不允许写函数 */
|
|
6
|
+
source?: string;
|
|
7
|
+
/** 参数名 ← 表单字段名:`{ provinceCode: 'provinceCode' }` */
|
|
8
|
+
paramsFrom?: Record<string, NamePath>;
|
|
9
|
+
valueMode?: ValueMode;
|
|
10
|
+
valueFields?: ValueFieldMap;
|
|
11
|
+
displayMode?: DisplayMode;
|
|
12
|
+
searchFields?: SearchFields;
|
|
13
|
+
seedOptions?: BizOption[];
|
|
14
|
+
/** 默认 true:父值变化时清空本字段 */
|
|
15
|
+
clearOnParent?: boolean;
|
|
16
|
+
blockedText?: unknown;
|
|
17
|
+
debounceMs?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 归一化:专有属性下沉 + 级联编译。
|
|
21
|
+
*
|
|
22
|
+
* 必须是纯函数——调用方按 schema 对象缓存结果,每次新建对象会让下游 memo 与 effect 全部失效。
|
|
23
|
+
*/
|
|
24
|
+
export declare function normalizeBizSelectSchema<T extends AnyFormFieldSchema>(schema: T): T;
|
|
25
|
+
//# sourceMappingURL=compile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/biz-select/compile.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,kBAAkB,EAIlB,QAAQ,EAET,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,YAAY,EAEZ,aAAa,EACb,SAAS,EACV,MAAM,SAAS,CAAC;AAEjB,mCAAmC;AACnC,MAAM,WAAW,oBAAoB;IACnC,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;IAC1B,yBAAyB;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAwDD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,kBAAkB,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CA0BnF"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* schema 侧的纯逻辑:专有属性下沉 + `paramsFrom` 编译。
|
|
3
|
+
*
|
|
4
|
+
* 与 `schema.tsx`(负责注册、需要 antd/React)分开,是为了让这部分能被单测直接加载。
|
|
5
|
+
*/
|
|
6
|
+
import { dedupeNamePaths } from '../form/namePath.js';
|
|
7
|
+
/** 需要下沉到 props 的专有属性:组件只认 props */
|
|
8
|
+
const SUNK_KEYS = [
|
|
9
|
+
'source',
|
|
10
|
+
'valueMode',
|
|
11
|
+
'valueFields',
|
|
12
|
+
'displayMode',
|
|
13
|
+
'searchFields',
|
|
14
|
+
'seedOptions',
|
|
15
|
+
'blockedText',
|
|
16
|
+
'debounceMs',
|
|
17
|
+
];
|
|
18
|
+
/**
|
|
19
|
+
* 把 `paramsFrom` 编译成已有的两套机制:
|
|
20
|
+
* - `dynamic`:订阅父字段,把值映射成 `params` 传给组件
|
|
21
|
+
* - `linkage`:父值变化时清空本字段
|
|
22
|
+
*/
|
|
23
|
+
function compileParamsFrom(schema, entries) {
|
|
24
|
+
const deps = dedupeNamePaths(entries.map(([, path]) => path));
|
|
25
|
+
const base = schema.dynamic;
|
|
26
|
+
const inheritedProps = base?.props;
|
|
27
|
+
// 静态固定条件(如 props.params: { enabled: true })必须保留,否则查询会放宽
|
|
28
|
+
const staticParams = (schema.props?.params ?? undefined);
|
|
29
|
+
const dynamic = {
|
|
30
|
+
...base,
|
|
31
|
+
// 与调用方自己声明的依赖取并集去重
|
|
32
|
+
dependencies: dedupeNamePaths([...(base?.dependencies ?? []), ...deps]),
|
|
33
|
+
props: (ctx) => {
|
|
34
|
+
const inherited = typeof inheritedProps === 'function' ? inheritedProps(ctx) : (inheritedProps ?? {});
|
|
35
|
+
const inheritedParams = inherited.params;
|
|
36
|
+
const mapped = Object.fromEntries(entries.map(([param, path]) => [param, ctx.get(path)]));
|
|
37
|
+
// 合并顺序:静态 props.params < dynamic.props().params < paramsFrom 映射。
|
|
38
|
+
// 越靠后的越"当前",同名时覆盖前面的
|
|
39
|
+
return {
|
|
40
|
+
...inherited,
|
|
41
|
+
params: { ...staticParams, ...inheritedParams, ...mapped },
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
// clearOnParent=false 是「快照语义」:父变不清空,也不额外下发联动规则
|
|
46
|
+
const linkage = schema.clearOnParent === false
|
|
47
|
+
? schema.linkage
|
|
48
|
+
: [...(schema.linkage ?? []), { dependencies: deps, handler: (ctx) => ctx.clear(schema.name) }];
|
|
49
|
+
return { dynamic, linkage };
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 归一化:专有属性下沉 + 级联编译。
|
|
53
|
+
*
|
|
54
|
+
* 必须是纯函数——调用方按 schema 对象缓存结果,每次新建对象会让下游 memo 与 effect 全部失效。
|
|
55
|
+
*/
|
|
56
|
+
export function normalizeBizSelectSchema(schema) {
|
|
57
|
+
const ext = schema;
|
|
58
|
+
if (ext.type !== 'BizSelect')
|
|
59
|
+
return schema;
|
|
60
|
+
const sunk = {};
|
|
61
|
+
for (const key of SUNK_KEYS) {
|
|
62
|
+
if (ext[key] !== undefined)
|
|
63
|
+
sunk[key] = ext[key];
|
|
64
|
+
}
|
|
65
|
+
const entries = Object.entries(ext.paramsFrom ?? {});
|
|
66
|
+
// 没有可下沉的属性和可编译的级联时保持同一引用,避免无意义的新对象
|
|
67
|
+
if (!entries.length && !Object.keys(sunk).length)
|
|
68
|
+
return schema;
|
|
69
|
+
const next = { ...schema, props: { ...schema.props, ...sunk } };
|
|
70
|
+
if (entries.length) {
|
|
71
|
+
const { dynamic, linkage } = compileParamsFrom(ext, entries);
|
|
72
|
+
next.dynamic = dynamic;
|
|
73
|
+
if (linkage)
|
|
74
|
+
next.linkage = linkage;
|
|
75
|
+
}
|
|
76
|
+
// 已经编译进 props / dynamic / linkage 的属性从顶层摘掉,保证归一化幂等
|
|
77
|
+
for (const key of [...SUNK_KEYS, 'paramsFrom', 'clearOnParent']) {
|
|
78
|
+
delete next[key];
|
|
79
|
+
}
|
|
80
|
+
return next;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=compile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/biz-select/compile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 三个工厂:只做形状收敛,不注册、不缓存、不发请求。
|
|
3
|
+
*
|
|
4
|
+
* 之所以保留工厂而不是让调用方直接写 `{ load, search }`:
|
|
5
|
+
* 工厂承载了「这个源属于哪种能力组合」的语义,写法越短,越不容易写出
|
|
6
|
+
* `resolve` 用模糊搜索冒充精确查这类错误。
|
|
7
|
+
*/
|
|
8
|
+
import type { BizOption, SelectCode, SelectSource, SelectParams } from './types.js';
|
|
9
|
+
/** ① 纯前端常量:同步可用,没有请求也没有 loading */
|
|
10
|
+
export declare function staticList<T = unknown>(list: ReadonlyArray<BizOption<T>>): SelectSource;
|
|
11
|
+
/**
|
|
12
|
+
* ② 有限远程枚举:一次拉全量,之后由前端过滤。
|
|
13
|
+
* 传导入的函数(如 `api.listCurrency`)而不是内联箭头,才能跨实例共享缓存。
|
|
14
|
+
*/
|
|
15
|
+
export declare function loaded<P extends SelectParams = SelectParams>(load: (params: P, signal?: AbortSignal) => Promise<BizOption[]>, extra?: Pick<SelectSource<P>, 'requiredParams' | 'namespace'>): SelectSource<P>;
|
|
16
|
+
/** ③ 无限远程:关键词搜索 + 按编码回显 */
|
|
17
|
+
export declare function remote<P extends SelectParams = SelectParams>(config: {
|
|
18
|
+
search: (keyword: string, params: P, signal?: AbortSignal) => Promise<BizOption[]>;
|
|
19
|
+
resolve?: (code: SelectCode, params: P, signal?: AbortSignal) => Promise<BizOption | null>;
|
|
20
|
+
requiredParams?: string[];
|
|
21
|
+
namespace?: () => string;
|
|
22
|
+
}): SelectSource<P>;
|
|
23
|
+
//# sourceMappingURL=factories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../../src/biz-select/factories.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEjF,mCAAmC;AACnC,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAEvF;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAC1D,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,EAC/D,KAAK,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,gBAAgB,GAAG,WAAW,CAAC,GAC5D,YAAY,CAAC,CAAC,CAAC,CAEjB;AAED,2BAA2B;AAC3B,wBAAgB,MAAM,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,MAAM,EAAE;IACpE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACnF,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC3F,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;CAC1B,GAAG,YAAY,CAAC,CAAC,CAAC,CAGlB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** ① 纯前端常量:同步可用,没有请求也没有 loading */
|
|
2
|
+
export function staticList(list) {
|
|
3
|
+
return { options: [...list] };
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* ② 有限远程枚举:一次拉全量,之后由前端过滤。
|
|
7
|
+
* 传导入的函数(如 `api.listCurrency`)而不是内联箭头,才能跨实例共享缓存。
|
|
8
|
+
*/
|
|
9
|
+
export function loaded(load, extra) {
|
|
10
|
+
return { load, ...extra };
|
|
11
|
+
}
|
|
12
|
+
/** ③ 无限远程:关键词搜索 + 按编码回显 */
|
|
13
|
+
export function remote(config) {
|
|
14
|
+
const { search, resolve, requiredParams, namespace } = config;
|
|
15
|
+
return { search, resolve, requiredParams, namespace };
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=factories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factories.js","sourceRoot":"","sources":["../../src/biz-select/factories.ts"],"names":[],"mappings":"AASA,mCAAmC;AACnC,MAAM,UAAU,UAAU,CAAc,IAAiC;IACvE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM,CACpB,IAA+D,EAC/D,KAA6D;IAE7D,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED,2BAA2B;AAC3B,MAAM,UAAU,MAAM,CAAwC,MAK7D;IACC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAC9D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;AACxD,CAAC"}
|
|
@@ -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"}
|