@uipath/apollo-react 4.12.0 → 4.12.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.
@@ -167,7 +167,7 @@ const ListViewRow = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(({ in
167
167
  ]
168
168
  });
169
169
  });
170
- const ListViewInner = /*#__PURE__*/ (0, external_react_namespaceObject.forwardRef)(function({ items, activeIndex = -1, listRef, onItemClick, onItemHover, emptyStateMessage = 'No items found', emptyStateIcon = 'search-x', isLoading = false, enableSections = true }, ref) {
170
+ const ListViewInner = /*#__PURE__*/ (0, external_react_namespaceObject.forwardRef)(function({ items, activeIndex = -1, listRef, onItemClick, onItemHover, onScroll, emptyStateMessage = 'No items found', emptyStateIcon = 'search-x', isLoading = false, enableSections = true }, ref) {
171
171
  const { isDarkMode } = (0, CanvasThemeContext_cjs_namespaceObject.useCanvasTheme)();
172
172
  const renderedItems = (0, external_react_namespaceObject.useMemo)(()=>buildRenderedItems(items, enableSections), [
173
173
  items,
@@ -229,7 +229,8 @@ const ListViewInner = /*#__PURE__*/ (0, external_react_namespaceObject.forwardRe
229
229
  rowComponent: ListViewRow,
230
230
  rowCount: renderedItems.length,
231
231
  rowHeight: 40,
232
- overscanCount: 20
232
+ overscanCount: 20,
233
+ onScroll: onScroll
233
234
  });
234
235
  });
235
236
  const ListView_ListView = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(ListViewInner);
@@ -40,6 +40,7 @@ interface ListViewProps<T extends ListItem> {
40
40
  listRef?: React.RefObject<ListImperativeAPI | null>;
41
41
  onItemClick: (item: T, index: number) => void;
42
42
  onItemHover?: (item: T) => void;
43
+ onScroll?: React.UIEventHandler<HTMLDivElement>;
43
44
  emptyStateMessage?: string;
44
45
  emptyStateIcon?: string;
45
46
  isLoading?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Toolbox/ListView.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAqB,MAAM,cAAc,CAAC;AAKzE,MAAM,WAAW,YAAY;IAI3B,IAAI,CAAC,EAAE,MAAM,CAAC;IAId,GAAG,CAAC,EAAE,MAAM,CAAC;IAIb,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CACjC;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAG,GAAG,IAAI;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACnF,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,QAAQ,IACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC;AAE9B,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,QAAQ,EACnD,KAAK,EAAE,CAAC,EAAE,EACV,cAAc,EAAE,OAAO,GACtB,UAAU,CAAC,CAAC,CAAC,EAAE,CAqCjB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,QAAQ;IAClD,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;CACjC;AA8FD,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ;IAC3D,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;CAChC;AAED,UAAU,aAAa,CAAC,CAAC,SAAS,QAAQ;IACxC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACpD,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAiED,eAAO,MAAM,QAAQ,EAA0B,CAAC,CAAC,SAAS,QAAQ,EAChE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;CAAE,KAC7D,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Toolbox/ListView.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAqB,MAAM,cAAc,CAAC;AAKzE,MAAM,WAAW,YAAY;IAI3B,IAAI,CAAC,EAAE,MAAM,CAAC;IAId,GAAG,CAAC,EAAE,MAAM,CAAC;IAIb,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CACjC;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAG,GAAG,IAAI;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACnF,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,QAAQ,IACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC;AAE9B,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,QAAQ,EACnD,KAAK,EAAE,CAAC,EAAE,EACV,cAAc,EAAE,OAAO,GACtB,UAAU,CAAC,CAAC,CAAC,EAAE,CAqCjB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,QAAQ;IAClD,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;CACjC;AA8FD,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ;IAC3D,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;CAChC;AAED,UAAU,aAAa,CAAC,CAAC,SAAS,QAAQ;IACxC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACpD,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAChD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAmED,eAAO,MAAM,QAAQ,EAA0B,CAAC,CAAC,SAAS,QAAQ,EAChE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;CAAE,KAC7D,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC"}
@@ -138,7 +138,7 @@ const ListViewRow = /*#__PURE__*/ memo(({ index, style, ariaAttributes, rendered
138
138
  ]
139
139
  });
140
140
  });
141
- const ListViewInner = /*#__PURE__*/ forwardRef(function({ items, activeIndex = -1, listRef, onItemClick, onItemHover, emptyStateMessage = 'No items found', emptyStateIcon = 'search-x', isLoading = false, enableSections = true }, ref) {
141
+ const ListViewInner = /*#__PURE__*/ forwardRef(function({ items, activeIndex = -1, listRef, onItemClick, onItemHover, onScroll, emptyStateMessage = 'No items found', emptyStateIcon = 'search-x', isLoading = false, enableSections = true }, ref) {
142
142
  const { isDarkMode } = useCanvasTheme();
143
143
  const renderedItems = useMemo(()=>buildRenderedItems(items, enableSections), [
144
144
  items,
@@ -200,7 +200,8 @@ const ListViewInner = /*#__PURE__*/ forwardRef(function({ items, activeIndex = -
200
200
  rowComponent: ListViewRow,
201
201
  rowCount: renderedItems.length,
202
202
  rowHeight: 40,
203
- overscanCount: 20
203
+ overscanCount: 20,
204
+ onScroll: onScroll
204
205
  });
205
206
  });
206
207
  const ListView_ListView = /*#__PURE__*/ memo(ListViewInner);
@@ -100,6 +100,10 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
100
100
  const listViewRef = (0, external_react_namespaceObject.useRef)(null);
101
101
  const searchInputRef = (0, external_react_namespaceObject.useRef)(null);
102
102
  const clearButtonRef = (0, external_react_namespaceObject.useRef)(null);
103
+ const lastScrollTopRef = (0, external_react_namespaceObject.useRef)(0);
104
+ const handleListScroll = (0, external_react_namespaceObject.useCallback)((e)=>{
105
+ lastScrollTopRef.current = e.currentTarget.scrollTop;
106
+ }, []);
103
107
  const isSearching = (0, external_react_namespaceObject.useMemo)(()=>search.length > 0, [
104
108
  search
105
109
  ]);
@@ -185,31 +189,45 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
185
189
  setSearchLoading(false);
186
190
  setIsSearchingInitialItems(true);
187
191
  const restoredIndex = previousState?.data.activeIndex ?? SEARCH_BAR_INDEX;
188
- navigateToIndex(restoredIndex);
192
+ const restoredScrollTop = previousState?.data.scrollTop ?? 0;
193
+ setActiveIndex(restoredIndex);
194
+ searchInputRef.current?.focus();
195
+ requestAnimationFrame(()=>{
196
+ const element = listRef.current?.element;
197
+ if (element) element.scrollTop = restoredScrollTop;
198
+ lastScrollTopRef.current = restoredScrollTop;
199
+ });
189
200
  onBack?.();
190
201
  }, [
191
202
  navigationStack,
192
203
  onBack,
193
204
  startTransition,
194
- navigateToIndex
205
+ listRef
195
206
  ]);
196
207
  const handleItemSelect = (0, external_react_namespaceObject.useCallback)(async (item, index)=>{
197
208
  if (!item.children) return void onItemSelect(item);
198
209
  setChildrenLoading(true);
199
210
  const nestedItems = 'function' == typeof item.children ? await item.children(item.id, item.name) : item.children;
200
211
  const savedIndex = isSearching ? SEARCH_BAR_INDEX : index ?? activeIndex;
212
+ const savedScrollTop = isSearching ? 0 : lastScrollTopRef.current;
201
213
  navigationStack.push({
202
214
  title: currentParentItem?.name || title,
203
215
  data: {
204
216
  items,
205
217
  parentItem: currentParentItem,
206
- activeIndex: savedIndex
218
+ activeIndex: savedIndex,
219
+ scrollTop: savedScrollTop
207
220
  }
208
221
  });
209
222
  setItems(nestedItems);
210
223
  setCurrentParentItem(item);
211
224
  clearSearch();
212
225
  setActiveIndex(SEARCH_BAR_INDEX);
226
+ requestAnimationFrame(()=>{
227
+ const element = listRef.current?.element;
228
+ if (element) element.scrollTop = 0;
229
+ lastScrollTopRef.current = 0;
230
+ });
213
231
  startTransition('forward');
214
232
  setChildrenLoading(false);
215
233
  }, [
@@ -221,7 +239,8 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
221
239
  isSearching,
222
240
  clearSearch,
223
241
  startTransition,
224
- onItemSelect
242
+ onItemSelect,
243
+ listRef
225
244
  ]);
226
245
  (0, external_react_namespaceObject.useEffect)(()=>()=>{
227
246
  if (transitionTimeoutRef.current) clearTimeout(transitionTimeoutRef.current);
@@ -242,7 +261,8 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
242
261
  data: {
243
262
  items: newInitialItems,
244
263
  parentItem: null,
245
- activeIndex: stackItem.data.activeIndex
264
+ activeIndex: stackItem.data.activeIndex,
265
+ scrollTop: stackItem.data.scrollTop
246
266
  }
247
267
  };
248
268
  const updatedParentItem = findItemById(newInitialItems, stackItem.data.parentItem.id);
@@ -253,7 +273,8 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
253
273
  data: {
254
274
  items: updatedItems,
255
275
  parentItem: updatedParentItem,
256
- activeIndex: stackItem.data.activeIndex
276
+ activeIndex: stackItem.data.activeIndex,
277
+ scrollTop: stackItem.data.scrollTop
257
278
  }
258
279
  };
259
280
  });
@@ -360,6 +381,13 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
360
381
  handleItemSelect,
361
382
  handleBackTransition
362
383
  ]);
384
+ const handleClose = (0, external_react_namespaceObject.useCallback)(()=>{
385
+ navigationStack.clear();
386
+ onClose();
387
+ }, [
388
+ navigationStack,
389
+ onClose
390
+ ]);
363
391
  (0, external_react_namespaceObject.useEffect)(()=>{
364
392
  const handleKeyDown = (e)=>{
365
393
  if ('Escape' === e.key) if (isSearching) {
@@ -367,10 +395,10 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
367
395
  startTransition('back');
368
396
  clearSearch();
369
397
  } else if (navigationStack.canGoBack) handleBackTransition();
370
- else onClose();
398
+ else handleClose();
371
399
  };
372
400
  const handleClickOutside = (e)=>{
373
- if (containerRef.current && !containerRef.current.contains(e.target)) onClose();
401
+ if (containerRef.current && !containerRef.current.contains(e.target)) handleClose();
374
402
  };
375
403
  document.addEventListener('keydown', handleKeyDown);
376
404
  document.addEventListener('mousedown', handleClickOutside);
@@ -381,7 +409,7 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
381
409
  }, [
382
410
  isSearching,
383
411
  navigationStack.canGoBack,
384
- onClose,
412
+ handleClose,
385
413
  clearSearch,
386
414
  startTransition,
387
415
  handleBackTransition
@@ -425,6 +453,7 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
425
453
  emptyStateMessage: isSearching ? 'No matching nodes found' : 'No nodes found',
426
454
  onItemClick: handleItemSelect,
427
455
  onItemHover: onItemHover,
456
+ onScroll: handleListScroll,
428
457
  enableSections: !isSearching
429
458
  })
430
459
  })
@@ -1 +1 @@
1
- {"version":3,"file":"Toolbox.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Toolbox/Toolbox.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,QAAQ,EAAkD,MAAM,YAAY,CAAC;AAwC3F,MAAM,MAAM,oBAAoB,CAAC,CAAC,GAAG,GAAG,IAAI,CAC1C,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,OAAO,EACzB,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE;IAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KAC5E,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAE5B,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1D,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;CACpC;AAgDD,wBAAgB,OAAO,CAAC,CAAC,EAAE,EACzB,OAAO,EACP,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,KAAK,EACL,YAAY,EACZ,OAAO,EACP,SAAiB,EACjB,UAAkB,GACnB,EAAE,YAAY,CAAC,CAAC,CAAC,2CA0cjB"}
1
+ {"version":3,"file":"Toolbox.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Toolbox/Toolbox.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,QAAQ,EAAkD,MAAM,YAAY,CAAC;AAwC3F,MAAM,MAAM,oBAAoB,CAAC,CAAC,GAAG,GAAG,IAAI,CAC1C,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,OAAO,EACzB,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE;IAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KAC5E,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAE5B,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1D,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;CACpC;AAgDD,wBAAgB,OAAO,CAAC,CAAC,EAAE,EACzB,OAAO,EACP,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,KAAK,EACL,YAAY,EACZ,OAAO,EACP,SAAiB,EACjB,UAAkB,GACnB,EAAE,YAAY,CAAC,CAAC,CAAC,2CAwfjB"}
@@ -72,6 +72,10 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
72
72
  const listViewRef = useRef(null);
73
73
  const searchInputRef = useRef(null);
74
74
  const clearButtonRef = useRef(null);
75
+ const lastScrollTopRef = useRef(0);
76
+ const handleListScroll = useCallback((e)=>{
77
+ lastScrollTopRef.current = e.currentTarget.scrollTop;
78
+ }, []);
75
79
  const isSearching = useMemo(()=>search.length > 0, [
76
80
  search
77
81
  ]);
@@ -157,31 +161,45 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
157
161
  setSearchLoading(false);
158
162
  setIsSearchingInitialItems(true);
159
163
  const restoredIndex = previousState?.data.activeIndex ?? SEARCH_BAR_INDEX;
160
- navigateToIndex(restoredIndex);
164
+ const restoredScrollTop = previousState?.data.scrollTop ?? 0;
165
+ setActiveIndex(restoredIndex);
166
+ searchInputRef.current?.focus();
167
+ requestAnimationFrame(()=>{
168
+ const element = listRef.current?.element;
169
+ if (element) element.scrollTop = restoredScrollTop;
170
+ lastScrollTopRef.current = restoredScrollTop;
171
+ });
161
172
  onBack?.();
162
173
  }, [
163
174
  navigationStack,
164
175
  onBack,
165
176
  startTransition,
166
- navigateToIndex
177
+ listRef
167
178
  ]);
168
179
  const handleItemSelect = useCallback(async (item, index)=>{
169
180
  if (!item.children) return void onItemSelect(item);
170
181
  setChildrenLoading(true);
171
182
  const nestedItems = 'function' == typeof item.children ? await item.children(item.id, item.name) : item.children;
172
183
  const savedIndex = isSearching ? SEARCH_BAR_INDEX : index ?? activeIndex;
184
+ const savedScrollTop = isSearching ? 0 : lastScrollTopRef.current;
173
185
  navigationStack.push({
174
186
  title: currentParentItem?.name || title,
175
187
  data: {
176
188
  items,
177
189
  parentItem: currentParentItem,
178
- activeIndex: savedIndex
190
+ activeIndex: savedIndex,
191
+ scrollTop: savedScrollTop
179
192
  }
180
193
  });
181
194
  setItems(nestedItems);
182
195
  setCurrentParentItem(item);
183
196
  clearSearch();
184
197
  setActiveIndex(SEARCH_BAR_INDEX);
198
+ requestAnimationFrame(()=>{
199
+ const element = listRef.current?.element;
200
+ if (element) element.scrollTop = 0;
201
+ lastScrollTopRef.current = 0;
202
+ });
185
203
  startTransition('forward');
186
204
  setChildrenLoading(false);
187
205
  }, [
@@ -193,7 +211,8 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
193
211
  isSearching,
194
212
  clearSearch,
195
213
  startTransition,
196
- onItemSelect
214
+ onItemSelect,
215
+ listRef
197
216
  ]);
198
217
  useEffect(()=>()=>{
199
218
  if (transitionTimeoutRef.current) clearTimeout(transitionTimeoutRef.current);
@@ -214,7 +233,8 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
214
233
  data: {
215
234
  items: newInitialItems,
216
235
  parentItem: null,
217
- activeIndex: stackItem.data.activeIndex
236
+ activeIndex: stackItem.data.activeIndex,
237
+ scrollTop: stackItem.data.scrollTop
218
238
  }
219
239
  };
220
240
  const updatedParentItem = findItemById(newInitialItems, stackItem.data.parentItem.id);
@@ -225,7 +245,8 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
225
245
  data: {
226
246
  items: updatedItems,
227
247
  parentItem: updatedParentItem,
228
- activeIndex: stackItem.data.activeIndex
248
+ activeIndex: stackItem.data.activeIndex,
249
+ scrollTop: stackItem.data.scrollTop
229
250
  }
230
251
  };
231
252
  });
@@ -332,6 +353,13 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
332
353
  handleItemSelect,
333
354
  handleBackTransition
334
355
  ]);
356
+ const handleClose = useCallback(()=>{
357
+ navigationStack.clear();
358
+ onClose();
359
+ }, [
360
+ navigationStack,
361
+ onClose
362
+ ]);
335
363
  useEffect(()=>{
336
364
  const handleKeyDown = (e)=>{
337
365
  if ('Escape' === e.key) if (isSearching) {
@@ -339,10 +367,10 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
339
367
  startTransition('back');
340
368
  clearSearch();
341
369
  } else if (navigationStack.canGoBack) handleBackTransition();
342
- else onClose();
370
+ else handleClose();
343
371
  };
344
372
  const handleClickOutside = (e)=>{
345
- if (containerRef.current && !containerRef.current.contains(e.target)) onClose();
373
+ if (containerRef.current && !containerRef.current.contains(e.target)) handleClose();
346
374
  };
347
375
  document.addEventListener('keydown', handleKeyDown);
348
376
  document.addEventListener('mousedown', handleClickOutside);
@@ -353,7 +381,7 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
353
381
  }, [
354
382
  isSearching,
355
383
  navigationStack.canGoBack,
356
- onClose,
384
+ handleClose,
357
385
  clearSearch,
358
386
  startTransition,
359
387
  handleBackTransition
@@ -397,6 +425,7 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
397
425
  emptyStateMessage: isSearching ? 'No matching nodes found' : 'No nodes found',
398
426
  onItemClick: handleItemSelect,
399
427
  onItemHover: onItemHover,
428
+ onScroll: handleListScroll,
400
429
  enableSections: !isSearching
401
430
  })
402
431
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uipath/apollo-react",
3
- "version": "4.12.0",
3
+ "version": "4.12.1",
4
4
  "description": "Apollo Design System - React component library with Material UI theming",
5
5
  "repository": {
6
6
  "type": "git",