@tianyr/schema-antd 0.0.0-stage → 0.1.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.
Files changed (135) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +158 -2
  3. package/dist/SchemaField.d.ts +15 -0
  4. package/dist/SchemaField.d.ts.map +1 -0
  5. package/dist/SchemaField.js +107 -0
  6. package/dist/SchemaField.js.map +1 -0
  7. package/dist/SchemaForm.d.ts +22 -0
  8. package/dist/SchemaForm.d.ts.map +1 -0
  9. package/dist/SchemaForm.js +19 -0
  10. package/dist/SchemaForm.js.map +1 -0
  11. package/dist/TableFooter.d.ts +38 -0
  12. package/dist/TableFooter.d.ts.map +1 -0
  13. package/dist/TableFooter.js +16 -0
  14. package/dist/TableFooter.js.map +1 -0
  15. package/dist/app-select/AppSelect.d.ts +3 -0
  16. package/dist/app-select/AppSelect.d.ts.map +1 -0
  17. package/dist/app-select/AppSelect.js +56 -0
  18. package/dist/app-select/AppSelect.js.map +1 -0
  19. package/dist/app-select/AppSelectDisplay.d.ts +3 -0
  20. package/dist/app-select/AppSelectDisplay.d.ts.map +1 -0
  21. package/dist/app-select/AppSelectDisplay.js +39 -0
  22. package/dist/app-select/AppSelectDisplay.js.map +1 -0
  23. package/dist/app-select/cache.d.ts +26 -0
  24. package/dist/app-select/cache.d.ts.map +1 -0
  25. package/dist/app-select/cache.js +82 -0
  26. package/dist/app-select/cache.js.map +1 -0
  27. package/dist/app-select/hooks.d.ts +56 -0
  28. package/dist/app-select/hooks.d.ts.map +1 -0
  29. package/dist/app-select/hooks.js +322 -0
  30. package/dist/app-select/hooks.js.map +1 -0
  31. package/dist/app-select/index.d.ts +7 -0
  32. package/dist/app-select/index.d.ts.map +1 -0
  33. package/dist/app-select/index.js +6 -0
  34. package/dist/app-select/index.js.map +1 -0
  35. package/dist/app-select/register.d.ts +2 -0
  36. package/dist/app-select/register.d.ts.map +1 -0
  37. package/dist/app-select/register.js +10 -0
  38. package/dist/app-select/register.js.map +1 -0
  39. package/dist/app-select/sources.d.ts +20 -0
  40. package/dist/app-select/sources.d.ts.map +1 -0
  41. package/dist/app-select/sources.js +59 -0
  42. package/dist/app-select/sources.js.map +1 -0
  43. package/dist/app-select/types.d.ts +68 -0
  44. package/dist/app-select/types.d.ts.map +1 -0
  45. package/dist/app-select/types.js +2 -0
  46. package/dist/app-select/types.js.map +1 -0
  47. package/dist/app-select/utils.d.ts +30 -0
  48. package/dist/app-select/utils.d.ts.map +1 -0
  49. package/dist/app-select/utils.js +76 -0
  50. package/dist/app-select/utils.js.map +1 -0
  51. package/dist/editable-table/EditableTable.d.ts +3 -0
  52. package/dist/editable-table/EditableTable.d.ts.map +1 -0
  53. package/dist/editable-table/EditableTable.js +499 -0
  54. package/dist/editable-table/EditableTable.js.map +1 -0
  55. package/dist/editable-table/dirty.d.ts +17 -0
  56. package/dist/editable-table/dirty.d.ts.map +1 -0
  57. package/dist/editable-table/dirty.js +72 -0
  58. package/dist/editable-table/dirty.js.map +1 -0
  59. package/dist/editable-table/index.d.ts +4 -0
  60. package/dist/editable-table/index.d.ts.map +1 -0
  61. package/dist/editable-table/index.js +3 -0
  62. package/dist/editable-table/index.js.map +1 -0
  63. package/dist/editable-table/types.d.ts +109 -0
  64. package/dist/editable-table/types.d.ts.map +1 -0
  65. package/dist/editable-table/types.js +2 -0
  66. package/dist/editable-table/types.js.map +1 -0
  67. package/dist/env.d.ts +3 -0
  68. package/dist/env.d.ts.map +1 -0
  69. package/dist/env.js +11 -0
  70. package/dist/env.js.map +1 -0
  71. package/dist/form/FormRuntimeHost.d.ts +39 -0
  72. package/dist/form/FormRuntimeHost.d.ts.map +1 -0
  73. package/dist/form/FormRuntimeHost.js +184 -0
  74. package/dist/form/FormRuntimeHost.js.map +1 -0
  75. package/dist/form/SchemaFormField.d.ts +15 -0
  76. package/dist/form/SchemaFormField.d.ts.map +1 -0
  77. package/dist/form/SchemaFormField.js +142 -0
  78. package/dist/form/SchemaFormField.js.map +1 -0
  79. package/dist/form/derive.d.ts +33 -0
  80. package/dist/form/derive.d.ts.map +1 -0
  81. package/dist/form/derive.js +59 -0
  82. package/dist/form/derive.js.map +1 -0
  83. package/dist/form/namePath.d.ts +12 -0
  84. package/dist/form/namePath.d.ts.map +1 -0
  85. package/dist/form/namePath.js +33 -0
  86. package/dist/form/namePath.js.map +1 -0
  87. package/dist/full-editable-table/EditableCell.d.ts +12 -0
  88. package/dist/full-editable-table/EditableCell.d.ts.map +1 -0
  89. package/dist/full-editable-table/EditableCell.js +8 -0
  90. package/dist/full-editable-table/EditableCell.js.map +1 -0
  91. package/dist/full-editable-table/EditableRow.d.ts +8 -0
  92. package/dist/full-editable-table/EditableRow.d.ts.map +1 -0
  93. package/dist/full-editable-table/EditableRow.js +23 -0
  94. package/dist/full-editable-table/EditableRow.js.map +1 -0
  95. package/dist/full-editable-table/FullEditableTable.d.ts +3 -0
  96. package/dist/full-editable-table/FullEditableTable.d.ts.map +1 -0
  97. package/dist/full-editable-table/FullEditableTable.js +384 -0
  98. package/dist/full-editable-table/FullEditableTable.js.map +1 -0
  99. package/dist/full-editable-table/context.d.ts +4 -0
  100. package/dist/full-editable-table/context.d.ts.map +1 -0
  101. package/dist/full-editable-table/context.js +6 -0
  102. package/dist/full-editable-table/context.js.map +1 -0
  103. package/dist/full-editable-table/index.d.ts +3 -0
  104. package/dist/full-editable-table/index.d.ts.map +1 -0
  105. package/dist/full-editable-table/index.js +2 -0
  106. package/dist/full-editable-table/index.js.map +1 -0
  107. package/dist/full-editable-table/types.d.ts +95 -0
  108. package/dist/full-editable-table/types.d.ts.map +1 -0
  109. package/dist/full-editable-table/types.js +2 -0
  110. package/dist/full-editable-table/types.js.map +1 -0
  111. package/dist/index.d.ts +19 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +15 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/read.d.ts +14 -0
  116. package/dist/read.d.ts.map +1 -0
  117. package/dist/read.js +151 -0
  118. package/dist/read.js.map +1 -0
  119. package/dist/registry.d.ts +24 -0
  120. package/dist/registry.d.ts.map +1 -0
  121. package/dist/registry.js +49 -0
  122. package/dist/registry.js.map +1 -0
  123. package/dist/rowMerge.d.ts +2 -0
  124. package/dist/rowMerge.d.ts.map +1 -0
  125. package/dist/rowMerge.js +32 -0
  126. package/dist/rowMerge.js.map +1 -0
  127. package/dist/tableScroll.d.ts +10 -0
  128. package/dist/tableScroll.d.ts.map +1 -0
  129. package/dist/tableScroll.js +14 -0
  130. package/dist/tableScroll.js.map +1 -0
  131. package/dist/types.d.ts +128 -0
  132. package/dist/types.d.ts.map +1 -0
  133. package/dist/types.js +2 -0
  134. package/dist/types.js.map +1 -0
  135. package/package.json +60 -4
@@ -0,0 +1,82 @@
1
+ const DEFAULT_TTL = 5 * 60 * 1000;
2
+ /** 解析不到时只短暂记住,避免把“暂时查不到”永久当成不存在 */
3
+ const MISS_TTL = 30 * 1000;
4
+ const resolveCache = new Map();
5
+ /**
6
+ * 同一个 key 的并发调用共享一次请求;失败不缓存,下次可重试。
7
+ * 调用方各自的取消只影响自己的状态更新,不打断共享请求。
8
+ */
9
+ export function resolveOptionWithCache(key, loader, ttl = DEFAULT_TTL) {
10
+ const now = Date.now();
11
+ const cached = resolveCache.get(key);
12
+ if (cached && cached.expiresAt > now) {
13
+ return cached.promise;
14
+ }
15
+ const promise = loader()
16
+ .then((option) => {
17
+ resolveCache.set(key, {
18
+ promise: Promise.resolve(option),
19
+ expiresAt: Date.now() + (option ? ttl : MISS_TTL),
20
+ });
21
+ return option;
22
+ })
23
+ .catch((error) => {
24
+ resolveCache.delete(key);
25
+ throw error;
26
+ });
27
+ resolveCache.set(key, { promise, expiresAt: now + ttl });
28
+ return promise;
29
+ }
30
+ /** 静态 / 有限字典集合的共享缓存:同一来源在同一窗口内只加载一次 */
31
+ const loadCache = new Map();
32
+ /**
33
+ * 静态 / 字典集合的加载缓存。
34
+ * 每个 AppSelect 单元格各自 loadOptions 会在表格里重复打同一批字典请求,
35
+ * 因此按来源键共享;失败不缓存,下一次可重试。
36
+ */
37
+ export function loadOptionsWithCache(key, loader, ttl = DEFAULT_TTL) {
38
+ const now = Date.now();
39
+ const cached = loadCache.get(key);
40
+ if (cached && cached.expiresAt > now) {
41
+ return cached.promise;
42
+ }
43
+ const promise = Promise.resolve()
44
+ .then(loader)
45
+ .then((list) => {
46
+ const options = list ?? [];
47
+ loadCache.set(key, { promise: Promise.resolve(options), expiresAt: Date.now() + ttl });
48
+ return options;
49
+ })
50
+ .catch((error) => {
51
+ loadCache.delete(key);
52
+ throw error;
53
+ });
54
+ loadCache.set(key, { promise, expiresAt: now + ttl });
55
+ return promise;
56
+ }
57
+ /**
58
+ * 清掉某个注册源名下的缓存。
59
+ * 重新注册同名源(常见于开发态 HMR)时必须调用,否则会继续读到旧实现的结果。
60
+ */
61
+ export function clearAppSelectCacheOfSource(name) {
62
+ const sourceKey = `source:${name}`;
63
+ const marker = `|${sourceKey}|`;
64
+ // 集合缓存直接用来源键当 key;解析缓存的键是 scope|source|类型|值|参数
65
+ const matches = (key) => key === sourceKey || key.includes(marker);
66
+ for (const key of resolveCache.keys()) {
67
+ if (matches(key))
68
+ resolveCache.delete(key);
69
+ }
70
+ for (const key of loadCache.keys()) {
71
+ if (matches(key))
72
+ loadCache.delete(key);
73
+ }
74
+ }
75
+ export function clearAppSelectCache() {
76
+ resolveCache.clear();
77
+ loadCache.clear();
78
+ }
79
+ export function getAppSelectCacheSize() {
80
+ return resolveCache.size + loadCache.size;
81
+ }
82
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/app-select/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { AppOption, AppSelectSource, SelectId } from './types.js';
2
+ /**
3
+ * 已选 ID 的解析状态。
4
+ * 设计文档 §6.4 要求区分 loading / empty / not-found / error,
5
+ * 用户不能把「还在查」或「查不到」误认为业务值为空。
6
+ * `blocked` 是「缺少必需查询参数」:为了不查出别家范围的数据,宁可不解析。
7
+ */
8
+ export type SelectedOptionStatus = 'empty' | 'loading' | 'resolved' | 'missing' | 'blocked' | 'error';
9
+ export interface SelectedOptionState {
10
+ option: AppOption | null;
11
+ status: SelectedOptionStatus;
12
+ }
13
+ export interface ResolvedSource {
14
+ sourceObj?: AppSelectSource;
15
+ /** 稳定来源键:只用于缓存与告警,不进入 effect 依赖 */
16
+ sourceKey: string;
17
+ }
18
+ /**
19
+ * 每次渲染解析一次数据源,供候选与回显两条链路共用。
20
+ * 缓存键必须与「实际生效的源」一致,所以统一在这里算,不在各 hook 里各算一遍。
21
+ */
22
+ export declare function useResolvedSource(source?: string, dataSource?: AppSelectSource): ResolvedSource;
23
+ interface CandidateOptionsParams extends ResolvedSource {
24
+ queryParams?: Record<string, unknown>;
25
+ debounceMs?: number;
26
+ }
27
+ /**
28
+ * 候选选项:静态/字典挂载时加载一次;remote 只在打开下拉或输入关键词后请求,
29
+ * 避免表格首屏为每个单元格发默认候选请求。
30
+ */
31
+ export declare function useCandidateOptions({ sourceObj, sourceKey, queryParams, debounceMs, }: CandidateOptionsParams): {
32
+ sourceObj: AppSelectSource | undefined;
33
+ candidates: AppOption<unknown>[];
34
+ loading: boolean;
35
+ search: (keyword: string) => void;
36
+ cancelPending: () => void;
37
+ };
38
+ interface SelectedOptionParams extends ResolvedSource {
39
+ value?: SelectId | null;
40
+ /** 对象模式自带的 label,可直接回显 */
41
+ legacyLabel?: string;
42
+ selectedOptions?: AppOption[];
43
+ /** 当前已加载候选:解析顺序第 3 位,命中就不用再发 resolve */
44
+ candidates?: AppOption[];
45
+ queryParams?: Record<string, unknown>;
46
+ }
47
+ /**
48
+ * 已选 ID 的标签解析:与关键词搜索完全独立。
49
+ *
50
+ * 解析顺序见设计文档 §6.1:
51
+ * 1. 匹配的 `selectedOptions`;2. 对象模式的 `value.label`;3. 已加载候选;
52
+ * 4. `resolve(id, queryParams)`;5. 未命中就保持 ID,并暴露状态。
53
+ */
54
+ export declare function useSelectedOption({ sourceObj, sourceKey, value, legacyLabel, selectedOptions, candidates, queryParams, }: SelectedOptionParams): SelectedOptionState;
55
+ export {};
56
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/app-select/hooks.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AASpE;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAC5B,OAAO,GACP,SAAS,GACT,UAAU,GACV,SAAS,GACT,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;CACnB;AAcD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,cAAc,CAmC/F;AAED,UAAU,sBAAuB,SAAQ,cAAc;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAYD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,SAAS,EACT,SAAS,EACT,WAAW,EACX,UAAgB,GACjB,EAAE,sBAAsB;;;;sBAsEX,MAAM;;EAkCnB;AAED,UAAU,oBAAqB,SAAQ,cAAc;IACnD,KAAK,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACxB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,SAAS,EAAE,CAAC;IAC9B,wCAAwC;IACxC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAkBD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,SAAS,EACT,KAAK,EACL,WAAW,EACX,eAAe,EACf,UAAU,EACV,WAAW,GACZ,EAAE,oBAAoB,GAAG,mBAAmB,CAgK5C"}
@@ -0,0 +1,322 @@
1
+ import { useCallback, useEffect, useRef, useState } from 'react';
2
+ import { IS_DEV } from '../env.js';
3
+ import { loadOptionsWithCache, resolveOptionWithCache } from './cache.js';
4
+ import { resolveAppSelectSource, resolveAppSelectSourceKey } from './sources.js';
5
+ import { buildResolveKey, hasRequiredParams, isEmptyId, optionsContentKey, stableStringify, } from './utils.js';
6
+ /** 内联源的「形状」:kind + 提供了哪几个能力,用来识别「同一份配置每次渲染新建」 */
7
+ function sourceShape(source) {
8
+ if (!source)
9
+ return '';
10
+ return [
11
+ source.kind,
12
+ source.loadOptions ? 1 : 0,
13
+ source.search ? 1 : 0,
14
+ source.resolve ? 1 : 0,
15
+ source.cacheNamespace ? 1 : 0,
16
+ ].join(':');
17
+ }
18
+ /**
19
+ * 每次渲染解析一次数据源,供候选与回显两条链路共用。
20
+ * 缓存键必须与「实际生效的源」一致,所以统一在这里算,不在各 hook 里各算一遍。
21
+ */
22
+ export function useResolvedSource(source, dataSource) {
23
+ const sourceObj = resolveAppSelectSource(source, dataSource);
24
+ const sourceKey = resolveAppSelectSourceKey(source, dataSource);
25
+ const previousRef = useRef({ key: sourceKey, shape: sourceShape(sourceObj) });
26
+ const warnedMixedRef = useRef(false);
27
+ const warnedChurnRef = useRef(false);
28
+ if (IS_DEV) {
29
+ if (source && dataSource && !warnedMixedRef.current) {
30
+ warnedMixedRef.current = true;
31
+ console.warn('[schema] AppSelect 同时传了 source 与 dataSource,以 dataSource 为准');
32
+ }
33
+ // 形状没变、键却变了:几乎可以确定是页面每次渲染都新建了 dataSource / 内联函数,
34
+ // 缓存键会跟着失效(等同于不缓存),提示提到组件外或改用注册源。
35
+ const previous = previousRef.current;
36
+ if (!warnedChurnRef.current &&
37
+ previous.key !== sourceKey &&
38
+ previous.key.startsWith('inline:') &&
39
+ sourceKey.startsWith('inline:') &&
40
+ previous.shape === sourceShape(sourceObj)) {
41
+ warnedChurnRef.current = true;
42
+ console.warn('[schema] AppSelect 的 dataSource 每次渲染都产生新的函数引用,解析缓存会失效;' +
43
+ '请把 dataSource 提到组件外,或改用 registerAppSelectSource 注册');
44
+ }
45
+ }
46
+ previousRef.current = { key: sourceKey, shape: sourceShape(sourceObj) };
47
+ return { sourceObj, sourceKey };
48
+ }
49
+ // 空数组用常量,避免每次渲染新建引用导致下游 memo 失效
50
+ const EMPTY_CANDIDATES = [];
51
+ const NO_CANDIDATES = { paramsKey: null, list: EMPTY_CANDIDATES };
52
+ /**
53
+ * 候选选项:静态/字典挂载时加载一次;remote 只在打开下拉或输入关键词后请求,
54
+ * 避免表格首屏为每个单元格发默认候选请求。
55
+ */
56
+ export function useCandidateOptions({ sourceObj, sourceKey, queryParams, debounceMs = 300, }) {
57
+ // 搜索回调需要读最新的 requiredParams,避免用旧配置判断范围参数
58
+ const sourceRef = useRef(sourceObj);
59
+ sourceRef.current = sourceObj;
60
+ const paramsKey = stableStringify(queryParams ?? null);
61
+ const paramsRef = useRef(queryParams);
62
+ paramsRef.current = queryParams;
63
+ // 候选必须带着「取回时的级联参数」一起存:参数一变旧候选立刻失效,
64
+ // 否则切换省份后回显会先闪出一个别的省份的同 ID 名称。
65
+ // paramsKey 为 null 表示与参数无关(静态 / 字典)。
66
+ const [candidateState, setCandidateState] = useState(NO_CANDIDATES);
67
+ const candidates = candidateState.paramsKey === null || candidateState.paramsKey === paramsKey
68
+ ? candidateState.list
69
+ : EMPTY_CANDIDATES;
70
+ const [loading, setLoading] = useState(false);
71
+ const seqRef = useRef(0);
72
+ const abortRef = useRef(null);
73
+ const timerRef = useRef(null);
74
+ const cancelPending = useCallback(() => {
75
+ if (timerRef.current) {
76
+ clearTimeout(timerRef.current);
77
+ timerRef.current = null;
78
+ }
79
+ abortRef.current?.abort();
80
+ abortRef.current = null;
81
+ }, []);
82
+ useEffect(() => cancelPending, [cancelPending]);
83
+ const isRemote = sourceObj?.kind === 'remote';
84
+ const searchFn = isRemote ? sourceObj?.search : undefined;
85
+ const loadFn = !isRemote ? sourceObj?.loadOptions : undefined;
86
+ // 静态 / 有限字典:加载一次即可,失败不抛给调用方
87
+ useEffect(() => {
88
+ if (!loadFn) {
89
+ // 切到 remote 源时旧 effect 已被取消,这里要负责把 loading 和旧候选收掉
90
+ setCandidateState(NO_CANDIDATES);
91
+ setLoading(false);
92
+ return;
93
+ }
94
+ let cancelled = false;
95
+ setLoading(true);
96
+ loadOptionsWithCache(sourceKey, () => loadFn())
97
+ .then((list) => {
98
+ // 静态源的候选与级联参数无关,标记为 paramsKey: null
99
+ if (!cancelled)
100
+ setCandidateState({ paramsKey: null, list });
101
+ })
102
+ .catch(() => {
103
+ if (!cancelled)
104
+ setCandidateState(NO_CANDIDATES);
105
+ })
106
+ .finally(() => {
107
+ if (!cancelled)
108
+ setLoading(false);
109
+ });
110
+ return () => {
111
+ cancelled = true;
112
+ };
113
+ }, [loadFn, sourceKey]);
114
+ // 级联参数变化:取消在途请求;旧候选由上面的 paramsKey 比对挡住,不必清空
115
+ useEffect(() => {
116
+ cancelPending();
117
+ }, [paramsKey, cancelPending]);
118
+ const search = useCallback((keyword) => {
119
+ if (!searchFn)
120
+ return;
121
+ // 范围参数不全就不发搜索:否则用户会看到别的租户/省份的候选
122
+ if (!hasRequiredParams(sourceRef.current?.requiredParams, paramsRef.current)) {
123
+ cancelPending();
124
+ setCandidateState({ paramsKey, list: EMPTY_CANDIDATES });
125
+ setLoading(false);
126
+ return;
127
+ }
128
+ cancelPending();
129
+ timerRef.current = setTimeout(() => {
130
+ timerRef.current = null;
131
+ const seq = seqRef.current + 1;
132
+ seqRef.current = seq;
133
+ const controller = new AbortController();
134
+ abortRef.current = controller;
135
+ setLoading(true);
136
+ searchFn(keyword, paramsRef.current, controller.signal)
137
+ .then((list) => {
138
+ // 记下请求发出时的 paramsKey:返回时参数已变,这批候选会被挡住
139
+ if (seq === seqRef.current)
140
+ setCandidateState({ paramsKey, list });
141
+ })
142
+ .catch(() => {
143
+ if (seq === seqRef.current)
144
+ setCandidateState({ paramsKey, list: EMPTY_CANDIDATES });
145
+ })
146
+ .finally(() => {
147
+ if (seq === seqRef.current)
148
+ setLoading(false);
149
+ });
150
+ }, debounceMs);
151
+ }, [searchFn, paramsKey, debounceMs, cancelPending]);
152
+ return { sourceObj, candidates, loading, search, cancelPending };
153
+ }
154
+ const EMPTY_SELECTED = {
155
+ value: undefined,
156
+ sourceKey: '',
157
+ paramsKey: '',
158
+ option: null,
159
+ status: 'empty',
160
+ };
161
+ /**
162
+ * 已选 ID 的标签解析:与关键词搜索完全独立。
163
+ *
164
+ * 解析顺序见设计文档 §6.1:
165
+ * 1. 匹配的 `selectedOptions`;2. 对象模式的 `value.label`;3. 已加载候选;
166
+ * 4. `resolve(id, queryParams)`;5. 未命中就保持 ID,并暴露状态。
167
+ */
168
+ export function useSelectedOption({ sourceObj, sourceKey, value, legacyLabel, selectedOptions, candidates, queryParams, }) {
169
+ const sourceRef = useRef(sourceObj);
170
+ sourceRef.current = sourceObj;
171
+ const paramsRef = useRef(queryParams);
172
+ paramsRef.current = queryParams;
173
+ const paramsKey = stableStringify(queryParams ?? null);
174
+ const empty = isEmptyId(value);
175
+ const hint = empty ? undefined : selectedOptions?.find((item) => item.value === value);
176
+ const candidate = empty ? undefined : candidates?.find((item) => item.value === value);
177
+ // 前三级可以同步拿到结果。用内容键判断,父组件每次渲染新建数组不会触发重新解析。
178
+ const syncKey = [
179
+ empty ? 'empty' : `${typeof value}:${String(value)}`,
180
+ legacyLabel ?? '',
181
+ optionsContentKey(hint ? [hint] : undefined),
182
+ optionsContentKey(candidate ? [candidate] : undefined),
183
+ ].join('|');
184
+ const syncRef = useRef({ key: '', option: null });
185
+ if (syncRef.current.key !== syncKey) {
186
+ let option = null;
187
+ if (!empty) {
188
+ const id = value;
189
+ if (hint)
190
+ option = hint;
191
+ else if (legacyLabel)
192
+ option = { value: id, label: legacyLabel };
193
+ else if (candidate)
194
+ option = candidate;
195
+ }
196
+ syncRef.current = { key: syncKey, option };
197
+ }
198
+ const syncOption = syncRef.current.option;
199
+ // 已经展示过的标签:用户继续输入关键词、候选被换掉时,已选项不该短暂退回原始 ID
200
+ const knownRef = useRef(null);
201
+ if (!empty && syncOption) {
202
+ knownRef.current = { value: value, sourceKey, paramsKey, option: syncOption };
203
+ }
204
+ const [asyncSelected, setAsyncSelected] = useState(EMPTY_SELECTED);
205
+ const isRemote = sourceObj?.kind === 'remote';
206
+ const loadFn = !isRemote ? sourceObj?.loadOptions : undefined;
207
+ const resolveFn = isRemote ? sourceObj?.resolve : undefined;
208
+ // 范围参数不全:宁可不解析,也不能用空条件查出别家范围的数据
209
+ const blocked = !hasRequiredParams(sourceObj?.requiredParams, paramsRef.current);
210
+ useEffect(() => {
211
+ // 前三级已经给出结果,不需要请求
212
+ if (syncOption)
213
+ return;
214
+ if (empty) {
215
+ setAsyncSelected(EMPTY_SELECTED);
216
+ return;
217
+ }
218
+ if (!loadFn && !resolveFn) {
219
+ setAsyncSelected({
220
+ value: value,
221
+ sourceKey,
222
+ paramsKey,
223
+ option: null,
224
+ status: 'missing',
225
+ });
226
+ return;
227
+ }
228
+ if (blocked) {
229
+ setAsyncSelected({
230
+ value: value,
231
+ sourceKey,
232
+ paramsKey,
233
+ option: null,
234
+ status: 'blocked',
235
+ });
236
+ return;
237
+ }
238
+ let cancelled = false;
239
+ const settle = (option) => {
240
+ if (cancelled)
241
+ return;
242
+ setAsyncSelected({
243
+ value: value,
244
+ sourceKey,
245
+ paramsKey,
246
+ option,
247
+ status: option ? 'resolved' : 'missing',
248
+ });
249
+ };
250
+ const fail = () => {
251
+ if (cancelled)
252
+ return;
253
+ setAsyncSelected({
254
+ value: value,
255
+ sourceKey,
256
+ paramsKey,
257
+ option: null,
258
+ status: 'error',
259
+ });
260
+ };
261
+ setAsyncSelected({
262
+ value: value,
263
+ sourceKey,
264
+ paramsKey,
265
+ option: null,
266
+ status: 'loading',
267
+ });
268
+ if (loadFn) {
269
+ // 静态 / 字典:本地集合里匹配
270
+ loadOptionsWithCache(sourceKey, () => loadFn())
271
+ .then((list) => settle(list.find((option) => option.value === value) ?? null))
272
+ .catch(fail);
273
+ }
274
+ else {
275
+ // 远程按 ID 精确解析,走共享缓存
276
+ const key = buildResolveKey({
277
+ scope: sourceRef.current?.cacheNamespace?.(),
278
+ sourceKey,
279
+ value: value,
280
+ params: paramsRef.current,
281
+ });
282
+ resolveOptionWithCache(key, () => resolveFn(value, paramsRef.current))
283
+ .then(settle)
284
+ .catch(fail);
285
+ }
286
+ return () => {
287
+ cancelled = true;
288
+ };
289
+ }, [value, empty, syncOption, loadFn, resolveFn, blocked, sourceKey, paramsKey]);
290
+ if (syncOption)
291
+ return { option: syncOption, status: 'resolved' };
292
+ if (empty)
293
+ return { option: null, status: 'empty' };
294
+ // 数据源没有解析能力时不必等 effect,直接给出 missing
295
+ if (!loadFn && !resolveFn)
296
+ return { option: null, status: 'missing' };
297
+ if (blocked)
298
+ return { option: null, status: 'blocked' };
299
+ // 值 / 来源 / 级联参数变了但 effect 还没跑完:不能拿上一轮的结果顶上
300
+ if (asyncSelected.value !== value ||
301
+ asyncSelected.sourceKey !== sourceKey ||
302
+ asyncSelected.paramsKey !== paramsKey) {
303
+ return { option: null, status: 'loading' };
304
+ }
305
+ if (asyncSelected.option) {
306
+ knownRef.current = {
307
+ value: value,
308
+ sourceKey,
309
+ paramsKey,
310
+ option: asyncSelected.option,
311
+ };
312
+ }
313
+ // 正在按同一上下文重新解析:先沿用上次拿到的标签,避免一闪而过的原始 ID
314
+ if (asyncSelected.status === 'loading' && knownRef.current) {
315
+ const known = knownRef.current;
316
+ if (known.value === value && known.sourceKey === sourceKey && known.paramsKey === paramsKey) {
317
+ return { option: known.option, status: 'resolved' };
318
+ }
319
+ }
320
+ return { option: asyncSelected.option, status: asyncSelected.status };
321
+ }
322
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/app-select/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import './register.js';
2
+ export { AppSelect } from './AppSelect.js';
3
+ export { AppSelectDisplay } from './AppSelectDisplay.js';
4
+ export { registerAppSelectSource, unregisterAppSelectSource, getAppSelectSource, resolveAppSelectSource, clearAppSelectSources, } from './sources.js';
5
+ export { clearAppSelectCache, getAppSelectCacheSize } from './cache.js';
6
+ export type { AppOption, AppSelectDisplayProps, AppSelectProps, AppSelectSource, AppValueMode, LegacyValue, SelectId, } from './types.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app-select/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,CAAC;AAEpB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrE,YAAY,EACV,SAAS,EACT,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,WAAW,EACX,QAAQ,GACT,MAAM,SAAS,CAAC"}
@@ -0,0 +1,6 @@
1
+ import './register.js';
2
+ export { AppSelect } from './AppSelect.js';
3
+ export { AppSelectDisplay } from './AppSelectDisplay.js';
4
+ export { registerAppSelectSource, unregisterAppSelectSource, getAppSelectSource, resolveAppSelectSource, clearAppSelectSources, } from './sources.js';
5
+ export { clearAppSelectCache, getAppSelectCacheSize } from './cache.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/app-select/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,CAAC;AAEpB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/app-select/register.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { registerField } from '../registry.js';
3
+ import { AppSelect } from './AppSelect.js';
4
+ import { AppSelectDisplay } from './AppSelectDisplay.js';
5
+ // 只读展示必须走同一个解析能力,因此注册项里挂 AppSelectDisplay 而不是简单取 label
6
+ registerField('AppSelect', {
7
+ component: AppSelect,
8
+ renderRead: (value, props) => (_jsx(AppSelectDisplay, { value: value, source: props.source, dataSource: props.dataSource, valueMode: props.valueMode, queryParams: props.queryParams, selectedOptions: props.selectedOptions })),
9
+ });
10
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/app-select/register.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,uDAAuD;AACvD,aAAa,CAAC,WAAW,EAAE;IACzB,SAAS,EAAE,SAAS;IACpB,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAC5B,KAAC,gBAAgB,IACf,KAAK,EAAE,KAAkD,EACzD,MAAM,EAAE,KAAK,CAAC,MAA4B,EAC1C,UAAU,EAAE,KAAK,CAAC,UAAiD,EACnE,SAAS,EAAE,KAAK,CAAC,SAAqC,EACtD,WAAW,EAAE,KAAK,CAAC,WAAkD,EACrE,eAAe,EAAE,KAAK,CAAC,eAA0C,GACjE,CACH;CACF,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { AppSelectSource } from './types.js';
2
+ /** 注册应用级数据源;系统级常见字段优先走这里,低频页面可直接传 dataSource */
3
+ export declare function registerAppSelectSource(name: string, source: AppSelectSource): void;
4
+ export declare function unregisterAppSelectSource(name: string): void;
5
+ export declare function getAppSelectSource(name?: string): AppSelectSource | undefined;
6
+ /** source 与 dataSource 二选一,dataSource 优先,不做静默混合 */
7
+ export declare function resolveAppSelectSource(name?: string, dataSource?: AppSelectSource): AppSelectSource | undefined;
8
+ export declare function clearAppSelectSources(): void;
9
+ /**
10
+ * 来源的稳定身份,参与解析缓存键。
11
+ *
12
+ * 注册源直接用名字;内联 `dataSource` 没有名字,不能像旧实现那样统一退化成 `'inline'`,
13
+ * 否则两个不同接口遇到相同 id + 相同参数会命中同一缓存,拿到别家的 label。
14
+ *
15
+ * 内联源优先按**函数引用**识别:模块级/页面级的 dataSource 常量函数引用稳定,
16
+ * 表格里同一列的多个单元格因此还能共享一份解析缓存。
17
+ * 只有完全没有函数的纯数据源才退回对象身份。
18
+ */
19
+ export declare function resolveAppSelectSourceKey(name?: string, dataSource?: AppSelectSource): string;
20
+ //# sourceMappingURL=sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../src/app-select/sources.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI/C,gDAAgD;AAChD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAInF;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAG5D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE7E;AAED,mDAAmD;AACnD,wBAAgB,sBAAsB,CACpC,IAAI,CAAC,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,eAAe,GAC3B,eAAe,GAAG,SAAS,CAE7B;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAeD;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,CAAC,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,eAAe,GAC3B,MAAM,CAcR"}
@@ -0,0 +1,59 @@
1
+ import { clearAppSelectCacheOfSource } from './cache.js';
2
+ const sources = new Map();
3
+ /** 注册应用级数据源;系统级常见字段优先走这里,低频页面可直接传 dataSource */
4
+ export function registerAppSelectSource(name, source) {
5
+ sources.set(name, source);
6
+ // 同名重新注册(HMR / 动态切换)时旧缓存不再代表当前实现
7
+ clearAppSelectCacheOfSource(name);
8
+ }
9
+ export function unregisterAppSelectSource(name) {
10
+ sources.delete(name);
11
+ clearAppSelectCacheOfSource(name);
12
+ }
13
+ export function getAppSelectSource(name) {
14
+ return name ? sources.get(name) : undefined;
15
+ }
16
+ /** source 与 dataSource 二选一,dataSource 优先,不做静默混合 */
17
+ export function resolveAppSelectSource(name, dataSource) {
18
+ return dataSource ?? getAppSelectSource(name);
19
+ }
20
+ export function clearAppSelectSources() {
21
+ sources.clear();
22
+ }
23
+ const inlineIds = new WeakMap();
24
+ let inlineIdSeq = 0;
25
+ function nextInlineId(target) {
26
+ let id = inlineIds.get(target);
27
+ if (id === undefined) {
28
+ inlineIdSeq += 1;
29
+ id = inlineIdSeq;
30
+ inlineIds.set(target, id);
31
+ }
32
+ return id;
33
+ }
34
+ /**
35
+ * 来源的稳定身份,参与解析缓存键。
36
+ *
37
+ * 注册源直接用名字;内联 `dataSource` 没有名字,不能像旧实现那样统一退化成 `'inline'`,
38
+ * 否则两个不同接口遇到相同 id + 相同参数会命中同一缓存,拿到别家的 label。
39
+ *
40
+ * 内联源优先按**函数引用**识别:模块级/页面级的 dataSource 常量函数引用稳定,
41
+ * 表格里同一列的多个单元格因此还能共享一份解析缓存。
42
+ * 只有完全没有函数的纯数据源才退回对象身份。
43
+ */
44
+ export function resolveAppSelectSourceKey(name, dataSource) {
45
+ if (!dataSource)
46
+ return name ? `source:${name}` : '';
47
+ const functions = [
48
+ dataSource.loadOptions,
49
+ dataSource.search,
50
+ dataSource.resolve,
51
+ dataSource.cacheNamespace,
52
+ ];
53
+ const parts = functions.map((fn) => (fn ? nextInlineId(fn) : '-'));
54
+ if (!parts.some((part) => part !== '-')) {
55
+ return `inline:${dataSource.kind}:data#${nextInlineId(dataSource)}`;
56
+ }
57
+ return `inline:${dataSource.kind}:${parts.join('.')}`;
58
+ }
59
+ //# sourceMappingURL=sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sources.js","sourceRoot":"","sources":["../../src/app-select/sources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAGtD,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;AAEnD,gDAAgD;AAChD,MAAM,UAAU,uBAAuB,CAAC,IAAY,EAAE,MAAuB;IAC3E,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1B,iCAAiC;IACjC,2BAA2B,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrB,2BAA2B,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,sBAAsB,CACpC,IAAa,EACb,UAA4B;IAE5B,OAAO,UAAU,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,OAAO,EAAkB,CAAC;AAChD,IAAI,WAAW,GAAG,CAAC,CAAC;AAEpB,SAAS,YAAY,CAAC,MAAc;IAClC,IAAI,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;QACrB,WAAW,IAAI,CAAC,CAAC;QACjB,EAAE,GAAG,WAAW,CAAC;QACjB,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB,CACvC,IAAa,EACb,UAA4B;IAE5B,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAErD,MAAM,SAAS,GAAG;QAChB,UAAU,CAAC,WAAW;QACtB,UAAU,CAAC,MAAM;QACjB,UAAU,CAAC,OAAO;QAClB,UAAU,CAAC,cAAc;KAC1B,CAAC;IACF,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACxC,OAAO,UAAU,UAAU,CAAC,IAAI,SAAS,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;IACtE,CAAC;IACD,OAAO,UAAU,UAAU,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACxD,CAAC"}