@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.
Files changed (163) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +188 -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/biz-select/BizSelect.d.ts +3 -0
  16. package/dist/biz-select/BizSelect.d.ts.map +1 -0
  17. package/dist/biz-select/BizSelect.js +87 -0
  18. package/dist/biz-select/BizSelect.js.map +1 -0
  19. package/dist/biz-select/BizSelectDisplay.d.ts +3 -0
  20. package/dist/biz-select/BizSelectDisplay.d.ts.map +1 -0
  21. package/dist/biz-select/BizSelectDisplay.js +58 -0
  22. package/dist/biz-select/BizSelectDisplay.js.map +1 -0
  23. package/dist/biz-select/cache.d.ts +16 -0
  24. package/dist/biz-select/cache.d.ts.map +1 -0
  25. package/dist/biz-select/cache.js +130 -0
  26. package/dist/biz-select/cache.js.map +1 -0
  27. package/dist/biz-select/compile.d.ts +25 -0
  28. package/dist/biz-select/compile.d.ts.map +1 -0
  29. package/dist/biz-select/compile.js +82 -0
  30. package/dist/biz-select/compile.js.map +1 -0
  31. package/dist/biz-select/factories.d.ts +23 -0
  32. package/dist/biz-select/factories.d.ts.map +1 -0
  33. package/dist/biz-select/factories.js +17 -0
  34. package/dist/biz-select/factories.js.map +1 -0
  35. package/dist/biz-select/format.d.ts +48 -0
  36. package/dist/biz-select/format.d.ts.map +1 -0
  37. package/dist/biz-select/format.js +110 -0
  38. package/dist/biz-select/format.js.map +1 -0
  39. package/dist/biz-select/index.d.ts +23 -0
  40. package/dist/biz-select/index.d.ts.map +1 -0
  41. package/dist/biz-select/index.js +22 -0
  42. package/dist/biz-select/index.js.map +1 -0
  43. package/dist/biz-select/key.d.ts +15 -0
  44. package/dist/biz-select/key.d.ts.map +1 -0
  45. package/dist/biz-select/key.js +69 -0
  46. package/dist/biz-select/key.js.map +1 -0
  47. package/dist/biz-select/normalize.d.ts +40 -0
  48. package/dist/biz-select/normalize.d.ts.map +1 -0
  49. package/dist/biz-select/normalize.js +46 -0
  50. package/dist/biz-select/normalize.js.map +1 -0
  51. package/dist/biz-select/registry.d.ts +15 -0
  52. package/dist/biz-select/registry.d.ts.map +1 -0
  53. package/dist/biz-select/registry.js +81 -0
  54. package/dist/biz-select/registry.js.map +1 -0
  55. package/dist/biz-select/schema.d.ts +5 -0
  56. package/dist/biz-select/schema.d.ts.map +1 -0
  57. package/dist/biz-select/schema.js +21 -0
  58. package/dist/biz-select/schema.js.map +1 -0
  59. package/dist/biz-select/source-id.d.ts +8 -0
  60. package/dist/biz-select/source-id.d.ts.map +1 -0
  61. package/dist/biz-select/source-id.js +10 -0
  62. package/dist/biz-select/source-id.js.map +1 -0
  63. package/dist/biz-select/types.d.ts +104 -0
  64. package/dist/biz-select/types.d.ts.map +1 -0
  65. package/dist/biz-select/types.js +2 -0
  66. package/dist/biz-select/types.js.map +1 -0
  67. package/dist/biz-select/useCandidates.d.ts +40 -0
  68. package/dist/biz-select/useCandidates.d.ts.map +1 -0
  69. package/dist/biz-select/useCandidates.js +292 -0
  70. package/dist/biz-select/useCandidates.js.map +1 -0
  71. package/dist/biz-select/useSelectedLabel.d.ts +18 -0
  72. package/dist/biz-select/useSelectedLabel.d.ts.map +1 -0
  73. package/dist/biz-select/useSelectedLabel.js +158 -0
  74. package/dist/biz-select/useSelectedLabel.js.map +1 -0
  75. package/dist/biz-select/useStableSourceKey.d.ts +3 -0
  76. package/dist/biz-select/useStableSourceKey.d.ts.map +1 -0
  77. package/dist/biz-select/useStableSourceKey.js +48 -0
  78. package/dist/biz-select/useStableSourceKey.js.map +1 -0
  79. package/dist/editable-table/EditableTable.d.ts +3 -0
  80. package/dist/editable-table/EditableTable.d.ts.map +1 -0
  81. package/dist/editable-table/EditableTable.js +499 -0
  82. package/dist/editable-table/EditableTable.js.map +1 -0
  83. package/dist/editable-table/dirty.d.ts +17 -0
  84. package/dist/editable-table/dirty.d.ts.map +1 -0
  85. package/dist/editable-table/dirty.js +72 -0
  86. package/dist/editable-table/dirty.js.map +1 -0
  87. package/dist/editable-table/index.d.ts +4 -0
  88. package/dist/editable-table/index.d.ts.map +1 -0
  89. package/dist/editable-table/index.js +3 -0
  90. package/dist/editable-table/index.js.map +1 -0
  91. package/dist/editable-table/types.d.ts +109 -0
  92. package/dist/editable-table/types.d.ts.map +1 -0
  93. package/dist/editable-table/types.js +2 -0
  94. package/dist/editable-table/types.js.map +1 -0
  95. package/dist/env.d.ts +3 -0
  96. package/dist/env.d.ts.map +1 -0
  97. package/dist/env.js +11 -0
  98. package/dist/env.js.map +1 -0
  99. package/dist/form/FormRuntimeHost.d.ts +39 -0
  100. package/dist/form/FormRuntimeHost.d.ts.map +1 -0
  101. package/dist/form/FormRuntimeHost.js +184 -0
  102. package/dist/form/FormRuntimeHost.js.map +1 -0
  103. package/dist/form/SchemaFormField.d.ts +15 -0
  104. package/dist/form/SchemaFormField.d.ts.map +1 -0
  105. package/dist/form/SchemaFormField.js +143 -0
  106. package/dist/form/SchemaFormField.js.map +1 -0
  107. package/dist/form/derive.d.ts +28 -0
  108. package/dist/form/derive.d.ts.map +1 -0
  109. package/dist/form/derive.js +87 -0
  110. package/dist/form/derive.js.map +1 -0
  111. package/dist/form/namePath.d.ts +12 -0
  112. package/dist/form/namePath.d.ts.map +1 -0
  113. package/dist/form/namePath.js +33 -0
  114. package/dist/form/namePath.js.map +1 -0
  115. package/dist/full-editable-table/EditableCell.d.ts +12 -0
  116. package/dist/full-editable-table/EditableCell.d.ts.map +1 -0
  117. package/dist/full-editable-table/EditableCell.js +8 -0
  118. package/dist/full-editable-table/EditableCell.js.map +1 -0
  119. package/dist/full-editable-table/EditableRow.d.ts +8 -0
  120. package/dist/full-editable-table/EditableRow.d.ts.map +1 -0
  121. package/dist/full-editable-table/EditableRow.js +23 -0
  122. package/dist/full-editable-table/EditableRow.js.map +1 -0
  123. package/dist/full-editable-table/FullEditableTable.d.ts +3 -0
  124. package/dist/full-editable-table/FullEditableTable.d.ts.map +1 -0
  125. package/dist/full-editable-table/FullEditableTable.js +384 -0
  126. package/dist/full-editable-table/FullEditableTable.js.map +1 -0
  127. package/dist/full-editable-table/context.d.ts +4 -0
  128. package/dist/full-editable-table/context.d.ts.map +1 -0
  129. package/dist/full-editable-table/context.js +6 -0
  130. package/dist/full-editable-table/context.js.map +1 -0
  131. package/dist/full-editable-table/index.d.ts +3 -0
  132. package/dist/full-editable-table/index.d.ts.map +1 -0
  133. package/dist/full-editable-table/index.js +2 -0
  134. package/dist/full-editable-table/index.js.map +1 -0
  135. package/dist/full-editable-table/types.d.ts +95 -0
  136. package/dist/full-editable-table/types.d.ts.map +1 -0
  137. package/dist/full-editable-table/types.js +2 -0
  138. package/dist/full-editable-table/types.js.map +1 -0
  139. package/dist/index.d.ts +19 -0
  140. package/dist/index.d.ts.map +1 -0
  141. package/dist/index.js +15 -0
  142. package/dist/index.js.map +1 -0
  143. package/dist/read.d.ts +14 -0
  144. package/dist/read.d.ts.map +1 -0
  145. package/dist/read.js +151 -0
  146. package/dist/read.js.map +1 -0
  147. package/dist/registry.d.ts +29 -0
  148. package/dist/registry.d.ts.map +1 -0
  149. package/dist/registry.js +49 -0
  150. package/dist/registry.js.map +1 -0
  151. package/dist/rowMerge.d.ts +2 -0
  152. package/dist/rowMerge.d.ts.map +1 -0
  153. package/dist/rowMerge.js +32 -0
  154. package/dist/rowMerge.js.map +1 -0
  155. package/dist/tableScroll.d.ts +10 -0
  156. package/dist/tableScroll.d.ts.map +1 -0
  157. package/dist/tableScroll.js +14 -0
  158. package/dist/tableScroll.js.map +1 -0
  159. package/dist/types.d.ts +133 -0
  160. package/dist/types.d.ts.map +1 -0
  161. package/dist/types.js +2 -0
  162. package/dist/types.js.map +1 -0
  163. package/package.json +60 -4
@@ -0,0 +1,292 @@
1
+ /**
2
+ * 候选选项:加载、搜索、防抖、取消、参数失效。
3
+ *
4
+ * 关键约束(设计文档 §5.3):**effect / useCallback 的依赖里不出现源对象和其中的函数**。
5
+ * 源一律从 ref 读,依赖只保留 sourceKey / paramsKey 这类字符串。
6
+ * 违反这条的直接后果是:父组件每渲染一次,列表里每个单元格各发一次请求。
7
+ */
8
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
9
+ import { dropCandidateCache, loadCandidatesWithCache } from './cache.js';
10
+ import { candidatesCacheKey, paramsKeyOf } from './key.js';
11
+ import { hasRequiredParams, normalizeSource } from './normalize.js';
12
+ import { resolveSelectSource } from './registry.js';
13
+ import { useStableSourceKey } from './useStableSourceKey.js';
14
+ import { filterOptions } from './format.js';
15
+ const EMPTY_OPTIONS = [];
16
+ export function useCandidates({ source: sourceProp, cacheKey, params, searchFields, debounceMs = 300, }) {
17
+ const source = resolveSelectSource(sourceProp);
18
+ // 订阅版本在这里:失效 / 重注册后键会变,已挂载的实例才会重新取数
19
+ const sourceKey = useStableSourceKey(sourceProp, cacheKey);
20
+ const capability = normalizeSource(source);
21
+ const { candidateMode, requiredParams, needsFetch } = capability;
22
+ const paramsKey = paramsKeyOf(params);
23
+ const blocked = !hasRequiredParams(requiredParams, params);
24
+ // 源与参数只走 ref:它们可以每帧变化,但绝不能成为 effect 依赖
25
+ const sourceRef = useRef(source);
26
+ sourceRef.current = source;
27
+ const paramsRef = useRef(params);
28
+ paramsRef.current = params;
29
+ const scopeRef = useRef('');
30
+ scopeRef.current = source?.namespace?.() ?? '';
31
+ // 当前作用域参与结果归属判断:只进缓存键不够,租户切换后旧候选仍会显示
32
+ const scope = scopeRef.current;
33
+ const sourceKeyRef = useRef(sourceKey);
34
+ sourceKeyRef.current = sourceKey;
35
+ const [loadState, setLoadState] = useState(null);
36
+ const [searchState, setSearchState] = useState(null);
37
+ const [keyword, setKeyword] = useState('');
38
+ // reload 在回调里要读当前关键词,不能进依赖(否则每次输入都换新函数)
39
+ const keywordRef = useRef('');
40
+ keywordRef.current = keyword;
41
+ // load 与 search 各记一份:共用会互相覆盖,一个结束就把另一个的「进行中」抹掉
42
+ const [loadLoading, setLoadLoading] = useState(false);
43
+ const [searchLoading, setSearchLoading] = useState(false);
44
+ const [error, setError] = useState(false);
45
+ /** 递增表示「需要拉一次候选」:展开下拉或手动重载 */
46
+ const [loadTick, setLoadTick] = useState(0);
47
+ /** 下拉是否展开:纯搜索型只在展开时才跟着源 / 条件变化重查 */
48
+ const openedRef = useRef(false);
49
+ const seqRef = useRef(0);
50
+ const abortRef = useRef(null);
51
+ const timerRef = useRef(null);
52
+ const cancelPending = useCallback(() => {
53
+ if (timerRef.current) {
54
+ clearTimeout(timerRef.current);
55
+ timerRef.current = null;
56
+ }
57
+ abortRef.current?.abort();
58
+ abortRef.current = null;
59
+ // 作废版本号才是正确性保障:abort 只是优化,源不认 signal 时仍会 resolve,
60
+ // 那时 seq 已经对不上,不会把旧结果写成 error / 空列表
61
+ seqRef.current += 1;
62
+ // 被作废的请求不再回来收尾,loading 得在这里结束:否则关掉下拉后就一直转圈
63
+ setSearchLoading(false);
64
+ }, []);
65
+ useEffect(() => cancelPending, [cancelPending]);
66
+ // 加载全集:只在展开下拉之后发生,依赖全是字符串,源从 ref 取
67
+ useEffect(() => {
68
+ const current = sourceRef.current;
69
+ const load = current?.load;
70
+ // 上一次的请求被这次变更作废(cancelled)后不会自己收尾,提前返回时必须补关 loading
71
+ if (!loadTick || blocked || !load) {
72
+ setLoadLoading(false);
73
+ return;
74
+ }
75
+ const key = candidatesCacheKey(scope, sourceKey, paramsKey);
76
+ let cancelled = false;
77
+ setLoadLoading(true);
78
+ setError(false);
79
+ loadCandidatesWithCache(key, () => load(paramsRef.current ?? {}, undefined))
80
+ .then((list) => {
81
+ if (!cancelled)
82
+ setLoadState({ sourceKey, scope, paramsKey, list });
83
+ })
84
+ .catch(() => {
85
+ if (!cancelled) {
86
+ setLoadState({ sourceKey, scope, paramsKey, list: EMPTY_OPTIONS });
87
+ setError(true);
88
+ }
89
+ })
90
+ .finally(() => {
91
+ if (!cancelled)
92
+ setLoadLoading(false);
93
+ });
94
+ return () => {
95
+ cancelled = true;
96
+ };
97
+ }, [loadTick, sourceKey, scope, paramsKey, blocked, candidateMode]);
98
+ // 身份变化(条件 / 来源 / 租户):取消在途请求,旧结果靠三元比对自动失效。
99
+ // scope 必须在这里:租户切了但 sourceKey、paramsKey 没变,在途请求照样得作废
100
+ useEffect(() => {
101
+ cancelPending();
102
+ setKeyword('');
103
+ }, [paramsKey, sourceKey, scope, cancelPending]);
104
+ const runSearch = useCallback((keywordValue, key) => {
105
+ // 缺必需参数一律不查。open / reload 是公开入口(树、弹窗也会调),
106
+ // 光靠组件上的 disabled 挡不住,守卫必须收在真正发请求的这一处
107
+ if (blocked)
108
+ return;
109
+ const current = sourceRef.current;
110
+ const search = current?.search;
111
+ if (!search)
112
+ return;
113
+ const seq = seqRef.current + 1;
114
+ seqRef.current = seq;
115
+ const controller = new AbortController();
116
+ abortRef.current = controller;
117
+ // 归属信息在发请求时定格:结果回来后要能证明它属于哪个源、哪个租户
118
+ const sourceKeyAtRequest = sourceKeyRef.current;
119
+ const scopeAtRequest = scopeRef.current;
120
+ setSearchLoading(true);
121
+ setError(false);
122
+ search(keywordValue, paramsRef.current ?? {}, controller.signal)
123
+ .then((list) => {
124
+ if (seq !== seqRef.current)
125
+ return;
126
+ setSearchState({
127
+ sourceKey: sourceKeyAtRequest,
128
+ scope: scopeAtRequest,
129
+ paramsKey: key,
130
+ keyword: keywordValue,
131
+ list,
132
+ });
133
+ })
134
+ .catch(() => {
135
+ if (seq !== seqRef.current)
136
+ return;
137
+ setSearchState({
138
+ sourceKey: sourceKeyAtRequest,
139
+ scope: scopeAtRequest,
140
+ paramsKey: key,
141
+ keyword: keywordValue,
142
+ list: EMPTY_OPTIONS,
143
+ });
144
+ setError(true);
145
+ })
146
+ .finally(() => {
147
+ if (seq === seqRef.current)
148
+ setSearchLoading(false);
149
+ });
150
+ }, [blocked]);
151
+ const search = useCallback((keywordValue) => {
152
+ setKeyword(keywordValue);
153
+ if (blocked || !needsFetch || candidateMode === 'load')
154
+ return;
155
+ if (candidateMode !== 'search' && candidateMode !== 'hybrid')
156
+ return;
157
+ cancelPending();
158
+ const key = paramsKeyOf(paramsRef.current);
159
+ timerRef.current = setTimeout(() => {
160
+ timerRef.current = null;
161
+ runSearch(keywordValue, key);
162
+ }, debounceMs);
163
+ }, [blocked, needsFetch, candidateMode, debounceMs, cancelPending, runSearch]);
164
+ const searchStateRef = useRef(null);
165
+ searchStateRef.current = searchState;
166
+ const open = useCallback(() => {
167
+ openedRef.current = true;
168
+ setLoadTick((tick) => tick + 1);
169
+ // 纯搜索型没有全集,展开时先取一次默认候选;已经取过就不重复请求
170
+ const current = sourceRef.current;
171
+ if (!current?.search || current.load)
172
+ return;
173
+ const key = paramsKeyOf(paramsRef.current);
174
+ const state = searchStateRef.current;
175
+ // 换了源或租户,旧结果不再代表当前范围,必须重查
176
+ if (!state ||
177
+ state.sourceKey !== sourceKeyRef.current ||
178
+ state.scope !== scopeRef.current ||
179
+ state.paramsKey !== key ||
180
+ state.keyword !== '') {
181
+ runSearch('', key);
182
+ }
183
+ }, [runSearch]);
184
+ /** 收起下拉:清关键字并作废在途搜索,避免关掉之后才回来的结果写进状态 */
185
+ const resetKeyword = useCallback(() => {
186
+ openedRef.current = false;
187
+ cancelPending();
188
+ setKeyword('');
189
+ }, [cancelPending]);
190
+ /** 手动重取:绕开缓存。有关键词就重跑搜索,否则重拉全集 */
191
+ const reload = useCallback(() => {
192
+ cancelPending();
193
+ const key = paramsKeyOf(paramsRef.current);
194
+ const current = sourceRef.current;
195
+ if (keywordRef.current && current?.search) {
196
+ runSearch(keywordRef.current, key);
197
+ return;
198
+ }
199
+ if (current?.load) {
200
+ // 先删缓存再 bump,否则 effect 跑起来又会命中同一份
201
+ dropCandidateCache(candidatesCacheKey(scopeRef.current, sourceKeyRef.current, key));
202
+ setLoadTick((tick) => tick + 1);
203
+ return;
204
+ }
205
+ if (current?.search)
206
+ runSearch('', key);
207
+ }, [cancelPending, runSearch]);
208
+ /**
209
+ * 纯搜索型没有 load effect 兜底:源失效、或父字段改了条件,而下拉还开着时,
210
+ * 旧候选会一直挂在列表里(可能是别的仓库的记录)。这里补一次重查。
211
+ * 带 load 的源由加载 effect 负责,不重复发请求。
212
+ */
213
+ const identityRef = useRef({ sourceKey, paramsKey, scope });
214
+ useEffect(() => {
215
+ const previous = identityRef.current;
216
+ identityRef.current = { sourceKey, paramsKey, scope };
217
+ if (!openedRef.current)
218
+ return;
219
+ if (previous.sourceKey === sourceKey &&
220
+ previous.paramsKey === paramsKey &&
221
+ previous.scope === scope) {
222
+ return;
223
+ }
224
+ const current = sourceRef.current;
225
+ if (!current?.search || current.load)
226
+ return;
227
+ runSearch('', paramsKeyOf(paramsRef.current));
228
+ }, [sourceKey, paramsKey, scope, runSearch]);
229
+ const loadValid = Boolean(loadState &&
230
+ loadState.sourceKey === sourceKey &&
231
+ loadState.scope === scope &&
232
+ loadState.paramsKey === paramsKey);
233
+ const searchValid = Boolean(searchState &&
234
+ searchState.sourceKey === sourceKey &&
235
+ searchState.scope === scope &&
236
+ searchState.paramsKey === paramsKey &&
237
+ searchState.keyword === keyword);
238
+ const options = useMemo(() => {
239
+ if (blocked || candidateMode === 'invalid' || candidateMode === 'none')
240
+ return EMPTY_OPTIONS;
241
+ // 同步全集也要过本地过滤:filterOption=false 已关掉 antd 自带过滤,
242
+ // 这里不处理的话静态源在输入框里根本筛不动
243
+ if (candidateMode === 'sync') {
244
+ return filterOptions(source?.options ?? EMPTY_OPTIONS, keyword, searchFields);
245
+ }
246
+ if (candidateMode === 'load') {
247
+ if (!loadValid || !loadState)
248
+ return EMPTY_OPTIONS;
249
+ // 全集已在前端,关键字只做本地过滤
250
+ return filterOptions(loadState.list, keyword, searchFields);
251
+ }
252
+ if (candidateMode === 'hybrid') {
253
+ if (keyword)
254
+ return searchValid && searchState ? searchState.list : EMPTY_OPTIONS;
255
+ return loadValid && loadState ? loadState.list : EMPTY_OPTIONS;
256
+ }
257
+ return searchValid && searchState ? searchState.list : EMPTY_OPTIONS;
258
+ }, [
259
+ blocked,
260
+ candidateMode,
261
+ source,
262
+ loadValid,
263
+ loadState,
264
+ searchValid,
265
+ searchState,
266
+ keyword,
267
+ searchFields,
268
+ ]);
269
+ // 回显要用未过滤的候选:已选项可能正好被关键词筛掉
270
+ const echoOptions = useMemo(() => {
271
+ if (candidateMode === 'sync')
272
+ return source?.options ?? EMPTY_OPTIONS;
273
+ if (loadValid && loadState)
274
+ return loadState.list;
275
+ // 纯搜索型没有全集,只能用手上这批
276
+ return options;
277
+ }, [candidateMode, source, loadValid, loadState, options]);
278
+ return {
279
+ sourceKey,
280
+ options,
281
+ echoOptions,
282
+ keyword,
283
+ loading: loadLoading || searchLoading,
284
+ error,
285
+ blocked,
286
+ open,
287
+ search,
288
+ resetKeyword,
289
+ reload,
290
+ };
291
+ }
292
+ //# sourceMappingURL=useCandidates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCandidates.js","sourceRoot":"","sources":["../../src/biz-select/useCandidates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { BizOption, SelectCode, SelectParams, SelectSource } from './types.js';
2
+ export type SelectedStatus = 'empty' | 'loading' | 'resolved' | 'missing' | 'blocked' | 'error';
3
+ export interface UseSelectedLabelOptions {
4
+ source?: SelectSource;
5
+ sourceKey: string;
6
+ code?: SelectCode;
7
+ /** 对象值里自带的名称 */
8
+ valueName?: string;
9
+ seedOptions?: BizOption[];
10
+ candidates?: BizOption[];
11
+ params?: SelectParams;
12
+ }
13
+ export interface UseSelectedLabelResult {
14
+ option: BizOption | null;
15
+ status: SelectedStatus;
16
+ }
17
+ export declare function useSelectedLabel({ source, sourceKey, code, valueName, seedOptions, candidates, params, }: UseSelectedLabelOptions): UseSelectedLabelResult;
18
+ //# sourceMappingURL=useSelectedLabel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSelectedLabel.d.ts","sourceRoot":"","sources":["../../src/biz-select/useSelectedLabel.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEjF,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEhG,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,gBAAgB;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,cAAc,CAAC;CACxB;AAyBD,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,SAAS,EACT,IAAI,EACJ,SAAS,EACT,WAAW,EACX,UAAU,EACV,MAAM,GACP,EAAE,uBAAuB,GAAG,sBAAsB,CAgJlD"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * 已选编码 → 名称的解析。
3
+ *
4
+ * 与关键词搜索是两条独立逻辑:搜索是模糊的,回显必须精确。
5
+ * 优先级(设计文档 §5.6):对象值自带的名称 → seedOptions → 已加载候选
6
+ * → resolve(code) → 原样显示编码并暴露状态。
7
+ */
8
+ import { useEffect, useMemo, useRef, useState } from 'react';
9
+ import { resolveCodeWithCache } from './cache.js';
10
+ import { paramsKeyOf, resolveCacheKey } from './key.js';
11
+ import { hasRequiredParams, normalizeSource } from './normalize.js';
12
+ /** 编码比对统一走字符串:后端可能把 1 和 '1' 当同一个值 */
13
+ function sameCode(a, b) {
14
+ return a !== undefined && b !== undefined && String(a) === String(b);
15
+ }
16
+ function codeKeyOf(code) {
17
+ return code === undefined || code === null ? '' : `${typeof code}:${code}`;
18
+ }
19
+ function findOption(list, code) {
20
+ return list?.find((item) => item.code === code);
21
+ }
22
+ export function useSelectedLabel({ source, sourceKey, code, valueName, seedOptions, candidates, params, }) {
23
+ const capability = normalizeSource(source);
24
+ const { canResolve, requiredParams } = capability;
25
+ const paramsKey = paramsKeyOf(params);
26
+ const codeKey = codeKeyOf(code);
27
+ const scope = source?.namespace?.() ?? '';
28
+ const blocked = !hasRequiredParams(requiredParams, params);
29
+ const sourceRef = useRef(source);
30
+ sourceRef.current = source;
31
+ const paramsRef = useRef(params);
32
+ paramsRef.current = params;
33
+ const codeRef = useRef(code);
34
+ codeRef.current = code;
35
+ const [asyncResult, setAsyncResult] = useState(null);
36
+ const [loading, setLoading] = useState(false);
37
+ const seqRef = useRef(0);
38
+ /**
39
+ * 已选项的兜底记忆。
40
+ *
41
+ * 搜索型源的候选会随关键词整批换掉,重新展开拿到的也只是默认第一页,
42
+ * 已选项常常不在里面;没有 resolve 就只能退回编码。按
43
+ * 「来源 + 租户 + 条件 + 编码」记住最近一次命中的选项,条件一变自然失效。
44
+ */
45
+ const memoryRef = useRef(null);
46
+ const memoryKey = `${sourceKey}|${scope}|${paramsKey}|${codeKey}`;
47
+ // 本地能查到就不发请求;命中结果是对象,这里只取布尔作为 effect 依赖
48
+ const seedHit = useMemo(() => (code === undefined ? undefined : findOption(seedOptions, code)), [seedOptions, code]);
49
+ const candidateHit = useMemo(() => (code === undefined ? undefined : findOption(candidates, code)), [candidates, code]);
50
+ const localHit = seedHit ?? candidateHit;
51
+ const hasLocal = Boolean(localHit);
52
+ // 对象值已经自带名称:展示层直接用,没有理由再发一次 resolve
53
+ const hasValueName = Boolean(valueName);
54
+ useEffect(() => {
55
+ if (code === undefined || hasLocal || hasValueName || !canResolve || blocked)
56
+ return;
57
+ const resolve = sourceRef.current?.resolve;
58
+ if (!resolve)
59
+ return;
60
+ const requested = codeRef.current;
61
+ const key = resolveCacheKey(scope, sourceKey, requested, paramsKey);
62
+ const seq = seqRef.current + 1;
63
+ seqRef.current = seq;
64
+ let cancelled = false;
65
+ setLoading(true);
66
+ // 不传 AbortSignal:这个 promise 是多个实例共享的,
67
+ // 单个实例卸载不能把别人的请求掐掉,只放弃自己的状态更新即可
68
+ resolveCodeWithCache(key, () => resolve(requested, paramsRef.current ?? {}))
69
+ .then((option) => {
70
+ if (cancelled || seq !== seqRef.current)
71
+ return;
72
+ // 接口返回了别的编码就别认:认错比认不出更糟,展示层会显示陌生名称。
73
+ // 数字/字符串同一编码(后端序列化常见)认下,但编码归一到值的类型:
74
+ // 否则选项 value 与 Select 的 value 对不上,标签等于白解析
75
+ const matched = option && sameCode(option.code, requested) ? { ...option, code: requested } : null;
76
+ setAsyncResult({ sourceKey, scope, paramsKey, codeKey, option: matched, failed: false });
77
+ })
78
+ .catch(() => {
79
+ if (cancelled || seq !== seqRef.current)
80
+ return;
81
+ setAsyncResult({
82
+ sourceKey,
83
+ scope,
84
+ paramsKey,
85
+ codeKey,
86
+ option: null,
87
+ failed: true,
88
+ });
89
+ })
90
+ .finally(() => {
91
+ if (!cancelled && seq === seqRef.current)
92
+ setLoading(false);
93
+ });
94
+ return () => {
95
+ cancelled = true;
96
+ };
97
+ // sourceKey / paramsKey / codeKey 都是字符串,源从 ref 取,函数引用不进依赖
98
+ // eslint-disable-next-line react-hooks/exhaustive-deps
99
+ }, [sourceKey, scope, paramsKey, codeKey, hasLocal, hasValueName, canResolve, blocked]);
100
+ return useMemo(() => {
101
+ if (code === undefined)
102
+ return { option: null, status: 'empty' };
103
+ // 命中即记账:下次候选被换掉时还能拿它兜底
104
+ const remember = (option) => {
105
+ memoryRef.current = { key: memoryKey, option };
106
+ return option;
107
+ };
108
+ const remembered = memoryRef.current;
109
+ const fallback = remembered?.key === memoryKey ? remembered.option : undefined;
110
+ // 1) 对象值自带的名称:详情已经给了,不必再查
111
+ if (valueName)
112
+ return { option: remember({ code, name: valueName }), status: 'resolved' };
113
+ // 2) 页面预置的候选
114
+ if (seedHit)
115
+ return { option: remember(seedHit), status: 'resolved' };
116
+ // 3) 已加载的候选
117
+ if (candidateHit)
118
+ return { option: remember(candidateHit), status: 'resolved' };
119
+ const asyncMatched = asyncResult &&
120
+ asyncResult.sourceKey === sourceKey &&
121
+ asyncResult.scope === scope &&
122
+ asyncResult.paramsKey === paramsKey &&
123
+ asyncResult.codeKey === codeKey;
124
+ if (asyncMatched && asyncResult) {
125
+ if (asyncResult.option)
126
+ return { option: remember(asyncResult.option), status: 'resolved' };
127
+ // 解析不到但之前见过这个编码:搜索型源的候选已被关键词换掉,别退回编码
128
+ if (fallback)
129
+ return { option: fallback, status: 'resolved' };
130
+ return { option: { code }, status: asyncResult.failed ? 'error' : 'missing' };
131
+ }
132
+ if (fallback)
133
+ return { option: fallback, status: 'resolved' };
134
+ if (!canResolve)
135
+ return { option: { code }, status: 'missing' };
136
+ // 用空条件查可能拿到别家数据,宁可不查
137
+ if (blocked)
138
+ return { option: { code }, status: 'blocked' };
139
+ if (loading)
140
+ return { option: { code }, status: 'loading' };
141
+ return { option: { code }, status: 'missing' };
142
+ }, [
143
+ code,
144
+ valueName,
145
+ seedHit,
146
+ candidateHit,
147
+ asyncResult,
148
+ memoryKey,
149
+ sourceKey,
150
+ scope,
151
+ paramsKey,
152
+ codeKey,
153
+ canResolve,
154
+ blocked,
155
+ loading,
156
+ ]);
157
+ }
158
+ //# sourceMappingURL=useSelectedLabel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSelectedLabel.js","sourceRoot":"","sources":["../../src/biz-select/useSelectedLabel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SelectSource } from './types.js';
2
+ export declare function useStableSourceKey(source?: string | SelectSource, cacheKey?: string): string;
3
+ //# sourceMappingURL=useStableSourceKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStableSourceKey.d.ts","sourceRoot":"","sources":["../../src/biz-select/useStableSourceKey.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAc5C,wBAAgB,kBAAkB,CAChC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,EAC9B,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAwCR"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * 计算来源键,并在开发态识别「每次渲染都换键」的写法。
3
+ *
4
+ * 键在变、源的能力组合却没变,几乎只能是内联箭头函数造成的:
5
+ * 缓存永远不命中,表格里每个单元格各打一次接口。
6
+ */
7
+ import { useCallback, useRef, useSyncExternalStore } from 'react';
8
+ import { IS_DEV } from '../env.js';
9
+ import { selectSourceKey } from './key.js';
10
+ import { getSelectSourceVersion, subscribeSelectSourceVersion } from './registry.js';
11
+ const NOOP_UNSUBSCRIBE = () => { };
12
+ function sourceShape(source) {
13
+ if (!source)
14
+ return '';
15
+ return [
16
+ Array.isArray(source.options) ? 'o' : '-',
17
+ typeof source.load === 'function' ? 'l' : '-',
18
+ typeof source.search === 'function' ? 's' : '-',
19
+ typeof source.resolve === 'function' ? 'r' : '-',
20
+ ].join('');
21
+ }
22
+ export function useStableSourceKey(source, cacheKey) {
23
+ // 注册名的版本号只在 Map 里,改值不会触发渲染:必须订阅,sourceKey 才会跟着变,
24
+ // 已挂载的实例才会重新取数(invalidateSelectSource / 同名重注册由此生效)
25
+ const name = typeof source === 'string' ? source : '';
26
+ const subscribe = useCallback((listener) => name ? subscribeSelectSourceVersion(name, listener) : NOOP_UNSUBSCRIBE, [name]);
27
+ useSyncExternalStore(subscribe, () => (name ? getSelectSourceVersion(name) : 0), () => 0);
28
+ const sourceKey = selectSourceKey(source, cacheKey);
29
+ const previousRef = useRef({ key: sourceKey, shape: sourceShape(source) });
30
+ const warnedRef = useRef(false);
31
+ if (IS_DEV) {
32
+ const previous = previousRef.current;
33
+ const shape = sourceShape(source);
34
+ if (!warnedRef.current &&
35
+ previous.key !== sourceKey &&
36
+ previous.shape === shape &&
37
+ !cacheKey &&
38
+ typeof source !== 'string' &&
39
+ source) {
40
+ warnedRef.current = true;
41
+ console.warn('[schema] BizSelect 的 source 每次渲染都产生新的函数引用,缓存会一直失效;' +
42
+ '请把源提到组件外、传入导入的函数,或改用 registerSelectSource 注册');
43
+ }
44
+ previousRef.current = { key: sourceKey, shape };
45
+ }
46
+ return sourceKey;
47
+ }
48
+ //# sourceMappingURL=useStableSourceKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStableSourceKey.js","sourceRoot":"","sources":["../../src/biz-select/useStableSourceKey.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAGlF,MAAM,gBAAgB,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AAElC,SAAS,WAAW,CAAC,MAAqB;IACxC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO;QACL,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QACzC,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QAC7C,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QAC/C,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;KACjD,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,MAA8B,EAC9B,QAAiB;IAEjB,iDAAiD;IACjD,mDAAmD;IACnD,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,QAAoB,EAAE,EAAE,CACvB,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,gBAAgB,EACxE,CAAC,IAAI,CAAC,CACP,CAAC;IACF,oBAAoB,CAClB,SAAS,EACT,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC/C,GAAG,EAAE,CAAC,CAAC,CACR,CAAC;IAEF,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,MAAsB,CAAC,EAAE,CAAC,CAAC;IAC3F,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEhC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC;QACrC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAsB,CAAC,CAAC;QAClD,IACE,CAAC,SAAS,CAAC,OAAO;YAClB,QAAQ,CAAC,GAAG,KAAK,SAAS;YAC1B,QAAQ,CAAC,KAAK,KAAK,KAAK;YACxB,CAAC,QAAQ;YACT,OAAO,MAAM,KAAK,QAAQ;YAC1B,MAAM,EACN,CAAC;YACD,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;YACzB,OAAO,CAAC,IAAI,CACV,oDAAoD;gBAClD,8CAA8C,CACjD,CAAC;QACJ,CAAC;QACD,WAAW,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAClD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { EditableTableComponent } from './types.js';
2
+ export declare const EditableTable: EditableTableComponent;
3
+ //# sourceMappingURL=EditableTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditableTable.d.ts","sourceRoot":"","sources":["../../src/editable-table/EditableTable.tsx"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAGV,sBAAsB,EAIvB,MAAM,SAAS,CAAC;AAgmBjB,eAAO,MAAM,aAAa,EAAgD,sBAAsB,CAAC"}