@bigbinary/neeto-folders-frontend 1.1.0 → 1.2.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.
package/dist/cjs/hooks.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var useFolderActions = require('../useFolderActions-DCs7hXdW.js');
3
+ var useFolderActions = require('../useFolderActions-BaDwQAdE.js');
4
4
  require('@babel/runtime/helpers/defineProperty');
5
5
  require('i18next');
6
6
  require('@bigbinary/neeto-cist');
@@ -7,21 +7,23 @@ import { buildUrl } from '@bigbinary/neeto-commons-frontend/utils';
7
7
  import Alert from '@bigbinary/neetoui/Alert';
8
8
  import { useTranslation, Trans } from 'react-i18next';
9
9
  import { useHistory, Link, NavLink } from 'react-router-dom';
10
- import { c as useFolderStore, d as useDestroyFolder, a as useFolders, i as isActiveFolder, e as useFetchFolders, f as useCreateFolder, g as useUpdateFolder, h as useReorderFolders, D as DEFAULT_CONFIG, u as useFolder, b as useFolderActions, j as getActiveFolderId } from './useFolderActions-AZ7a_96r.js';
10
+ import { c as useFolderStore, d as useDestroyFolder, a as useFolders, i as isActiveFolder, e as useFetchFolders, f as useCreateFolder, g as useUpdateFolder, h as getActiveFolderId, j as useReorderFolders, D as DEFAULT_CONFIG, u as useFolder, b as useFolderActions } from './useFolderActions-BoLQ9bAf.js';
11
11
  import { p as pathToFolder, t as treeToMap, m as measureDepth, a as mapToTree } from './pathUtils-B2uokQlx.js';
12
12
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
13
13
  import Pane from '@bigbinary/neetoui/Pane';
14
- import { useMemo, forwardRef, createElement, useState, useEffect, startTransition } from 'react';
15
- import { Formik, Form } from 'formik';
14
+ import { forwardRef, useMemo, createElement, useState, useEffect, startTransition } from 'react';
15
+ import { useField, Formik, Form } from 'formik';
16
16
  import Typography from '@bigbinary/neetoui/Typography';
17
17
  import Input from '@bigbinary/neetoui/formik/Input';
18
- import Select from '@bigbinary/neetoui/formik/Select';
19
18
  import ActionBlock from '@bigbinary/neetoui/formik/ActionBlock';
20
- import { pipe, values, prop, isEmpty, assoc } from 'ramda';
21
19
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
22
- import Button from '@bigbinary/neetoui/Button';
23
20
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
21
+ import { ConfigProvider, TreeSelect as TreeSelect$1 } from 'antd';
24
22
  import classNames from 'classnames';
23
+ import Down from '@bigbinary/neeto-icons/Down';
24
+ import Label from '@bigbinary/neetoui/Label';
25
+ import { values, isEmpty, assoc, pick } from 'ramda';
26
+ import Button from '@bigbinary/neetoui/Button';
25
27
  import { noop, isNotPresent } from '@bigbinary/neeto-cist';
26
28
  import Radio from '@bigbinary/neetoui/Radio';
27
29
  import Tooltip from '@bigbinary/neetoui/Tooltip';
@@ -37,8 +39,8 @@ import '@tanstack/react-query';
37
39
  import './constants.js';
38
40
  import 'zustand';
39
41
 
40
- 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; }
41
- 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; }
42
+ 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; }
43
+ 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; }
42
44
  var FoldersAlerts = function FoldersAlerts(_ref) {
43
45
  var config = _ref.config;
44
46
  var _useFolderStore = useFolderStore(function (store) {
@@ -101,7 +103,7 @@ var FoldersAlerts = function FoldersAlerts(_ref) {
101
103
  }
102
104
  return _context.abrupt("return");
103
105
  case 9:
104
- history.replace(buildUrl(config.folderPath, _objectSpread$9(_objectSpread$9({}, queryParams), {}, {
106
+ history.replace(buildUrl(config.folderPath, _objectSpread$a(_objectSpread$a({}, queryParams), {}, {
105
107
  folderId: parent.sid
106
108
  })));
107
109
  case 10:
@@ -123,13 +125,125 @@ var FoldersAlerts = function FoldersAlerts(_ref) {
123
125
  if (config.customizeAlerts) config.customizeAlerts(type, item, alertProps);
124
126
  alertProps.onSubmit = onConfirmDelete;
125
127
  }
126
- return /*#__PURE__*/jsx(Alert, _objectSpread$9({}, alertProps));
128
+ return /*#__PURE__*/jsx(Alert, _objectSpread$a({}, alertProps));
129
+ };
130
+
131
+ var _excluded$4 = ["className", "disabled", "fieldNames", "label", "loading", "name", "placeholder", "required", "showSearch", "size", "treeData"];
132
+ 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; }
133
+ 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; }
134
+ var TreeSelect = /*#__PURE__*/forwardRef(function (_ref, ref) {
135
+ var _fieldNames$label;
136
+ var className = _ref.className,
137
+ _ref$disabled = _ref.disabled,
138
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
139
+ fieldNames = _ref.fieldNames,
140
+ _ref$label = _ref.label,
141
+ label = _ref$label === void 0 ? "" : _ref$label,
142
+ _ref$loading = _ref.loading,
143
+ loading = _ref$loading === void 0 ? false : _ref$loading,
144
+ name = _ref.name,
145
+ _ref$placeholder = _ref.placeholder,
146
+ placeholder = _ref$placeholder === void 0 ? "" : _ref$placeholder,
147
+ _ref$required = _ref.required,
148
+ required = _ref$required === void 0 ? false : _ref$required,
149
+ _ref$showSearch = _ref.showSearch,
150
+ showSearch = _ref$showSearch === void 0 ? true : _ref$showSearch,
151
+ _ref$size = _ref.size,
152
+ size = _ref$size === void 0 ? "middle" : _ref$size,
153
+ treeData = _ref.treeData,
154
+ otherProps = _objectWithoutProperties(_ref, _excluded$4);
155
+ var _useField = useField(name),
156
+ _useField2 = _slicedToArray(_useField, 3),
157
+ field = _useField2[0],
158
+ meta = _useField2[1],
159
+ _useField2$ = _useField2[2],
160
+ setValue = _useField2$.setValue,
161
+ setTouched = _useField2$.setTouched;
162
+ var hasLeafNodes = treeData === null || treeData === void 0 ? void 0 : treeData.some(function (node) {
163
+ return (node === null || node === void 0 ? void 0 : node.pId) !== null;
164
+ });
165
+ return /*#__PURE__*/jsxs("div", {
166
+ className: "neeto-ui-input__wrapper",
167
+ children: [label && /*#__PURE__*/jsx(Label, {
168
+ required: required,
169
+ children: label
170
+ }), /*#__PURE__*/jsx(ConfigProvider, {
171
+ theme: {
172
+ components: {
173
+ TreeSelect: {
174
+ titleHeight: 28
175
+ }
176
+ }
177
+ },
178
+ children: /*#__PURE__*/jsx(TreeSelect$1, _objectSpread$9(_objectSpread$9({
179
+ treeDataSimpleMode: true,
180
+ "data-cy": "nui-select-container-wrapper",
181
+ dropdownStyle: {
182
+ zIndex: 100000
183
+ },
184
+ name: field.name,
185
+ popupClassName: "neeto-ui-tree-select-dropdown",
186
+ suffixIcon: /*#__PURE__*/jsx(Down, {}),
187
+ treeNodeFilterProp: (_fieldNames$label = fieldNames === null || fieldNames === void 0 ? void 0 : fieldNames.label) !== null && _fieldNames$label !== void 0 ? _fieldNames$label : "title",
188
+ value: field.value || undefined,
189
+ className: classNames("neeto-ui-tree-select__wrapper", className, {
190
+ "neeto-ui-tree-select__error": meta.error
191
+ }),
192
+ switcherIcon: function switcherIcon(props) {
193
+ return /*#__PURE__*/jsx("div", _objectSpread$9(_objectSpread$9({}, props), {}, {
194
+ children: /*#__PURE__*/jsx(Down, {})
195
+ }));
196
+ },
197
+ onBlur: function onBlur() {
198
+ return setTouched(true);
199
+ },
200
+ onChange: function onChange(value) {
201
+ return setValue(value);
202
+ }
203
+ }, _objectSpread$9({
204
+ disabled: disabled,
205
+ fieldNames: fieldNames,
206
+ loading: loading,
207
+ placeholder: placeholder,
208
+ ref: ref,
209
+ showSearch: showSearch,
210
+ size: size,
211
+ treeData: treeData
212
+ }, otherProps)), {}, {
213
+ dropdownRender: function dropdownRender(menu) {
214
+ return hasLeafNodes ? menu : /*#__PURE__*/jsx("div", {
215
+ className: "-mx-5 -ml-6",
216
+ children: menu
217
+ });
218
+ }
219
+ }))
220
+ }), meta.error && /*#__PURE__*/jsx("p", {
221
+ className: "neeto-ui-input__error",
222
+ children: meta.error
223
+ })]
224
+ });
225
+ });
226
+ TreeSelect.displayName = "TreeSelect";
227
+
228
+ var createFolderOptions = function createFolderOptions(foldersMap, config) {
229
+ return values(foldersMap).map(function (folder) {
230
+ var _folder$meta$parent;
231
+ return {
232
+ id: folder.id,
233
+ title: folder.name,
234
+ value: folder.id,
235
+ pId: (_folder$meta$parent = folder.meta.parent) === null || _folder$meta$parent === void 0 ? void 0 : _folder$meta$parent.id,
236
+ disabled: folder.meta.depth >= config.maxDepth
237
+ };
238
+ });
127
239
  };
128
240
 
129
- var flattenTree = pipe(treeToMap, values);
130
241
  var AddEditPane = function AddEditPane(_ref) {
131
- var config = _ref.config,
242
+ var setFocusField = _ref.setFocusField,
243
+ config = _ref.config,
132
244
  onClose = _ref.onClose;
245
+ var _useTranslation = useTranslation(),
246
+ t = _useTranslation.t;
133
247
  var _useFolderStore = useFolderStore(function (store) {
134
248
  var _store$paneState, _store$paneState2;
135
249
  return {
@@ -145,16 +259,23 @@ var AddEditPane = function AddEditPane(_ref) {
145
259
  createFolder = _useCreateFolder.mutate;
146
260
  var _useUpdateFolder = useUpdateFolder(config),
147
261
  updateFolder = _useUpdateFolder.mutateAsync;
148
- var _useTranslation = useTranslation(),
149
- t = _useTranslation.t;
150
262
  var isEditing = type === "edit" && item;
151
- var initialValues = isEditing ? item : {
152
- name: "",
153
- parentId: null
154
- };
155
- var folderOptions = useMemo(function () {
156
- return flattenTree(folders);
263
+ var foldersMap = useMemo(function () {
264
+ return treeToMap(folders, "sid");
157
265
  }, [folders]);
266
+ var folderOptions = useMemo(function () {
267
+ return createFolderOptions(foldersMap, config);
268
+ }, [foldersMap]);
269
+ var activeFolderSid = getActiveFolderId(config);
270
+ var activeFolder = foldersMap[activeFolderSid];
271
+ var isValidParent = (activeFolder === null || activeFolder === void 0 ? void 0 : activeFolder.meta.depth) < config.maxDepth;
272
+ var parentId = isValidParent ? activeFolder.id : null;
273
+ var initialValues = useMemo(function () {
274
+ return isEditing ? item : {
275
+ name: "",
276
+ parentId: parentId
277
+ };
278
+ }, [isEditing, item, parentId]);
158
279
  var onSubmitForm = /*#__PURE__*/function () {
159
280
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(values) {
160
281
  var payload;
@@ -200,31 +321,24 @@ var AddEditPane = function AddEditPane(_ref) {
200
321
  })
201
322
  }), /*#__PURE__*/jsx(Formik, {
202
323
  initialValues: initialValues,
324
+ enableReinitialize: true,
203
325
  onSubmit: onSubmitForm,
204
- children: function children(_ref3) {
205
- var setFieldValue = _ref3.setFieldValue;
326
+ children: function children() {
206
327
  return /*#__PURE__*/jsxs(Fragment, {
207
328
  children: [/*#__PURE__*/jsx(Pane.Body, {
208
329
  children: /*#__PURE__*/jsxs(Form, {
209
330
  className: "w-full space-y-5",
210
331
  children: [/*#__PURE__*/jsx(Input, {
211
332
  label: t("folders.name"),
212
- name: "name"
333
+ name: "name",
334
+ ref: setFocusField
213
335
  }), /*#__PURE__*/jsxs("div", {
214
- children: [/*#__PURE__*/jsx(Select, {
215
- isClearable: true,
216
- filterOption: function filterOption(_ref4) {
217
- var value = _ref4.value;
218
- return value !== initialValues.id;
219
- },
220
- getOptionLabel: prop("name"),
221
- getOptionValue: prop("id"),
336
+ children: [/*#__PURE__*/jsx(TreeSelect, {
337
+ allowClear: true,
338
+ showSearch: true,
222
339
  label: t("createFolder.parentTitle"),
223
340
  name: "parentId",
224
- options: folderOptions,
225
- onChange: function onChange(option) {
226
- return setFieldValue("parentId", option ? option.id : null);
227
- }
341
+ treeData: folderOptions
228
342
  }), /*#__PURE__*/jsx(Typography, {
229
343
  style: "nano",
230
344
  children: t("createFolder.parentInfo")
@@ -672,10 +786,17 @@ var FoldersPane = function FoldersPane(_ref) {
672
786
  config: config,
673
787
  onClose: onClose
674
788
  };
675
- return /*#__PURE__*/jsxs(Pane, {
789
+ return /*#__PURE__*/jsx(Pane, {
676
790
  onClose: onClose,
677
791
  isOpen: !!type,
678
- children: [(type === "edit" || type === "add") && /*#__PURE__*/jsx(AddEditPane, _objectSpread$3({}, commonProps)), type === "move" && /*#__PURE__*/jsx(MoveFolderPane, _objectSpread$3({}, commonProps)), type === "reorder" && /*#__PURE__*/jsx(ReorderFoldersPane, _objectSpread$3({}, commonProps))]
792
+ children: function children(_ref2) {
793
+ var setFocusField = _ref2.setFocusField;
794
+ return /*#__PURE__*/jsxs(Fragment, {
795
+ children: [(type === "edit" || type === "add") && /*#__PURE__*/jsx(AddEditPane, _objectSpread$3({}, _objectSpread$3({
796
+ setFocusField: setFocusField
797
+ }, commonProps))), type === "move" && /*#__PURE__*/jsx(MoveFolderPane, _objectSpread$3({}, commonProps)), type === "reorder" && /*#__PURE__*/jsx(ReorderFoldersPane, _objectSpread$3({}, commonProps))]
798
+ });
799
+ }
679
800
  });
680
801
  };
681
802
 
@@ -777,12 +898,13 @@ var FoldersList = function FoldersList(_ref) {
777
898
  configProps = _ref.config,
778
899
  onSelect = _ref.onSelect;
779
900
  var config = _objectSpread$2(_objectSpread$2({}, DEFAULT_CONFIG), configProps);
780
- var params = useQueryParams({
781
- toCamelCase: false
782
- });
901
+ var params = useQueryParams();
783
902
  var _useTranslation = useTranslation(),
784
903
  t = _useTranslation.t;
785
- var _useFolders = useFolders(config),
904
+ var fetchParams = pick(["sortBy", "orderBy"], params);
905
+ var _useFolders = useFolders(_objectSpread$2(_objectSpread$2({}, config), {}, {
906
+ params: fetchParams
907
+ })),
786
908
  folders = _useFolders.folders;
787
909
  var _useFolder = useFolder(config),
788
910
  folderId = _useFolder.folderId,