@box/metadata-taxonomy-picker 3.1.36 → 3.1.37

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 (43) hide show
  1. package/dist/chunks/empty-state.js +1 -22
  2. package/dist/chunks/error-state.js +1 -41
  3. package/dist/chunks/load-more-error-row.js +1 -52
  4. package/dist/chunks/load-more-loading-row.js +1 -17
  5. package/dist/chunks/loading-state.js +1 -17
  6. package/dist/chunks/metadata-taxonomy-picker-shell.js +1 -282
  7. package/dist/chunks/taxonomy-ancestor-breadcrumb.js +1 -115
  8. package/dist/chunks/taxonomy-items-list.js +1 -114
  9. package/dist/chunks/taxonomy-level-filter.js +1 -48
  10. package/dist/chunks/taxonomy-menu-item.js +1 -99
  11. package/dist/esm/index.js +1 -3
  12. package/dist/esm/lib/components/metadata-taxonomy-picker-shell/index.js +1 -2
  13. package/dist/esm/lib/components/metadata-taxonomy-picker-shell/messages.js +1 -24
  14. package/dist/esm/lib/components/metadata-taxonomy-picker-shell/metadata-taxonomy-picker-shell.js +1 -2
  15. package/dist/esm/lib/components/taxonomy-ancestor-breadcrumb/index.js +1 -2
  16. package/dist/esm/lib/components/taxonomy-ancestor-breadcrumb/taxonomy-ancestor-breadcrumb.js +1 -2
  17. package/dist/esm/lib/components/taxonomy-items-list/empty-state/empty-state.js +1 -2
  18. package/dist/esm/lib/components/taxonomy-items-list/empty-state/index.js +1 -2
  19. package/dist/esm/lib/components/taxonomy-items-list/error-state/error-state.js +1 -2
  20. package/dist/esm/lib/components/taxonomy-items-list/error-state/index.js +1 -2
  21. package/dist/esm/lib/components/taxonomy-items-list/index.js +1 -6
  22. package/dist/esm/lib/components/taxonomy-items-list/load-more-feedback/index.js +1 -3
  23. package/dist/esm/lib/components/taxonomy-items-list/load-more-feedback/load-more-error-row.js +1 -2
  24. package/dist/esm/lib/components/taxonomy-items-list/load-more-feedback/load-more-loading-row.js +1 -2
  25. package/dist/esm/lib/components/taxonomy-items-list/load-more-feedback/messages.js +1 -20
  26. package/dist/esm/lib/components/taxonomy-items-list/loading-state/index.js +1 -2
  27. package/dist/esm/lib/components/taxonomy-items-list/loading-state/loading-state.js +1 -2
  28. package/dist/esm/lib/components/taxonomy-items-list/messages.js +1 -36
  29. package/dist/esm/lib/components/taxonomy-items-list/taxonomy-items-list.js +1 -2
  30. package/dist/esm/lib/components/taxonomy-level-filter/index.js +1 -2
  31. package/dist/esm/lib/components/taxonomy-level-filter/messages.js +1 -6
  32. package/dist/esm/lib/components/taxonomy-level-filter/taxonomy-level-filter.js +1 -2
  33. package/dist/esm/lib/components/taxonomy-menu-item/index.js +1 -2
  34. package/dist/esm/lib/components/taxonomy-menu-item/messages.js +1 -6
  35. package/dist/esm/lib/components/taxonomy-menu-item/taxonomy-menu-item.js +1 -2
  36. package/dist/esm/lib/components/taxonomy-menu-item/use-taxonomy-menu-item-keyboard.js +1 -100
  37. package/dist/esm/lib/constants.js +1 -2
  38. package/dist/esm/lib/hooks/messages.js +1 -16
  39. package/dist/esm/lib/hooks/use-taxonomy-picker-controller.js +1 -261
  40. package/dist/esm/lib/metadata-taxonomy-picker.js +1 -10
  41. package/dist/esm/lib/state/reducer.js +1 -152
  42. package/dist/esm/lib/state/transitions.js +1 -22
  43. package/package.json +7 -7
@@ -1,16 +1 @@
1
- import { defineMessages as e } from "react-intl";
2
- var t = e({
3
- initialLoadErrorFallback: {
4
- id: "groupSharedFeatures.metadataTaxonomyPicker.controller.initialLoadErrorFallback",
5
- defaultMessage: "Failed to load items"
6
- },
7
- searchErrorFallback: {
8
- id: "groupSharedFeatures.metadataTaxonomyPicker.controller.searchErrorFallback",
9
- defaultMessage: "Failed to search items"
10
- },
11
- loadMoreErrorFallback: {
12
- id: "groupSharedFeatures.metadataTaxonomyPicker.controller.loadMoreErrorFallback",
13
- defaultMessage: "Failed to load more items"
14
- }
15
- });
16
- export { t as messages };
1
+ import{defineMessages}from"react-intl";var messages=defineMessages({initialLoadErrorFallback:{id:`groupSharedFeatures.metadataTaxonomyPicker.controller.initialLoadErrorFallback`,defaultMessage:`Failed to load items`},searchErrorFallback:{id:`groupSharedFeatures.metadataTaxonomyPicker.controller.searchErrorFallback`,defaultMessage:`Failed to search items`},loadMoreErrorFallback:{id:`groupSharedFeatures.metadataTaxonomyPicker.controller.loadMoreErrorFallback`,defaultMessage:`Failed to load more items`}});export{messages};
@@ -1,261 +1 @@
1
- import "../constants.js";
2
- import { FailedOp as e, PickerActionType as t, initialState as n, pickerReducer as r } from "../state/reducer.js";
3
- import { messages as i } from "./messages.js";
4
- import { useCallback as a, useEffect as o, useReducer as s, useRef as c, useState as l } from "react";
5
- import { useIntl as u } from "react-intl";
6
- var d = [];
7
- function f(e) {
8
- return e ?? "__root__";
9
- }
10
- function p(p, m = d, h) {
11
- let [g, _] = s(r, n), [v, y] = l(!1), b = c(g);
12
- b.current = g;
13
- let x = c(p);
14
- x.current = p;
15
- let S = c(h);
16
- S.current = h;
17
- let C = c(m);
18
- C.current = m;
19
- let w = c(void 0), { formatMessage: T } = u(), E = c(T);
20
- E.current = T;
21
- let D = c(null), O = c(null), k = c(null), A = c(!1), j = c(/* @__PURE__ */ new Map()), M = a((e, t, n) => {
22
- j.current.set(f(e), {
23
- items: t,
24
- nextMarker: n,
25
- fetchedAt: Date.now()
26
- });
27
- }, []), N = a((e) => {
28
- let t = f(e), n = j.current.get(t);
29
- return n ? Date.now() - n.fetchedAt > 3e5 ? (j.current.delete(t), null) : n : null;
30
- }, []), P = a(async (e) => {
31
- D.current?.abort();
32
- let n = new AbortController();
33
- D.current = n;
34
- try {
35
- let r = await x.current.getNodes(e, {
36
- limit: 100,
37
- signal: n.signal
38
- });
39
- if (n.signal.aborted) return;
40
- A.current = !0, _({
41
- type: t.FetchSuccess,
42
- entries: r.entries,
43
- nextMarker: r.next_marker,
44
- forParentId: e
45
- });
46
- } catch (r) {
47
- if (n.signal.aborted || r instanceof DOMException && r.name === "AbortError") return;
48
- _({
49
- type: t.FetchError,
50
- error: r instanceof Error ? r.message : E.current(i.initialLoadErrorFallback),
51
- forParentId: e
52
- });
53
- }
54
- }, []), F = a((e) => {
55
- _({ type: t.FetchStart }), P(e);
56
- }, [P]), I = a(async (e, n) => {
57
- O.current?.abort();
58
- let r = new AbortController();
59
- O.current = r, _({
60
- type: t.SearchFetchStart,
61
- query: e
62
- });
63
- try {
64
- let i = n === void 0 ? b.current.levelFilter : n, a = w.current, o = a ? a.parentId : b.current.currentParentId, s = a ? a.levelFilter : i, c = await x.current.searchNodes(e, {
65
- limit: 100,
66
- signal: r.signal,
67
- parentId: o,
68
- levelFilter: s ?? void 0
69
- });
70
- if (r.signal.aborted) return;
71
- _({
72
- type: t.SearchFetchSuccess,
73
- results: c.entries,
74
- nextMarker: c.next_marker,
75
- forQuery: e
76
- }), S.current?.onSearch?.(e);
77
- } catch (e) {
78
- if (r.signal.aborted || e instanceof DOMException && e.name === "AbortError") return;
79
- _({
80
- type: t.SearchFetchError,
81
- error: e instanceof Error ? e.message : E.current(i.searchErrorFallback)
82
- });
83
- }
84
- }, []), L = a((e) => {
85
- if (_({
86
- type: t.SearchInputChange,
87
- value: e,
88
- availableLevels: C.current
89
- }), k.current !== null && (clearTimeout(k.current), k.current = null), !e) {
90
- O.current?.abort(), _({ type: t.SearchClear });
91
- return;
92
- }
93
- k.current = setTimeout(() => {
94
- I(e);
95
- }, 500);
96
- }, [I]), R = a((e) => {
97
- y(e), S.current?.onOpenChange?.(e), e && !A.current && F(null), e || (k.current !== null && (clearTimeout(k.current), k.current = null), D.current?.abort(), O.current?.abort(), j.current.clear(), A.current = !1, _({ type: t.Reset }));
98
- }, [F]);
99
- o(() => {
100
- let e = D, t = O;
101
- return () => {
102
- e.current?.abort(), t.current?.abort(), D.current?.abort(), O.current?.abort(), k.current !== null && clearTimeout(k.current);
103
- };
104
- }, []);
105
- let z = a((e) => {
106
- let t = w.current;
107
- if (t?.parentId === e?.parentId && t?.levelFilter === e?.levelFilter || (w.current = e, !A.current)) return;
108
- let { searchInputValue: n } = b.current;
109
- n !== "" && (k.current !== null && (clearTimeout(k.current), k.current = null), I(n));
110
- }, [I]), B = a((e) => {
111
- k.current !== null && (clearTimeout(k.current), k.current = null), O.current?.abort();
112
- let n = b.current;
113
- M(n.currentParentId, n.items, n.itemsNextMarker);
114
- let r = e.ancestors ? [...e.ancestors.map((e) => ({
115
- id: e.id,
116
- displayName: e.displayName
117
- })), {
118
- id: e.id,
119
- displayName: e.displayName
120
- }] : [...n.levelStack, {
121
- id: e.id,
122
- displayName: e.displayName
123
- }];
124
- _({
125
- type: t.DrillDown,
126
- targetParentId: e.id,
127
- levelStack: r
128
- }), P(e.id), S.current?.onNavigate?.(e.id, r);
129
- }, [P, M]), V = a((e) => {
130
- k.current !== null && (clearTimeout(k.current), k.current = null), D.current?.abort(), O.current?.abort();
131
- let n = b.current;
132
- M(n.currentParentId, n.items, n.itemsNextMarker);
133
- let r = e === null ? -1 : n.levelStack.findIndex((t) => t.id === e), i = r === -1 ? [] : n.levelStack.slice(0, r + 1), a = N(e);
134
- a ? _({
135
- type: t.NavigateBack,
136
- targetParentId: e,
137
- levelStack: i,
138
- cached: {
139
- items: a.items,
140
- nextMarker: a.nextMarker
141
- }
142
- }) : (_({
143
- type: t.NavigateBackRefetch,
144
- targetParentId: e,
145
- levelStack: i
146
- }), P(e)), S.current?.onNavigate?.(e, i);
147
- }, [
148
- P,
149
- N,
150
- M
151
- ]), H = a(async () => {
152
- let { isFetchingMore: e, itemsNextMarker: n, currentParentId: r, items: a } = b.current;
153
- if (e || n === void 0) return;
154
- D.current?.abort();
155
- let o = new AbortController();
156
- D.current = o;
157
- let s = Date.now();
158
- _({ type: t.LoadMoreStart });
159
- try {
160
- let e = await x.current.getNodes(r, {
161
- limit: 100,
162
- marker: n,
163
- signal: o.signal
164
- });
165
- if (o.signal.aborted || b.current.currentParentId !== r) return;
166
- _({
167
- type: t.LoadMoreSuccess,
168
- entries: e.entries,
169
- nextMarker: e.next_marker
170
- }), M(r, [...a, ...e.entries], e.next_marker);
171
- } catch (e) {
172
- if (o.signal.aborted || e instanceof DOMException && e.name === "AbortError" || b.current.currentParentId !== r) return;
173
- let n = 400 - (Date.now() - s);
174
- if (n > 0 && (await new Promise((e) => setTimeout(e, n)), o.signal.aborted || b.current.currentParentId !== r)) return;
175
- _({
176
- type: t.LoadMoreError,
177
- error: e instanceof Error ? e.message : E.current(i.loadMoreErrorFallback)
178
- });
179
- }
180
- }, [M]), U = a(async () => {
181
- let { isFetchingSearchMore: e, searchNextMarker: n, searchQuery: r, currentParentId: a, levelFilter: o } = b.current;
182
- if (e || n === void 0 || r === "") return;
183
- let s = w.current, c = s ? s.parentId : a, l = (s ? s.levelFilter : o) ?? void 0;
184
- O.current?.abort();
185
- let u = new AbortController();
186
- O.current = u;
187
- let d = Date.now();
188
- _({ type: t.SearchLoadMoreStart });
189
- try {
190
- let e = await x.current.searchNodes(r, {
191
- limit: 100,
192
- marker: n,
193
- parentId: c,
194
- levelFilter: l,
195
- signal: u.signal
196
- });
197
- if (u.signal.aborted) return;
198
- _({
199
- type: t.SearchLoadMoreSuccess,
200
- entries: e.entries,
201
- nextMarker: e.next_marker,
202
- forQuery: r
203
- });
204
- } catch (e) {
205
- if (u.signal.aborted || e instanceof DOMException && e.name === "AbortError") return;
206
- let n = 400 - (Date.now() - d);
207
- if (n > 0 && (await new Promise((e) => setTimeout(e, n)), u.signal.aborted)) return;
208
- _({
209
- type: t.SearchLoadMoreError,
210
- error: e instanceof Error ? e.message : E.current(i.loadMoreErrorFallback),
211
- forQuery: r
212
- });
213
- }
214
- }, []), W = a(() => {
215
- switch (b.current.lastFailedOp) {
216
- case e.Browse:
217
- F(b.current.currentParentId);
218
- break;
219
- case e.BrowseMore:
220
- H();
221
- break;
222
- case e.Search: {
223
- let { searchQuery: e } = b.current;
224
- e !== "" && I(e);
225
- break;
226
- }
227
- case e.SearchMore:
228
- U();
229
- break;
230
- default: break;
231
- }
232
- }, [
233
- F,
234
- H,
235
- I,
236
- U
237
- ]);
238
- return {
239
- state: g,
240
- isOpen: v,
241
- handleOpenChange: R,
242
- handleInputValueChange: L,
243
- actions: {
244
- drillDown: B,
245
- navigateBack: V,
246
- loadMore: H,
247
- searchLoadMore: U,
248
- setLevelFilter: a((e) => {
249
- _({
250
- type: t.SetLevelFilter,
251
- level: e
252
- }), k.current !== null && (clearTimeout(k.current), k.current = null);
253
- let n = b.current.searchInputValue;
254
- n && I(n, e);
255
- }, [I]),
256
- retry: W,
257
- setSearchScopeOverride: z
258
- }
259
- };
260
- }
261
- export { p as useTaxonomyPickerController };
1
+ import"../constants.js";import{FailedOp,PickerActionType,initialState,pickerReducer}from"../state/reducer.js";import{messages}from"./messages.js";import{useCallback,useEffect,useReducer,useRef,useState}from"react";import{useIntl}from"react-intl";var EMPTY_LEVELS=[];function cacheKeyFor(parentId){return parentId??`__root__`}function useTaxonomyPickerController(itemsService,levels=EMPTY_LEVELS,eventService){let[state,dispatch]=useReducer(pickerReducer,initialState),[isOpen,setIsOpen]=useState(!1),stateRef=useRef(state);stateRef.current=state;let serviceRef=useRef(itemsService);serviceRef.current=itemsService;let eventServiceRef=useRef(eventService);eventServiceRef.current=eventService;let levelsRef=useRef(levels);levelsRef.current=levels;let searchScopeOverrideRef=useRef(void 0),{formatMessage}=useIntl(),formatMessageRef=useRef(formatMessage);formatMessageRef.current=formatMessage;let browseAbortRef=useRef(null),searchAbortRef=useRef(null),searchDebounceRef=useRef(null),hasLoadedRef=useRef(!1),cacheRef=useRef(new Map),writeCache=useCallback((parentId,items,nextMarker)=>{cacheRef.current.set(cacheKeyFor(parentId),{items,nextMarker,fetchedAt:Date.now()})},[]),readCache=useCallback(parentId=>{let key=cacheKeyFor(parentId),entry=cacheRef.current.get(key);return entry?Date.now()-entry.fetchedAt>3e5?(cacheRef.current.delete(key),null):entry:null},[]),fetchLevel=useCallback(async parentId=>{browseAbortRef.current?.abort();let controller=new AbortController;browseAbortRef.current=controller;try{let response=await serviceRef.current.getNodes(parentId,{limit:100,signal:controller.signal});if(controller.signal.aborted)return;hasLoadedRef.current=!0,dispatch({type:PickerActionType.FetchSuccess,entries:response.entries,nextMarker:response.next_marker,forParentId:parentId})}catch(error){if(controller.signal.aborted||error instanceof DOMException&&error.name===`AbortError`)return;dispatch({type:PickerActionType.FetchError,error:error instanceof Error?error.message:formatMessageRef.current(messages.initialLoadErrorFallback),forParentId:parentId})}},[]),fetchNodes=useCallback(parentId=>{dispatch({type:PickerActionType.FetchStart}),fetchLevel(parentId)},[fetchLevel]),performSearch=useCallback(async(query,explicitLevelFilter)=>{searchAbortRef.current?.abort();let controller=new AbortController;searchAbortRef.current=controller,dispatch({type:PickerActionType.SearchFetchStart,query});try{let stateLevelFilter=explicitLevelFilter===void 0?stateRef.current.levelFilter:explicitLevelFilter,override=searchScopeOverrideRef.current,parentId=override?override.parentId:stateRef.current.currentParentId,levelFilter=override?override.levelFilter:stateLevelFilter,response=await serviceRef.current.searchNodes(query,{limit:100,signal:controller.signal,parentId,levelFilter:levelFilter??void 0});if(controller.signal.aborted)return;dispatch({type:PickerActionType.SearchFetchSuccess,results:response.entries,nextMarker:response.next_marker,forQuery:query}),eventServiceRef.current?.onSearch?.(query)}catch(error){if(controller.signal.aborted||error instanceof DOMException&&error.name===`AbortError`)return;dispatch({type:PickerActionType.SearchFetchError,error:error instanceof Error?error.message:formatMessageRef.current(messages.searchErrorFallback)})}},[]),handleInputValueChange=useCallback(inputValue=>{if(dispatch({type:PickerActionType.SearchInputChange,value:inputValue,availableLevels:levelsRef.current}),searchDebounceRef.current!==null&&(clearTimeout(searchDebounceRef.current),searchDebounceRef.current=null),!inputValue){searchAbortRef.current?.abort(),dispatch({type:PickerActionType.SearchClear});return}searchDebounceRef.current=setTimeout(()=>{performSearch(inputValue)},500)},[performSearch]),handleOpenChange=useCallback(open=>{setIsOpen(open),eventServiceRef.current?.onOpenChange?.(open),open&&!hasLoadedRef.current&&fetchNodes(null),open||(searchDebounceRef.current!==null&&(clearTimeout(searchDebounceRef.current),searchDebounceRef.current=null),browseAbortRef.current?.abort(),searchAbortRef.current?.abort(),cacheRef.current.clear(),hasLoadedRef.current=!1,dispatch({type:PickerActionType.Reset}))},[fetchNodes]);useEffect(()=>{let browseAbort=browseAbortRef,searchAbort=searchAbortRef;return()=>{browseAbort.current?.abort(),searchAbort.current?.abort(),browseAbortRef.current?.abort(),searchAbortRef.current?.abort(),searchDebounceRef.current!==null&&clearTimeout(searchDebounceRef.current)}},[]);let setSearchScopeOverride=useCallback(next=>{let prev=searchScopeOverrideRef.current;if(prev?.parentId===next?.parentId&&prev?.levelFilter===next?.levelFilter||(searchScopeOverrideRef.current=next,!hasLoadedRef.current))return;let{searchInputValue}=stateRef.current;searchInputValue!==``&&(searchDebounceRef.current!==null&&(clearTimeout(searchDebounceRef.current),searchDebounceRef.current=null),performSearch(searchInputValue))},[performSearch]),drillDown=useCallback(target=>{searchDebounceRef.current!==null&&(clearTimeout(searchDebounceRef.current),searchDebounceRef.current=null),searchAbortRef.current?.abort();let previous=stateRef.current;writeCache(previous.currentParentId,previous.items,previous.itemsNextMarker);let newLevelStack=target.ancestors?[...target.ancestors.map(a=>({id:a.id,displayName:a.displayName})),{id:target.id,displayName:target.displayName}]:[...previous.levelStack,{id:target.id,displayName:target.displayName}];dispatch({type:PickerActionType.DrillDown,targetParentId:target.id,levelStack:newLevelStack}),fetchLevel(target.id),eventServiceRef.current?.onNavigate?.(target.id,newLevelStack)},[fetchLevel,writeCache]),navigateBack=useCallback(targetParentId=>{searchDebounceRef.current!==null&&(clearTimeout(searchDebounceRef.current),searchDebounceRef.current=null),browseAbortRef.current?.abort(),searchAbortRef.current?.abort();let previous=stateRef.current;writeCache(previous.currentParentId,previous.items,previous.itemsNextMarker);let targetIndex=targetParentId===null?-1:previous.levelStack.findIndex(e=>e.id===targetParentId),newLevelStack=targetIndex===-1?[]:previous.levelStack.slice(0,targetIndex+1),cached=readCache(targetParentId);cached?dispatch({type:PickerActionType.NavigateBack,targetParentId,levelStack:newLevelStack,cached:{items:cached.items,nextMarker:cached.nextMarker}}):(dispatch({type:PickerActionType.NavigateBackRefetch,targetParentId,levelStack:newLevelStack}),fetchLevel(targetParentId)),eventServiceRef.current?.onNavigate?.(targetParentId,newLevelStack)},[fetchLevel,readCache,writeCache]),loadMore=useCallback(async()=>{let{isFetchingMore,itemsNextMarker:marker,currentParentId:parentId,items:previousItems}=stateRef.current;if(isFetchingMore||marker===void 0)return;browseAbortRef.current?.abort();let controller=new AbortController;browseAbortRef.current=controller;let startedAt=Date.now();dispatch({type:PickerActionType.LoadMoreStart});try{let response=await serviceRef.current.getNodes(parentId,{limit:100,marker,signal:controller.signal});if(controller.signal.aborted||stateRef.current.currentParentId!==parentId)return;dispatch({type:PickerActionType.LoadMoreSuccess,entries:response.entries,nextMarker:response.next_marker}),writeCache(parentId,[...previousItems,...response.entries],response.next_marker)}catch(error){if(controller.signal.aborted||error instanceof DOMException&&error.name===`AbortError`||stateRef.current.currentParentId!==parentId)return;let remaining=400-(Date.now()-startedAt);if(remaining>0&&(await new Promise(resolve=>setTimeout(resolve,remaining)),controller.signal.aborted||stateRef.current.currentParentId!==parentId))return;dispatch({type:PickerActionType.LoadMoreError,error:error instanceof Error?error.message:formatMessageRef.current(messages.loadMoreErrorFallback)})}},[writeCache]),searchLoadMore=useCallback(async()=>{let{isFetchingSearchMore,searchNextMarker:marker,searchQuery:query,currentParentId:stateParentId,levelFilter:stateLevelFilter}=stateRef.current;if(isFetchingSearchMore||marker===void 0||query===``)return;let override=searchScopeOverrideRef.current,parentId=override?override.parentId:stateParentId,levelFilterParam=(override?override.levelFilter:stateLevelFilter)??void 0;searchAbortRef.current?.abort();let controller=new AbortController;searchAbortRef.current=controller;let startedAt=Date.now();dispatch({type:PickerActionType.SearchLoadMoreStart});try{let response=await serviceRef.current.searchNodes(query,{limit:100,marker,parentId,levelFilter:levelFilterParam,signal:controller.signal});if(controller.signal.aborted)return;dispatch({type:PickerActionType.SearchLoadMoreSuccess,entries:response.entries,nextMarker:response.next_marker,forQuery:query})}catch(error){if(controller.signal.aborted||error instanceof DOMException&&error.name===`AbortError`)return;let remaining=400-(Date.now()-startedAt);if(remaining>0&&(await new Promise(resolve=>setTimeout(resolve,remaining)),controller.signal.aborted))return;dispatch({type:PickerActionType.SearchLoadMoreError,error:error instanceof Error?error.message:formatMessageRef.current(messages.loadMoreErrorFallback),forQuery:query})}},[]),retry=useCallback(()=>{switch(stateRef.current.lastFailedOp){case FailedOp.Browse:fetchNodes(stateRef.current.currentParentId);break;case FailedOp.BrowseMore:loadMore();break;case FailedOp.Search:{let{searchQuery:query}=stateRef.current;query!==``&&performSearch(query);break}case FailedOp.SearchMore:searchLoadMore();break;default:break}},[fetchNodes,loadMore,performSearch,searchLoadMore]);return{state,isOpen,handleOpenChange,handleInputValueChange,actions:{drillDown,navigateBack,loadMore,searchLoadMore,setLevelFilter:useCallback(level=>{dispatch({type:PickerActionType.SetLevelFilter,level}),searchDebounceRef.current!==null&&(clearTimeout(searchDebounceRef.current),searchDebounceRef.current=null);let query=stateRef.current.searchInputValue;query&&performSearch(query,level)},[performSearch]),retry,setSearchScopeOverride}}}export{useTaxonomyPickerController};
@@ -1,10 +1 @@
1
- import { t as e } from "../../chunks/metadata-taxonomy-picker-shell.js";
2
- import { forwardRef as t } from "react";
3
- import { jsx as n } from "react/jsx-runtime";
4
- var r = /*#__PURE__*/ t(function(t, r) {
5
- return /* @__PURE__ */ n(e, {
6
- ...t,
7
- ref: r
8
- });
9
- });
10
- export { r as MetadataTaxonomyPicker, r as default };
1
+ import{t as MetadataTaxonomyPickerShell}from"../../chunks/metadata-taxonomy-picker-shell.js";import{forwardRef}from"react";import{jsx}from"react/jsx-runtime";var MetadataTaxonomyPicker=forwardRef(function(props,forwardedRef){return jsx(MetadataTaxonomyPickerShell,{...props,ref:forwardedRef})});export{MetadataTaxonomyPicker,MetadataTaxonomyPicker as default};
@@ -1,152 +1 @@
1
- import { transitionToLevel as e } from "./transitions.js";
2
- var t = /* @__PURE__ */ function(e) {
3
- return e.Browse = "browse", e.BrowseMore = "browse-more", e.Search = "search", e.SearchMore = "search-more", e;
4
- }({}), n = /* @__PURE__ */ function(e) {
5
- return e.FetchStart = "FETCH_START", e.FetchSuccess = "FETCH_SUCCESS", e.FetchError = "FETCH_ERROR", e.DrillDown = "DRILL_DOWN", e.NavigateBack = "NAVIGATE_BACK", e.NavigateBackRefetch = "NAVIGATE_BACK_REFETCH", e.Reset = "RESET", e.LoadMoreStart = "LOAD_MORE_START", e.LoadMoreSuccess = "LOAD_MORE_SUCCESS", e.LoadMoreError = "LOAD_MORE_ERROR", e.SearchInputChange = "SEARCH_INPUT_CHANGE", e.SearchFetchStart = "SEARCH_FETCH_START", e.SearchFetchSuccess = "SEARCH_FETCH_SUCCESS", e.SearchFetchError = "SEARCH_FETCH_ERROR", e.SearchClear = "SEARCH_CLEAR", e.SearchLoadMoreStart = "SEARCH_LOAD_MORE_START", e.SearchLoadMoreSuccess = "SEARCH_LOAD_MORE_SUCCESS", e.SearchLoadMoreError = "SEARCH_LOAD_MORE_ERROR", e.SetLevelFilter = "SET_LEVEL_FILTER", e;
6
- }({}), r = {
7
- levelStack: [],
8
- currentParentId: null,
9
- items: [],
10
- itemsNextMarker: void 0,
11
- isFetching: !1,
12
- isFetchingMore: !1,
13
- initialLoadError: null,
14
- loadMoreError: null,
15
- searchInputValue: "",
16
- searchQuery: "",
17
- searchResults: [],
18
- searchNextMarker: void 0,
19
- isFetchingSearch: !1,
20
- isFetchingSearchMore: !1,
21
- searchError: null,
22
- searchLoadMoreError: null,
23
- levelFilter: null,
24
- availableLevels: [],
25
- lastFailedOp: null
26
- };
27
- function i(t, n) {
28
- switch (n.type) {
29
- case "FETCH_START": return {
30
- ...t,
31
- isFetching: !0,
32
- initialLoadError: null,
33
- loadMoreError: null,
34
- lastFailedOp: null
35
- };
36
- case "FETCH_SUCCESS": return n.forParentId === t.currentParentId ? {
37
- ...t,
38
- isFetching: !1,
39
- items: n.entries,
40
- itemsNextMarker: n.nextMarker,
41
- initialLoadError: null
42
- } : t;
43
- case "FETCH_ERROR": return n.forParentId === t.currentParentId ? {
44
- ...t,
45
- isFetching: !1,
46
- initialLoadError: n.error,
47
- lastFailedOp: "browse"
48
- } : t;
49
- case "DRILL_DOWN": return e(t, n.targetParentId, n.levelStack);
50
- case "NAVIGATE_BACK": return {
51
- ...e(t, n.targetParentId, n.levelStack),
52
- items: n.cached.items,
53
- itemsNextMarker: n.cached.nextMarker,
54
- isFetching: !1
55
- };
56
- case "NAVIGATE_BACK_REFETCH": return e(t, n.targetParentId, n.levelStack);
57
- case "RESET": return r;
58
- case "LOAD_MORE_START": return {
59
- ...t,
60
- isFetchingMore: !0,
61
- loadMoreError: null,
62
- lastFailedOp: t.lastFailedOp === "browse-more" ? null : t.lastFailedOp
63
- };
64
- case "LOAD_MORE_SUCCESS": return {
65
- ...t,
66
- isFetchingMore: !1,
67
- items: [...t.items, ...n.entries],
68
- itemsNextMarker: n.nextMarker,
69
- loadMoreError: null,
70
- lastFailedOp: t.lastFailedOp === "browse-more" ? null : t.lastFailedOp
71
- };
72
- case "LOAD_MORE_ERROR": return {
73
- ...t,
74
- isFetchingMore: !1,
75
- loadMoreError: n.error,
76
- lastFailedOp: "browse-more"
77
- };
78
- case "SEARCH_LOAD_MORE_START": return {
79
- ...t,
80
- isFetchingSearchMore: !0,
81
- searchLoadMoreError: null,
82
- lastFailedOp: t.lastFailedOp === "search-more" ? null : t.lastFailedOp
83
- };
84
- case "SEARCH_LOAD_MORE_SUCCESS": return n.forQuery === t.searchQuery ? {
85
- ...t,
86
- isFetchingSearchMore: !1,
87
- searchResults: [...t.searchResults, ...n.entries],
88
- searchNextMarker: n.nextMarker,
89
- searchLoadMoreError: null,
90
- lastFailedOp: t.lastFailedOp === "search-more" ? null : t.lastFailedOp
91
- } : t;
92
- case "SEARCH_LOAD_MORE_ERROR": return n.forQuery === t.searchQuery ? {
93
- ...t,
94
- isFetchingSearchMore: !1,
95
- searchLoadMoreError: n.error,
96
- lastFailedOp: "search-more"
97
- } : t;
98
- case "SEARCH_INPUT_CHANGE": {
99
- let e = n.value !== "" && t.searchInputValue === "" && t.levelStack.length > 0 && n.availableLevels.length > 1 ? n.availableLevels[t.levelStack.length]?.level ?? t.levelStack.length + 1 : t.levelFilter;
100
- return {
101
- ...t,
102
- searchInputValue: n.value,
103
- levelFilter: n.value === "" ? null : e,
104
- availableLevels: [...n.availableLevels],
105
- isFetchingSearch: n.value !== "",
106
- isFetchingSearchMore: !1,
107
- searchLoadMoreError: null,
108
- lastFailedOp: t.lastFailedOp === "search-more" ? null : t.lastFailedOp
109
- };
110
- }
111
- case "SEARCH_FETCH_START": return {
112
- ...t,
113
- isFetchingSearch: !0,
114
- isFetchingSearchMore: !1,
115
- searchError: null,
116
- searchLoadMoreError: null,
117
- searchNextMarker: void 0,
118
- searchQuery: n.query,
119
- lastFailedOp: t.lastFailedOp === "search" || t.lastFailedOp === "search-more" ? null : t.lastFailedOp
120
- };
121
- case "SEARCH_FETCH_SUCCESS": return n.forQuery === t.searchQuery ? {
122
- ...t,
123
- isFetchingSearch: !1,
124
- searchResults: n.results,
125
- searchNextMarker: n.nextMarker
126
- } : t;
127
- case "SEARCH_FETCH_ERROR": return {
128
- ...t,
129
- isFetchingSearch: !1,
130
- searchError: n.error,
131
- lastFailedOp: "search"
132
- };
133
- case "SEARCH_CLEAR": return {
134
- ...t,
135
- searchInputValue: "",
136
- searchQuery: "",
137
- searchResults: [],
138
- searchNextMarker: void 0,
139
- isFetchingSearch: !1,
140
- isFetchingSearchMore: !1,
141
- searchError: null,
142
- searchLoadMoreError: null,
143
- lastFailedOp: t.lastFailedOp === "search" || t.lastFailedOp === "search-more" ? null : t.lastFailedOp
144
- };
145
- case "SET_LEVEL_FILTER": return {
146
- ...t,
147
- levelFilter: n.level
148
- };
149
- default: return t;
150
- }
151
- }
152
- export { t as FailedOp, n as PickerActionType, r as initialState, i as pickerReducer };
1
+ import{transitionToLevel}from"./transitions.js";var FailedOp=function(FailedOp){return FailedOp.Browse=`browse`,FailedOp.BrowseMore=`browse-more`,FailedOp.Search=`search`,FailedOp.SearchMore=`search-more`,FailedOp}({}),PickerActionType=function(PickerActionType){return PickerActionType.FetchStart=`FETCH_START`,PickerActionType.FetchSuccess=`FETCH_SUCCESS`,PickerActionType.FetchError=`FETCH_ERROR`,PickerActionType.DrillDown=`DRILL_DOWN`,PickerActionType.NavigateBack=`NAVIGATE_BACK`,PickerActionType.NavigateBackRefetch=`NAVIGATE_BACK_REFETCH`,PickerActionType.Reset=`RESET`,PickerActionType.LoadMoreStart=`LOAD_MORE_START`,PickerActionType.LoadMoreSuccess=`LOAD_MORE_SUCCESS`,PickerActionType.LoadMoreError=`LOAD_MORE_ERROR`,PickerActionType.SearchInputChange=`SEARCH_INPUT_CHANGE`,PickerActionType.SearchFetchStart=`SEARCH_FETCH_START`,PickerActionType.SearchFetchSuccess=`SEARCH_FETCH_SUCCESS`,PickerActionType.SearchFetchError=`SEARCH_FETCH_ERROR`,PickerActionType.SearchClear=`SEARCH_CLEAR`,PickerActionType.SearchLoadMoreStart=`SEARCH_LOAD_MORE_START`,PickerActionType.SearchLoadMoreSuccess=`SEARCH_LOAD_MORE_SUCCESS`,PickerActionType.SearchLoadMoreError=`SEARCH_LOAD_MORE_ERROR`,PickerActionType.SetLevelFilter=`SET_LEVEL_FILTER`,PickerActionType}({}),initialState={levelStack:[],currentParentId:null,items:[],itemsNextMarker:void 0,isFetching:!1,isFetchingMore:!1,initialLoadError:null,loadMoreError:null,searchInputValue:``,searchQuery:``,searchResults:[],searchNextMarker:void 0,isFetchingSearch:!1,isFetchingSearchMore:!1,searchError:null,searchLoadMoreError:null,levelFilter:null,availableLevels:[],lastFailedOp:null};function pickerReducer(state,action){switch(action.type){case`FETCH_START`:return{...state,isFetching:!0,initialLoadError:null,loadMoreError:null,lastFailedOp:null};case`FETCH_SUCCESS`:return action.forParentId===state.currentParentId?{...state,isFetching:!1,items:action.entries,itemsNextMarker:action.nextMarker,initialLoadError:null}:state;case`FETCH_ERROR`:return action.forParentId===state.currentParentId?{...state,isFetching:!1,initialLoadError:action.error,lastFailedOp:`browse`}:state;case`DRILL_DOWN`:return transitionToLevel(state,action.targetParentId,action.levelStack);case`NAVIGATE_BACK`:return{...transitionToLevel(state,action.targetParentId,action.levelStack),items:action.cached.items,itemsNextMarker:action.cached.nextMarker,isFetching:!1};case`NAVIGATE_BACK_REFETCH`:return transitionToLevel(state,action.targetParentId,action.levelStack);case`RESET`:return initialState;case`LOAD_MORE_START`:return{...state,isFetchingMore:!0,loadMoreError:null,lastFailedOp:state.lastFailedOp===`browse-more`?null:state.lastFailedOp};case`LOAD_MORE_SUCCESS`:return{...state,isFetchingMore:!1,items:[...state.items,...action.entries],itemsNextMarker:action.nextMarker,loadMoreError:null,lastFailedOp:state.lastFailedOp===`browse-more`?null:state.lastFailedOp};case`LOAD_MORE_ERROR`:return{...state,isFetchingMore:!1,loadMoreError:action.error,lastFailedOp:`browse-more`};case`SEARCH_LOAD_MORE_START`:return{...state,isFetchingSearchMore:!0,searchLoadMoreError:null,lastFailedOp:state.lastFailedOp===`search-more`?null:state.lastFailedOp};case`SEARCH_LOAD_MORE_SUCCESS`:return action.forQuery===state.searchQuery?{...state,isFetchingSearchMore:!1,searchResults:[...state.searchResults,...action.entries],searchNextMarker:action.nextMarker,searchLoadMoreError:null,lastFailedOp:state.lastFailedOp===`search-more`?null:state.lastFailedOp}:state;case`SEARCH_LOAD_MORE_ERROR`:return action.forQuery===state.searchQuery?{...state,isFetchingSearchMore:!1,searchLoadMoreError:action.error,lastFailedOp:`search-more`}:state;case`SEARCH_INPUT_CHANGE`:{let autoLevelFilter=action.value!==``&&state.searchInputValue===``&&state.levelStack.length>0&&action.availableLevels.length>1?action.availableLevels[state.levelStack.length]?.level??state.levelStack.length+1:state.levelFilter;return{...state,searchInputValue:action.value,levelFilter:action.value===``?null:autoLevelFilter,availableLevels:[...action.availableLevels],isFetchingSearch:action.value!==``,isFetchingSearchMore:!1,searchLoadMoreError:null,lastFailedOp:state.lastFailedOp===`search-more`?null:state.lastFailedOp}}case`SEARCH_FETCH_START`:return{...state,isFetchingSearch:!0,isFetchingSearchMore:!1,searchError:null,searchLoadMoreError:null,searchNextMarker:void 0,searchQuery:action.query,lastFailedOp:state.lastFailedOp===`search`||state.lastFailedOp===`search-more`?null:state.lastFailedOp};case`SEARCH_FETCH_SUCCESS`:return action.forQuery===state.searchQuery?{...state,isFetchingSearch:!1,searchResults:action.results,searchNextMarker:action.nextMarker}:state;case`SEARCH_FETCH_ERROR`:return{...state,isFetchingSearch:!1,searchError:action.error,lastFailedOp:`search`};case`SEARCH_CLEAR`:return{...state,searchInputValue:``,searchQuery:``,searchResults:[],searchNextMarker:void 0,isFetchingSearch:!1,isFetchingSearchMore:!1,searchError:null,searchLoadMoreError:null,lastFailedOp:state.lastFailedOp===`search`||state.lastFailedOp===`search-more`?null:state.lastFailedOp};case`SET_LEVEL_FILTER`:return{...state,levelFilter:action.level};default:return state}}export{FailedOp,PickerActionType,initialState,pickerReducer};
@@ -1,22 +1 @@
1
- var e = (e, t, n) => ({
2
- ...e,
3
- levelStack: n,
4
- currentParentId: t,
5
- items: [],
6
- itemsNextMarker: void 0,
7
- isFetching: !0,
8
- isFetchingMore: !1,
9
- initialLoadError: null,
10
- loadMoreError: null,
11
- searchInputValue: "",
12
- searchQuery: "",
13
- searchResults: [],
14
- searchNextMarker: void 0,
15
- isFetchingSearch: !1,
16
- isFetchingSearchMore: !1,
17
- searchError: null,
18
- searchLoadMoreError: null,
19
- levelFilter: null,
20
- lastFailedOp: null
21
- });
22
- export { e as transitionToLevel };
1
+ var transitionToLevel=(state,targetParentId,levelStack)=>({...state,levelStack,currentParentId:targetParentId,items:[],itemsNextMarker:void 0,isFetching:!0,isFetchingMore:!1,initialLoadError:null,loadMoreError:null,searchInputValue:``,searchQuery:``,searchResults:[],searchNextMarker:void 0,isFetchingSearch:!1,isFetchingSearchMore:!1,searchError:null,searchLoadMoreError:null,levelFilter:null,lastFailedOp:null});export{transitionToLevel};
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@box/metadata-taxonomy-picker",
3
- "version": "3.1.36",
3
+ "version": "3.1.37",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "peerDependencies": {
6
6
  "@ariakit/react": "^0.4.21",
7
- "@box/blueprint-web": "^16.13.0",
8
- "@box/blueprint-web-assets": "^5.5.9",
7
+ "@box/blueprint-web": "^16.13.1",
8
+ "@box/blueprint-web-assets": "^5.5.10",
9
9
  "@tanstack/react-virtual": "^3.10.8",
10
10
  "react": "^18.0.0",
11
11
  "react-dom": "^18.0.0",
@@ -13,10 +13,10 @@
13
13
  },
14
14
  "devDependencies": {
15
15
  "@ariakit/react": "^0.4.21",
16
- "@box/blueprint-web": "^16.13.0",
17
- "@box/blueprint-web-assets": "^5.5.9",
18
- "@box/eslint-plugin-blueprint": "2.1.10",
19
- "@box/storybook-utils": "1.1.33",
16
+ "@box/blueprint-web": "^16.13.1",
17
+ "@box/blueprint-web-assets": "^5.5.10",
18
+ "@box/eslint-plugin-blueprint": "2.1.11",
19
+ "@box/storybook-utils": "1.1.34",
20
20
  "@tanstack/react-virtual": "^3.10.8",
21
21
  "react-intl": "^6.4.2"
22
22
  },