@bigbinary/neeto-folders-frontend 2.0.49-beta1 → 2.0.49

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.
package/dist/cjs/utils.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('ramda');
4
4
  var internal = require('../internal-DAkDv0P1.js');
5
- var utils = require('../index-BuO0HoGs.js');
5
+ var utils = require('../index-DCIRHXw_.js');
6
6
  require('@bigbinary/neeto-atoms');
7
7
  require('react-router-dom');
8
8
  require('@babel/runtime/helpers/defineProperty');
@@ -12,7 +12,7 @@ var reactRouterDom = require('react-router-dom');
12
12
  var useFolderActions = require('../../useFolderActions-DImaQ3gr.js');
13
13
  var injectCss = require('../../inject-css-D3Ee0dJK.js');
14
14
  var constants = require('../constants.js');
15
- var utils = require('../../index-BuO0HoGs.js');
15
+ var utils = require('../../index-DCIRHXw_.js');
16
16
  var internal = require('../../internal-DAkDv0P1.js');
17
17
  var jsxRuntime = require('react/jsx-runtime');
18
18
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
@@ -24,8 +24,8 @@ var i18next = require('i18next');
24
24
  var yup = require('yup');
25
25
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
26
26
  var primitives = require('@bigbinary/neeto-atoms/primitives');
27
- var useHotkeys = require('@bigbinary/neeto-hotkeys');
28
27
  var neetoCist = require('@bigbinary/neeto-cist');
28
+ var useHotkeys = require('@bigbinary/neeto-hotkeys');
29
29
  var ramda = require('ramda');
30
30
  var classNames = require('classnames');
31
31
  var core = require('@dnd-kit/core');
@@ -217,6 +217,7 @@ var AddEditPane = function AddEditPane(_ref) {
217
217
  var response = error.response;
218
218
  if (response && response.data && response.data.errors) {
219
219
  setStatus(response.data.errors);
220
+ if (response.data.errors.base) neetoAtoms.Toastr.error(response.data.errors.base[0]);
220
221
  }
221
222
  };
222
223
  var onSubmitForm = /*#__PURE__*/function () {
@@ -320,6 +321,7 @@ var AddEditPane = function AddEditPane(_ref) {
320
321
  config: config,
321
322
  allowClear: true,
322
323
  showSearch: true,
324
+ excludedFolderId: isEditing ? item.id : null,
323
325
  initialValue: folderSid,
324
326
  label: t("createFolder.parentTitle"),
325
327
  name: "parentId"
@@ -411,7 +413,7 @@ var Node$1 = function Node(_ref, ref) {
411
413
  };
412
414
  var Node$2 = /*#__PURE__*/React.forwardRef(Node$1);
413
415
 
414
- var _excluded$5 = ["folder", "item", "depth", "maxDepth", "disabled", "config"];
416
+ var _excluded$5 = ["folder", "movedIds", "depth", "maxDepth", "disabled", "config"];
415
417
  function ownKeys$g(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
416
418
  function _objectSpread$g(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$g(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$g(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
417
419
  var toRadioValue = function toRadioValue(id) {
@@ -420,7 +422,8 @@ var toRadioValue = function toRadioValue(id) {
420
422
  var _SelectableNode = function SelectableNode(_ref) {
421
423
  var _folder$children$leng, _folder$children;
422
424
  var folder = _ref.folder,
423
- item = _ref.item,
425
+ _ref$movedIds = _ref.movedIds,
426
+ movedIds = _ref$movedIds === void 0 ? [] : _ref$movedIds,
424
427
  _ref$depth = _ref.depth,
425
428
  depth = _ref$depth === void 0 ? 0 : _ref$depth,
426
429
  maxDepth = _ref.maxDepth,
@@ -431,7 +434,11 @@ var _SelectableNode = function SelectableNode(_ref) {
431
434
  var onSelect = rest.onSelect;
432
435
  var _useTranslation = injectCss.useTranslation(config),
433
436
  t = _useTranslation.t;
434
- var isDisabled = disabled || (item === null || item === void 0 ? void 0 : item.id) === folder.id || depth >= maxDepth;
437
+ var isDepthExceeded = depth >= maxDepth;
438
+ var isDisabled = disabled || movedIds.includes(folder.id) || isDepthExceeded;
439
+ var disabledTitle = isDepthExceeded ? t("moveToFolder.depthExceeded", {
440
+ maxDepth: config.maxDepth
441
+ }) : t("moveToFolder.notAllowed");
435
442
  var itemLabel = config.labels[folder.itemCount > 1 ? "items" : "item"];
436
443
  var folderLabel = config.labels[((_folder$children$leng = (_folder$children = folder.children) === null || _folder$children === void 0 ? void 0 : _folder$children.length) !== null && _folder$children$leng !== void 0 ? _folder$children$leng : 0) > 1 ? "folders" : "folder"];
437
444
  var renderChildren = function renderChildren() {
@@ -439,8 +446,8 @@ var _SelectableNode = function SelectableNode(_ref) {
439
446
  return folder.children.map(function (child) {
440
447
  return /*#__PURE__*/React.createElement(_SelectableNode, _objectSpread$g(_objectSpread$g({}, _objectSpread$g(_objectSpread$g({}, rest), {}, {
441
448
  config: config,
442
- item: item,
443
- maxDepth: maxDepth
449
+ maxDepth: maxDepth,
450
+ movedIds: movedIds
444
451
  })), {}, {
445
452
  depth: depth + 1,
446
453
  disabled: isDisabled,
@@ -451,7 +458,7 @@ var _SelectableNode = function SelectableNode(_ref) {
451
458
  };
452
459
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
453
460
  "aria-disabled": isDisabled,
454
- title: isDisabled ? t("moveToFolder.notAllowed") : undefined,
461
+ title: isDisabled ? disabledTitle : undefined,
455
462
  className: classNames("flex flex-col w-full min-w-0", {
456
463
  "opacity-60": isDisabled
457
464
  }),
@@ -486,6 +493,7 @@ var PaneBody = function PaneBody(_ref) {
486
493
  var _ref$isRootEnabled = _ref.isRootEnabled,
487
494
  isRootEnabled = _ref$isRootEnabled === void 0 ? true : _ref$isRootEnabled,
488
495
  item = _ref.item,
496
+ items = _ref.items,
489
497
  config = _ref.config,
490
498
  submitButtonProps = _ref.submitButtonProps,
491
499
  cancelButtonProps = _ref.cancelButtonProps,
@@ -521,15 +529,28 @@ var PaneBody = function PaneBody(_ref) {
521
529
  var tree = React.useMemo(function () {
522
530
  return createTree(folders, isRootEnabled);
523
531
  }, [folders, isRootEnabled]);
532
+ var movedItems = items !== null && items !== void 0 ? items : item ? [item] : [];
533
+ var movedIds = ramda.pluck("id", movedItems);
524
534
  var maxDepth = Number.POSITIVE_INFINITY;
525
- if (item) {
526
- // If item is a folder, measure the current depth from current folder to longest leaf.
535
+ var nestingWarning = null;
536
+ if (neetoCist.isNotEmpty(movedItems)) {
537
+ // For moved folders, measure the depth from the tallest folder to its longest leaf.
527
538
  var foldersMap = utils.treeToMap(folders);
528
- var folder = foldersMap[item.id];
529
- if (folder) {
530
- var folderDepth = utils.measureDepth(folder) + 1; // +1 for own depth;
531
- maxDepth = config.maxDepth - folderDepth;
539
+ var movedFolders = movedIds.map(function (id) {
540
+ return foldersMap[id];
541
+ }).filter(Boolean);
542
+ if (neetoCist.isNotEmpty(movedFolders)) {
543
+ var subtreeHeight = Math.max.apply(Math, _toConsumableArray(movedFolders.map(utils.measureDepth)));
544
+ maxDepth = config.maxDepth - (subtreeHeight + 1); // +1 for own depth;
532
545
  if (isRootEnabled) maxDepth += 1; // +1 for root folder.
546
+
547
+ if (subtreeHeight > 0) {
548
+ nestingWarning = t("moveToFolder.nestingRestricted", {
549
+ count: movedFolders.length,
550
+ name: movedFolders[0].name,
551
+ maxDepth: config.maxDepth
552
+ });
553
+ }
533
554
  }
534
555
  }
535
556
  var onAddFolder = function onAddFolder() {
@@ -579,26 +600,29 @@ var PaneBody = function PaneBody(_ref) {
579
600
  variant: "outline",
580
601
  onClick: onAddFolder
581
602
  })]
582
- }), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Sheet.Body, {
603
+ }), /*#__PURE__*/jsxRuntime.jsxs(neetoAtoms.Sheet.Body, {
583
604
  className: "pb-6",
584
- children: /*#__PURE__*/jsxRuntime.jsx(primitives.RadioGroup, {
605
+ children: [nestingWarning && /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Callout, {
606
+ className: "mb-4",
607
+ variant: "warning",
608
+ children: nestingWarning
609
+ }), /*#__PURE__*/jsxRuntime.jsx(primitives.RadioGroup, {
585
610
  className: "contents",
586
611
  value: toRadioValue(selection),
587
612
  children: tree.map(function (folder) {
588
613
  return /*#__PURE__*/React.createElement(_SelectableNode, {
589
614
  config: config,
590
615
  folder: folder,
591
- item: item,
592
616
  maxDepth: maxDepth,
617
+ movedIds: movedIds,
593
618
  selection: selection,
594
- disabled: (item === null || item === void 0 ? void 0 : item.id) === folder.id || maxDepth <= 0,
595
619
  key: folder.id,
596
620
  onSelect: function onSelect(folder) {
597
621
  return setSelection(folder.id);
598
622
  }
599
623
  });
600
624
  })
601
- })
625
+ })]
602
626
  }), /*#__PURE__*/jsxRuntime.jsxs(neetoAtoms.Sheet.Footer, {
603
627
  className: "space-x-2",
604
628
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
@@ -675,7 +699,7 @@ var MoveFolderPane = function MoveFolderPane(_ref) {
675
699
  });
676
700
  };
677
701
 
678
- var _excluded$4 = ["folder", "depth", "config", "folderLabel", "itemLabel"];
702
+ var _excluded$4 = ["folder", "depth", "config", "folderLabel", "itemLabel", "isAncestorDragging"];
679
703
  function ownKeys$e(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
680
704
  function _objectSpread$e(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$e(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$e(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
681
705
  var _DraggableNode$1 = function DraggableNode(_ref) {
@@ -685,6 +709,8 @@ var _DraggableNode$1 = function DraggableNode(_ref) {
685
709
  config = _ref.config,
686
710
  folderLabel = _ref.folderLabel,
687
711
  itemLabel = _ref.itemLabel,
712
+ _ref$isAncestorDraggi = _ref.isAncestorDragging,
713
+ isAncestorDragging = _ref$isAncestorDraggi === void 0 ? false : _ref$isAncestorDraggi,
688
714
  rest = _objectWithoutProperties(_ref, _excluded$4);
689
715
  var _useDraggable = core.useDraggable({
690
716
  id: "draggable-item--".concat(folder.id),
@@ -695,15 +721,18 @@ var _DraggableNode$1 = function DraggableNode(_ref) {
695
721
  attributes = _useDraggable.attributes,
696
722
  listeners = _useDraggable.listeners,
697
723
  setDraggableRef = _useDraggable.setNodeRef;
724
+ var isInDraggedSubtree = isDragging || isAncestorDragging;
698
725
  var _useDroppable = core.useDroppable({
699
726
  id: "droppable-item--".concat(folder.id),
700
727
  data: folder,
701
- disabled: isDragging
728
+ disabled: isInDraggedSubtree
702
729
  }),
703
730
  isOver = _useDroppable.isOver,
704
731
  setDroppableRef = _useDroppable.setNodeRef;
732
+
733
+ // Children stay rendered while dragging so the list height, and its scroll, don't shift under the drag overlay.
705
734
  var renderChildren = function renderChildren() {
706
- if (neetoCist.isNotPresent(folder.children) || isDragging) return null;
735
+ if (neetoCist.isNotPresent(folder.children)) return null;
707
736
  return folder.children.map(function (child) {
708
737
  var _child$children$lengt, _child$children;
709
738
  return /*#__PURE__*/React.createElement(_DraggableNode$1, _objectSpread$e(_objectSpread$e({}, _objectSpread$e(_objectSpread$e({}, rest), {}, {
@@ -711,6 +740,7 @@ var _DraggableNode$1 = function DraggableNode(_ref) {
711
740
  })), {}, {
712
741
  depth: depth + 1,
713
742
  folder: child,
743
+ isAncestorDragging: isInDraggedSubtree,
714
744
  itemLabel: config.labels[(child === null || child === void 0 ? void 0 : child.itemCount) > 1 ? "items" : "item"],
715
745
  key: child.id,
716
746
  folderLabel: config.labels[((_child$children$lengt = child === null || child === void 0 || (_child$children = child.children) === null || _child$children === void 0 ? void 0 : _child$children.length) !== null && _child$children$lengt !== void 0 ? _child$children$lengt : 0) > 1 ? "folders" : "folder"]
@@ -721,7 +751,7 @@ var _DraggableNode$1 = function DraggableNode(_ref) {
721
751
  children: [/*#__PURE__*/jsxRuntime.jsx(Node$2, _objectSpread$e(_objectSpread$e(_objectSpread$e({}, rest), {}, {
722
752
  className: classNames({
723
753
  "rounded-lg hover:bg-muted w-full min-w-0 cursor-move transition-colors": true,
724
- "bg-muted opacity-50": isDragging,
754
+ "bg-muted opacity-50": isInDraggedSubtree,
725
755
  "border-primary border": isOver,
726
756
  "border border-transparent": !isOver
727
757
  })
@@ -792,10 +822,11 @@ var RearrangeFoldersPane = function RearrangeFoldersPane(_ref) {
792
822
  if (((_activeFolder$meta$pa = activeFolder.meta.parent) === null || _activeFolder$meta$pa === void 0 ? void 0 : _activeFolder$meta$pa.id) === overFolder.id) return;
793
823
 
794
824
  // Check moving to a folder with depth greater than the allowed limit.
795
- // maxDepth + 1 due to extra root node added for the tree
825
+ // The extra root node puts top-level folders at depth 1, so the deepest moved
826
+ // folder lands at level (target depth + subtree height + 1).
796
827
  var activeDepth = utils.measureDepth(activeFolder);
797
828
  var overDepth = overFolder.meta.depth;
798
- if (activeDepth + overDepth >= config.maxDepth + 1) {
829
+ if (activeDepth + overDepth >= config.maxDepth) {
799
830
  neetoAtoms.Toastr.error(t("moveToFolder.depthExceeded", {
800
831
  maxDepth: config.maxDepth
801
832
  }));
@@ -884,7 +915,9 @@ var RearrangeFoldersPane = function RearrangeFoldersPane(_ref) {
884
915
 
885
916
  var PlaceholderNode = function PlaceholderNode(_ref) {
886
917
  var folder = _ref.folder,
887
- dragState = _ref.dragState;
918
+ dragState = _ref.dragState,
919
+ _ref$disabled = _ref.disabled,
920
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled;
888
921
  var overItem = dragState.overItem;
889
922
  var id = React.useId();
890
923
  var isOver = id === (overItem === null || overItem === void 0 ? void 0 : overItem.id);
@@ -899,7 +932,8 @@ var PlaceholderNode = function PlaceholderNode(_ref) {
899
932
  data: {
900
933
  id: id,
901
934
  meta: meta
902
- }
935
+ },
936
+ disabled: disabled
903
937
  }),
904
938
  setDroppableRef = _useDroppable.setNodeRef;
905
939
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
@@ -918,7 +952,7 @@ var PlaceholderNode = function PlaceholderNode(_ref) {
918
952
  });
919
953
  };
920
954
 
921
- var _excluded$3 = ["folder", "config", "dragState", "folderLabel", "itemLabel"];
955
+ var _excluded$3 = ["folder", "config", "dragState", "folderLabel", "itemLabel", "isAncestorDragging"];
922
956
  function ownKeys$c(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
923
957
  function _objectSpread$c(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$c(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$c(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
924
958
  var _DraggableNode = function DraggableNode(_ref) {
@@ -928,6 +962,8 @@ var _DraggableNode = function DraggableNode(_ref) {
928
962
  dragState = _ref.dragState,
929
963
  folderLabel = _ref.folderLabel,
930
964
  itemLabel = _ref.itemLabel,
965
+ _ref$isAncestorDraggi = _ref.isAncestorDragging,
966
+ isAncestorDragging = _ref$isAncestorDraggi === void 0 ? false : _ref$isAncestorDraggi,
931
967
  rest = _objectWithoutProperties(_ref, _excluded$3);
932
968
  var overItem = dragState.overItem;
933
969
  var isOverItem = folder.id === (overItem === null || overItem === void 0 ? void 0 : overItem.id);
@@ -942,18 +978,21 @@ var _DraggableNode = function DraggableNode(_ref) {
942
978
  attributes = _useDraggable.attributes,
943
979
  listeners = _useDraggable.listeners,
944
980
  setDraggableRef = _useDraggable.setNodeRef;
981
+ var isInDraggedSubtree = isDragging || isAncestorDragging;
945
982
  var _useDroppable = core.useDroppable({
946
983
  id: "droppable-item--".concat(folder.id),
947
984
  data: folder,
948
- disabled: isRoot || isDragging
985
+ disabled: isRoot || isInDraggedSubtree
949
986
  }),
950
987
  setDroppableRef = _useDroppable.setNodeRef;
988
+
989
+ // Children stay rendered while dragging so the list height, and its scroll, don't shift under the drag overlay.
951
990
  var renderChildren = function renderChildren() {
952
- if (isDragging) return null;
953
991
  return /*#__PURE__*/jsxRuntime.jsxs(React.Fragment, {
954
992
  children: [/*#__PURE__*/jsxRuntime.jsx(PlaceholderNode, {
955
993
  dragState: dragState,
956
- folder: folder
994
+ folder: folder,
995
+ disabled: isInDraggedSubtree
957
996
  }), internal.isArray(folder.children) && folder.children.map(function (child) {
958
997
  var _child$children$lengt, _child$children;
959
998
  return /*#__PURE__*/React.createElement(_DraggableNode, _objectSpread$c(_objectSpread$c({}, _objectSpread$c(_objectSpread$c({}, rest), {}, {
@@ -962,6 +1001,7 @@ var _DraggableNode = function DraggableNode(_ref) {
962
1001
  })), {}, {
963
1002
  depth: child.meta.depth,
964
1003
  folder: child,
1004
+ isAncestorDragging: isInDraggedSubtree,
965
1005
  itemLabel: config.labels[(child === null || child === void 0 ? void 0 : child.itemCount) > 1 ? "items" : "item"],
966
1006
  key: child.id,
967
1007
  folderLabel: config.labels[((_child$children$lengt = child === null || child === void 0 || (_child$children = child.children) === null || _child$children === void 0 ? void 0 : _child$children.length) !== null && _child$children$lengt !== void 0 ? _child$children$lengt : 0) > 1 ? "folders" : "folder"]
@@ -980,7 +1020,7 @@ var _DraggableNode = function DraggableNode(_ref) {
980
1020
  })), {}, {
981
1021
  className: classNames({
982
1022
  "hover:bg-muted w-full cursor-move transition-colors": true,
983
- "bg-muted opacity-50": isDragging,
1023
+ "bg-muted opacity-50": isInDraggedSubtree,
984
1024
  "bg-accent": isOverParent,
985
1025
  "border-primary border-b-2": isOverItem
986
1026
  }),
@@ -1069,10 +1109,11 @@ var ReorderFoldersPane = function ReorderFoldersPane(_ref) {
1069
1109
  }
1070
1110
 
1071
1111
  // Check moving to a folder with depth greater than the allowed limit.
1072
- // maxDepth + 1 due to extra root node added for the tree
1112
+ // The extra root node puts top-level folders at depth 1, so the deepest moved
1113
+ // folder lands at level (target depth + subtree height + 1).
1073
1114
  var srcDepth = utils.measureDepth(activeFolder);
1074
1115
  var dstDepth = targetFolder.meta.depth;
1075
- if (srcDepth + dstDepth >= config.maxDepth + 1) {
1116
+ if (srcDepth + dstDepth >= config.maxDepth) {
1076
1117
  neetoAtoms.Toastr.error(t("moveToFolder.depthExceeded", {
1077
1118
  maxDepth: config.maxDepth
1078
1119
  }));
@@ -1806,19 +1847,21 @@ var FoldersTree = function FoldersTree(_ref) {
1806
1847
 
1807
1848
  function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1808
1849
  function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1850
+
1809
1851
  // neeto-atoms TreeSelect expects nested treeData ({ key, title, children }) and
1810
1852
  // has no `treeDataSimpleMode`, unlike neetoui's antd TreeSelect which consumed a
1811
1853
  // flat list keyed by pId. Build the nested shape directly from the folders tree,
1812
- // pruning folders at/below maxDepth (and their subtrees).
1854
+ // pruning folders at/below maxDepth and the excluded folder (and their subtrees).
1813
1855
  //
1814
1856
  // Depth is derived structurally from the recursion level (roots = 0), matching
1815
1857
  // treeToMap/walkTree — the raw `folders` from the API don't carry a computed
1816
1858
  // `meta.depth`; v1 only had it because it passed the treeToMap'd map.
1817
- var _createFolderOptions = function createFolderOptions(folders, config) {
1818
- var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
1819
- if (depth >= config.maxDepth) return [];
1820
- return (folders !== null && folders !== void 0 ? folders : []).map(function (folder) {
1821
- var children = _createFolderOptions(folder.children, config, depth + 1);
1859
+ var _createFolderOptions = function createFolderOptions(folders, maxDepth) {
1860
+ var excludedFolderId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
1861
+ var depth = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
1862
+ if (depth >= maxDepth) return [];
1863
+ return neetoCist.removeById(excludedFolderId, folders !== null && folders !== void 0 ? folders : []).map(function (folder) {
1864
+ var children = _createFolderOptions(folder.children, maxDepth, excludedFolderId, depth + 1);
1822
1865
  return _objectSpread$1({
1823
1866
  key: folder.id,
1824
1867
  title: folder.name
@@ -1828,7 +1871,7 @@ var _createFolderOptions = function createFolderOptions(folders, config) {
1828
1871
  });
1829
1872
  };
1830
1873
 
1831
- var _excluded = ["label", "name", "placeholder", "disabled", "required", "showSearch", "allowClear", "config", "initialValue"];
1874
+ var _excluded = ["label", "name", "placeholder", "disabled", "required", "showSearch", "allowClear", "config", "initialValue", "excludedFolderId"];
1832
1875
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1833
1876
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1834
1877
  var TreeSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
@@ -1847,6 +1890,8 @@ var TreeSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1847
1890
  allowClear = _ref$allowClear === void 0 ? false : _ref$allowClear,
1848
1891
  config = _ref.config,
1849
1892
  initialValue = _ref.initialValue,
1893
+ _ref$excludedFolderId = _ref.excludedFolderId,
1894
+ excludedFolderId = _ref$excludedFolderId === void 0 ? null : _ref$excludedFolderId,
1850
1895
  otherProps = _objectWithoutProperties(_ref, _excluded);
1851
1896
  var _useFetchFolders = useFolderActions.useFetchFolders(config),
1852
1897
  folders = _useFetchFolders.data;
@@ -1865,8 +1910,8 @@ var TreeSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1865
1910
  setFieldValue(name, parentId);
1866
1911
  }, [parentId, name]);
1867
1912
  var folderOptions = React.useMemo(function () {
1868
- return _createFolderOptions(folders !== null && folders !== void 0 ? folders : [], config);
1869
- }, [folders]);
1913
+ return _createFolderOptions(folders !== null && folders !== void 0 ? folders : [], config.maxDepth, excludedFolderId);
1914
+ }, [folders, config.maxDepth, excludedFolderId]);
1870
1915
  return /*#__PURE__*/jsxRuntime.jsx(formik.TreeSelect, _objectSpread({
1871
1916
  isClearable: allowClear,
1872
1917
  isDisabled: disabled,