@bigbinary/neeto-folders-frontend 1.1.7 → 2.0.0

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.
@@ -1,25 +1,31 @@
1
1
  'use strict';
2
2
 
3
3
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
- var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
5
- var _regeneratorRuntime = require('@babel/runtime/regenerator');
4
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
6
5
  var shallow = require('zustand/shallow');
6
+ var reactQuery = require('@tanstack/react-query');
7
7
  var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
8
- var utils = require('@bigbinary/neeto-commons-frontend/utils');
8
+ var utils$1 = require('@bigbinary/neeto-commons-frontend/utils');
9
9
  var Alert = require('@bigbinary/neetoui/Alert');
10
10
  var reactI18next = require('react-i18next');
11
11
  var reactRouterDom = require('react-router-dom');
12
- var useFolderActions = require('../useFolderActions-BSW7tGU6.js');
13
- var pathUtils = require('../pathUtils-W8cEGsHR.js');
12
+ var useFolderActions = require('../useFolderActions-D8xGNhk0.js');
13
+ var constants = require('./constants.js');
14
+ var utils = require('../index-BFO1zYNo.js');
15
+ var internal = require('../internal-CS6_tPWL.js');
14
16
  var jsxRuntime = require('react/jsx-runtime');
15
17
  var Pane = require('@bigbinary/neetoui/Pane');
16
- var react = require('react');
18
+ var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
19
+ var _regeneratorRuntime = require('@babel/runtime/regenerator');
20
+ var React = require('react');
17
21
  var formik = require('formik');
18
22
  var Typography = require('@bigbinary/neetoui/Typography');
19
23
  var Input = require('@bigbinary/neetoui/formik/Input');
20
24
  var ActionBlock = require('@bigbinary/neetoui/formik/ActionBlock');
21
- var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
22
25
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
26
+ var Switch = require('@bigbinary/neetoui/formik/Switch');
27
+ var Textarea = require('@bigbinary/neetoui/formik/Textarea');
28
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
23
29
  var antd = require('antd');
24
30
  var classNames = require('classnames');
25
31
  var Down = require('@bigbinary/neeto-icons/Down');
@@ -36,12 +42,23 @@ var MoreDropdown = require('@bigbinary/neeto-molecules/MoreDropdown');
36
42
  var Checkbox = require('@bigbinary/neetoui/Checkbox');
37
43
  var Tree = require('@bigbinary/neetoui/Tree');
38
44
  require('i18next');
39
- require('@tanstack/react-query');
40
- require('./constants.js');
41
45
  require('zustand');
42
46
 
43
- function ownKeys$a(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; }
44
- function _objectSpread$a(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$a(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$a(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
47
+ 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; }
48
+ 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), !0).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; }
49
+ var useTranslation = function useTranslation(config) {
50
+ var _useDefaultTranslatio = reactI18next.useTranslation(),
51
+ t = _useDefaultTranslatio.t;
52
+ var modT = function modT(key, options) {
53
+ return config !== null && config !== void 0 && config.labels ? t(key, _objectSpread$e(_objectSpread$e({}, config.labels), options)) : t(key, options);
54
+ };
55
+ return {
56
+ t: modT
57
+ };
58
+ };
59
+
60
+ function ownKeys$d(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; }
61
+ function _objectSpread$d(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$d(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$d(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
45
62
  var FoldersAlerts = function FoldersAlerts(_ref) {
46
63
  var config = _ref.config;
47
64
  var _useFolderStore = useFolderActions.useFolderStore(function (store) {
@@ -53,8 +70,9 @@ var FoldersAlerts = function FoldersAlerts(_ref) {
53
70
  var queryParams = reactUtils.useQueryParams({
54
71
  toCamelCase: false
55
72
  });
73
+ var queryClient = reactQuery.useQueryClient();
56
74
  var history = reactRouterDom.useHistory();
57
- var _useTranslation = reactI18next.useTranslation(),
75
+ var _useTranslation = useTranslation(config),
58
76
  t = _useTranslation.t;
59
77
  var _useFolderStore2 = useFolderActions.useFolderStore(function (store) {
60
78
  var _store$alertState, _store$alertState2;
@@ -67,7 +85,7 @@ var FoldersAlerts = function FoldersAlerts(_ref) {
67
85
  item = _useFolderStore2.item;
68
86
  var _useDestroyFolder = useFolderActions.useDestroyFolder(config),
69
87
  destroyFolder = _useDestroyFolder.mutateAsync,
70
- isLoading = _useDestroyFolder.isLoading;
88
+ isPending = _useDestroyFolder.isPending;
71
89
  var _useFolders = useFolderActions.useFolders(config),
72
90
  folders = _useFolders.folders;
73
91
  var onClose = function onClose() {
@@ -77,46 +95,33 @@ var FoldersAlerts = function FoldersAlerts(_ref) {
77
95
  };
78
96
  var alertProps = {
79
97
  isOpen: !!type,
80
- isSubmitting: isLoading,
98
+ isSubmitting: isPending,
81
99
  onClose: onClose
82
100
  };
83
- var onConfirmDelete = /*#__PURE__*/function () {
84
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
85
- var path, parent;
86
- return _regeneratorRuntime.wrap(function _callee$(_context) {
87
- while (1) switch (_context.prev = _context.next) {
88
- case 0:
89
- _context.next = 2;
90
- return destroyFolder(item.id);
91
- case 2:
92
- onClose();
93
- if (!(!useFolderActions.isActiveFolder(item.sid) || !folders)) {
94
- _context.next = 5;
95
- break;
96
- }
97
- return _context.abrupt("return");
98
- case 5:
99
- path = pathUtils.pathToFolder(folders, item.id);
100
- parent = path[path.length - 2];
101
- if (parent) {
102
- _context.next = 9;
103
- break;
104
- }
105
- return _context.abrupt("return");
106
- case 9:
107
- history.replace(utils.buildUrl(config.folderPath, _objectSpread$a(_objectSpread$a({}, queryParams), {}, {
108
- folderId: parent.sid
109
- })));
110
- case 10:
111
- case "end":
112
- return _context.stop();
113
- }
114
- }, _callee);
115
- }));
116
- return function onConfirmDelete() {
117
- return _ref2.apply(this, arguments);
101
+ var onConfirmDelete = function onConfirmDelete() {
102
+ var onSuccess = function onSuccess() {
103
+ var isActive = internal.isActiveFolder(config, item.sid);
104
+ // Invalidates items and folder details. Refetch only if not active folder.
105
+ var invalidationKeys = [].concat(_toConsumableArray(config.invalidationKeys), [[constants.QUERY_KEYS.FOLDERS, config.type, constants.QUERY_KEYS.DETAILS]]);
106
+ invalidationKeys.forEach(function (queryKey) {
107
+ queryClient.invalidateQueries({
108
+ refetchType: isActive ? "none" : "active",
109
+ queryKey: queryKey
110
+ });
111
+ });
112
+ if (isActive && folders) {
113
+ var path = utils.pathToFolder(folders, item.id);
114
+ var parent = path[path.length - 2];
115
+ history.replace(utils$1.buildUrl(config.folderPath, _objectSpread$d(_objectSpread$d({}, queryParams), {}, {
116
+ folderId: parent ? parent.sid : ""
117
+ })));
118
+ }
118
119
  };
119
- }();
120
+ destroyFolder(item.id, {
121
+ onSuccess: onSuccess,
122
+ onSettled: onClose
123
+ });
124
+ };
120
125
  if (type === "delete") {
121
126
  alertProps.title = t("deleteFolder.title");
122
127
  alertProps.message = /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
@@ -126,13 +131,35 @@ var FoldersAlerts = function FoldersAlerts(_ref) {
126
131
  if (config.customizeAlerts) config.customizeAlerts(type, item, alertProps);
127
132
  alertProps.onSubmit = onConfirmDelete;
128
133
  }
129
- return /*#__PURE__*/jsxRuntime.jsx(Alert, _objectSpread$a({}, alertProps));
134
+ return /*#__PURE__*/jsxRuntime.jsx(Alert, _objectSpread$d({}, alertProps));
130
135
  };
131
136
 
132
- var _excluded$4 = ["className", "disabled", "fieldNames", "label", "loading", "name", "placeholder", "required", "showSearch", "size", "treeData"];
133
- function ownKeys$9(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; }
134
- function _objectSpread$9(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$9(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$9(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
135
- var TreeSelect = /*#__PURE__*/react.forwardRef(function (_ref, ref) {
137
+ var _excluded$6 = ["type"];
138
+ 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; }
139
+ 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), !0).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; }
140
+ var typeComponentMap = {
141
+ string: Input,
142
+ "boolean": Switch,
143
+ textarea: Textarea
144
+ };
145
+ var ExtraAttributes = function ExtraAttributes(_ref) {
146
+ var attributes = _ref.attributes;
147
+ if (!Array.isArray(attributes)) return null;
148
+ return attributes.map(function (_ref2) {
149
+ var type = _ref2.type,
150
+ rest = _objectWithoutProperties(_ref2, _excluded$6);
151
+ var Component = typeComponentMap[type];
152
+ if (!Component) return null;
153
+ return /*#__PURE__*/React.createElement(Component, _objectSpread$c(_objectSpread$c({}, rest), {}, {
154
+ key: rest.name
155
+ }));
156
+ });
157
+ };
158
+
159
+ var _excluded$5 = ["className", "disabled", "fieldNames", "label", "loading", "name", "placeholder", "required", "showSearch", "size", "treeData"];
160
+ function ownKeys$b(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; }
161
+ function _objectSpread$b(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$b(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$b(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
162
+ var TreeSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
136
163
  var _fieldNames$label;
137
164
  var className = _ref.className,
138
165
  _ref$disabled = _ref.disabled,
@@ -152,7 +179,7 @@ var TreeSelect = /*#__PURE__*/react.forwardRef(function (_ref, ref) {
152
179
  _ref$size = _ref.size,
153
180
  size = _ref$size === void 0 ? "middle" : _ref$size,
154
181
  treeData = _ref.treeData,
155
- otherProps = _objectWithoutProperties(_ref, _excluded$4);
182
+ otherProps = _objectWithoutProperties(_ref, _excluded$5);
156
183
  var _useField = formik.useField(name),
157
184
  _useField2 = _slicedToArray(_useField, 3),
158
185
  field = _useField2[0],
@@ -203,7 +230,7 @@ var TreeSelect = /*#__PURE__*/react.forwardRef(function (_ref, ref) {
203
230
  }
204
231
  }
205
232
  },
206
- children: /*#__PURE__*/jsxRuntime.jsx(antd.TreeSelect, _objectSpread$9(_objectSpread$9({
233
+ children: /*#__PURE__*/jsxRuntime.jsx(antd.TreeSelect, _objectSpread$b(_objectSpread$b({
207
234
  treeDataSimpleMode: true,
208
235
  "data-cy": "nui-select-container-wrapper",
209
236
  dropdownStyle: {
@@ -218,7 +245,7 @@ var TreeSelect = /*#__PURE__*/react.forwardRef(function (_ref, ref) {
218
245
  "neeto-ui-tree-select__error": meta.error
219
246
  }),
220
247
  switcherIcon: function switcherIcon(props) {
221
- return /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread$9(_objectSpread$9({}, props), {}, {
248
+ return /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread$b(_objectSpread$b({}, props), {}, {
222
249
  children: /*#__PURE__*/jsxRuntime.jsx(Down, {
223
250
  className: "relative"
224
251
  })
@@ -230,7 +257,7 @@ var TreeSelect = /*#__PURE__*/react.forwardRef(function (_ref, ref) {
230
257
  onChange: function onChange(value) {
231
258
  return setValue(value);
232
259
  }
233
- }, _objectSpread$9({
260
+ }, _objectSpread$b({
234
261
  disabled: disabled,
235
262
  fieldNames: fieldNames,
236
263
  loading: loading,
@@ -267,12 +294,35 @@ var createFolderOptions = function createFolderOptions(foldersMap, config) {
267
294
  };
268
295
  });
269
296
  };
297
+ var createInitialValues = function createInitialValues(defaults, extraAttrs) {
298
+ var values = {
299
+ name: "",
300
+ parentId: defaults.parentId || null
301
+ };
302
+ extraAttrs === null || extraAttrs === void 0 || extraAttrs.forEach(function (_ref) {
303
+ var name = _ref.name,
304
+ defaultValue = _ref.defaultValue;
305
+ values[name] = defaultValue;
306
+ });
307
+ return values;
308
+ };
309
+ var createPayload = function createPayload(values, extraAttrs) {
310
+ var payload = {
311
+ name: values.name,
312
+ parentId: values.parentId
313
+ };
314
+ extraAttrs === null || extraAttrs === void 0 || extraAttrs.forEach(function (_ref2) {
315
+ var name = _ref2.name;
316
+ payload[name] = values[name];
317
+ });
318
+ return payload;
319
+ };
270
320
 
271
321
  var AddEditPane = function AddEditPane(_ref) {
272
322
  var setFocusField = _ref.setFocusField,
273
323
  config = _ref.config,
274
324
  onClose = _ref.onClose;
275
- var _useTranslation = reactI18next.useTranslation(),
325
+ var _useTranslation = useTranslation(config),
276
326
  t = _useTranslation.t;
277
327
  var _useFolderStore = useFolderActions.useFolderStore(function (store) {
278
328
  var _store$paneState, _store$paneState2;
@@ -290,32 +340,29 @@ var AddEditPane = function AddEditPane(_ref) {
290
340
  var _useUpdateFolder = useFolderActions.useUpdateFolder(config),
291
341
  updateFolder = _useUpdateFolder.mutateAsync;
292
342
  var isEditing = type === "edit" && item;
293
- var foldersMap = react.useMemo(function () {
294
- return pathUtils.treeToMap(folders, "sid");
343
+ var foldersMap = React.useMemo(function () {
344
+ return utils.treeToMap(folders, "sid");
295
345
  }, [folders]);
296
- var folderOptions = react.useMemo(function () {
346
+ var folderOptions = React.useMemo(function () {
297
347
  return createFolderOptions(foldersMap, config);
298
348
  }, [foldersMap]);
299
- var activeFolderSid = useFolderActions.getActiveFolderId(config);
349
+ var activeFolderSid = internal.getActiveFolderId(config);
300
350
  var activeFolder = foldersMap[activeFolderSid];
301
351
  var isValidParent = (activeFolder === null || activeFolder === void 0 ? void 0 : activeFolder.meta.depth) < config.maxDepth;
302
352
  var parentId = isValidParent ? activeFolder.id : null;
303
- var initialValues = react.useMemo(function () {
304
- return isEditing ? item : {
305
- name: "",
353
+ var extraAttributes = config.extraAttributes;
354
+ var initialValues = React.useMemo(function () {
355
+ return isEditing ? item : createInitialValues({
306
356
  parentId: parentId
307
- };
308
- }, [isEditing, item, parentId]);
357
+ }, extraAttributes);
358
+ }, [isEditing, item, parentId, extraAttributes]);
309
359
  var onSubmitForm = /*#__PURE__*/function () {
310
360
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(values) {
311
361
  var payload;
312
362
  return _regeneratorRuntime.wrap(function _callee$(_context) {
313
363
  while (1) switch (_context.prev = _context.next) {
314
364
  case 0:
315
- payload = {
316
- name: values.name,
317
- parent_id: values.parentId
318
- };
365
+ payload = createPayload(values, extraAttributes);
319
366
  if (!isEditing) {
320
367
  _context.next = 6;
321
368
  break;
@@ -363,6 +410,8 @@ var AddEditPane = function AddEditPane(_ref) {
363
410
  label: t("folders.name"),
364
411
  name: "name",
365
412
  ref: setFocusField
413
+ }), /*#__PURE__*/jsxRuntime.jsx(ExtraAttributes, {
414
+ attributes: extraAttributes
366
415
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
367
416
  children: [/*#__PURE__*/jsxRuntime.jsx(TreeSelect, {
368
417
  allowClear: true,
@@ -390,10 +439,11 @@ var AddEditPane = function AddEditPane(_ref) {
390
439
  });
391
440
  };
392
441
 
393
- var _excluded$3 = ["icon", "itemLabel", "folder", "depth", "className", "onClick"];
394
- function ownKeys$8(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; }
395
- function _objectSpread$8(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$8(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$8(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
396
- var indentSize = 30;
442
+ var REORDER_TREE_INDENT_WIDTH = 30;
443
+
444
+ var _excluded$4 = ["icon", "itemLabel", "folder", "depth", "className", "onClick"];
445
+ function ownKeys$a(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; }
446
+ function _objectSpread$a(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$a(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$a(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
397
447
  var Node = function Node(_ref, ref) {
398
448
  var _folder$children$leng, _folder$children;
399
449
  var _ref$icon = _ref.icon,
@@ -403,7 +453,7 @@ var Node = function Node(_ref, ref) {
403
453
  depth = _ref.depth,
404
454
  className = _ref.className,
405
455
  onClick = _ref.onClick,
406
- rest = _objectWithoutProperties(_ref, _excluded$3);
456
+ rest = _objectWithoutProperties(_ref, _excluded$4);
407
457
  var _useTranslation = reactI18next.useTranslation(),
408
458
  t = _useTranslation.t;
409
459
  var metaInfo = [];
@@ -418,13 +468,13 @@ var Node = function Node(_ref, ref) {
418
468
  length: depth
419
469
  }).map(function (_, index) {
420
470
  return /*#__PURE__*/jsxRuntime.jsx("span", {
421
- className: "neeto-ui-border-gray-300 relative flex-shrink-0 border-l",
471
+ className: "neeto-ui-border-gray-300 relative h-full flex-shrink-0 border-l",
422
472
  style: {
423
- width: indentSize,
424
- left: Math.round(indentSize / 2)
473
+ width: REORDER_TREE_INDENT_WIDTH,
474
+ left: Math.round(REORDER_TREE_INDENT_WIDTH / 2)
425
475
  }
426
476
  }, index);
427
- }), /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread$8(_objectSpread$8({}, _objectSpread$8(_objectSpread$8({}, rest), {}, {
477
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread$a(_objectSpread$a({}, _objectSpread$a(_objectSpread$a({}, rest), {}, {
428
478
  onClick: onClick,
429
479
  ref: ref
430
480
  })), {}, {
@@ -447,11 +497,11 @@ var Node = function Node(_ref, ref) {
447
497
  }))]
448
498
  });
449
499
  };
450
- var Node$1 = /*#__PURE__*/react.forwardRef(Node);
500
+ var Node$1 = /*#__PURE__*/React.forwardRef(Node);
451
501
 
452
- var _excluded$2 = ["folder", "item", "depth", "maxDepth", "disabled"];
453
- function ownKeys$7(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; }
454
- function _objectSpread$7(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$7(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$7(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
502
+ var _excluded$3 = ["folder", "item", "depth", "maxDepth", "disabled", "config"];
503
+ function ownKeys$9(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; }
504
+ function _objectSpread$9(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$9(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$9(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
455
505
  var _SelectableNode = function SelectableNode(_ref) {
456
506
  var folder = _ref.folder,
457
507
  item = _ref.item,
@@ -459,16 +509,18 @@ var _SelectableNode = function SelectableNode(_ref) {
459
509
  depth = _ref$depth === void 0 ? 0 : _ref$depth,
460
510
  maxDepth = _ref.maxDepth,
461
511
  disabled = _ref.disabled,
462
- rest = _objectWithoutProperties(_ref, _excluded$2);
512
+ config = _ref.config,
513
+ rest = _objectWithoutProperties(_ref, _excluded$3);
463
514
  var selection = rest.selection,
464
515
  onSelect = rest.onSelect;
465
- var _useTranslation = reactI18next.useTranslation(),
516
+ var _useTranslation = useTranslation(config),
466
517
  t = _useTranslation.t;
467
518
  var isDisabled = disabled || (item === null || item === void 0 ? void 0 : item.id) === folder.id || depth > maxDepth;
468
519
  var renderChildren = function renderChildren() {
469
520
  if (neetoCist.isNotPresent(folder.children)) return null;
470
521
  return folder.children.map(function (child) {
471
- return /*#__PURE__*/react.createElement(_SelectableNode, _objectSpread$7(_objectSpread$7({}, _objectSpread$7(_objectSpread$7({}, rest), {}, {
522
+ return /*#__PURE__*/React.createElement(_SelectableNode, _objectSpread$9(_objectSpread$9({}, _objectSpread$9(_objectSpread$9({}, rest), {}, {
523
+ config: config,
472
524
  item: item,
473
525
  maxDepth: maxDepth
474
526
  })), {}, {
@@ -485,7 +537,7 @@ var _SelectableNode = function SelectableNode(_ref) {
485
537
  "opacity-60": isDisabled
486
538
  }),
487
539
  title: isDisabled ? t("moveToFolder.notAllowed") : undefined,
488
- children: [/*#__PURE__*/jsxRuntime.jsx(Node$1, _objectSpread$7(_objectSpread$7({}, _objectSpread$7(_objectSpread$7({}, rest), {}, {
540
+ children: [/*#__PURE__*/jsxRuntime.jsx(Node$1, _objectSpread$9(_objectSpread$9({}, _objectSpread$9(_objectSpread$9({}, rest), {}, {
489
541
  depth: depth,
490
542
  folder: folder
491
543
  })), {}, {
@@ -502,8 +554,8 @@ var _SelectableNode = function SelectableNode(_ref) {
502
554
  });
503
555
  };
504
556
 
505
- function ownKeys$6(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; }
506
- function _objectSpread$6(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$6(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$6(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
557
+ function ownKeys$8(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; }
558
+ function _objectSpread$8(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$8(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$8(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
507
559
  var PaneBody = function PaneBody(_ref) {
508
560
  var item = _ref.item,
509
561
  config = _ref.config,
@@ -513,7 +565,7 @@ var PaneBody = function PaneBody(_ref) {
513
565
  onSubmit = _ref.onSubmit,
514
566
  onClose = _ref.onClose,
515
567
  onRemove = _ref.onRemove;
516
- var _useState = react.useState(null),
568
+ var _useState = React.useState(null),
517
569
  _useState2 = _slicedToArray(_useState, 2),
518
570
  selection = _useState2[0],
519
571
  setSelection = _useState2[1];
@@ -526,14 +578,14 @@ var PaneBody = function PaneBody(_ref) {
526
578
  var _useFetchFolders = useFolderActions.useFetchFolders(config),
527
579
  _useFetchFolders$data = _useFetchFolders.data,
528
580
  folders = _useFetchFolders$data === void 0 ? [] : _useFetchFolders$data;
529
- var _useTranslation = reactI18next.useTranslation(),
581
+ var _useTranslation = useTranslation(config),
530
582
  t = _useTranslation.t;
531
583
  var folderDepth = 0;
532
584
  if (item) {
533
585
  // If item is a folder, measure the current depth from current folder to longest leaf.
534
- var foldersMap = pathUtils.treeToMap(folders);
586
+ var foldersMap = utils.treeToMap(folders);
535
587
  var folder = foldersMap[item.id];
536
- if (folder) folderDepth = pathUtils.measureDepth(folder);
588
+ if (folder) folderDepth = utils.measureDepth(folder);
537
589
  }
538
590
  var maxDepth = config.maxDepth - folderDepth;
539
591
  var onAddFolder = function onAddFolder() {
@@ -559,13 +611,14 @@ var PaneBody = function PaneBody(_ref) {
559
611
  }), /*#__PURE__*/jsxRuntime.jsx(Pane.Body, {
560
612
  className: "pb-6",
561
613
  children: folders.map(function (folder) {
562
- return /*#__PURE__*/react.createElement(_SelectableNode, {
614
+ return /*#__PURE__*/React.createElement(_SelectableNode, {
615
+ config: config,
563
616
  folder: folder,
564
617
  item: item,
565
618
  maxDepth: maxDepth,
566
619
  selection: selection,
567
620
  disabled: (item === null || item === void 0 ? void 0 : item.id) === folder.id || maxDepth <= 0,
568
- itemLabel: config.itemLabel,
621
+ itemLabel: config.labels.item,
569
622
  key: folder.id,
570
623
  onSelect: function onSelect(folder) {
571
624
  return setSelection(folder.id);
@@ -576,19 +629,19 @@ var PaneBody = function PaneBody(_ref) {
576
629
  className: "space-x-2",
577
630
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
578
631
  className: "flex flex-1 space-x-2",
579
- children: [/*#__PURE__*/jsxRuntime.jsx(Button, _objectSpread$6({
632
+ children: [/*#__PURE__*/jsxRuntime.jsx(Button, _objectSpread$8({
580
633
  disabled: !selection,
581
634
  label: t("common.save"),
582
635
  style: "primary",
583
636
  onClick: function onClick() {
584
637
  return onSubmit(selection);
585
638
  }
586
- }, submitButtonProps)), /*#__PURE__*/jsxRuntime.jsx(Button, _objectSpread$6({
639
+ }, submitButtonProps)), /*#__PURE__*/jsxRuntime.jsx(Button, _objectSpread$8({
587
640
  label: t("common.cancel"),
588
641
  style: "text",
589
642
  onClick: onClose
590
643
  }, cancelButtonProps))]
591
- }), onRemove && /*#__PURE__*/jsxRuntime.jsx(Button, _objectSpread$6({
644
+ }), onRemove && /*#__PURE__*/jsxRuntime.jsx(Button, _objectSpread$8({
592
645
  label: t("moveToFolder.remove"),
593
646
  style: "tertiary",
594
647
  onClick: onRemove
@@ -629,14 +682,14 @@ var MoveFolderPane = function MoveFolderPane(_ref) {
629
682
  });
630
683
  };
631
684
 
632
- var _excluded$1 = ["folder", "depth"];
633
- function ownKeys$5(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; }
634
- function _objectSpread$5(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$5(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$5(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
635
- var _DraggableNode = function DraggableNode(_ref) {
685
+ var _excluded$2 = ["folder", "depth"];
686
+ function ownKeys$7(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; }
687
+ function _objectSpread$7(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$7(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$7(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
688
+ var _DraggableNode$1 = function DraggableNode(_ref) {
636
689
  var folder = _ref.folder,
637
690
  _ref$depth = _ref.depth,
638
691
  depth = _ref$depth === void 0 ? 0 : _ref$depth,
639
- rest = _objectWithoutProperties(_ref, _excluded$1);
692
+ rest = _objectWithoutProperties(_ref, _excluded$2);
640
693
  var _useDraggable = core.useDraggable({
641
694
  id: "draggable-item--".concat(folder.id),
642
695
  data: folder,
@@ -656,7 +709,7 @@ var _DraggableNode = function DraggableNode(_ref) {
656
709
  var renderChildren = function renderChildren() {
657
710
  if (neetoCist.isNotPresent(folder.children) || isDragging) return null;
658
711
  return folder.children.map(function (child) {
659
- return /*#__PURE__*/react.createElement(_DraggableNode, _objectSpread$5(_objectSpread$5({}, rest), {}, {
712
+ return /*#__PURE__*/React.createElement(_DraggableNode$1, _objectSpread$7(_objectSpread$7({}, rest), {}, {
660
713
  depth: depth + 1,
661
714
  folder: child,
662
715
  key: child.id
@@ -664,14 +717,14 @@ var _DraggableNode = function DraggableNode(_ref) {
664
717
  });
665
718
  };
666
719
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
667
- children: [/*#__PURE__*/jsxRuntime.jsx(Node$1, _objectSpread$5(_objectSpread$5(_objectSpread$5({}, rest), {}, {
720
+ children: [/*#__PURE__*/jsxRuntime.jsx(Node$1, _objectSpread$7(_objectSpread$7(_objectSpread$7({}, rest), {}, {
668
721
  className: classNames({
669
722
  "neeto-ui-rounded-lg hover:neeto-ui-bg-gray-100 w-full min-w-0 cursor-move transition-colors": true,
670
723
  "neeto-ui-bg-gray-100 opacity-50": isDragging,
671
724
  "neeto-ui-border-primary-500 border": isOver,
672
725
  "border border-transparent": !isOver
673
726
  })
674
- }, _objectSpread$5(_objectSpread$5({
727
+ }, _objectSpread$7(_objectSpread$7({
675
728
  depth: depth,
676
729
  folder: folder
677
730
  }, attributes), listeners)), {}, {
@@ -683,20 +736,20 @@ var _DraggableNode = function DraggableNode(_ref) {
683
736
  });
684
737
  };
685
738
 
686
- function ownKeys$4(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; }
687
- function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
688
- var ReorderFoldersPane = function ReorderFoldersPane(_ref) {
739
+ function ownKeys$6(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; }
740
+ function _objectSpread$6(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$6(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$6(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
741
+ var RearrangeFoldersPane = function RearrangeFoldersPane(_ref) {
689
742
  var config = _ref.config,
690
743
  onClose = _ref.onClose;
691
- var _useState = react.useState(null),
744
+ var _useState = React.useState(null),
692
745
  _useState2 = _slicedToArray(_useState, 2),
693
746
  dragItem = _useState2[0],
694
747
  setDragItem = _useState2[1];
695
- var _useState3 = react.useState({}),
748
+ var _useState3 = React.useState({}),
696
749
  _useState4 = _slicedToArray(_useState3, 2),
697
750
  changes = _useState4[0],
698
751
  setChanges = _useState4[1];
699
- var _useTranslation = reactI18next.useTranslation(),
752
+ var _useTranslation = useTranslation(config),
700
753
  t = _useTranslation.t;
701
754
  var _useFetchFolders = useFolderActions.useFetchFolders(config),
702
755
  folders = _useFetchFolders.data;
@@ -718,7 +771,7 @@ var ReorderFoldersPane = function ReorderFoldersPane(_ref) {
718
771
  over = _ref2.over;
719
772
  setDragItem(null);
720
773
  if (!over) return;
721
- var foldersMap = pathUtils.treeToMap(tree);
774
+ var foldersMap = utils.treeToMap(tree);
722
775
  var activeFolder = foldersMap[active.data.current.id];
723
776
  var overFolder = foldersMap[over.data.current.id];
724
777
 
@@ -727,7 +780,7 @@ var ReorderFoldersPane = function ReorderFoldersPane(_ref) {
727
780
 
728
781
  // Check moving to a folder with depth greater than the allowed limit.
729
782
  // maxDepth + 1 due to extra root node added for the tree
730
- var activeDepth = pathUtils.measureDepth(activeFolder);
783
+ var activeDepth = utils.measureDepth(activeFolder);
731
784
  var overDepth = overFolder.meta.depth;
732
785
  if (activeDepth + overDepth >= config.maxDepth + 1) {
733
786
  Toastr.error(t("moveToFolder.depthExceeded", {
@@ -736,7 +789,7 @@ var ReorderFoldersPane = function ReorderFoldersPane(_ref) {
736
789
  return;
737
790
  }
738
791
  activeFolder.meta.parent = overFolder;
739
- var newTree = pathUtils.mapToTree(foldersMap);
792
+ var newTree = utils.mapToTree(foldersMap);
740
793
  setTree(newTree);
741
794
  setChanges(ramda.assoc(activeFolder.id, overFolder.id));
742
795
  };
@@ -752,7 +805,7 @@ var ReorderFoldersPane = function ReorderFoldersPane(_ref) {
752
805
  icon: /*#__PURE__*/jsxRuntime.jsx(Reorder, {
753
806
  className: "neeto-ui-text-gray-500 relative -left-[0.3125rem] flex-shrink-0"
754
807
  }),
755
- itemLabel: config.itemLabel
808
+ itemLabel: config.labels.item
756
809
  };
757
810
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
758
811
  children: [/*#__PURE__*/jsxRuntime.jsx(Pane.Header, {
@@ -768,7 +821,7 @@ var ReorderFoldersPane = function ReorderFoldersPane(_ref) {
768
821
  },
769
822
  children: [/*#__PURE__*/jsxRuntime.jsx(Pane.Body, {
770
823
  className: "pb-6",
771
- children: /*#__PURE__*/react.createElement(_DraggableNode, _objectSpread$4(_objectSpread$4({}, nodeProps), {}, {
824
+ children: /*#__PURE__*/React.createElement(_DraggableNode$1, _objectSpread$6(_objectSpread$6({}, nodeProps), {}, {
772
825
  folder: tree,
773
826
  key: tree.id
774
827
  }))
@@ -786,7 +839,7 @@ var ReorderFoldersPane = function ReorderFoldersPane(_ref) {
786
839
  })]
787
840
  }), /*#__PURE__*/reactDom.createPortal(/*#__PURE__*/jsxRuntime.jsx(core.DragOverlay, {
788
841
  zIndex: 99999,
789
- children: dragItem && /*#__PURE__*/jsxRuntime.jsx(Node$1, _objectSpread$4(_objectSpread$4({}, nodeProps), {}, {
842
+ children: dragItem && /*#__PURE__*/jsxRuntime.jsx(Node$1, _objectSpread$6(_objectSpread$6({}, nodeProps), {}, {
790
843
  className: "neeto-ui-bg-gray-200",
791
844
  depth: 0,
792
845
  folder: dragItem
@@ -796,6 +849,312 @@ var ReorderFoldersPane = function ReorderFoldersPane(_ref) {
796
849
  });
797
850
  };
798
851
 
852
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
853
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
854
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
855
+ var distanceBetween = function distanceBetween(p1, p2) {
856
+ return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));
857
+ };
858
+ var centerOfRectangle = function centerOfRectangle(rect) {
859
+ var left = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : rect.left;
860
+ var top = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : rect.top;
861
+ return {
862
+ x: left + rect.width * 0.5,
863
+ y: top + rect.height * 0.5
864
+ };
865
+ };
866
+ var closestCenter = function closestCenter(_ref) {
867
+ var activeItem = _ref.activeItem;
868
+ return function (_ref2) {
869
+ var collisionRect = _ref2.collisionRect,
870
+ droppableRects = _ref2.droppableRects,
871
+ droppableContainers = _ref2.droppableContainers;
872
+ var centerRect = centerOfRectangle(collisionRect, collisionRect.left - 30, collisionRect.top - 30);
873
+ var minDistance = Number.POSITIVE_INFINITY;
874
+ var collision = {
875
+ id: undefined
876
+ };
877
+
878
+ // eslint-disable-next-line @bigbinary/neeto/use-array-methods
879
+ var _iterator = _createForOfIteratorHelper(droppableContainers),
880
+ _step;
881
+ try {
882
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
883
+ var droppableContainer = _step.value;
884
+ var rect = droppableRects.get(droppableContainer.id);
885
+ if (!rect || droppableContainer.id === activeItem.id) continue;
886
+ var distance = distanceBetween(centerOfRectangle(rect), centerRect);
887
+ if (distance < minDistance) {
888
+ minDistance = distance;
889
+ collision = {
890
+ id: droppableContainer.id,
891
+ data: {
892
+ droppableContainer: droppableContainer,
893
+ value: distance
894
+ }
895
+ };
896
+ }
897
+ }
898
+ } catch (err) {
899
+ _iterator.e(err);
900
+ } finally {
901
+ _iterator.f();
902
+ }
903
+ return [collision];
904
+ };
905
+ };
906
+
907
+ var PlaceholderNode = function PlaceholderNode(_ref) {
908
+ var folder = _ref.folder,
909
+ dragState = _ref.dragState;
910
+ var overItem = dragState.overItem;
911
+ var id = React.useId();
912
+ var isOver = id === (overItem === null || overItem === void 0 ? void 0 : overItem.id);
913
+ var depth = folder.meta.depth + 1;
914
+ var meta = {
915
+ parent: folder,
916
+ index: -1,
917
+ depth: depth
918
+ };
919
+ var _useDroppable = core.useDroppable({
920
+ id: "droppable-placeholder--".concat(folder.name),
921
+ data: {
922
+ id: id,
923
+ meta: meta
924
+ }
925
+ }),
926
+ setDroppableRef = _useDroppable.setNodeRef;
927
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
928
+ className: "flex w-full",
929
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
930
+ style: {
931
+ width: REORDER_TREE_INDENT_WIDTH * depth
932
+ }
933
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
934
+ ref: setDroppableRef,
935
+ className: classNames({
936
+ "min-w-0 flex-1 transition-colors": true,
937
+ "neeto-ui-border-primary-500 border-b-2": isOver
938
+ })
939
+ })]
940
+ });
941
+ };
942
+
943
+ var _excluded$1 = ["folder", "dragState"];
944
+ function ownKeys$5(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; }
945
+ function _objectSpread$5(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$5(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$5(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
946
+ var _DraggableNode = function DraggableNode(_ref) {
947
+ var _overItem$meta$parent;
948
+ var folder = _ref.folder,
949
+ dragState = _ref.dragState,
950
+ rest = _objectWithoutProperties(_ref, _excluded$1);
951
+ var overItem = dragState.overItem;
952
+ var isOverItem = folder.id === (overItem === null || overItem === void 0 ? void 0 : overItem.id);
953
+ var isOverParent = folder.id === (overItem === null || overItem === void 0 || (_overItem$meta$parent = overItem.meta.parent) === null || _overItem$meta$parent === void 0 ? void 0 : _overItem$meta$parent.id);
954
+ var isRoot = folder.meta.depth <= 0;
955
+ var _useDraggable = core.useDraggable({
956
+ id: "draggable-item--".concat(folder.id),
957
+ data: folder,
958
+ disabled: isRoot
959
+ }),
960
+ isDragging = _useDraggable.isDragging,
961
+ attributes = _useDraggable.attributes,
962
+ listeners = _useDraggable.listeners,
963
+ setDraggableRef = _useDraggable.setNodeRef;
964
+ var _useDroppable = core.useDroppable({
965
+ id: "droppable-item--".concat(folder.id),
966
+ data: folder,
967
+ disabled: isRoot || isDragging
968
+ }),
969
+ setDroppableRef = _useDroppable.setNodeRef;
970
+ var renderChildren = function renderChildren() {
971
+ if (isDragging) return null;
972
+ return /*#__PURE__*/jsxRuntime.jsxs(React.Fragment, {
973
+ children: [/*#__PURE__*/jsxRuntime.jsx(PlaceholderNode, {
974
+ dragState: dragState,
975
+ folder: folder
976
+ }), internal.isArray(folder.children) && folder.children.map(function (child) {
977
+ return /*#__PURE__*/React.createElement(_DraggableNode, _objectSpread$5(_objectSpread$5({}, _objectSpread$5(_objectSpread$5({}, rest), {}, {
978
+ dragState: dragState
979
+ })), {}, {
980
+ depth: child.meta.depth,
981
+ folder: child,
982
+ key: child.id
983
+ }));
984
+ })]
985
+ }, "".concat(folder.id, "--container"));
986
+ };
987
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
988
+ children: [/*#__PURE__*/jsxRuntime.jsx(Node$1, _objectSpread$5(_objectSpread$5({
989
+ depth: folder.meta.depth
990
+ }, _objectSpread$5(_objectSpread$5(_objectSpread$5({}, rest), {}, {
991
+ folder: folder
992
+ }, attributes), listeners)), {}, {
993
+ className: classNames({
994
+ "hover:neeto-ui-bg-gray-100 w-full cursor-move transition-colors": true,
995
+ "neeto-ui-bg-gray-100 opacity-50": isDragging,
996
+ "neeto-ui-bg-primary-50": isOverParent,
997
+ "neeto-ui-border-primary-500 border-b-2": isOverItem
998
+ }),
999
+ ref: function ref(_ref2) {
1000
+ setDroppableRef(_ref2);
1001
+ setDraggableRef(_ref2);
1002
+ }
1003
+ })), renderChildren()]
1004
+ });
1005
+ };
1006
+
1007
+ function ownKeys$4(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; }
1008
+ function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1009
+ var initialDragState = {
1010
+ activeItem: null,
1011
+ overItem: null
1012
+ };
1013
+ var sensorConfig = {
1014
+ activationConstraint: {
1015
+ distance: 8
1016
+ }
1017
+ };
1018
+ var measuringConfig = {
1019
+ droppable: {
1020
+ frequency: 500
1021
+ }
1022
+ };
1023
+
1024
+ // Reorder with support for position adjustment
1025
+ var ReorderFoldersPane = function ReorderFoldersPane(_ref) {
1026
+ var config = _ref.config,
1027
+ onClose = _ref.onClose;
1028
+ var _useState = React.useState(initialDragState),
1029
+ _useState2 = _slicedToArray(_useState, 2),
1030
+ dragState = _useState2[0],
1031
+ setDragState = _useState2[1];
1032
+ var _useState3 = React.useState({}),
1033
+ _useState4 = _slicedToArray(_useState3, 2),
1034
+ changes = _useState4[0],
1035
+ setChanges = _useState4[1];
1036
+ var _useTranslation = useTranslation(config),
1037
+ t = _useTranslation.t;
1038
+ var _useFetchFolders = useFolderActions.useFetchFolders(config),
1039
+ folders = _useFetchFolders.data;
1040
+ var _useReorderFolders = useFolderActions.useReorderFolders(config),
1041
+ reorderFolders = _useReorderFolders.mutate;
1042
+ var sensors = core.useSensors(core.useSensor(core.PointerSensor, sensorConfig));
1043
+ var _useStateWithDependen = reactUtils.useStateWithDependency(function () {
1044
+ return {
1045
+ name: "/",
1046
+ id: null,
1047
+ children: folders
1048
+ };
1049
+ }, [folders]),
1050
+ _useStateWithDependen2 = _slicedToArray(_useStateWithDependen, 2),
1051
+ baseTree = _useStateWithDependen2[0],
1052
+ setBaseTree = _useStateWithDependen2[1];
1053
+
1054
+ // Decorates tree with meta info. Can be optimized when needed.
1055
+ var tree = React.useMemo(function () {
1056
+ return utils.mapToSortedTree(utils.treeToMap(baseTree));
1057
+ }, [baseTree]);
1058
+ var onDragEnd = function onDragEnd(_ref2) {
1059
+ var active = _ref2.active,
1060
+ over = _ref2.over;
1061
+ setDragState(initialDragState);
1062
+ if (!over) return;
1063
+ var foldersMap = utils.treeToMap(tree);
1064
+ var activeFolder = foldersMap[active.data.current.id];
1065
+ var targetFolder = foldersMap[over.data.current.meta.parent.id];
1066
+ var targetIndex = over.data.current.meta.index + 1; // `index` starts from -1 with placeholder
1067
+
1068
+ // Guards: Check moving inside invalid directories.
1069
+ if (!targetFolder || activeFolder.id === targetFolder.id) return;
1070
+ if (activeFolder.meta.parent.id === targetFolder.id && activeFolder.meta.index === targetIndex) {
1071
+ return;
1072
+ }
1073
+
1074
+ // Check moving to a folder with depth greater than the allowed limit.
1075
+ // maxDepth + 1 due to extra root node added for the tree
1076
+ var srcDepth = utils.measureDepth(activeFolder);
1077
+ var dstDepth = targetFolder.meta.depth;
1078
+ if (srcDepth + dstDepth >= config.maxDepth + 1) {
1079
+ Toastr.error(t("moveToFolder.depthExceeded", {
1080
+ maxDepth: config.maxDepth
1081
+ }));
1082
+ return;
1083
+ }
1084
+ activeFolder.meta.parent = targetFolder;
1085
+ activeFolder.meta.__index = targetIndex;
1086
+ var newTree = utils.mapToSortedTree(foldersMap);
1087
+ setBaseTree(newTree);
1088
+ setChanges(ramda.assoc(activeFolder.id, {
1089
+ parentId: targetFolder.id,
1090
+ index: targetIndex
1091
+ }));
1092
+ };
1093
+ var onSubmit = function onSubmit() {
1094
+ var payload = {
1095
+ changes: changes
1096
+ };
1097
+ reorderFolders(payload, {
1098
+ onSuccess: onClose
1099
+ });
1100
+ };
1101
+ var nodeProps = {
1102
+ icon: /*#__PURE__*/jsxRuntime.jsx(Reorder, {
1103
+ className: "neeto-ui-text-gray-500 relative -left-[0.3125rem] flex-shrink-0"
1104
+ }),
1105
+ itemLabel: config.labels.item
1106
+ };
1107
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
1108
+ children: [/*#__PURE__*/jsxRuntime.jsx(Pane.Header, {
1109
+ children: /*#__PURE__*/jsxRuntime.jsx(Typography, {
1110
+ style: "h2",
1111
+ children: t("reorderFolder.title")
1112
+ })
1113
+ }), /*#__PURE__*/jsxRuntime.jsxs(core.DndContext, {
1114
+ onDragEnd: onDragEnd,
1115
+ sensors: sensors,
1116
+ collisionDetection: closestCenter(dragState),
1117
+ measuring: measuringConfig,
1118
+ onDragOver: function onDragOver(_ref3) {
1119
+ var over = _ref3.over;
1120
+ setDragState(ramda.assoc("overItem", over === null || over === void 0 ? void 0 : over.data.current));
1121
+ },
1122
+ onDragStart: function onDragStart(_ref4) {
1123
+ var active = _ref4.active;
1124
+ setDragState(ramda.assoc("activeItem", active.data.current));
1125
+ },
1126
+ children: [/*#__PURE__*/jsxRuntime.jsx(Pane.Body, {
1127
+ className: "pb-6",
1128
+ children: /*#__PURE__*/React.createElement(_DraggableNode, _objectSpread$4(_objectSpread$4({}, _objectSpread$4(_objectSpread$4({}, nodeProps), {}, {
1129
+ dragState: dragState
1130
+ })), {}, {
1131
+ folder: tree,
1132
+ key: tree.id
1133
+ }))
1134
+ }), /*#__PURE__*/jsxRuntime.jsxs(Pane.Footer, {
1135
+ className: "gap-2",
1136
+ children: [/*#__PURE__*/jsxRuntime.jsx(Button, {
1137
+ disabled: ramda.isEmpty(changes),
1138
+ label: t("common.save"),
1139
+ style: "primary",
1140
+ onClick: onSubmit
1141
+ }), /*#__PURE__*/jsxRuntime.jsx(Button, {
1142
+ label: t("common.cancel"),
1143
+ style: "text",
1144
+ onClick: onClose
1145
+ })]
1146
+ }), /*#__PURE__*/reactDom.createPortal(/*#__PURE__*/jsxRuntime.jsx(core.DragOverlay, {
1147
+ zIndex: 99999,
1148
+ children: dragState && /*#__PURE__*/jsxRuntime.jsx(Node$1, _objectSpread$4(_objectSpread$4({}, nodeProps), {}, {
1149
+ className: "neeto-ui-bg-gray-200 pl-4 pr-12",
1150
+ depth: 0,
1151
+ folder: dragState.activeItem
1152
+ }))
1153
+ }), document.body)]
1154
+ })]
1155
+ });
1156
+ };
1157
+
799
1158
  function ownKeys$3(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; }
800
1159
  function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
801
1160
  var FoldersPane = function FoldersPane(_ref) {
@@ -823,6 +1182,7 @@ var FoldersPane = function FoldersPane(_ref) {
823
1182
  config: config,
824
1183
  onClose: onClose
825
1184
  };
1185
+ var ReorderPaneComponent = config.reorderMode === "reorder" ? ReorderFoldersPane : RearrangeFoldersPane;
826
1186
  return /*#__PURE__*/jsxRuntime.jsx(Pane, {
827
1187
  onClose: onClose,
828
1188
  isOpen: !!type,
@@ -831,7 +1191,7 @@ var FoldersPane = function FoldersPane(_ref) {
831
1191
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
832
1192
  children: [(type === "edit" || type === "add") && /*#__PURE__*/jsxRuntime.jsx(AddEditPane, _objectSpread$3({}, _objectSpread$3({
833
1193
  setFocusField: setFocusField
834
- }, commonProps))), type === "move" && /*#__PURE__*/jsxRuntime.jsx(MoveFolderPane, _objectSpread$3({}, commonProps)), type === "reorder" && /*#__PURE__*/jsxRuntime.jsx(ReorderFoldersPane, _objectSpread$3({}, commonProps))]
1194
+ }, commonProps))), type === "move" && /*#__PURE__*/jsxRuntime.jsx(MoveFolderPane, _objectSpread$3({}, commonProps)), type === "reorder" && /*#__PURE__*/jsxRuntime.jsx(ReorderPaneComponent, _objectSpread$3({}, commonProps))]
835
1195
  });
836
1196
  }
837
1197
  });
@@ -856,8 +1216,9 @@ var FolderTile = function FolderTile(_ref) {
856
1216
  itemLabel = _ref.itemLabel,
857
1217
  folder = _ref.folder,
858
1218
  actions = _ref.actions,
1219
+ config = _ref.config,
859
1220
  onSelect = _ref.onSelect;
860
- var _useTranslation = reactI18next.useTranslation(),
1221
+ var _useTranslation = useTranslation(config),
861
1222
  t = _useTranslation.t;
862
1223
  var actionCallback = function actionCallback(callback) {
863
1224
  return function (event) {
@@ -934,7 +1295,7 @@ var FoldersList = function FoldersList(_ref) {
934
1295
  onSelect = _ref.onSelect;
935
1296
  var config = _objectSpread$2(_objectSpread$2({}, useFolderActions.DEFAULT_CONFIG), configProps);
936
1297
  var params = reactUtils.useQueryParams();
937
- var _useTranslation = reactI18next.useTranslation(),
1298
+ var _useTranslation = useTranslation(config),
938
1299
  t = _useTranslation.t;
939
1300
  var fetchParams = ramda.pick(["sortBy", "orderBy"], params);
940
1301
  var _useFolders = useFolderActions.useFolders(_objectSpread$2(_objectSpread$2({}, config), {}, {
@@ -956,14 +1317,15 @@ var FoldersList = function FoldersList(_ref) {
956
1317
  }), /*#__PURE__*/jsxRuntime.jsx("div", {
957
1318
  className: "neeto-folders-grid-view-wrapper mb-10 grid w-full gap-4",
958
1319
  children: subFolders.map(function (folder) {
959
- return /*#__PURE__*/react.createElement(FolderTile, {
1320
+ return /*#__PURE__*/React.createElement(FolderTile, {
960
1321
  actions: actions,
1322
+ config: config,
961
1323
  folder: folder,
962
1324
  onSelect: onSelect,
963
1325
  isSelected: selection.includes(folder.id),
964
- itemLabel: config.itemLabel,
1326
+ itemLabel: config.labels.item,
965
1327
  key: folder.id,
966
- link: utils.buildUrl(config.folderPath, _objectSpread$2(_objectSpread$2({}, params), {}, {
1328
+ link: utils$1.buildUrl(config.folderPath, _objectSpread$2(_objectSpread$2({}, params), {}, {
967
1329
  folderId: folder.sid
968
1330
  }))
969
1331
  });
@@ -1014,16 +1376,16 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
1014
1376
  var FoldersTree = function FoldersTree(_ref) {
1015
1377
  var configProps = _ref.config;
1016
1378
  var config = _objectSpread(_objectSpread({}, useFolderActions.DEFAULT_CONFIG), configProps);
1017
- var _useState = react.useState([]),
1379
+ var _useState = React.useState([]),
1018
1380
  _useState2 = _slicedToArray(_useState, 2),
1019
1381
  expandedKeys = _useState2[0],
1020
1382
  setExpandedKeys = _useState2[1];
1021
- var _useTranslation = reactI18next.useTranslation(),
1383
+ var _useTranslation = useTranslation(config),
1022
1384
  t = _useTranslation.t;
1023
1385
  var params = reactUtils.useQueryParams({
1024
1386
  toCamelCase: false
1025
1387
  });
1026
- var activeFolderSid = useFolderActions.getActiveFolderId(config);
1388
+ var activeFolderSid = internal.getActiveFolderId(config);
1027
1389
  var _useFetchFolders = useFolderActions.useFetchFolders(config),
1028
1390
  folders = _useFetchFolders.data;
1029
1391
  var updateExpandedKeys = function updateExpandedKeys() {
@@ -1031,15 +1393,15 @@ var FoldersTree = function FoldersTree(_ref) {
1031
1393
  if (!folders) return;
1032
1394
  // When active folder changes from external sources, update expanded keys to auto expand tree.
1033
1395
  var expandedKeys = [];
1034
- var map = pathUtils.treeToMap(folders, "sid");
1396
+ var map = utils.treeToMap(folders, "sid");
1035
1397
  var activeFolder = map[activeFolderSid];
1036
1398
  var parentSid = activeFolder === null || activeFolder === void 0 || (_activeFolder$meta = activeFolder.meta) === null || _activeFolder$meta === void 0 || (_activeFolder$meta = _activeFolder$meta.parent) === null || _activeFolder$meta === void 0 ? void 0 : _activeFolder$meta.sid;
1037
1399
  if (parentSid) expandedKeys.push(parentSid);
1038
1400
  setExpandedKeys(expandedKeys);
1039
1401
  };
1040
- react.useEffect(function () {
1402
+ React.useEffect(function () {
1041
1403
  // Non urgent update.
1042
- react.startTransition(updateExpandedKeys);
1404
+ React.startTransition(updateExpandedKeys);
1043
1405
  }, [activeFolderSid, folders]);
1044
1406
  if (neetoCist.isNotPresent(folders)) {
1045
1407
  return /*#__PURE__*/jsxRuntime.jsx(Typography, {
@@ -1068,7 +1430,7 @@ var FoldersTree = function FoldersTree(_ref) {
1068
1430
  return /*#__PURE__*/jsxRuntime.jsx(FolderNode, {
1069
1431
  folder: folder,
1070
1432
  isActive: folder.sid === activeFolderSid,
1071
- link: utils.buildUrl(config.folderPath, _objectSpread(_objectSpread({}, params), {}, {
1433
+ link: utils$1.buildUrl(config.folderPath, _objectSpread(_objectSpread({}, params), {}, {
1072
1434
  folderId: folder.sid
1073
1435
  }))
1074
1436
  });