@aloudata/aloudata-design 3.1.6 → 3.1.7

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 (89) hide show
  1. package/dist/ConfigProvider/getUserList.d.ts +47 -0
  2. package/dist/ConfigProvider/getUserList.js.map +1 -1
  3. package/dist/ConfigProvider/hooks/useGetUserList.d.ts +7 -0
  4. package/dist/ConfigProvider/hooks/useGetUserList.js +5 -1
  5. package/dist/ConfigProvider/hooks/useGetUserList.js.map +1 -1
  6. package/dist/ConfigProvider/index.d.ts +5 -1
  7. package/dist/ConfigProvider/index.js +6 -2
  8. package/dist/ConfigProvider/index.js.map +1 -1
  9. package/dist/Dropdown/index.d.ts +7 -2
  10. package/dist/Dropdown/index.js +30 -17
  11. package/dist/Dropdown/index.js.map +1 -1
  12. package/dist/MemberPicker/components/MultipleOption.d.ts +1 -0
  13. package/dist/MemberPicker/components/MultipleOption.js +3 -1
  14. package/dist/MemberPicker/components/MultipleOption.js.map +1 -1
  15. package/dist/MemberPicker/components/NickLabel.d.ts +5 -0
  16. package/dist/MemberPicker/components/NickLabel.js +14 -4
  17. package/dist/MemberPicker/components/NickLabel.js.map +1 -1
  18. package/dist/MemberPicker/components/Panel.d.ts +4 -0
  19. package/dist/MemberPicker/components/Panel.js +13 -4
  20. package/dist/MemberPicker/components/Panel.js.map +1 -1
  21. package/dist/MemberPicker/components/PanelWrapper.js +25 -24
  22. package/dist/MemberPicker/components/PanelWrapper.js.map +1 -1
  23. package/dist/MemberPicker/components/SearchFeedback.d.ts +7 -0
  24. package/dist/MemberPicker/components/SearchFeedback.js +27 -0
  25. package/dist/MemberPicker/components/SearchFeedback.js.map +1 -0
  26. package/dist/MemberPicker/components/SingleOption.d.ts +1 -0
  27. package/dist/MemberPicker/components/SingleOption.js +3 -1
  28. package/dist/MemberPicker/components/SingleOption.js.map +1 -1
  29. package/dist/MemberPicker/components/UserGroupSelection.d.ts +4 -1
  30. package/dist/MemberPicker/components/UserGroupSelection.js +29 -22
  31. package/dist/MemberPicker/components/UserGroupSelection.js.map +1 -1
  32. package/dist/MemberPicker/dialog/DialogColumns.d.ts +5 -0
  33. package/dist/MemberPicker/dialog/DialogColumns.js +59 -0
  34. package/dist/MemberPicker/dialog/DialogColumns.js.map +1 -0
  35. package/dist/MemberPicker/dialog/DialogContent.d.ts +3 -0
  36. package/dist/MemberPicker/dialog/DialogContent.js +106 -0
  37. package/dist/MemberPicker/dialog/DialogContent.js.map +1 -0
  38. package/dist/MemberPicker/dialog/MemberOption.d.ts +16 -0
  39. package/dist/MemberPicker/dialog/MemberOption.js +101 -0
  40. package/dist/MemberPicker/dialog/MemberOption.js.map +1 -0
  41. package/dist/MemberPicker/dialog/MemberPickerDialog.d.ts +11 -0
  42. package/dist/MemberPicker/dialog/MemberPickerDialog.js +11 -0
  43. package/dist/MemberPicker/dialog/MemberPickerDialog.js.map +1 -0
  44. package/dist/MemberPicker/dialog/SelectedMemberPanel.d.ts +12 -0
  45. package/dist/MemberPicker/dialog/SelectedMemberPanel.js +37 -0
  46. package/dist/MemberPicker/dialog/SelectedMemberPanel.js.map +1 -0
  47. package/dist/MemberPicker/dialog/UserCandidatePanel.d.ts +13 -0
  48. package/dist/MemberPicker/dialog/UserCandidatePanel.js +168 -0
  49. package/dist/MemberPicker/dialog/UserCandidatePanel.js.map +1 -0
  50. package/dist/MemberPicker/dialog/UserGroupCandidatePanel.d.ts +13 -0
  51. package/dist/MemberPicker/dialog/UserGroupCandidatePanel.js +134 -0
  52. package/dist/MemberPicker/dialog/UserGroupCandidatePanel.js.map +1 -0
  53. package/dist/MemberPicker/dialog/helper.d.ts +20 -0
  54. package/dist/MemberPicker/dialog/helper.js +61 -0
  55. package/dist/MemberPicker/dialog/helper.js.map +1 -0
  56. package/dist/MemberPicker/dialog/types.d.ts +41 -0
  57. package/dist/MemberPicker/dialog/types.js +7 -0
  58. package/dist/MemberPicker/dialog/types.js.map +1 -0
  59. package/dist/MemberPicker/dialog/useDialogLocale.d.ts +103 -0
  60. package/dist/MemberPicker/dialog/useDialogLocale.js +12 -0
  61. package/dist/MemberPicker/dialog/useDialogLocale.js.map +1 -0
  62. package/dist/MemberPicker/dialog/useMemberPickerDraft.d.ts +27 -0
  63. package/dist/MemberPicker/dialog/useMemberPickerDraft.js +95 -0
  64. package/dist/MemberPicker/dialog/useMemberPickerDraft.js.map +1 -0
  65. package/dist/MemberPicker/dialog/useUserGroupCandidates.d.ts +29 -0
  66. package/dist/MemberPicker/dialog/useUserGroupCandidates.js +443 -0
  67. package/dist/MemberPicker/dialog/useUserGroupCandidates.js.map +1 -0
  68. package/dist/MemberPicker/index.d.ts +2 -0
  69. package/dist/MemberPicker/index.js +58 -34
  70. package/dist/MemberPicker/index.js.map +1 -1
  71. package/dist/MemberPicker/useMemberSearch.d.ts +8 -0
  72. package/dist/MemberPicker/useMemberSearch.js +51 -0
  73. package/dist/MemberPicker/useMemberSearch.js.map +1 -0
  74. package/dist/Menu/index.d.ts +2 -0
  75. package/dist/Menu/index.js +3 -2
  76. package/dist/Menu/index.js.map +1 -1
  77. package/dist/Modal/index.js +1 -1
  78. package/dist/Modal/index.js.map +1 -1
  79. package/dist/aloudata-design.css +1 -1
  80. package/dist/index.d.ts +3 -0
  81. package/dist/index.js +2 -2
  82. package/dist/locale/default.d.ts +29 -0
  83. package/dist/locale/en_US.d.ts +29 -0
  84. package/dist/locale/en_US.js +29 -0
  85. package/dist/locale/en_US.js.map +1 -1
  86. package/dist/locale/zh_CN.d.ts +29 -0
  87. package/dist/locale/zh_CN.js +29 -0
  88. package/dist/locale/zh_CN.js.map +1 -1
  89. package/package.json +2 -1
@@ -0,0 +1,443 @@
1
+ import AldCustomConfigProvider from "../../ConfigProvider/index.js";
2
+ import useDialogLocale from "./useDialogLocale.js";
3
+ import { hasMoreGroupPages, mergeGroupPages } from "./helper.js";
4
+ import "./types.js";
5
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
6
+ //#region src/MemberPicker/dialog/useUserGroupCandidates.ts
7
+ var GROUP_PAGE_SIZE = 100;
8
+ var SEARCH_DEBOUNCE_MS = 300;
9
+ var ROOT_BREADCRUMB_INDEX = -1;
10
+ var createEmptyLevel = (parentGroupId) => ({
11
+ parentGroupId,
12
+ items: [],
13
+ pageNumber: 0,
14
+ hasMore: false,
15
+ scrollTop: 0,
16
+ loadingMore: false,
17
+ loadMoreError: false
18
+ });
19
+ var createEmptySearchState = (keyword = "") => ({
20
+ keyword,
21
+ items: [],
22
+ pageNumber: 0,
23
+ hasMore: false,
24
+ loading: false,
25
+ loadingMore: false,
26
+ error: false,
27
+ loadMoreError: false
28
+ });
29
+ var getLevelKey = (parentGroupId) => parentGroupId ?? "__ROOT_GROUP__";
30
+ /**
31
+ * 管理受限用户组树与跨层搜索。
32
+ *
33
+ * 树层级缓存和搜索结果分别持有;所有异步响应都受版本号保护,关闭弹窗、
34
+ * 换词、清空或切换层级后,旧响应只能结束自身,不能覆盖当前界面。
35
+ */
36
+ function useUserGroupCandidates() {
37
+ const t = useDialogLocale();
38
+ const { getMemberPickerGroupPage, getNextLevelGroup, getNextLevelGroupWithMeta } = AldCustomConfigProvider.useGetUserList();
39
+ const queryUserGroupsPage = useCallback(async (request) => {
40
+ if (getMemberPickerGroupPage) return getMemberPickerGroupPage(request);
41
+ const params = {
42
+ parentGroupId: request.parentGroupId,
43
+ keyword: request.keyword ?? ""
44
+ };
45
+ if (getNextLevelGroupWithMeta) {
46
+ const result = await getNextLevelGroupWithMeta(params);
47
+ return {
48
+ data: result.items,
49
+ pageNumber: request.pager.pageNumber,
50
+ hasMore: false,
51
+ pathWarningCode: result.pathWarningCode,
52
+ truncated: result.hasMore
53
+ };
54
+ }
55
+ if (getNextLevelGroup) return {
56
+ data: await getNextLevelGroup(params),
57
+ pageNumber: request.pager.pageNumber,
58
+ hasMore: false
59
+ };
60
+ throw new Error(t.MemberPickerDialog.missingGroupSource);
61
+ }, [
62
+ getMemberPickerGroupPage,
63
+ getNextLevelGroup,
64
+ getNextLevelGroupWithMeta,
65
+ t.MemberPickerDialog.missingGroupSource
66
+ ]);
67
+ const [breadcrumbPath, setBreadcrumbPath] = useState([]);
68
+ const breadcrumbPathRef = useRef([]);
69
+ const [levelsByParent, setLevelsByParent] = useState(/* @__PURE__ */ new Map());
70
+ const levelsByParentRef = useRef(levelsByParent);
71
+ const activeParentGroupIdRef = useRef();
72
+ const [treeLoading, setTreeLoading] = useState(true);
73
+ const [treeError, setTreeError] = useState(false);
74
+ const [keyword, setKeywordState] = useState("");
75
+ const keywordRef = useRef("");
76
+ const [searchState, setSearchState] = useState(() => createEmptySearchState());
77
+ const searchStateRef = useRef(searchState);
78
+ const requestVersionRef = useRef(0);
79
+ const mountedRef = useRef(true);
80
+ const searchEffectInitializedRef = useRef(false);
81
+ const updateLevels = useCallback((updater) => {
82
+ setLevelsByParent((currentLevels) => {
83
+ const nextLevels = updater(currentLevels);
84
+ levelsByParentRef.current = nextLevels;
85
+ return nextLevels;
86
+ });
87
+ }, []);
88
+ const cancelTreePagination = useCallback(() => {
89
+ updateLevels((levels) => new Map(Array.from(levels, ([key, level]) => [key, level.loadingMore ? {
90
+ ...level,
91
+ loadingMore: false
92
+ } : level])));
93
+ }, [updateLevels]);
94
+ const updateSearchState = useCallback((updater) => {
95
+ setSearchState((currentState) => {
96
+ const nextState = updater(currentState);
97
+ searchStateRef.current = nextState;
98
+ return nextState;
99
+ });
100
+ }, []);
101
+ const isCurrentRequest = useCallback((version) => mountedRef.current && requestVersionRef.current === version, []);
102
+ const loadTreeFirstPage = useCallback((parentGroupId) => {
103
+ const version = requestVersionRef.current + 1;
104
+ requestVersionRef.current = version;
105
+ setTreeLoading(true);
106
+ setTreeError(false);
107
+ queryUserGroupsPage({
108
+ parentGroupId,
109
+ keyword: void 0,
110
+ pager: {
111
+ pageNumber: 1,
112
+ pageSize: GROUP_PAGE_SIZE
113
+ }
114
+ }).then((page) => {
115
+ if (!isCurrentRequest(version)) return;
116
+ updateLevels((currentLevels) => {
117
+ const key = getLevelKey(parentGroupId);
118
+ const previousLevel = currentLevels.get(key);
119
+ return new Map(currentLevels).set(key, {
120
+ parentGroupId,
121
+ items: [...page.data],
122
+ pageNumber: page.pageNumber,
123
+ hasMore: hasMoreGroupPages(page),
124
+ pathWarningCode: page.pathWarningCode,
125
+ truncated: page.truncated,
126
+ scrollTop: previousLevel?.scrollTop ?? 0,
127
+ loadingMore: false,
128
+ loadMoreError: false
129
+ });
130
+ });
131
+ setTreeLoading(false);
132
+ }).catch(() => {
133
+ if (!isCurrentRequest(version)) return;
134
+ setTreeLoading(false);
135
+ setTreeError(true);
136
+ });
137
+ }, [
138
+ isCurrentRequest,
139
+ queryUserGroupsPage,
140
+ updateLevels
141
+ ]);
142
+ useEffect(() => {
143
+ mountedRef.current = true;
144
+ loadTreeFirstPage();
145
+ return () => {
146
+ mountedRef.current = false;
147
+ requestVersionRef.current += 1;
148
+ };
149
+ }, [loadTreeFirstPage]);
150
+ useEffect(() => {
151
+ if (!searchEffectInitializedRef.current) {
152
+ searchEffectInitializedRef.current = true;
153
+ return;
154
+ }
155
+ const normalizedKeyword = keyword.trim();
156
+ cancelTreePagination();
157
+ const version = requestVersionRef.current + 1;
158
+ requestVersionRef.current = version;
159
+ if (!normalizedKeyword) {
160
+ updateSearchState(() => createEmptySearchState(keyword));
161
+ const activeKey = getLevelKey(activeParentGroupIdRef.current);
162
+ if (!levelsByParentRef.current.has(activeKey)) loadTreeFirstPage(activeParentGroupIdRef.current);
163
+ else {
164
+ setTreeLoading(false);
165
+ setTreeError(false);
166
+ }
167
+ return;
168
+ }
169
+ updateSearchState(() => ({
170
+ ...createEmptySearchState(normalizedKeyword),
171
+ loading: true
172
+ }));
173
+ const timer = window.setTimeout(() => {
174
+ queryUserGroupsPage({
175
+ parentGroupId: void 0,
176
+ keyword: normalizedKeyword,
177
+ pager: {
178
+ pageNumber: 1,
179
+ pageSize: GROUP_PAGE_SIZE
180
+ }
181
+ }).then((page) => {
182
+ if (!isCurrentRequest(version)) return;
183
+ updateSearchState((currentState) => ({
184
+ ...currentState,
185
+ keyword: normalizedKeyword,
186
+ items: [...page.data],
187
+ pageNumber: page.pageNumber,
188
+ hasMore: hasMoreGroupPages(page),
189
+ pathWarningCode: page.pathWarningCode,
190
+ truncated: page.truncated,
191
+ loading: false,
192
+ error: false
193
+ }));
194
+ }).catch(() => {
195
+ if (!isCurrentRequest(version)) return;
196
+ updateSearchState((currentState) => ({
197
+ ...currentState,
198
+ loading: false,
199
+ error: true
200
+ }));
201
+ });
202
+ }, SEARCH_DEBOUNCE_MS);
203
+ return () => window.clearTimeout(timer);
204
+ }, [
205
+ cancelTreePagination,
206
+ isCurrentRequest,
207
+ keyword,
208
+ loadTreeFirstPage,
209
+ queryUserGroupsPage,
210
+ updateSearchState
211
+ ]);
212
+ const updateCurrentLevel = useCallback((updater) => {
213
+ const parentGroupId = activeParentGroupIdRef.current;
214
+ const key = getLevelKey(parentGroupId);
215
+ updateLevels((currentLevels) => {
216
+ const level = currentLevels.get(key) ?? createEmptyLevel(parentGroupId);
217
+ return new Map(currentLevels).set(key, updater(level));
218
+ });
219
+ }, [updateLevels]);
220
+ const updateScrollTop = useCallback((scrollTop) => {
221
+ updateCurrentLevel((level) => ({
222
+ ...level,
223
+ scrollTop
224
+ }));
225
+ }, [updateCurrentLevel]);
226
+ const enterGroup = useCallback((group, scrollTop) => {
227
+ updateScrollTop(scrollTop);
228
+ cancelTreePagination();
229
+ const nextBreadcrumbPath = [...breadcrumbPathRef.current, group];
230
+ breadcrumbPathRef.current = nextBreadcrumbPath;
231
+ setBreadcrumbPath(nextBreadcrumbPath);
232
+ activeParentGroupIdRef.current = group.groupId;
233
+ const nextKey = getLevelKey(group.groupId);
234
+ requestVersionRef.current += 1;
235
+ if (levelsByParentRef.current.has(nextKey)) {
236
+ setTreeLoading(false);
237
+ setTreeError(false);
238
+ return;
239
+ }
240
+ loadTreeFirstPage(group.groupId);
241
+ }, [
242
+ cancelTreePagination,
243
+ loadTreeFirstPage,
244
+ updateScrollTop
245
+ ]);
246
+ const returnToBreadcrumb = useCallback((index, scrollTop) => {
247
+ updateScrollTop(scrollTop);
248
+ cancelTreePagination();
249
+ const currentPath = breadcrumbPathRef.current;
250
+ const nextPath = index === ROOT_BREADCRUMB_INDEX ? [] : currentPath.slice(0, index + 1);
251
+ const parentGroupId = nextPath[nextPath.length - 1]?.groupId;
252
+ breadcrumbPathRef.current = nextPath;
253
+ setBreadcrumbPath(nextPath);
254
+ activeParentGroupIdRef.current = parentGroupId;
255
+ requestVersionRef.current += 1;
256
+ const targetKey = getLevelKey(parentGroupId);
257
+ if (levelsByParentRef.current.has(targetKey)) {
258
+ setTreeLoading(false);
259
+ setTreeError(false);
260
+ return;
261
+ }
262
+ loadTreeFirstPage(parentGroupId);
263
+ }, [
264
+ cancelTreePagination,
265
+ loadTreeFirstPage,
266
+ updateScrollTop
267
+ ]);
268
+ const loadTreeMore = useCallback(() => {
269
+ const parentGroupId = activeParentGroupIdRef.current;
270
+ const key = getLevelKey(parentGroupId);
271
+ const level = levelsByParentRef.current.get(key);
272
+ if (!level || !level.hasMore || level.loadingMore) return;
273
+ const nextPageNumber = level.pageNumber + 1;
274
+ const version = requestVersionRef.current + 1;
275
+ requestVersionRef.current = version;
276
+ updateCurrentLevel((currentLevel) => ({
277
+ ...currentLevel,
278
+ loadingMore: true,
279
+ loadMoreError: false
280
+ }));
281
+ queryUserGroupsPage({
282
+ parentGroupId,
283
+ keyword: void 0,
284
+ pager: {
285
+ pageNumber: nextPageNumber,
286
+ pageSize: GROUP_PAGE_SIZE
287
+ }
288
+ }).then((page) => {
289
+ if (!isCurrentRequest(version)) return;
290
+ updateCurrentLevel((currentLevel) => ({
291
+ ...currentLevel,
292
+ items: mergeGroupPages(currentLevel.items, page.data),
293
+ pageNumber: page.pageNumber,
294
+ hasMore: hasMoreGroupPages(page),
295
+ pathWarningCode: currentLevel.pathWarningCode || page.pathWarningCode,
296
+ truncated: currentLevel.truncated || page.truncated,
297
+ loadingMore: false,
298
+ loadMoreError: false
299
+ }));
300
+ }).catch(() => {
301
+ if (!isCurrentRequest(version)) return;
302
+ updateCurrentLevel((currentLevel) => ({
303
+ ...currentLevel,
304
+ loadingMore: false,
305
+ loadMoreError: true
306
+ }));
307
+ });
308
+ }, [
309
+ isCurrentRequest,
310
+ queryUserGroupsPage,
311
+ updateCurrentLevel
312
+ ]);
313
+ const loadSearchMore = useCallback(() => {
314
+ const currentSearch = searchStateRef.current;
315
+ const normalizedKeyword = keywordRef.current.trim();
316
+ if (!normalizedKeyword || currentSearch.loading || !currentSearch.hasMore || currentSearch.loadingMore) return;
317
+ const nextPageNumber = currentSearch.pageNumber + 1;
318
+ const version = requestVersionRef.current + 1;
319
+ requestVersionRef.current = version;
320
+ updateSearchState((state) => ({
321
+ ...state,
322
+ loadingMore: true,
323
+ loadMoreError: false
324
+ }));
325
+ queryUserGroupsPage({
326
+ parentGroupId: void 0,
327
+ keyword: normalizedKeyword,
328
+ pager: {
329
+ pageNumber: nextPageNumber,
330
+ pageSize: GROUP_PAGE_SIZE
331
+ }
332
+ }).then((page) => {
333
+ if (!isCurrentRequest(version)) return;
334
+ updateSearchState((state) => ({
335
+ ...state,
336
+ items: mergeGroupPages(state.items, page.data),
337
+ pageNumber: page.pageNumber,
338
+ hasMore: hasMoreGroupPages(page),
339
+ pathWarningCode: state.pathWarningCode || page.pathWarningCode,
340
+ truncated: state.truncated || page.truncated,
341
+ loadingMore: false,
342
+ loadMoreError: false
343
+ }));
344
+ }).catch(() => {
345
+ if (!isCurrentRequest(version)) return;
346
+ updateSearchState((state) => ({
347
+ ...state,
348
+ loadingMore: false,
349
+ loadMoreError: true
350
+ }));
351
+ });
352
+ }, [
353
+ isCurrentRequest,
354
+ queryUserGroupsPage,
355
+ updateSearchState
356
+ ]);
357
+ const setKeyword = useCallback((nextKeyword) => {
358
+ keywordRef.current = nextKeyword;
359
+ setKeywordState(nextKeyword);
360
+ }, []);
361
+ const isSearching = keyword.trim().length > 0;
362
+ const loadMore = useCallback(() => {
363
+ if (keywordRef.current.trim()) {
364
+ loadSearchMore();
365
+ return;
366
+ }
367
+ loadTreeMore();
368
+ }, [loadSearchMore, loadTreeMore]);
369
+ const retry = useCallback(() => {
370
+ const normalizedKeyword = keywordRef.current.trim();
371
+ if (normalizedKeyword) {
372
+ const version = requestVersionRef.current + 1;
373
+ requestVersionRef.current = version;
374
+ updateSearchState((state) => ({
375
+ ...state,
376
+ loading: true,
377
+ loadingMore: false,
378
+ loadMoreError: false,
379
+ hasMore: false,
380
+ error: false
381
+ }));
382
+ queryUserGroupsPage({
383
+ parentGroupId: void 0,
384
+ keyword: normalizedKeyword,
385
+ pager: {
386
+ pageNumber: 1,
387
+ pageSize: GROUP_PAGE_SIZE
388
+ }
389
+ }).then((page) => {
390
+ if (!isCurrentRequest(version)) return;
391
+ updateSearchState((state) => ({
392
+ ...state,
393
+ items: [...page.data],
394
+ pageNumber: page.pageNumber,
395
+ hasMore: hasMoreGroupPages(page),
396
+ pathWarningCode: page.pathWarningCode,
397
+ truncated: page.truncated,
398
+ loading: false,
399
+ error: false
400
+ }));
401
+ }).catch(() => {
402
+ if (!isCurrentRequest(version)) return;
403
+ updateSearchState((state) => ({
404
+ ...state,
405
+ loading: false,
406
+ error: true
407
+ }));
408
+ });
409
+ return;
410
+ }
411
+ loadTreeFirstPage(activeParentGroupIdRef.current);
412
+ }, [
413
+ isCurrentRequest,
414
+ loadTreeFirstPage,
415
+ queryUserGroupsPage,
416
+ updateSearchState
417
+ ]);
418
+ const currentLevel = useMemo(() => levelsByParent.get(getLevelKey(activeParentGroupIdRef.current)), [levelsByParent]);
419
+ return {
420
+ breadcrumbPath,
421
+ pathWarningCode: isSearching ? searchState.pathWarningCode : currentLevel?.pathWarningCode,
422
+ truncated: isSearching ? searchState.truncated : currentLevel?.truncated,
423
+ items: isSearching ? searchState.items : currentLevel?.items ?? [],
424
+ keyword,
425
+ loading: isSearching ? searchState.loading : treeLoading,
426
+ loadingMore: isSearching ? searchState.loadingMore : currentLevel?.loadingMore ?? false,
427
+ error: isSearching ? searchState.error : treeError,
428
+ loadMoreError: isSearching ? searchState.loadMoreError : currentLevel?.loadMoreError ?? false,
429
+ hasMore: isSearching ? searchState.hasMore : currentLevel?.hasMore ?? false,
430
+ scrollTop: currentLevel?.scrollTop ?? 0,
431
+ setKeyword,
432
+ enterGroup,
433
+ returnToBreadcrumb,
434
+ loadMore,
435
+ retry,
436
+ retryLoadMore: loadMore,
437
+ updateScrollTop
438
+ };
439
+ }
440
+ //#endregion
441
+ export { useUserGroupCandidates };
442
+
443
+ //# sourceMappingURL=useUserGroupCandidates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUserGroupCandidates.js","names":[],"sources":["../../../src/MemberPicker/dialog/useUserGroupCandidates.ts"],"sourcesContent":["import useDialogLocale from './useDialogLocale';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport ConfigProvider from '../../ConfigProvider';\nimport type {\n IUserGroup,\n MemberGroupPageRequest,\n MemberGroupPage,\n} from '../../ConfigProvider/getUserList';\nimport { hasMoreGroupPages, mergeGroupPages } from './helper';\nimport {\n ROOT_GROUP_CACHE_KEY,\n type IGroupLevelCache,\n type IGroupSearchState,\n} from './types';\n\nconst GROUP_PAGE_SIZE = 100;\nconst SEARCH_DEBOUNCE_MS = 300;\nconst ROOT_BREADCRUMB_INDEX = -1;\n\nconst createEmptyLevel = (parentGroupId?: string): IGroupLevelCache => ({\n parentGroupId,\n items: [],\n pageNumber: 0,\n hasMore: false,\n scrollTop: 0,\n loadingMore: false,\n loadMoreError: false,\n});\n\nconst createEmptySearchState = (keyword = ''): IGroupSearchState => ({\n keyword,\n items: [],\n pageNumber: 0,\n hasMore: false,\n loading: false,\n loadingMore: false,\n error: false,\n loadMoreError: false,\n});\n\nconst getLevelKey = (parentGroupId?: string): string =>\n parentGroupId ?? ROOT_GROUP_CACHE_KEY;\n\nexport interface IUserGroupCandidatesResult {\n breadcrumbPath: IUserGroup[];\n items: IUserGroup[];\n keyword: string;\n pathWarningCode?: string | null;\n truncated?: boolean;\n loading: boolean;\n loadingMore: boolean;\n error: boolean;\n loadMoreError: boolean;\n hasMore: boolean;\n /** 当前层已保存的滚动位置,供候选面板在层级切换后恢复。 */\n scrollTop: number;\n setKeyword: (keyword: string) => void;\n enterGroup: (group: IUserGroup, scrollTop: number) => void;\n returnToBreadcrumb: (index: number, scrollTop: number) => void;\n loadMore: () => void;\n retry: () => void;\n retryLoadMore: () => void;\n updateScrollTop: (scrollTop: number) => void;\n}\n\n/**\n * 管理受限用户组树与跨层搜索。\n *\n * 树层级缓存和搜索结果分别持有;所有异步响应都受版本号保护,关闭弹窗、\n * 换词、清空或切换层级后,旧响应只能结束自身,不能覆盖当前界面。\n */\nexport function useUserGroupCandidates(): IUserGroupCandidatesResult {\n const t = useDialogLocale();\n const {\n getMemberPickerGroupPage,\n getNextLevelGroup,\n getNextLevelGroupWithMeta,\n } = ConfigProvider.useGetUserList();\n const queryUserGroupsPage = useCallback(\n async (request: MemberGroupPageRequest): Promise<MemberGroupPage> => {\n if (getMemberPickerGroupPage) return getMemberPickerGroupPage(request);\n const params = {\n parentGroupId: request.parentGroupId,\n keyword: request.keyword ?? '',\n };\n if (getNextLevelGroupWithMeta) {\n const result = await getNextLevelGroupWithMeta(params);\n // 旧接口没有页码能力:保留截断提示,不反复获取同一页。\n return {\n data: result.items,\n pageNumber: request.pager.pageNumber,\n hasMore: false,\n pathWarningCode: result.pathWarningCode,\n truncated: result.hasMore,\n };\n }\n if (getNextLevelGroup)\n return {\n data: await getNextLevelGroup(params),\n pageNumber: request.pager.pageNumber,\n hasMore: false,\n };\n throw new Error(t.MemberPickerDialog.missingGroupSource);\n },\n [\n getMemberPickerGroupPage,\n getNextLevelGroup,\n getNextLevelGroupWithMeta,\n t.MemberPickerDialog.missingGroupSource,\n ],\n );\n const [breadcrumbPath, setBreadcrumbPath] = useState<IUserGroup[]>([]);\n const breadcrumbPathRef = useRef<IUserGroup[]>([]);\n const [levelsByParent, setLevelsByParent] = useState<\n Map<string, IGroupLevelCache>\n >(new Map());\n const levelsByParentRef = useRef(levelsByParent);\n const activeParentGroupIdRef = useRef<string>();\n const [treeLoading, setTreeLoading] = useState(true);\n const [treeError, setTreeError] = useState(false);\n const [keyword, setKeywordState] = useState('');\n const keywordRef = useRef('');\n const [searchState, setSearchState] = useState<IGroupSearchState>(() =>\n createEmptySearchState(),\n );\n const searchStateRef = useRef(searchState);\n const requestVersionRef = useRef(0);\n const mountedRef = useRef(true);\n const searchEffectInitializedRef = useRef(false);\n\n const updateLevels = useCallback(\n (\n updater: (\n levels: Map<string, IGroupLevelCache>,\n ) => Map<string, IGroupLevelCache>,\n ) => {\n setLevelsByParent((currentLevels) => {\n const nextLevels = updater(currentLevels);\n levelsByParentRef.current = nextLevels;\n return nextLevels;\n });\n },\n [],\n );\n\n // 切层或转搜索会废弃当前请求,同时释放缓存层的分页锁,返回该层仍可继续加载。\n const cancelTreePagination = useCallback(() => {\n updateLevels(\n (levels) =>\n new Map(\n Array.from(levels, ([key, level]) => [\n key,\n level.loadingMore ? { ...level, loadingMore: false } : level,\n ]),\n ),\n );\n }, [updateLevels]);\n\n const updateSearchState = useCallback(\n (updater: (state: IGroupSearchState) => IGroupSearchState) => {\n setSearchState((currentState) => {\n const nextState = updater(currentState);\n searchStateRef.current = nextState;\n return nextState;\n });\n },\n [],\n );\n\n const isCurrentRequest = useCallback(\n (version: number): boolean =>\n mountedRef.current && requestVersionRef.current === version,\n [],\n );\n\n const loadTreeFirstPage = useCallback(\n (parentGroupId?: string) => {\n const version = requestVersionRef.current + 1;\n requestVersionRef.current = version;\n setTreeLoading(true);\n setTreeError(false);\n queryUserGroupsPage({\n parentGroupId,\n keyword: undefined,\n pager: { pageNumber: 1, pageSize: GROUP_PAGE_SIZE },\n })\n .then((page) => {\n if (!isCurrentRequest(version)) {\n return;\n }\n updateLevels((currentLevels) => {\n const key = getLevelKey(parentGroupId);\n const previousLevel = currentLevels.get(key);\n return new Map(currentLevels).set(key, {\n parentGroupId,\n items: [...page.data],\n pageNumber: page.pageNumber,\n hasMore: hasMoreGroupPages(page),\n pathWarningCode: page.pathWarningCode,\n truncated: page.truncated,\n scrollTop: previousLevel?.scrollTop ?? 0,\n loadingMore: false,\n loadMoreError: false,\n });\n });\n setTreeLoading(false);\n })\n .catch(() => {\n if (!isCurrentRequest(version)) {\n return;\n }\n setTreeLoading(false);\n setTreeError(true);\n });\n },\n [isCurrentRequest, queryUserGroupsPage, updateLevels],\n );\n\n useEffect(() => {\n mountedRef.current = true;\n loadTreeFirstPage();\n return () => {\n mountedRef.current = false;\n requestVersionRef.current += 1;\n };\n }, [loadTreeFirstPage]);\n\n useEffect(() => {\n if (!searchEffectInitializedRef.current) {\n searchEffectInitializedRef.current = true;\n return undefined;\n }\n\n const normalizedKeyword = keyword.trim();\n cancelTreePagination();\n const version = requestVersionRef.current + 1;\n requestVersionRef.current = version;\n if (!normalizedKeyword) {\n updateSearchState(() => createEmptySearchState(keyword));\n const activeKey = getLevelKey(activeParentGroupIdRef.current);\n if (!levelsByParentRef.current.has(activeKey)) {\n loadTreeFirstPage(activeParentGroupIdRef.current);\n } else {\n setTreeLoading(false);\n setTreeError(false);\n }\n return undefined;\n }\n\n updateSearchState(() => ({\n ...createEmptySearchState(normalizedKeyword),\n loading: true,\n }));\n const timer = window.setTimeout(() => {\n queryUserGroupsPage({\n parentGroupId: undefined,\n keyword: normalizedKeyword,\n pager: { pageNumber: 1, pageSize: GROUP_PAGE_SIZE },\n })\n .then((page) => {\n if (!isCurrentRequest(version)) {\n return;\n }\n updateSearchState((currentState) => ({\n ...currentState,\n keyword: normalizedKeyword,\n items: [...page.data],\n pageNumber: page.pageNumber,\n hasMore: hasMoreGroupPages(page),\n pathWarningCode: page.pathWarningCode,\n truncated: page.truncated,\n loading: false,\n error: false,\n }));\n })\n .catch(() => {\n if (!isCurrentRequest(version)) {\n return;\n }\n updateSearchState((currentState) => ({\n ...currentState,\n loading: false,\n error: true,\n }));\n });\n }, SEARCH_DEBOUNCE_MS);\n\n return () => window.clearTimeout(timer);\n }, [\n cancelTreePagination,\n isCurrentRequest,\n keyword,\n loadTreeFirstPage,\n queryUserGroupsPage,\n updateSearchState,\n ]);\n\n const updateCurrentLevel = useCallback(\n (updater: (level: IGroupLevelCache) => IGroupLevelCache) => {\n const parentGroupId = activeParentGroupIdRef.current;\n const key = getLevelKey(parentGroupId);\n updateLevels((currentLevels) => {\n const level = currentLevels.get(key) ?? createEmptyLevel(parentGroupId);\n return new Map(currentLevels).set(key, updater(level));\n });\n },\n [updateLevels],\n );\n\n const updateScrollTop = useCallback(\n (scrollTop: number) => {\n updateCurrentLevel((level) => ({ ...level, scrollTop }));\n },\n [updateCurrentLevel],\n );\n\n const enterGroup = useCallback(\n (group: IUserGroup, scrollTop: number) => {\n updateScrollTop(scrollTop);\n cancelTreePagination();\n const nextBreadcrumbPath = [...breadcrumbPathRef.current, group];\n breadcrumbPathRef.current = nextBreadcrumbPath;\n setBreadcrumbPath(nextBreadcrumbPath);\n activeParentGroupIdRef.current = group.groupId;\n const nextKey = getLevelKey(group.groupId);\n requestVersionRef.current += 1;\n if (levelsByParentRef.current.has(nextKey)) {\n setTreeLoading(false);\n setTreeError(false);\n return;\n }\n loadTreeFirstPage(group.groupId);\n },\n [cancelTreePagination, loadTreeFirstPage, updateScrollTop],\n );\n\n const returnToBreadcrumb = useCallback(\n (index: number, scrollTop: number) => {\n updateScrollTop(scrollTop);\n cancelTreePagination();\n const currentPath = breadcrumbPathRef.current;\n const nextPath =\n index === ROOT_BREADCRUMB_INDEX ? [] : currentPath.slice(0, index + 1);\n const parentGroupId = nextPath[nextPath.length - 1]?.groupId;\n breadcrumbPathRef.current = nextPath;\n setBreadcrumbPath(nextPath);\n activeParentGroupIdRef.current = parentGroupId;\n requestVersionRef.current += 1;\n const targetKey = getLevelKey(parentGroupId);\n if (levelsByParentRef.current.has(targetKey)) {\n setTreeLoading(false);\n setTreeError(false);\n return;\n }\n loadTreeFirstPage(parentGroupId);\n },\n [cancelTreePagination, loadTreeFirstPage, updateScrollTop],\n );\n\n const loadTreeMore = useCallback(() => {\n const parentGroupId = activeParentGroupIdRef.current;\n const key = getLevelKey(parentGroupId);\n const level = levelsByParentRef.current.get(key);\n if (!level || !level.hasMore || level.loadingMore) {\n return;\n }\n const nextPageNumber = level.pageNumber + 1;\n const version = requestVersionRef.current + 1;\n requestVersionRef.current = version;\n updateCurrentLevel((currentLevel) => ({\n ...currentLevel,\n loadingMore: true,\n loadMoreError: false,\n }));\n queryUserGroupsPage({\n parentGroupId,\n keyword: undefined,\n pager: { pageNumber: nextPageNumber, pageSize: GROUP_PAGE_SIZE },\n })\n .then((page) => {\n if (!isCurrentRequest(version)) {\n return;\n }\n updateCurrentLevel((currentLevel) => ({\n ...currentLevel,\n items: mergeGroupPages(currentLevel.items, page.data),\n pageNumber: page.pageNumber,\n hasMore: hasMoreGroupPages(page),\n pathWarningCode: currentLevel.pathWarningCode || page.pathWarningCode,\n truncated: currentLevel.truncated || page.truncated,\n loadingMore: false,\n loadMoreError: false,\n }));\n })\n .catch(() => {\n if (!isCurrentRequest(version)) {\n return;\n }\n updateCurrentLevel((currentLevel) => ({\n ...currentLevel,\n loadingMore: false,\n loadMoreError: true,\n }));\n });\n }, [isCurrentRequest, queryUserGroupsPage, updateCurrentLevel]);\n\n const loadSearchMore = useCallback(() => {\n const currentSearch = searchStateRef.current;\n const normalizedKeyword = keywordRef.current.trim();\n if (\n !normalizedKeyword ||\n currentSearch.loading ||\n !currentSearch.hasMore ||\n currentSearch.loadingMore\n ) {\n return;\n }\n const nextPageNumber = currentSearch.pageNumber + 1;\n const version = requestVersionRef.current + 1;\n requestVersionRef.current = version;\n updateSearchState((state) => ({\n ...state,\n loadingMore: true,\n loadMoreError: false,\n }));\n queryUserGroupsPage({\n parentGroupId: undefined,\n keyword: normalizedKeyword,\n pager: { pageNumber: nextPageNumber, pageSize: GROUP_PAGE_SIZE },\n })\n .then((page) => {\n if (!isCurrentRequest(version)) {\n return;\n }\n updateSearchState((state) => ({\n ...state,\n items: mergeGroupPages(state.items, page.data),\n pageNumber: page.pageNumber,\n hasMore: hasMoreGroupPages(page),\n pathWarningCode: state.pathWarningCode || page.pathWarningCode,\n truncated: state.truncated || page.truncated,\n loadingMore: false,\n loadMoreError: false,\n }));\n })\n .catch(() => {\n if (!isCurrentRequest(version)) {\n return;\n }\n updateSearchState((state) => ({\n ...state,\n loadingMore: false,\n loadMoreError: true,\n }));\n });\n }, [isCurrentRequest, queryUserGroupsPage, updateSearchState]);\n\n const setKeyword = useCallback((nextKeyword: string) => {\n keywordRef.current = nextKeyword;\n setKeywordState(nextKeyword);\n }, []);\n\n const isSearching = keyword.trim().length > 0;\n const loadMore = useCallback(() => {\n if (keywordRef.current.trim()) {\n loadSearchMore();\n return;\n }\n loadTreeMore();\n }, [loadSearchMore, loadTreeMore]);\n\n const retry = useCallback(() => {\n const normalizedKeyword = keywordRef.current.trim();\n if (normalizedKeyword) {\n const version = requestVersionRef.current + 1;\n requestVersionRef.current = version;\n updateSearchState((state) => ({\n ...state,\n loading: true,\n loadingMore: false,\n loadMoreError: false,\n hasMore: false,\n error: false,\n }));\n queryUserGroupsPage({\n parentGroupId: undefined,\n keyword: normalizedKeyword,\n pager: { pageNumber: 1, pageSize: GROUP_PAGE_SIZE },\n })\n .then((page) => {\n if (!isCurrentRequest(version)) {\n return;\n }\n updateSearchState((state) => ({\n ...state,\n items: [...page.data],\n pageNumber: page.pageNumber,\n hasMore: hasMoreGroupPages(page),\n pathWarningCode: page.pathWarningCode,\n truncated: page.truncated,\n loading: false,\n error: false,\n }));\n })\n .catch(() => {\n if (!isCurrentRequest(version)) {\n return;\n }\n updateSearchState((state) => ({\n ...state,\n loading: false,\n error: true,\n }));\n });\n return;\n }\n loadTreeFirstPage(activeParentGroupIdRef.current);\n }, [\n isCurrentRequest,\n loadTreeFirstPage,\n queryUserGroupsPage,\n updateSearchState,\n ]);\n\n const currentLevel = useMemo(\n () => levelsByParent.get(getLevelKey(activeParentGroupIdRef.current)),\n [levelsByParent],\n );\n\n return {\n breadcrumbPath,\n pathWarningCode: isSearching\n ? searchState.pathWarningCode\n : currentLevel?.pathWarningCode,\n truncated: isSearching ? searchState.truncated : currentLevel?.truncated,\n items: isSearching ? searchState.items : currentLevel?.items ?? [],\n keyword,\n loading: isSearching ? searchState.loading : treeLoading,\n loadingMore: isSearching\n ? searchState.loadingMore\n : currentLevel?.loadingMore ?? false,\n error: isSearching ? searchState.error : treeError,\n loadMoreError: isSearching\n ? searchState.loadMoreError\n : currentLevel?.loadMoreError ?? false,\n hasMore: isSearching ? searchState.hasMore : currentLevel?.hasMore ?? false,\n scrollTop: currentLevel?.scrollTop ?? 0,\n setKeyword,\n enterGroup,\n returnToBreadcrumb,\n loadMore,\n retry,\n retryLoadMore: loadMore,\n updateScrollTop,\n };\n}\n"],"mappings":"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"}
@@ -1,7 +1,9 @@
1
+ import { default as MemberPickerDialog } from './dialog/MemberPickerDialog.js';
1
2
  import { default as React } from 'react';
2
3
  import { default as MemberPanel } from './components/PanelWrapper.js';
3
4
  import { IMemberPickerProps } from './interface.js';
4
5
  declare const MemberSelector: React.FC<IMemberPickerProps> & {
5
6
  MemberPanel: typeof MemberPanel;
7
+ Dialog: typeof MemberPickerDialog;
6
8
  };
7
9
  export default MemberSelector;