@bigbinary/neeto-folders-frontend 2.0.48 → 2.0.49-beta2

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.
@@ -94,5 +94,5 @@ var pathToFolder = function pathToFolder(folders, folderId) {
94
94
  return path;
95
95
  };
96
96
 
97
- export { mapToTree as a, mapToSortedTree as b, flattenTree as f, measureDepth as m, pathToFolder as p, treeToMap as t };
98
- //# sourceMappingURL=index-BfobK2xL.js.map
97
+ export { _walkTree as _, mapToTree as a, mapToSortedTree as b, flattenTree as f, measureDepth as m, pathToFolder as p, treeToMap as t };
98
+ //# sourceMappingURL=index-BXvkr7vp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-BfobK2xL.js","sources":["../app/javascript/src/utils/treeUtils.js","../app/javascript/src/utils/index.js"],"sourcesContent":["import { isNotPresent } from \"neetocist\";\nimport { isNil } from \"ramda\";\n\nimport { isArray } from \"./internal\";\n\nconst sortByIndex = (a, b) => {\n if (isNil(a.meta.__index) && isNil(b.meta.__index)) {\n return a.meta.index - b.meta.index;\n } else if (isNil(a.meta.__index)) {\n return a.meta.index < b.meta.__index ? -1 : 1;\n } else if (isNil(b.meta.__index)) {\n return a.meta.__index <= b.meta.index ? -1 : 1;\n }\n\n return a.meta.__index - b.meta.__index;\n};\n\nexport const foldersToTree = folders => {\n const map = {};\n let root;\n\n folders.forEach(item => {\n map[item.id] = { ...item, children: [] };\n // Destroy existing temporary meta attributes.\n delete map[item.id].meta.__index;\n });\n\n folders.forEach(item => {\n if (!item.meta.parent) root = map[item.id];\n else map[item.meta.parent.id].children.push(map[item.id]);\n });\n\n return root;\n};\n\nexport const walkTree = (\n tree,\n fn,\n meta = { index: 0, depth: 0, parent: null }\n) => {\n if (!tree) return;\n\n fn(tree, meta);\n if (isArray(tree.children)) {\n tree.children.forEach((folder, index) =>\n walkTree(folder, fn, { parent: tree, index, depth: meta.depth + 1 })\n );\n }\n};\n\n// Measures the maximum depth to bottom of the tree\nexport const measureDepth = tree => {\n let maxDepth = 0;\n\n walkTree(tree, (_, meta) => {\n if (meta.depth > maxDepth) maxDepth = meta.depth;\n });\n\n return maxDepth;\n};\n\n// Convert tree to lookup table\nexport const treeToMap = (tree, key = \"id\") => {\n if (isNotPresent(tree)) return {};\n\n const roots = isArray(tree) ? tree : [tree];\n const foldersMap = {};\n\n roots.forEach(root => {\n walkTree(root, (folder, meta) => {\n foldersMap[folder[key]] = { ...folder, meta };\n });\n });\n\n return foldersMap;\n};\n\n// Convert result of treeToMap back to tree\nexport const mapToTree = foldersMap => foldersToTree(Object.values(foldersMap));\nexport const mapToSortedTree = foldersMap =>\n foldersToTree(Object.values(foldersMap).sort(sortByIndex));\n","import { pipe, values } from \"ramda\";\n\nimport { toastApiError } from \"./internal\";\nimport { treeToMap } from \"./treeUtils\";\n\nconst flattenTree = pipe(treeToMap, values);\n\nconst pathToFolder = (folders, folderId) => {\n const path = [];\n const folderMap = treeToMap(folders);\n if (!folderMap[folderId]) return path;\n\n let current = folderMap[folderId];\n while (current) {\n path.unshift(current);\n current = folderMap[current.meta.parent?.id];\n }\n\n return path;\n};\n\nexport { pathToFolder, flattenTree, toastApiError };\n"],"names":["sortByIndex","a","b","isNil","meta","__index","index","foldersToTree","folders","map","root","forEach","item","id","_objectSpread","children","parent","push","walkTree","tree","fn","arguments","length","undefined","depth","isArray","folder","measureDepth","maxDepth","_","treeToMap","key","isNotPresent","roots","foldersMap","mapToTree","Object","values","mapToSortedTree","sort","flattenTree","pipe","pathToFolder","folderId","path","folderMap","current","_current$meta$parent","unshift"],"mappings":"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"}
1
+ {"version":3,"file":"index-BXvkr7vp.js","sources":["../app/javascript/src/utils/treeUtils.js","../app/javascript/src/utils/index.js"],"sourcesContent":["import { isNotPresent } from \"neetocist\";\nimport { isNil } from \"ramda\";\n\nimport { isArray } from \"./internal\";\n\nconst sortByIndex = (a, b) => {\n if (isNil(a.meta.__index) && isNil(b.meta.__index)) {\n return a.meta.index - b.meta.index;\n } else if (isNil(a.meta.__index)) {\n return a.meta.index < b.meta.__index ? -1 : 1;\n } else if (isNil(b.meta.__index)) {\n return a.meta.__index <= b.meta.index ? -1 : 1;\n }\n\n return a.meta.__index - b.meta.__index;\n};\n\nexport const foldersToTree = folders => {\n const map = {};\n let root;\n\n folders.forEach(item => {\n map[item.id] = { ...item, children: [] };\n // Destroy existing temporary meta attributes.\n delete map[item.id].meta.__index;\n });\n\n folders.forEach(item => {\n if (!item.meta.parent) root = map[item.id];\n else map[item.meta.parent.id].children.push(map[item.id]);\n });\n\n return root;\n};\n\nexport const walkTree = (\n tree,\n fn,\n meta = { index: 0, depth: 0, parent: null }\n) => {\n if (!tree) return;\n\n fn(tree, meta);\n if (isArray(tree.children)) {\n tree.children.forEach((folder, index) =>\n walkTree(folder, fn, { parent: tree, index, depth: meta.depth + 1 })\n );\n }\n};\n\n// Measures the maximum depth to bottom of the tree\nexport const measureDepth = tree => {\n let maxDepth = 0;\n\n walkTree(tree, (_, meta) => {\n if (meta.depth > maxDepth) maxDepth = meta.depth;\n });\n\n return maxDepth;\n};\n\n// Convert tree to lookup table\nexport const treeToMap = (tree, key = \"id\") => {\n if (isNotPresent(tree)) return {};\n\n const roots = isArray(tree) ? tree : [tree];\n const foldersMap = {};\n\n roots.forEach(root => {\n walkTree(root, (folder, meta) => {\n foldersMap[folder[key]] = { ...folder, meta };\n });\n });\n\n return foldersMap;\n};\n\n// Convert result of treeToMap back to tree\nexport const mapToTree = foldersMap => foldersToTree(Object.values(foldersMap));\nexport const mapToSortedTree = foldersMap =>\n foldersToTree(Object.values(foldersMap).sort(sortByIndex));\n","import { pipe, values } from \"ramda\";\n\nimport { toastApiError } from \"./internal\";\nimport { treeToMap } from \"./treeUtils\";\n\nconst flattenTree = pipe(treeToMap, values);\n\nconst pathToFolder = (folders, folderId) => {\n const path = [];\n const folderMap = treeToMap(folders);\n if (!folderMap[folderId]) return path;\n\n let current = folderMap[folderId];\n while (current) {\n path.unshift(current);\n current = folderMap[current.meta.parent?.id];\n }\n\n return path;\n};\n\nexport { pathToFolder, flattenTree, toastApiError };\n"],"names":["sortByIndex","a","b","isNil","meta","__index","index","foldersToTree","folders","map","root","forEach","item","id","_objectSpread","children","parent","push","walkTree","tree","fn","arguments","length","undefined","depth","isArray","folder","measureDepth","maxDepth","_","treeToMap","key","isNotPresent","roots","foldersMap","mapToTree","Object","values","mapToSortedTree","sort","flattenTree","pipe","pathToFolder","folderId","path","folderMap","current","_current$meta$parent","unshift"],"mappings":"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"}
@@ -96,10 +96,11 @@ var pathToFolder = function pathToFolder(folders, folderId) {
96
96
  return path;
97
97
  };
98
98
 
99
+ exports._walkTree = _walkTree;
99
100
  exports.flattenTree = flattenTree;
100
101
  exports.mapToSortedTree = mapToSortedTree;
101
102
  exports.mapToTree = mapToTree;
102
103
  exports.measureDepth = measureDepth;
103
104
  exports.pathToFolder = pathToFolder;
104
105
  exports.treeToMap = treeToMap;
105
- //# sourceMappingURL=index-BuO0HoGs.js.map
106
+ //# sourceMappingURL=index-DCIRHXw_.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-BuO0HoGs.js","sources":["../app/javascript/src/utils/treeUtils.js","../app/javascript/src/utils/index.js"],"sourcesContent":["import { isNotPresent } from \"neetocist\";\nimport { isNil } from \"ramda\";\n\nimport { isArray } from \"./internal\";\n\nconst sortByIndex = (a, b) => {\n if (isNil(a.meta.__index) && isNil(b.meta.__index)) {\n return a.meta.index - b.meta.index;\n } else if (isNil(a.meta.__index)) {\n return a.meta.index < b.meta.__index ? -1 : 1;\n } else if (isNil(b.meta.__index)) {\n return a.meta.__index <= b.meta.index ? -1 : 1;\n }\n\n return a.meta.__index - b.meta.__index;\n};\n\nexport const foldersToTree = folders => {\n const map = {};\n let root;\n\n folders.forEach(item => {\n map[item.id] = { ...item, children: [] };\n // Destroy existing temporary meta attributes.\n delete map[item.id].meta.__index;\n });\n\n folders.forEach(item => {\n if (!item.meta.parent) root = map[item.id];\n else map[item.meta.parent.id].children.push(map[item.id]);\n });\n\n return root;\n};\n\nexport const walkTree = (\n tree,\n fn,\n meta = { index: 0, depth: 0, parent: null }\n) => {\n if (!tree) return;\n\n fn(tree, meta);\n if (isArray(tree.children)) {\n tree.children.forEach((folder, index) =>\n walkTree(folder, fn, { parent: tree, index, depth: meta.depth + 1 })\n );\n }\n};\n\n// Measures the maximum depth to bottom of the tree\nexport const measureDepth = tree => {\n let maxDepth = 0;\n\n walkTree(tree, (_, meta) => {\n if (meta.depth > maxDepth) maxDepth = meta.depth;\n });\n\n return maxDepth;\n};\n\n// Convert tree to lookup table\nexport const treeToMap = (tree, key = \"id\") => {\n if (isNotPresent(tree)) return {};\n\n const roots = isArray(tree) ? tree : [tree];\n const foldersMap = {};\n\n roots.forEach(root => {\n walkTree(root, (folder, meta) => {\n foldersMap[folder[key]] = { ...folder, meta };\n });\n });\n\n return foldersMap;\n};\n\n// Convert result of treeToMap back to tree\nexport const mapToTree = foldersMap => foldersToTree(Object.values(foldersMap));\nexport const mapToSortedTree = foldersMap =>\n foldersToTree(Object.values(foldersMap).sort(sortByIndex));\n","import { pipe, values } from \"ramda\";\n\nimport { toastApiError } from \"./internal\";\nimport { treeToMap } from \"./treeUtils\";\n\nconst flattenTree = pipe(treeToMap, values);\n\nconst pathToFolder = (folders, folderId) => {\n const path = [];\n const folderMap = treeToMap(folders);\n if (!folderMap[folderId]) return path;\n\n let current = folderMap[folderId];\n while (current) {\n path.unshift(current);\n current = folderMap[current.meta.parent?.id];\n }\n\n return path;\n};\n\nexport { pathToFolder, flattenTree, toastApiError };\n"],"names":["sortByIndex","a","b","isNil","meta","__index","index","foldersToTree","folders","map","root","forEach","item","id","_objectSpread","children","parent","push","walkTree","tree","fn","arguments","length","undefined","depth","isArray","folder","measureDepth","maxDepth","_","treeToMap","key","isNotPresent","roots","foldersMap","mapToTree","Object","values","mapToSortedTree","sort","flattenTree","pipe","pathToFolder","folderId","path","folderMap","current","_current$meta$parent","unshift"],"mappings":"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"}
1
+ {"version":3,"file":"index-DCIRHXw_.js","sources":["../app/javascript/src/utils/treeUtils.js","../app/javascript/src/utils/index.js"],"sourcesContent":["import { isNotPresent } from \"neetocist\";\nimport { isNil } from \"ramda\";\n\nimport { isArray } from \"./internal\";\n\nconst sortByIndex = (a, b) => {\n if (isNil(a.meta.__index) && isNil(b.meta.__index)) {\n return a.meta.index - b.meta.index;\n } else if (isNil(a.meta.__index)) {\n return a.meta.index < b.meta.__index ? -1 : 1;\n } else if (isNil(b.meta.__index)) {\n return a.meta.__index <= b.meta.index ? -1 : 1;\n }\n\n return a.meta.__index - b.meta.__index;\n};\n\nexport const foldersToTree = folders => {\n const map = {};\n let root;\n\n folders.forEach(item => {\n map[item.id] = { ...item, children: [] };\n // Destroy existing temporary meta attributes.\n delete map[item.id].meta.__index;\n });\n\n folders.forEach(item => {\n if (!item.meta.parent) root = map[item.id];\n else map[item.meta.parent.id].children.push(map[item.id]);\n });\n\n return root;\n};\n\nexport const walkTree = (\n tree,\n fn,\n meta = { index: 0, depth: 0, parent: null }\n) => {\n if (!tree) return;\n\n fn(tree, meta);\n if (isArray(tree.children)) {\n tree.children.forEach((folder, index) =>\n walkTree(folder, fn, { parent: tree, index, depth: meta.depth + 1 })\n );\n }\n};\n\n// Measures the maximum depth to bottom of the tree\nexport const measureDepth = tree => {\n let maxDepth = 0;\n\n walkTree(tree, (_, meta) => {\n if (meta.depth > maxDepth) maxDepth = meta.depth;\n });\n\n return maxDepth;\n};\n\n// Convert tree to lookup table\nexport const treeToMap = (tree, key = \"id\") => {\n if (isNotPresent(tree)) return {};\n\n const roots = isArray(tree) ? tree : [tree];\n const foldersMap = {};\n\n roots.forEach(root => {\n walkTree(root, (folder, meta) => {\n foldersMap[folder[key]] = { ...folder, meta };\n });\n });\n\n return foldersMap;\n};\n\n// Convert result of treeToMap back to tree\nexport const mapToTree = foldersMap => foldersToTree(Object.values(foldersMap));\nexport const mapToSortedTree = foldersMap =>\n foldersToTree(Object.values(foldersMap).sort(sortByIndex));\n","import { pipe, values } from \"ramda\";\n\nimport { toastApiError } from \"./internal\";\nimport { treeToMap } from \"./treeUtils\";\n\nconst flattenTree = pipe(treeToMap, values);\n\nconst pathToFolder = (folders, folderId) => {\n const path = [];\n const folderMap = treeToMap(folders);\n if (!folderMap[folderId]) return path;\n\n let current = folderMap[folderId];\n while (current) {\n path.unshift(current);\n current = folderMap[current.meta.parent?.id];\n }\n\n return path;\n};\n\nexport { pathToFolder, flattenTree, toastApiError };\n"],"names":["sortByIndex","a","b","isNil","meta","__index","index","foldersToTree","folders","map","root","forEach","item","id","_objectSpread","children","parent","push","walkTree","tree","fn","arguments","length","undefined","depth","isArray","folder","measureDepth","maxDepth","_","treeToMap","key","isNotPresent","roots","foldersMap","mapToTree","Object","values","mapToSortedTree","sort","flattenTree","pipe","pathToFolder","folderId","path","folderMap","current","_current$meta$parent","unshift"],"mappings":"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"}
package/dist/utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import 'ramda';
2
2
  export { t as toastApiError } from './internal-UIifJzTd.js';
3
- export { f as flattenTree, p as pathToFolder } from './index-BfobK2xL.js';
3
+ export { f as flattenTree, p as pathToFolder } from './index-BXvkr7vp.js';
4
4
  import '@bigbinary/neeto-atoms';
5
5
  import 'react-router-dom';
6
6
  import '@babel/runtime/helpers/defineProperty';
@@ -1,7 +1,7 @@
1
1
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
2
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
3
3
  import { shallow } from 'zustand/shallow';
4
- import { Alert, Sheet, Spinner, Typography, Button, Toastr, Checkbox, Tree } from '@bigbinary/neeto-atoms';
4
+ import { Alert, Sheet, Spinner, Typography, Toastr, Button, Callout, Checkbox, Tree } from '@bigbinary/neeto-atoms';
5
5
  import { useQueryClient } from '@tanstack/react-query';
6
6
  import { useQueryParams, useStateWithDependency } from '@bigbinary/neeto-commons-frontend/v2/react-utils';
7
7
  import { buildUrl, showThumbsUpToastr } from '@bigbinary/neeto-commons-frontend/v2/utils';
@@ -10,7 +10,7 @@ import { useHistory, Link, NavLink } from 'react-router-dom';
10
10
  import { c as useFolderStore, d as useDestroyFolder, b as useFolders, e as useFetchFolders, f as useCreateFolder, g as useUpdateFolder, h as useReorderFolders, D as DEFAULT_CONFIG, u as useFolder, a as useFolderActions } from '../useFolderActions-DCKQrv0G.js';
11
11
  import { u as useTranslation, R as REORDER_TREE_INDENT_WIDTH, c as closestCenter, n } from '../inject-css-Bkrn7lFS.js';
12
12
  import { QUERY_KEYS } from '../constants.js';
13
- import { p as pathToFolder, t as treeToMap, m as measureDepth, a as mapToTree, b as mapToSortedTree } from '../index-BfobK2xL.js';
13
+ import { p as pathToFolder, t as treeToMap, m as measureDepth, a as mapToTree, b as mapToSortedTree } from '../index-BXvkr7vp.js';
14
14
  import { a as isActiveFolder, g as getActiveFolderId, t as toastApiError, i as isArray } from '../internal-UIifJzTd.js';
15
15
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
16
16
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
@@ -22,9 +22,9 @@ import { t } from 'i18next';
22
22
  import { object, string } from 'yup';
23
23
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
24
24
  import { RadioGroupItem, RadioGroup } from '@bigbinary/neeto-atoms/primitives';
25
+ import { hyphenate, isNotPresent, noop, isNotEmpty, removeById } from '@bigbinary/neeto-cist';
25
26
  import useHotkeys from '@bigbinary/neeto-hotkeys';
26
- import { hyphenate, isNotPresent, noop, isNotEmpty } from '@bigbinary/neeto-cist';
27
- import { isEmpty, assoc } from 'ramda';
27
+ import { pluck, isEmpty, assoc } from 'ramda';
28
28
  import classNames from 'classnames';
29
29
  import { useDraggable, useDroppable, DndContext, DragOverlay, useSensors, useSensor, PointerSensor } from '@dnd-kit/core';
30
30
  import { GripVertical, FolderOpen, Folder, Lock, Plus } from 'lucide-react';
@@ -215,6 +215,7 @@ var AddEditPane = function AddEditPane(_ref) {
215
215
  var response = error.response;
216
216
  if (response && response.data && response.data.errors) {
217
217
  setStatus(response.data.errors);
218
+ if (response.data.errors.base) Toastr.error(response.data.errors.base[0]);
218
219
  }
219
220
  };
220
221
  var onSubmitForm = /*#__PURE__*/function () {
@@ -318,6 +319,7 @@ var AddEditPane = function AddEditPane(_ref) {
318
319
  config: config,
319
320
  allowClear: true,
320
321
  showSearch: true,
322
+ excludedFolderId: isEditing ? item.id : null,
321
323
  initialValue: folderSid,
322
324
  label: t("createFolder.parentTitle"),
323
325
  name: "parentId"
@@ -409,7 +411,7 @@ var Node$2 = function Node(_ref, ref) {
409
411
  };
410
412
  var Node$1 = /*#__PURE__*/forwardRef(Node$2);
411
413
 
412
- var _excluded$5 = ["folder", "item", "depth", "maxDepth", "disabled", "config"];
414
+ var _excluded$5 = ["folder", "movedIds", "depth", "maxDepth", "disabled", "config"];
413
415
  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; }
414
416
  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; }
415
417
  var toRadioValue = function toRadioValue(id) {
@@ -418,7 +420,8 @@ var toRadioValue = function toRadioValue(id) {
418
420
  var _SelectableNode = function SelectableNode(_ref) {
419
421
  var _folder$children$leng, _folder$children;
420
422
  var folder = _ref.folder,
421
- item = _ref.item,
423
+ _ref$movedIds = _ref.movedIds,
424
+ movedIds = _ref$movedIds === void 0 ? [] : _ref$movedIds,
422
425
  _ref$depth = _ref.depth,
423
426
  depth = _ref$depth === void 0 ? 0 : _ref$depth,
424
427
  maxDepth = _ref.maxDepth,
@@ -429,7 +432,11 @@ var _SelectableNode = function SelectableNode(_ref) {
429
432
  var onSelect = rest.onSelect;
430
433
  var _useTranslation = useTranslation(config),
431
434
  t = _useTranslation.t;
432
- var isDisabled = disabled || (item === null || item === void 0 ? void 0 : item.id) === folder.id || depth >= maxDepth;
435
+ var isDepthExceeded = depth >= maxDepth;
436
+ var isDisabled = disabled || movedIds.includes(folder.id) || isDepthExceeded;
437
+ var disabledTitle = isDepthExceeded ? t("moveToFolder.depthExceeded", {
438
+ maxDepth: config.maxDepth
439
+ }) : t("moveToFolder.notAllowed");
433
440
  var itemLabel = config.labels[folder.itemCount > 1 ? "items" : "item"];
434
441
  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"];
435
442
  var renderChildren = function renderChildren() {
@@ -437,8 +444,8 @@ var _SelectableNode = function SelectableNode(_ref) {
437
444
  return folder.children.map(function (child) {
438
445
  return /*#__PURE__*/createElement(_SelectableNode, _objectSpread$g(_objectSpread$g({}, _objectSpread$g(_objectSpread$g({}, rest), {}, {
439
446
  config: config,
440
- item: item,
441
- maxDepth: maxDepth
447
+ maxDepth: maxDepth,
448
+ movedIds: movedIds
442
449
  })), {}, {
443
450
  depth: depth + 1,
444
451
  disabled: isDisabled,
@@ -449,7 +456,7 @@ var _SelectableNode = function SelectableNode(_ref) {
449
456
  };
450
457
  return /*#__PURE__*/jsxs("div", {
451
458
  "aria-disabled": isDisabled,
452
- title: isDisabled ? t("moveToFolder.notAllowed") : undefined,
459
+ title: isDisabled ? disabledTitle : undefined,
453
460
  className: classNames("flex flex-col w-full min-w-0", {
454
461
  "opacity-60": isDisabled
455
462
  }),
@@ -484,6 +491,7 @@ var PaneBody = function PaneBody(_ref) {
484
491
  var _ref$isRootEnabled = _ref.isRootEnabled,
485
492
  isRootEnabled = _ref$isRootEnabled === void 0 ? true : _ref$isRootEnabled,
486
493
  item = _ref.item,
494
+ items = _ref.items,
487
495
  config = _ref.config,
488
496
  submitButtonProps = _ref.submitButtonProps,
489
497
  cancelButtonProps = _ref.cancelButtonProps,
@@ -519,15 +527,28 @@ var PaneBody = function PaneBody(_ref) {
519
527
  var tree = useMemo(function () {
520
528
  return createTree(folders, isRootEnabled);
521
529
  }, [folders, isRootEnabled]);
530
+ var movedItems = items !== null && items !== void 0 ? items : item ? [item] : [];
531
+ var movedIds = pluck("id", movedItems);
522
532
  var maxDepth = Number.POSITIVE_INFINITY;
523
- if (item) {
524
- // If item is a folder, measure the current depth from current folder to longest leaf.
533
+ var nestingWarning = null;
534
+ if (isNotEmpty(movedItems)) {
535
+ // For moved folders, measure the depth from the tallest folder to its longest leaf.
525
536
  var foldersMap = treeToMap(folders);
526
- var folder = foldersMap[item.id];
527
- if (folder) {
528
- var folderDepth = measureDepth(folder) + 1; // +1 for own depth;
529
- maxDepth = config.maxDepth - folderDepth;
537
+ var movedFolders = movedIds.map(function (id) {
538
+ return foldersMap[id];
539
+ }).filter(Boolean);
540
+ if (isNotEmpty(movedFolders)) {
541
+ var subtreeHeight = Math.max.apply(Math, _toConsumableArray(movedFolders.map(measureDepth)));
542
+ maxDepth = config.maxDepth - (subtreeHeight + 1); // +1 for own depth;
530
543
  if (isRootEnabled) maxDepth += 1; // +1 for root folder.
544
+
545
+ if (subtreeHeight > 0) {
546
+ nestingWarning = t("moveToFolder.nestingRestricted", {
547
+ count: movedFolders.length,
548
+ name: movedFolders[0].name,
549
+ maxDepth: config.maxDepth
550
+ });
551
+ }
531
552
  }
532
553
  }
533
554
  var onAddFolder = function onAddFolder() {
@@ -577,26 +598,29 @@ var PaneBody = function PaneBody(_ref) {
577
598
  variant: "outline",
578
599
  onClick: onAddFolder
579
600
  })]
580
- }), /*#__PURE__*/jsx(Sheet.Body, {
601
+ }), /*#__PURE__*/jsxs(Sheet.Body, {
581
602
  className: "pb-6",
582
- children: /*#__PURE__*/jsx(RadioGroup, {
603
+ children: [nestingWarning && /*#__PURE__*/jsx(Callout, {
604
+ className: "mb-4",
605
+ variant: "warning",
606
+ children: nestingWarning
607
+ }), /*#__PURE__*/jsx(RadioGroup, {
583
608
  className: "contents",
584
609
  value: toRadioValue(selection),
585
610
  children: tree.map(function (folder) {
586
611
  return /*#__PURE__*/createElement(_SelectableNode, {
587
612
  config: config,
588
613
  folder: folder,
589
- item: item,
590
614
  maxDepth: maxDepth,
615
+ movedIds: movedIds,
591
616
  selection: selection,
592
- disabled: (item === null || item === void 0 ? void 0 : item.id) === folder.id || maxDepth <= 0,
593
617
  key: folder.id,
594
618
  onSelect: function onSelect(folder) {
595
619
  return setSelection(folder.id);
596
620
  }
597
621
  });
598
622
  })
599
- })
623
+ })]
600
624
  }), /*#__PURE__*/jsxs(Sheet.Footer, {
601
625
  className: "space-x-2",
602
626
  children: [/*#__PURE__*/jsxs("div", {
@@ -673,7 +697,7 @@ var MoveFolderPane = function MoveFolderPane(_ref) {
673
697
  });
674
698
  };
675
699
 
676
- var _excluded$4 = ["folder", "depth", "config", "folderLabel", "itemLabel"];
700
+ var _excluded$4 = ["folder", "depth", "config", "folderLabel", "itemLabel", "isAncestorDragging"];
677
701
  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; }
678
702
  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; }
679
703
  var _DraggableNode$1 = function DraggableNode(_ref) {
@@ -683,6 +707,8 @@ var _DraggableNode$1 = function DraggableNode(_ref) {
683
707
  config = _ref.config,
684
708
  folderLabel = _ref.folderLabel,
685
709
  itemLabel = _ref.itemLabel,
710
+ _ref$isAncestorDraggi = _ref.isAncestorDragging,
711
+ isAncestorDragging = _ref$isAncestorDraggi === void 0 ? false : _ref$isAncestorDraggi,
686
712
  rest = _objectWithoutProperties(_ref, _excluded$4);
687
713
  var _useDraggable = useDraggable({
688
714
  id: "draggable-item--".concat(folder.id),
@@ -693,15 +719,18 @@ var _DraggableNode$1 = function DraggableNode(_ref) {
693
719
  attributes = _useDraggable.attributes,
694
720
  listeners = _useDraggable.listeners,
695
721
  setDraggableRef = _useDraggable.setNodeRef;
722
+ var isInDraggedSubtree = isDragging || isAncestorDragging;
696
723
  var _useDroppable = useDroppable({
697
724
  id: "droppable-item--".concat(folder.id),
698
725
  data: folder,
699
- disabled: isDragging
726
+ disabled: isInDraggedSubtree
700
727
  }),
701
728
  isOver = _useDroppable.isOver,
702
729
  setDroppableRef = _useDroppable.setNodeRef;
730
+
731
+ // Children stay rendered while dragging so the list height, and its scroll, don't shift under the drag overlay.
703
732
  var renderChildren = function renderChildren() {
704
- if (isNotPresent(folder.children) || isDragging) return null;
733
+ if (isNotPresent(folder.children)) return null;
705
734
  return folder.children.map(function (child) {
706
735
  var _child$children$lengt, _child$children;
707
736
  return /*#__PURE__*/createElement(_DraggableNode$1, _objectSpread$e(_objectSpread$e({}, _objectSpread$e(_objectSpread$e({}, rest), {}, {
@@ -709,6 +738,7 @@ var _DraggableNode$1 = function DraggableNode(_ref) {
709
738
  })), {}, {
710
739
  depth: depth + 1,
711
740
  folder: child,
741
+ isAncestorDragging: isInDraggedSubtree,
712
742
  itemLabel: config.labels[(child === null || child === void 0 ? void 0 : child.itemCount) > 1 ? "items" : "item"],
713
743
  key: child.id,
714
744
  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"]
@@ -719,7 +749,7 @@ var _DraggableNode$1 = function DraggableNode(_ref) {
719
749
  children: [/*#__PURE__*/jsx(Node$1, _objectSpread$e(_objectSpread$e(_objectSpread$e({}, rest), {}, {
720
750
  className: classNames({
721
751
  "rounded-lg hover:bg-muted w-full min-w-0 cursor-move transition-colors": true,
722
- "bg-muted opacity-50": isDragging,
752
+ "bg-muted opacity-50": isInDraggedSubtree,
723
753
  "border-primary border": isOver,
724
754
  "border border-transparent": !isOver
725
755
  })
@@ -790,10 +820,11 @@ var RearrangeFoldersPane = function RearrangeFoldersPane(_ref) {
790
820
  if (((_activeFolder$meta$pa = activeFolder.meta.parent) === null || _activeFolder$meta$pa === void 0 ? void 0 : _activeFolder$meta$pa.id) === overFolder.id) return;
791
821
 
792
822
  // Check moving to a folder with depth greater than the allowed limit.
793
- // maxDepth + 1 due to extra root node added for the tree
823
+ // The extra root node puts top-level folders at depth 1, so the deepest moved
824
+ // folder lands at level (target depth + subtree height + 1).
794
825
  var activeDepth = measureDepth(activeFolder);
795
826
  var overDepth = overFolder.meta.depth;
796
- if (activeDepth + overDepth >= config.maxDepth + 1) {
827
+ if (activeDepth + overDepth >= config.maxDepth) {
797
828
  Toastr.error(t("moveToFolder.depthExceeded", {
798
829
  maxDepth: config.maxDepth
799
830
  }));
@@ -882,7 +913,9 @@ var RearrangeFoldersPane = function RearrangeFoldersPane(_ref) {
882
913
 
883
914
  var PlaceholderNode = function PlaceholderNode(_ref) {
884
915
  var folder = _ref.folder,
885
- dragState = _ref.dragState;
916
+ dragState = _ref.dragState,
917
+ _ref$disabled = _ref.disabled,
918
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled;
886
919
  var overItem = dragState.overItem;
887
920
  var id = useId();
888
921
  var isOver = id === (overItem === null || overItem === void 0 ? void 0 : overItem.id);
@@ -897,7 +930,8 @@ var PlaceholderNode = function PlaceholderNode(_ref) {
897
930
  data: {
898
931
  id: id,
899
932
  meta: meta
900
- }
933
+ },
934
+ disabled: disabled
901
935
  }),
902
936
  setDroppableRef = _useDroppable.setNodeRef;
903
937
  return /*#__PURE__*/jsxs("div", {
@@ -916,7 +950,7 @@ var PlaceholderNode = function PlaceholderNode(_ref) {
916
950
  });
917
951
  };
918
952
 
919
- var _excluded$3 = ["folder", "config", "dragState", "folderLabel", "itemLabel"];
953
+ var _excluded$3 = ["folder", "config", "dragState", "folderLabel", "itemLabel", "isAncestorDragging"];
920
954
  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; }
921
955
  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; }
922
956
  var _DraggableNode = function DraggableNode(_ref) {
@@ -926,6 +960,8 @@ var _DraggableNode = function DraggableNode(_ref) {
926
960
  dragState = _ref.dragState,
927
961
  folderLabel = _ref.folderLabel,
928
962
  itemLabel = _ref.itemLabel,
963
+ _ref$isAncestorDraggi = _ref.isAncestorDragging,
964
+ isAncestorDragging = _ref$isAncestorDraggi === void 0 ? false : _ref$isAncestorDraggi,
929
965
  rest = _objectWithoutProperties(_ref, _excluded$3);
930
966
  var overItem = dragState.overItem;
931
967
  var isOverItem = folder.id === (overItem === null || overItem === void 0 ? void 0 : overItem.id);
@@ -940,18 +976,21 @@ var _DraggableNode = function DraggableNode(_ref) {
940
976
  attributes = _useDraggable.attributes,
941
977
  listeners = _useDraggable.listeners,
942
978
  setDraggableRef = _useDraggable.setNodeRef;
979
+ var isInDraggedSubtree = isDragging || isAncestorDragging;
943
980
  var _useDroppable = useDroppable({
944
981
  id: "droppable-item--".concat(folder.id),
945
982
  data: folder,
946
- disabled: isRoot || isDragging
983
+ disabled: isRoot || isInDraggedSubtree
947
984
  }),
948
985
  setDroppableRef = _useDroppable.setNodeRef;
986
+
987
+ // Children stay rendered while dragging so the list height, and its scroll, don't shift under the drag overlay.
949
988
  var renderChildren = function renderChildren() {
950
- if (isDragging) return null;
951
989
  return /*#__PURE__*/jsxs(React.Fragment, {
952
990
  children: [/*#__PURE__*/jsx(PlaceholderNode, {
953
991
  dragState: dragState,
954
- folder: folder
992
+ folder: folder,
993
+ disabled: isInDraggedSubtree
955
994
  }), isArray(folder.children) && folder.children.map(function (child) {
956
995
  var _child$children$lengt, _child$children;
957
996
  return /*#__PURE__*/createElement(_DraggableNode, _objectSpread$c(_objectSpread$c({}, _objectSpread$c(_objectSpread$c({}, rest), {}, {
@@ -960,6 +999,7 @@ var _DraggableNode = function DraggableNode(_ref) {
960
999
  })), {}, {
961
1000
  depth: child.meta.depth,
962
1001
  folder: child,
1002
+ isAncestorDragging: isInDraggedSubtree,
963
1003
  itemLabel: config.labels[(child === null || child === void 0 ? void 0 : child.itemCount) > 1 ? "items" : "item"],
964
1004
  key: child.id,
965
1005
  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"]
@@ -978,7 +1018,7 @@ var _DraggableNode = function DraggableNode(_ref) {
978
1018
  })), {}, {
979
1019
  className: classNames({
980
1020
  "hover:bg-muted w-full cursor-move transition-colors": true,
981
- "bg-muted opacity-50": isDragging,
1021
+ "bg-muted opacity-50": isInDraggedSubtree,
982
1022
  "bg-accent": isOverParent,
983
1023
  "border-primary border-b-2": isOverItem
984
1024
  }),
@@ -1067,10 +1107,11 @@ var ReorderFoldersPane = function ReorderFoldersPane(_ref) {
1067
1107
  }
1068
1108
 
1069
1109
  // Check moving to a folder with depth greater than the allowed limit.
1070
- // maxDepth + 1 due to extra root node added for the tree
1110
+ // The extra root node puts top-level folders at depth 1, so the deepest moved
1111
+ // folder lands at level (target depth + subtree height + 1).
1071
1112
  var srcDepth = measureDepth(activeFolder);
1072
1113
  var dstDepth = targetFolder.meta.depth;
1073
- if (srcDepth + dstDepth >= config.maxDepth + 1) {
1114
+ if (srcDepth + dstDepth >= config.maxDepth) {
1074
1115
  Toastr.error(t("moveToFolder.depthExceeded", {
1075
1116
  maxDepth: config.maxDepth
1076
1117
  }));
@@ -1804,19 +1845,21 @@ var FoldersTree = function FoldersTree(_ref) {
1804
1845
 
1805
1846
  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; }
1806
1847
  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; }
1848
+
1807
1849
  // neeto-atoms TreeSelect expects nested treeData ({ key, title, children }) and
1808
1850
  // has no `treeDataSimpleMode`, unlike neetoui's antd TreeSelect which consumed a
1809
1851
  // flat list keyed by pId. Build the nested shape directly from the folders tree,
1810
- // pruning folders at/below maxDepth (and their subtrees).
1852
+ // pruning folders at/below maxDepth and the excluded folder (and their subtrees).
1811
1853
  //
1812
1854
  // Depth is derived structurally from the recursion level (roots = 0), matching
1813
1855
  // treeToMap/walkTree — the raw `folders` from the API don't carry a computed
1814
1856
  // `meta.depth`; v1 only had it because it passed the treeToMap'd map.
1815
- var _createFolderOptions = function createFolderOptions(folders, config) {
1816
- var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
1817
- if (depth >= config.maxDepth) return [];
1818
- return (folders !== null && folders !== void 0 ? folders : []).map(function (folder) {
1819
- var children = _createFolderOptions(folder.children, config, depth + 1);
1857
+ var _createFolderOptions = function createFolderOptions(folders, maxDepth) {
1858
+ var excludedFolderId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
1859
+ var depth = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
1860
+ if (depth >= maxDepth) return [];
1861
+ return removeById(excludedFolderId, folders !== null && folders !== void 0 ? folders : []).map(function (folder) {
1862
+ var children = _createFolderOptions(folder.children, maxDepth, excludedFolderId, depth + 1);
1820
1863
  return _objectSpread$1({
1821
1864
  key: folder.id,
1822
1865
  title: folder.name
@@ -1826,7 +1869,7 @@ var _createFolderOptions = function createFolderOptions(folders, config) {
1826
1869
  });
1827
1870
  };
1828
1871
 
1829
- var _excluded = ["label", "name", "placeholder", "disabled", "required", "showSearch", "allowClear", "config", "initialValue"];
1872
+ var _excluded = ["label", "name", "placeholder", "disabled", "required", "showSearch", "allowClear", "config", "initialValue", "excludedFolderId"];
1830
1873
  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; }
1831
1874
  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; }
1832
1875
  var TreeSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
@@ -1845,6 +1888,8 @@ var TreeSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
1845
1888
  allowClear = _ref$allowClear === void 0 ? false : _ref$allowClear,
1846
1889
  config = _ref.config,
1847
1890
  initialValue = _ref.initialValue,
1891
+ _ref$excludedFolderId = _ref.excludedFolderId,
1892
+ excludedFolderId = _ref$excludedFolderId === void 0 ? null : _ref$excludedFolderId,
1848
1893
  otherProps = _objectWithoutProperties(_ref, _excluded);
1849
1894
  var _useFetchFolders = useFetchFolders(config),
1850
1895
  folders = _useFetchFolders.data;
@@ -1863,8 +1908,8 @@ var TreeSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
1863
1908
  setFieldValue(name, parentId);
1864
1909
  }, [parentId, name]);
1865
1910
  var folderOptions = useMemo(function () {
1866
- return _createFolderOptions(folders !== null && folders !== void 0 ? folders : [], config);
1867
- }, [folders]);
1911
+ return _createFolderOptions(folders !== null && folders !== void 0 ? folders : [], config.maxDepth, excludedFolderId);
1912
+ }, [folders, config.maxDepth, excludedFolderId]);
1868
1913
  return /*#__PURE__*/jsx(TreeSelect$1, _objectSpread({
1869
1914
  isClearable: allowClear,
1870
1915
  isDisabled: disabled,