@bigbinary/neeto-folders-frontend 1.1.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/README.md +105 -0
- package/app/javascript/src/translations/en.json +36 -0
- package/app/javascript/src/translations/index.js +3 -0
- package/dist/cjs/components.js +931 -0
- package/dist/cjs/components.js.map +1 -0
- package/dist/cjs/constants.js +10 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/hooks.js +19 -0
- package/dist/cjs/hooks.js.map +1 -0
- package/dist/cjs/utils.js +9 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/components.js +926 -0
- package/dist/components.js.map +1 -0
- package/dist/constants.js +8 -0
- package/dist/constants.js.map +1 -0
- package/dist/hooks.js +11 -0
- package/dist/hooks.js.map +1 -0
- package/dist/pathUtils-B2uokQlx.js +74 -0
- package/dist/pathUtils-B2uokQlx.js.map +1 -0
- package/dist/pathUtils-CHuLm_t6.js +79 -0
- package/dist/pathUtils-CHuLm_t6.js.map +1 -0
- package/dist/useFolderActions-AZ7a_96r.js +210 -0
- package/dist/useFolderActions-AZ7a_96r.js.map +1 -0
- package/dist/useFolderActions-DCs7hXdW.js +223 -0
- package/dist/useFolderActions-DCs7hXdW.js.map +1 -0
- package/dist/utils.js +3 -0
- package/dist/utils.js.map +1 -0
- package/package.json +230 -0
- package/types.d.ts +3 -0
|
@@ -0,0 +1,931 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
4
|
+
var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
|
|
5
|
+
var _regeneratorRuntime = require('@babel/runtime/regenerator');
|
|
6
|
+
var shallow = require('zustand/shallow');
|
|
7
|
+
var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
|
|
8
|
+
var utils = require('@bigbinary/neeto-commons-frontend/utils');
|
|
9
|
+
var Alert = require('@bigbinary/neetoui/Alert');
|
|
10
|
+
var reactI18next = require('react-i18next');
|
|
11
|
+
var reactRouterDom = require('react-router-dom');
|
|
12
|
+
var useFolderActions = require('../useFolderActions-DCs7hXdW.js');
|
|
13
|
+
var pathUtils = require('../pathUtils-CHuLm_t6.js');
|
|
14
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
15
|
+
var Pane = require('@bigbinary/neetoui/Pane');
|
|
16
|
+
var react = require('react');
|
|
17
|
+
var formik = require('formik');
|
|
18
|
+
var Typography = require('@bigbinary/neetoui/Typography');
|
|
19
|
+
var Input = require('@bigbinary/neetoui/formik/Input');
|
|
20
|
+
var Select = require('@bigbinary/neetoui/formik/Select');
|
|
21
|
+
var ActionBlock = require('@bigbinary/neetoui/formik/ActionBlock');
|
|
22
|
+
var ramda = require('ramda');
|
|
23
|
+
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
24
|
+
var Button = require('@bigbinary/neetoui/Button');
|
|
25
|
+
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
26
|
+
var classNames = require('classnames');
|
|
27
|
+
var neetoCist = require('@bigbinary/neeto-cist');
|
|
28
|
+
var Radio = require('@bigbinary/neetoui/Radio');
|
|
29
|
+
var Tooltip = require('@bigbinary/neetoui/Tooltip');
|
|
30
|
+
var core = require('@dnd-kit/core');
|
|
31
|
+
var Folder = require('@bigbinary/neeto-icons/Folder');
|
|
32
|
+
var Toastr = require('@bigbinary/neetoui/Toastr');
|
|
33
|
+
var reactDom = require('react-dom');
|
|
34
|
+
var MoreDropdown = require('@bigbinary/neeto-molecules/MoreDropdown');
|
|
35
|
+
var Checkbox = require('@bigbinary/neetoui/Checkbox');
|
|
36
|
+
var Tree = require('@bigbinary/neetoui/Tree');
|
|
37
|
+
require('i18next');
|
|
38
|
+
require('@tanstack/react-query');
|
|
39
|
+
require('./constants.js');
|
|
40
|
+
require('zustand');
|
|
41
|
+
|
|
42
|
+
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; }
|
|
43
|
+
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; }
|
|
44
|
+
var FoldersAlerts = function FoldersAlerts(_ref) {
|
|
45
|
+
var config = _ref.config;
|
|
46
|
+
var _useFolderStore = useFolderActions.useFolderStore(function (store) {
|
|
47
|
+
return {
|
|
48
|
+
setFolderState: store["setFolderState"]
|
|
49
|
+
};
|
|
50
|
+
}, shallow.shallow),
|
|
51
|
+
setFolderState = _useFolderStore.setFolderState;
|
|
52
|
+
var queryParams = reactUtils.useQueryParams({
|
|
53
|
+
toCamelCase: false
|
|
54
|
+
});
|
|
55
|
+
var history = reactRouterDom.useHistory();
|
|
56
|
+
var _useTranslation = reactI18next.useTranslation(),
|
|
57
|
+
t = _useTranslation.t;
|
|
58
|
+
var _useFolderStore2 = useFolderActions.useFolderStore(function (store) {
|
|
59
|
+
var _store$alertState, _store$alertState2;
|
|
60
|
+
return {
|
|
61
|
+
type: (_store$alertState = store["alertState"]) === null || _store$alertState === void 0 ? void 0 : _store$alertState["type"],
|
|
62
|
+
item: (_store$alertState2 = store["alertState"]) === null || _store$alertState2 === void 0 ? void 0 : _store$alertState2["item"]
|
|
63
|
+
};
|
|
64
|
+
}, shallow.shallow),
|
|
65
|
+
type = _useFolderStore2.type,
|
|
66
|
+
item = _useFolderStore2.item;
|
|
67
|
+
var _useDestroyFolder = useFolderActions.useDestroyFolder(config),
|
|
68
|
+
destroyFolder = _useDestroyFolder.mutateAsync,
|
|
69
|
+
isLoading = _useDestroyFolder.isLoading;
|
|
70
|
+
var _useFolders = useFolderActions.useFolders(config),
|
|
71
|
+
folders = _useFolders.folders;
|
|
72
|
+
var onClose = function onClose() {
|
|
73
|
+
return setFolderState({
|
|
74
|
+
alertState: null
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
var alertProps = {
|
|
78
|
+
isOpen: !!type,
|
|
79
|
+
isSubmitting: isLoading,
|
|
80
|
+
onClose: onClose
|
|
81
|
+
};
|
|
82
|
+
var onConfirmDelete = /*#__PURE__*/function () {
|
|
83
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
84
|
+
var path, parent;
|
|
85
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
86
|
+
while (1) switch (_context.prev = _context.next) {
|
|
87
|
+
case 0:
|
|
88
|
+
_context.next = 2;
|
|
89
|
+
return destroyFolder(item.id);
|
|
90
|
+
case 2:
|
|
91
|
+
onClose();
|
|
92
|
+
if (!(!useFolderActions.isActiveFolder(item.sid) || !folders)) {
|
|
93
|
+
_context.next = 5;
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
return _context.abrupt("return");
|
|
97
|
+
case 5:
|
|
98
|
+
path = pathUtils.pathToFolder(folders, item.id);
|
|
99
|
+
parent = path[path.length - 2];
|
|
100
|
+
if (parent) {
|
|
101
|
+
_context.next = 9;
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
return _context.abrupt("return");
|
|
105
|
+
case 9:
|
|
106
|
+
history.replace(utils.buildUrl(config.folderPath, _objectSpread$9(_objectSpread$9({}, queryParams), {}, {
|
|
107
|
+
folderId: parent.sid
|
|
108
|
+
})));
|
|
109
|
+
case 10:
|
|
110
|
+
case "end":
|
|
111
|
+
return _context.stop();
|
|
112
|
+
}
|
|
113
|
+
}, _callee);
|
|
114
|
+
}));
|
|
115
|
+
return function onConfirmDelete() {
|
|
116
|
+
return _ref2.apply(this, arguments);
|
|
117
|
+
};
|
|
118
|
+
}();
|
|
119
|
+
if (type === "delete") {
|
|
120
|
+
alertProps.title = t("deleteFolder.title");
|
|
121
|
+
alertProps.message = /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
|
|
122
|
+
i18nKey: "deleteFolder.info",
|
|
123
|
+
values: item
|
|
124
|
+
});
|
|
125
|
+
if (config.customizeAlerts) config.customizeAlerts(type, item, alertProps);
|
|
126
|
+
alertProps.onSubmit = onConfirmDelete;
|
|
127
|
+
}
|
|
128
|
+
return /*#__PURE__*/jsxRuntime.jsx(Alert, _objectSpread$9({}, alertProps));
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
var flattenTree = ramda.pipe(pathUtils.treeToMap, ramda.values);
|
|
132
|
+
var AddEditPane = function AddEditPane(_ref) {
|
|
133
|
+
var config = _ref.config,
|
|
134
|
+
onClose = _ref.onClose;
|
|
135
|
+
var _useFolderStore = useFolderActions.useFolderStore(function (store) {
|
|
136
|
+
var _store$paneState, _store$paneState2;
|
|
137
|
+
return {
|
|
138
|
+
type: (_store$paneState = store["paneState"]) === null || _store$paneState === void 0 ? void 0 : _store$paneState["type"],
|
|
139
|
+
item: (_store$paneState2 = store["paneState"]) === null || _store$paneState2 === void 0 ? void 0 : _store$paneState2["item"]
|
|
140
|
+
};
|
|
141
|
+
}, shallow.shallow),
|
|
142
|
+
type = _useFolderStore.type,
|
|
143
|
+
item = _useFolderStore.item;
|
|
144
|
+
var _useFetchFolders = useFolderActions.useFetchFolders(config),
|
|
145
|
+
folders = _useFetchFolders.data;
|
|
146
|
+
var _useCreateFolder = useFolderActions.useCreateFolder(config),
|
|
147
|
+
createFolder = _useCreateFolder.mutate;
|
|
148
|
+
var _useUpdateFolder = useFolderActions.useUpdateFolder(config),
|
|
149
|
+
updateFolder = _useUpdateFolder.mutateAsync;
|
|
150
|
+
var _useTranslation = reactI18next.useTranslation(),
|
|
151
|
+
t = _useTranslation.t;
|
|
152
|
+
var isEditing = type === "edit" && item;
|
|
153
|
+
var initialValues = isEditing ? item : {
|
|
154
|
+
name: "",
|
|
155
|
+
parentId: null
|
|
156
|
+
};
|
|
157
|
+
var folderOptions = react.useMemo(function () {
|
|
158
|
+
return flattenTree(folders);
|
|
159
|
+
}, [folders]);
|
|
160
|
+
var onSubmitForm = /*#__PURE__*/function () {
|
|
161
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(values) {
|
|
162
|
+
var payload;
|
|
163
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
164
|
+
while (1) switch (_context.prev = _context.next) {
|
|
165
|
+
case 0:
|
|
166
|
+
payload = {
|
|
167
|
+
name: values.name,
|
|
168
|
+
parent_id: values.parentId
|
|
169
|
+
};
|
|
170
|
+
if (!isEditing) {
|
|
171
|
+
_context.next = 6;
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
_context.next = 4;
|
|
175
|
+
return updateFolder({
|
|
176
|
+
id: item.id,
|
|
177
|
+
payload: payload
|
|
178
|
+
});
|
|
179
|
+
case 4:
|
|
180
|
+
_context.next = 8;
|
|
181
|
+
break;
|
|
182
|
+
case 6:
|
|
183
|
+
_context.next = 8;
|
|
184
|
+
return createFolder(payload);
|
|
185
|
+
case 8:
|
|
186
|
+
onClose();
|
|
187
|
+
case 9:
|
|
188
|
+
case "end":
|
|
189
|
+
return _context.stop();
|
|
190
|
+
}
|
|
191
|
+
}, _callee);
|
|
192
|
+
}));
|
|
193
|
+
return function onSubmitForm(_x) {
|
|
194
|
+
return _ref2.apply(this, arguments);
|
|
195
|
+
};
|
|
196
|
+
}();
|
|
197
|
+
return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
198
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(Pane.Header, {
|
|
199
|
+
children: /*#__PURE__*/jsxRuntime.jsx(Typography, {
|
|
200
|
+
style: "h2",
|
|
201
|
+
children: isEditing ? t("folders.edit") : t("folders.add")
|
|
202
|
+
})
|
|
203
|
+
}), /*#__PURE__*/jsxRuntime.jsx(formik.Formik, {
|
|
204
|
+
initialValues: initialValues,
|
|
205
|
+
onSubmit: onSubmitForm,
|
|
206
|
+
children: function children(_ref3) {
|
|
207
|
+
var setFieldValue = _ref3.setFieldValue;
|
|
208
|
+
return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
209
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(Pane.Body, {
|
|
210
|
+
children: /*#__PURE__*/jsxRuntime.jsxs(formik.Form, {
|
|
211
|
+
className: "w-full space-y-5",
|
|
212
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(Input, {
|
|
213
|
+
label: t("folders.name"),
|
|
214
|
+
name: "name"
|
|
215
|
+
}), /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
216
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(Select, {
|
|
217
|
+
isClearable: true,
|
|
218
|
+
filterOption: function filterOption(_ref4) {
|
|
219
|
+
var value = _ref4.value;
|
|
220
|
+
return value !== initialValues.id;
|
|
221
|
+
},
|
|
222
|
+
getOptionLabel: ramda.prop("name"),
|
|
223
|
+
getOptionValue: ramda.prop("id"),
|
|
224
|
+
label: t("createFolder.parentTitle"),
|
|
225
|
+
name: "parentId",
|
|
226
|
+
options: folderOptions,
|
|
227
|
+
onChange: function onChange(option) {
|
|
228
|
+
return setFieldValue("parentId", option ? option.id : null);
|
|
229
|
+
}
|
|
230
|
+
}), /*#__PURE__*/jsxRuntime.jsx(Typography, {
|
|
231
|
+
style: "nano",
|
|
232
|
+
children: t("createFolder.parentInfo")
|
|
233
|
+
})]
|
|
234
|
+
})]
|
|
235
|
+
})
|
|
236
|
+
}), /*#__PURE__*/jsxRuntime.jsx(Pane.Footer, {
|
|
237
|
+
children: /*#__PURE__*/jsxRuntime.jsx(ActionBlock, {
|
|
238
|
+
cancelButtonProps: {
|
|
239
|
+
onClick: onClose
|
|
240
|
+
}
|
|
241
|
+
})
|
|
242
|
+
})]
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
})]
|
|
246
|
+
});
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
var _excluded$3 = ["icon", "itemLabel", "folder", "depth", "className", "onClick"];
|
|
250
|
+
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; }
|
|
251
|
+
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; }
|
|
252
|
+
var indentSize = 30;
|
|
253
|
+
var Node = function Node(_ref, ref) {
|
|
254
|
+
var _folder$children$leng, _folder$children;
|
|
255
|
+
var _ref$icon = _ref.icon,
|
|
256
|
+
icon = _ref$icon === void 0 ? null : _ref$icon,
|
|
257
|
+
itemLabel = _ref.itemLabel,
|
|
258
|
+
folder = _ref.folder,
|
|
259
|
+
depth = _ref.depth,
|
|
260
|
+
className = _ref.className,
|
|
261
|
+
onClick = _ref.onClick,
|
|
262
|
+
rest = _objectWithoutProperties(_ref, _excluded$3);
|
|
263
|
+
var _useTranslation = reactI18next.useTranslation(),
|
|
264
|
+
t = _useTranslation.t;
|
|
265
|
+
var metaInfo = [];
|
|
266
|
+
var childCount = (_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;
|
|
267
|
+
childCount > 0 && metaInfo.push(t("folders.subfolderCount", {
|
|
268
|
+
count: childCount
|
|
269
|
+
}));
|
|
270
|
+
folder.itemCount > 0 && metaInfo.push("".concat(folder.itemCount, " ").concat(itemLabel));
|
|
271
|
+
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
272
|
+
className: "flex",
|
|
273
|
+
children: [Array.from({
|
|
274
|
+
length: depth
|
|
275
|
+
}).map(function (_, index) {
|
|
276
|
+
return /*#__PURE__*/jsxRuntime.jsx("span", {
|
|
277
|
+
className: "relative border-l",
|
|
278
|
+
style: {
|
|
279
|
+
width: indentSize,
|
|
280
|
+
left: Math.round(indentSize / 2)
|
|
281
|
+
}
|
|
282
|
+
}, index);
|
|
283
|
+
}), /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread$8(_objectSpread$8({}, _objectSpread$8(_objectSpread$8({}, rest), {}, {
|
|
284
|
+
onClick: onClick,
|
|
285
|
+
ref: ref
|
|
286
|
+
})), {}, {
|
|
287
|
+
className: classNames("relative my-1 flex cursor-pointer items-center px-2 py-1", className),
|
|
288
|
+
children: [icon, /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
289
|
+
className: "ml-2",
|
|
290
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(Typography, {
|
|
291
|
+
style: "body3",
|
|
292
|
+
weight: "medium",
|
|
293
|
+
children: folder.name
|
|
294
|
+
}), /*#__PURE__*/jsxRuntime.jsx(Typography, {
|
|
295
|
+
className: "relative -top-0.5",
|
|
296
|
+
style: "nano",
|
|
297
|
+
weight: "normal",
|
|
298
|
+
children: metaInfo.join(" . ")
|
|
299
|
+
})]
|
|
300
|
+
})]
|
|
301
|
+
}))]
|
|
302
|
+
});
|
|
303
|
+
};
|
|
304
|
+
var Node$1 = /*#__PURE__*/react.forwardRef(Node);
|
|
305
|
+
|
|
306
|
+
var _excluded$2 = ["folder", "item", "depth", "maxDepth", "disabled"];
|
|
307
|
+
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; }
|
|
308
|
+
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; }
|
|
309
|
+
var _SelectableNode = function SelectableNode(_ref) {
|
|
310
|
+
var folder = _ref.folder,
|
|
311
|
+
item = _ref.item,
|
|
312
|
+
_ref$depth = _ref.depth,
|
|
313
|
+
depth = _ref$depth === void 0 ? 0 : _ref$depth,
|
|
314
|
+
maxDepth = _ref.maxDepth,
|
|
315
|
+
disabled = _ref.disabled,
|
|
316
|
+
rest = _objectWithoutProperties(_ref, _excluded$2);
|
|
317
|
+
var selection = rest.selection,
|
|
318
|
+
onSelect = rest.onSelect;
|
|
319
|
+
var _useTranslation = reactI18next.useTranslation(),
|
|
320
|
+
t = _useTranslation.t;
|
|
321
|
+
var isDisabled = disabled || (item === null || item === void 0 ? void 0 : item.id) === folder.id || depth > maxDepth;
|
|
322
|
+
var renderChildren = function renderChildren() {
|
|
323
|
+
if (neetoCist.isNotPresent(folder.children)) return null;
|
|
324
|
+
return folder.children.map(function (child) {
|
|
325
|
+
return /*#__PURE__*/react.createElement(_SelectableNode, _objectSpread$7(_objectSpread$7({}, _objectSpread$7(_objectSpread$7({}, rest), {}, {
|
|
326
|
+
item: item,
|
|
327
|
+
maxDepth: maxDepth
|
|
328
|
+
})), {}, {
|
|
329
|
+
depth: depth + 1,
|
|
330
|
+
disabled: isDisabled,
|
|
331
|
+
folder: child,
|
|
332
|
+
key: child.id
|
|
333
|
+
}));
|
|
334
|
+
});
|
|
335
|
+
};
|
|
336
|
+
return /*#__PURE__*/jsxRuntime.jsx(Tooltip, {
|
|
337
|
+
content: t("moveToFolder.notAllowed"),
|
|
338
|
+
disabled: !isDisabled,
|
|
339
|
+
position: "top",
|
|
340
|
+
children: /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
341
|
+
className: classNames({
|
|
342
|
+
"opacity-40": isDisabled
|
|
343
|
+
}),
|
|
344
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(Node$1, _objectSpread$7(_objectSpread$7({}, _objectSpread$7(_objectSpread$7({}, rest), {}, {
|
|
345
|
+
depth: depth,
|
|
346
|
+
folder: folder
|
|
347
|
+
})), {}, {
|
|
348
|
+
icon: /*#__PURE__*/jsxRuntime.jsx(Radio.Item, {
|
|
349
|
+
readOnly: true,
|
|
350
|
+
checked: selection === folder.id,
|
|
351
|
+
name: "move-folder-option"
|
|
352
|
+
}),
|
|
353
|
+
onClick: isDisabled ? neetoCist.noop : function () {
|
|
354
|
+
return onSelect(folder);
|
|
355
|
+
}
|
|
356
|
+
})), renderChildren()]
|
|
357
|
+
})
|
|
358
|
+
});
|
|
359
|
+
};
|
|
360
|
+
|
|
361
|
+
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; }
|
|
362
|
+
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; }
|
|
363
|
+
var PaneBody = function PaneBody(_ref) {
|
|
364
|
+
var item = _ref.item,
|
|
365
|
+
config = _ref.config,
|
|
366
|
+
submitButtonProps = _ref.submitButtonProps,
|
|
367
|
+
cancelButtonProps = _ref.cancelButtonProps,
|
|
368
|
+
removeButtonProps = _ref.removeButtonProps,
|
|
369
|
+
onSubmit = _ref.onSubmit,
|
|
370
|
+
onClose = _ref.onClose,
|
|
371
|
+
onRemove = _ref.onRemove;
|
|
372
|
+
var _useState = react.useState(null),
|
|
373
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
374
|
+
selection = _useState2[0],
|
|
375
|
+
setSelection = _useState2[1];
|
|
376
|
+
var _useFolderStore = useFolderActions.useFolderStore(function (store) {
|
|
377
|
+
return {
|
|
378
|
+
setFolderState: store["setFolderState"]
|
|
379
|
+
};
|
|
380
|
+
}, shallow.shallow),
|
|
381
|
+
setFolderState = _useFolderStore.setFolderState;
|
|
382
|
+
var _useFetchFolders = useFolderActions.useFetchFolders(config),
|
|
383
|
+
_useFetchFolders$data = _useFetchFolders.data,
|
|
384
|
+
folders = _useFetchFolders$data === void 0 ? [] : _useFetchFolders$data;
|
|
385
|
+
var _useTranslation = reactI18next.useTranslation(),
|
|
386
|
+
t = _useTranslation.t;
|
|
387
|
+
var folderDepth = 0;
|
|
388
|
+
if (item) {
|
|
389
|
+
// If item is a folder, measure the current depth from current folder to longest leaf.
|
|
390
|
+
var foldersMap = pathUtils.treeToMap(folders);
|
|
391
|
+
var folder = foldersMap[item.id];
|
|
392
|
+
if (folder) folderDepth = pathUtils.measureDepth(folder);
|
|
393
|
+
}
|
|
394
|
+
var maxDepth = config.maxDepth - folderDepth;
|
|
395
|
+
var onAddFolder = function onAddFolder() {
|
|
396
|
+
setFolderState({
|
|
397
|
+
paneState: {
|
|
398
|
+
type: "add",
|
|
399
|
+
item: null
|
|
400
|
+
}
|
|
401
|
+
});
|
|
402
|
+
};
|
|
403
|
+
return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
404
|
+
children: [/*#__PURE__*/jsxRuntime.jsxs(Pane.Header, {
|
|
405
|
+
className: "flex items-center justify-between",
|
|
406
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(Typography, {
|
|
407
|
+
style: "h2",
|
|
408
|
+
children: t("moveToFolder.title")
|
|
409
|
+
}), /*#__PURE__*/jsxRuntime.jsx(Button, {
|
|
410
|
+
className: "mr-2",
|
|
411
|
+
label: t("folders.add"),
|
|
412
|
+
style: "link",
|
|
413
|
+
onClick: onAddFolder
|
|
414
|
+
})]
|
|
415
|
+
}), /*#__PURE__*/jsxRuntime.jsx(Pane.Body, {
|
|
416
|
+
children: folders.map(function (folder) {
|
|
417
|
+
return /*#__PURE__*/react.createElement(_SelectableNode, {
|
|
418
|
+
folder: folder,
|
|
419
|
+
item: item,
|
|
420
|
+
maxDepth: maxDepth,
|
|
421
|
+
selection: selection,
|
|
422
|
+
disabled: (item === null || item === void 0 ? void 0 : item.id) === folder.id || maxDepth <= 0,
|
|
423
|
+
itemLabel: config.itemLabel,
|
|
424
|
+
key: folder.id,
|
|
425
|
+
onSelect: function onSelect(folder) {
|
|
426
|
+
return setSelection(folder.id);
|
|
427
|
+
}
|
|
428
|
+
});
|
|
429
|
+
})
|
|
430
|
+
}), /*#__PURE__*/jsxRuntime.jsxs(Pane.Footer, {
|
|
431
|
+
className: "space-x-2",
|
|
432
|
+
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
433
|
+
className: "flex flex-1 space-x-2",
|
|
434
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(Button, _objectSpread$6({
|
|
435
|
+
disabled: !selection,
|
|
436
|
+
label: t("common.save"),
|
|
437
|
+
style: "primary",
|
|
438
|
+
onClick: function onClick() {
|
|
439
|
+
return onSubmit(selection);
|
|
440
|
+
}
|
|
441
|
+
}, submitButtonProps)), /*#__PURE__*/jsxRuntime.jsx(Button, _objectSpread$6({
|
|
442
|
+
label: t("common.cancel"),
|
|
443
|
+
style: "text",
|
|
444
|
+
onClick: onClose
|
|
445
|
+
}, cancelButtonProps))]
|
|
446
|
+
}), onRemove && /*#__PURE__*/jsxRuntime.jsx(Button, _objectSpread$6({
|
|
447
|
+
label: t("moveToFolder.remove"),
|
|
448
|
+
style: "tertiary",
|
|
449
|
+
onClick: onRemove
|
|
450
|
+
}, removeButtonProps))]
|
|
451
|
+
})]
|
|
452
|
+
});
|
|
453
|
+
};
|
|
454
|
+
|
|
455
|
+
var MoveFolderPane = function MoveFolderPane(_ref) {
|
|
456
|
+
var config = _ref.config,
|
|
457
|
+
onClose = _ref.onClose;
|
|
458
|
+
var _useFolderStore = useFolderActions.useFolderStore(function (store) {
|
|
459
|
+
var _store$paneState;
|
|
460
|
+
return {
|
|
461
|
+
item: (_store$paneState = store["paneState"]) === null || _store$paneState === void 0 ? void 0 : _store$paneState["item"]
|
|
462
|
+
};
|
|
463
|
+
}, shallow.shallow),
|
|
464
|
+
item = _useFolderStore.item;
|
|
465
|
+
var _useUpdateFolder = useFolderActions.useUpdateFolder(config),
|
|
466
|
+
updateFolder = _useUpdateFolder.mutate;
|
|
467
|
+
var onSaveSelection = function onSaveSelection(parentId) {
|
|
468
|
+
var payload = {
|
|
469
|
+
id: item.id,
|
|
470
|
+
parentId: parentId
|
|
471
|
+
};
|
|
472
|
+
updateFolder({
|
|
473
|
+
id: item.id,
|
|
474
|
+
payload: payload
|
|
475
|
+
}, {
|
|
476
|
+
onSuccess: onClose
|
|
477
|
+
});
|
|
478
|
+
};
|
|
479
|
+
return /*#__PURE__*/jsxRuntime.jsx(PaneBody, {
|
|
480
|
+
config: config,
|
|
481
|
+
item: item,
|
|
482
|
+
onClose: onClose,
|
|
483
|
+
onSubmit: onSaveSelection
|
|
484
|
+
});
|
|
485
|
+
};
|
|
486
|
+
|
|
487
|
+
var _excluded$1 = ["folder", "depth"];
|
|
488
|
+
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; }
|
|
489
|
+
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; }
|
|
490
|
+
var _DraggableNode = function DraggableNode(_ref) {
|
|
491
|
+
var folder = _ref.folder,
|
|
492
|
+
_ref$depth = _ref.depth,
|
|
493
|
+
depth = _ref$depth === void 0 ? 0 : _ref$depth,
|
|
494
|
+
rest = _objectWithoutProperties(_ref, _excluded$1);
|
|
495
|
+
var _useDraggable = core.useDraggable({
|
|
496
|
+
id: "draggable-item--".concat(folder.id),
|
|
497
|
+
data: folder,
|
|
498
|
+
disabled: depth <= 0
|
|
499
|
+
}),
|
|
500
|
+
isDragging = _useDraggable.isDragging,
|
|
501
|
+
attributes = _useDraggable.attributes,
|
|
502
|
+
listeners = _useDraggable.listeners,
|
|
503
|
+
setDraggableRef = _useDraggable.setNodeRef;
|
|
504
|
+
var _useDroppable = core.useDroppable({
|
|
505
|
+
id: "droppable-item--".concat(folder.id),
|
|
506
|
+
data: folder,
|
|
507
|
+
disabled: isDragging
|
|
508
|
+
}),
|
|
509
|
+
isOver = _useDroppable.isOver,
|
|
510
|
+
setDroppableRef = _useDroppable.setNodeRef;
|
|
511
|
+
var renderChildren = function renderChildren() {
|
|
512
|
+
if (neetoCist.isNotPresent(folder.children) || isDragging) return null;
|
|
513
|
+
return folder.children.map(function (child) {
|
|
514
|
+
return /*#__PURE__*/react.createElement(_DraggableNode, _objectSpread$5(_objectSpread$5({}, rest), {}, {
|
|
515
|
+
depth: depth + 1,
|
|
516
|
+
folder: child,
|
|
517
|
+
key: child.id
|
|
518
|
+
}));
|
|
519
|
+
});
|
|
520
|
+
};
|
|
521
|
+
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
522
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(Node$1, _objectSpread$5(_objectSpread$5(_objectSpread$5({}, rest), {}, {
|
|
523
|
+
className: classNames({
|
|
524
|
+
"neeto-ui-bg-gray-100 opacity-50 ": isDragging,
|
|
525
|
+
"neeto-ui-border-primary-500 border": isOver,
|
|
526
|
+
"border border-transparent": !isOver
|
|
527
|
+
})
|
|
528
|
+
}, _objectSpread$5(_objectSpread$5({
|
|
529
|
+
depth: depth,
|
|
530
|
+
folder: folder
|
|
531
|
+
}, attributes), listeners)), {}, {
|
|
532
|
+
ref: function ref(_ref2) {
|
|
533
|
+
setDroppableRef(_ref2);
|
|
534
|
+
setDraggableRef(_ref2);
|
|
535
|
+
}
|
|
536
|
+
})), renderChildren()]
|
|
537
|
+
});
|
|
538
|
+
};
|
|
539
|
+
|
|
540
|
+
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; }
|
|
541
|
+
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; }
|
|
542
|
+
var ReorderFoldersPane = function ReorderFoldersPane(_ref) {
|
|
543
|
+
var config = _ref.config,
|
|
544
|
+
onClose = _ref.onClose;
|
|
545
|
+
var _useState = react.useState(null),
|
|
546
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
547
|
+
dragItem = _useState2[0],
|
|
548
|
+
setDragItem = _useState2[1];
|
|
549
|
+
var _useState3 = react.useState({}),
|
|
550
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
551
|
+
changes = _useState4[0],
|
|
552
|
+
setChanges = _useState4[1];
|
|
553
|
+
var _useTranslation = reactI18next.useTranslation(),
|
|
554
|
+
t = _useTranslation.t;
|
|
555
|
+
var _useFetchFolders = useFolderActions.useFetchFolders(config),
|
|
556
|
+
folders = _useFetchFolders.data;
|
|
557
|
+
var _useReorderFolders = useFolderActions.useReorderFolders(config),
|
|
558
|
+
reorderFolders = _useReorderFolders.mutate;
|
|
559
|
+
var _useStateWithDependen = reactUtils.useStateWithDependency(function () {
|
|
560
|
+
return {
|
|
561
|
+
name: "/",
|
|
562
|
+
id: null,
|
|
563
|
+
children: folders
|
|
564
|
+
};
|
|
565
|
+
}, [folders]),
|
|
566
|
+
_useStateWithDependen2 = _slicedToArray(_useStateWithDependen, 2),
|
|
567
|
+
tree = _useStateWithDependen2[0],
|
|
568
|
+
setTree = _useStateWithDependen2[1];
|
|
569
|
+
var onDragEnd = function onDragEnd(_ref2) {
|
|
570
|
+
var _activeFolder$meta$pa;
|
|
571
|
+
var active = _ref2.active,
|
|
572
|
+
over = _ref2.over;
|
|
573
|
+
setDragItem(null);
|
|
574
|
+
if (!over) return;
|
|
575
|
+
var foldersMap = pathUtils.treeToMap(tree);
|
|
576
|
+
var activeFolder = foldersMap[active.data.current.id];
|
|
577
|
+
var overFolder = foldersMap[over.data.current.id];
|
|
578
|
+
|
|
579
|
+
// Check moving inside same directory
|
|
580
|
+
if (((_activeFolder$meta$pa = activeFolder.meta.parent) === null || _activeFolder$meta$pa === void 0 ? void 0 : _activeFolder$meta$pa.id) === overFolder.id) return;
|
|
581
|
+
|
|
582
|
+
// Check moving to a folder with depth greater than the allowed limit.
|
|
583
|
+
// maxDepth + 1 due to extra root node added for the tree
|
|
584
|
+
var activeDepth = pathUtils.measureDepth(activeFolder);
|
|
585
|
+
var overDepth = overFolder.meta.depth;
|
|
586
|
+
if (activeDepth + overDepth >= config.maxDepth + 1) {
|
|
587
|
+
Toastr.error(t("moveToFolder.depthExceeded", {
|
|
588
|
+
maxDepth: config.maxDepth
|
|
589
|
+
}));
|
|
590
|
+
return;
|
|
591
|
+
}
|
|
592
|
+
activeFolder.meta.parent = overFolder;
|
|
593
|
+
var newTree = pathUtils.mapToTree(foldersMap);
|
|
594
|
+
setTree(newTree);
|
|
595
|
+
setChanges(ramda.assoc(activeFolder.id, overFolder.id));
|
|
596
|
+
};
|
|
597
|
+
var onSubmit = function onSubmit() {
|
|
598
|
+
var payload = {
|
|
599
|
+
changes: changes
|
|
600
|
+
};
|
|
601
|
+
reorderFolders(payload, {
|
|
602
|
+
onSuccess: onClose
|
|
603
|
+
});
|
|
604
|
+
};
|
|
605
|
+
var nodeProps = {
|
|
606
|
+
icon: /*#__PURE__*/jsxRuntime.jsx(Folder, {}),
|
|
607
|
+
itemLabel: config.itemLabel
|
|
608
|
+
};
|
|
609
|
+
return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
610
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(Pane.Header, {
|
|
611
|
+
children: /*#__PURE__*/jsxRuntime.jsx(Typography, {
|
|
612
|
+
style: "h2",
|
|
613
|
+
children: t("reorderFolder.title")
|
|
614
|
+
})
|
|
615
|
+
}), /*#__PURE__*/jsxRuntime.jsxs(core.DndContext, {
|
|
616
|
+
onDragEnd: onDragEnd,
|
|
617
|
+
onDragStart: function onDragStart(_ref3) {
|
|
618
|
+
var active = _ref3.active;
|
|
619
|
+
return setDragItem(active.data.current);
|
|
620
|
+
},
|
|
621
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(Pane.Body, {
|
|
622
|
+
children: /*#__PURE__*/react.createElement(_DraggableNode, _objectSpread$4(_objectSpread$4({}, nodeProps), {}, {
|
|
623
|
+
folder: tree,
|
|
624
|
+
key: tree.id
|
|
625
|
+
}))
|
|
626
|
+
}), /*#__PURE__*/jsxRuntime.jsxs(Pane.Footer, {
|
|
627
|
+
className: "space-x-2",
|
|
628
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(Button, {
|
|
629
|
+
disabled: ramda.isEmpty(changes),
|
|
630
|
+
label: t("common.save"),
|
|
631
|
+
style: "primary",
|
|
632
|
+
onClick: onSubmit
|
|
633
|
+
}), /*#__PURE__*/jsxRuntime.jsx(Button, {
|
|
634
|
+
label: t("common.cancel"),
|
|
635
|
+
style: "text",
|
|
636
|
+
onClick: onClose
|
|
637
|
+
})]
|
|
638
|
+
}), /*#__PURE__*/reactDom.createPortal(/*#__PURE__*/jsxRuntime.jsx(core.DragOverlay, {
|
|
639
|
+
zIndex: 99999,
|
|
640
|
+
children: dragItem && /*#__PURE__*/jsxRuntime.jsx(Node$1, _objectSpread$4(_objectSpread$4({}, nodeProps), {}, {
|
|
641
|
+
className: "neeto-ui-bg-gray-200",
|
|
642
|
+
depth: 0,
|
|
643
|
+
folder: dragItem
|
|
644
|
+
}))
|
|
645
|
+
}), document.body)]
|
|
646
|
+
})]
|
|
647
|
+
});
|
|
648
|
+
};
|
|
649
|
+
|
|
650
|
+
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; }
|
|
651
|
+
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; }
|
|
652
|
+
var FoldersPane = function FoldersPane(_ref) {
|
|
653
|
+
var configProps = _ref.config;
|
|
654
|
+
var config = _objectSpread$3(_objectSpread$3({}, useFolderActions.DEFAULT_CONFIG), configProps);
|
|
655
|
+
var _useFolderStore = useFolderActions.useFolderStore(function (store) {
|
|
656
|
+
return {
|
|
657
|
+
setFolderState: store["setFolderState"]
|
|
658
|
+
};
|
|
659
|
+
}, shallow.shallow),
|
|
660
|
+
setFolderState = _useFolderStore.setFolderState;
|
|
661
|
+
var _useFolderStore2 = useFolderActions.useFolderStore(function (store) {
|
|
662
|
+
var _store$paneState;
|
|
663
|
+
return {
|
|
664
|
+
type: (_store$paneState = store["paneState"]) === null || _store$paneState === void 0 ? void 0 : _store$paneState["type"]
|
|
665
|
+
};
|
|
666
|
+
}, shallow.shallow),
|
|
667
|
+
type = _useFolderStore2.type;
|
|
668
|
+
var onClose = function onClose() {
|
|
669
|
+
return setFolderState({
|
|
670
|
+
paneState: null
|
|
671
|
+
});
|
|
672
|
+
};
|
|
673
|
+
var commonProps = {
|
|
674
|
+
config: config,
|
|
675
|
+
onClose: onClose
|
|
676
|
+
};
|
|
677
|
+
return /*#__PURE__*/jsxRuntime.jsxs(Pane, {
|
|
678
|
+
onClose: onClose,
|
|
679
|
+
isOpen: !!type,
|
|
680
|
+
children: [(type === "edit" || type === "add") && /*#__PURE__*/jsxRuntime.jsx(AddEditPane, _objectSpread$3({}, commonProps)), type === "move" && /*#__PURE__*/jsxRuntime.jsx(MoveFolderPane, _objectSpread$3({}, commonProps)), type === "reorder" && /*#__PURE__*/jsxRuntime.jsx(ReorderFoldersPane, _objectSpread$3({}, commonProps))]
|
|
681
|
+
});
|
|
682
|
+
};
|
|
683
|
+
|
|
684
|
+
var FoldersContext = function FoldersContext(_ref) {
|
|
685
|
+
var config = _ref.config,
|
|
686
|
+
children = _ref.children;
|
|
687
|
+
return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
688
|
+
children: [children, /*#__PURE__*/jsxRuntime.jsx(FoldersPane, {
|
|
689
|
+
config: config
|
|
690
|
+
}), /*#__PURE__*/jsxRuntime.jsx(FoldersAlerts, {
|
|
691
|
+
config: config
|
|
692
|
+
})]
|
|
693
|
+
});
|
|
694
|
+
};
|
|
695
|
+
|
|
696
|
+
var FolderTile = function FolderTile(_ref) {
|
|
697
|
+
var _folder$children$leng, _folder$children;
|
|
698
|
+
var isSelected = _ref.isSelected,
|
|
699
|
+
link = _ref.link,
|
|
700
|
+
itemLabel = _ref.itemLabel,
|
|
701
|
+
folder = _ref.folder,
|
|
702
|
+
actions = _ref.actions,
|
|
703
|
+
onSelect = _ref.onSelect;
|
|
704
|
+
var _useTranslation = reactI18next.useTranslation(),
|
|
705
|
+
t = _useTranslation.t;
|
|
706
|
+
var actionCallback = function actionCallback(callback) {
|
|
707
|
+
return function (event) {
|
|
708
|
+
event.preventDefault();
|
|
709
|
+
callback(folder);
|
|
710
|
+
};
|
|
711
|
+
};
|
|
712
|
+
var menuItems = [{
|
|
713
|
+
key: "edit",
|
|
714
|
+
label: t("common.edit"),
|
|
715
|
+
onClick: actionCallback(actions.onEdit)
|
|
716
|
+
}, {
|
|
717
|
+
key: "move",
|
|
718
|
+
label: t("common.move"),
|
|
719
|
+
onClick: actionCallback(actions.onMove)
|
|
720
|
+
}, {
|
|
721
|
+
key: "delete",
|
|
722
|
+
label: t("common.delete"),
|
|
723
|
+
onClick: actionCallback(actions.onDelete)
|
|
724
|
+
}];
|
|
725
|
+
var metaInfo = [];
|
|
726
|
+
var childCount = (_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;
|
|
727
|
+
childCount > 0 && metaInfo.push(t("folders.subfolderCount", {
|
|
728
|
+
count: childCount
|
|
729
|
+
}));
|
|
730
|
+
metaInfo.push("".concat(folder.itemCount || 0, " ").concat(itemLabel));
|
|
731
|
+
return /*#__PURE__*/jsxRuntime.jsxs(reactRouterDom.Link, {
|
|
732
|
+
className: "neeto-ui-bg-gray-100 neeto-ui-rounded-md m-2 w-64 border p-3",
|
|
733
|
+
to: link,
|
|
734
|
+
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
735
|
+
className: "mb-1 flex items-center justify-between",
|
|
736
|
+
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
737
|
+
className: "flex items-center",
|
|
738
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(Checkbox, {
|
|
739
|
+
checked: isSelected,
|
|
740
|
+
className: "mr-2",
|
|
741
|
+
name: folder.id,
|
|
742
|
+
onChange: function onChange(event) {
|
|
743
|
+
return onSelect(folder, event.target.checked);
|
|
744
|
+
},
|
|
745
|
+
onClick: function onClick(event) {
|
|
746
|
+
return event.stopPropagation();
|
|
747
|
+
}
|
|
748
|
+
}), /*#__PURE__*/jsxRuntime.jsx(Tooltip, {
|
|
749
|
+
content: folder.name,
|
|
750
|
+
delay: [300, 0],
|
|
751
|
+
children: /*#__PURE__*/jsxRuntime.jsx(Typography, {
|
|
752
|
+
className: "line-clamp-1",
|
|
753
|
+
style: "body1",
|
|
754
|
+
weight: "medium",
|
|
755
|
+
children: folder.name
|
|
756
|
+
})
|
|
757
|
+
})]
|
|
758
|
+
}), /*#__PURE__*/jsxRuntime.jsx(MoreDropdown, {
|
|
759
|
+
menuItems: menuItems,
|
|
760
|
+
dropdownProps: {
|
|
761
|
+
onClick: function onClick(event) {
|
|
762
|
+
return event.preventDefault();
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
})]
|
|
766
|
+
}), /*#__PURE__*/jsxRuntime.jsx(Typography, {
|
|
767
|
+
className: "ml-6",
|
|
768
|
+
style: "body3",
|
|
769
|
+
children: metaInfo.join(" . ")
|
|
770
|
+
})]
|
|
771
|
+
});
|
|
772
|
+
};
|
|
773
|
+
|
|
774
|
+
function ownKeys$2(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; }
|
|
775
|
+
function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
776
|
+
var FoldersList = function FoldersList(_ref) {
|
|
777
|
+
var _ref$selection = _ref.selection,
|
|
778
|
+
selection = _ref$selection === void 0 ? [] : _ref$selection,
|
|
779
|
+
configProps = _ref.config,
|
|
780
|
+
onSelect = _ref.onSelect;
|
|
781
|
+
var config = _objectSpread$2(_objectSpread$2({}, useFolderActions.DEFAULT_CONFIG), configProps);
|
|
782
|
+
var params = reactUtils.useQueryParams({
|
|
783
|
+
toCamelCase: false
|
|
784
|
+
});
|
|
785
|
+
var _useTranslation = reactI18next.useTranslation(),
|
|
786
|
+
t = _useTranslation.t;
|
|
787
|
+
var _useFolders = useFolderActions.useFolders(config),
|
|
788
|
+
folders = _useFolders.folders;
|
|
789
|
+
var _useFolder = useFolderActions.useFolder(config),
|
|
790
|
+
folderId = _useFolder.folderId,
|
|
791
|
+
folder = _useFolder.folder;
|
|
792
|
+
var actions = useFolderActions.useFolderActions(config);
|
|
793
|
+
var subFolders = folderId ? folder === null || folder === void 0 ? void 0 : folder.children : folders;
|
|
794
|
+
if (neetoCist.isNotPresent(subFolders)) return null;
|
|
795
|
+
return /*#__PURE__*/jsxRuntime.jsxs(FoldersContext, {
|
|
796
|
+
config: config,
|
|
797
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(Typography, {
|
|
798
|
+
className: "mb-2 mt-2",
|
|
799
|
+
style: "h4",
|
|
800
|
+
children: t("folders.title")
|
|
801
|
+
}), /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
802
|
+
className: "mb-6 flex flex-wrap justify-items-center",
|
|
803
|
+
children: subFolders.map(function (folder) {
|
|
804
|
+
return /*#__PURE__*/react.createElement(FolderTile, {
|
|
805
|
+
actions: actions,
|
|
806
|
+
folder: folder,
|
|
807
|
+
onSelect: onSelect,
|
|
808
|
+
isSelected: selection.includes(folder.id),
|
|
809
|
+
itemLabel: config.itemLabel,
|
|
810
|
+
key: folder.id,
|
|
811
|
+
link: utils.buildUrl(config.folderPath, _objectSpread$2(_objectSpread$2({}, params), {}, {
|
|
812
|
+
folderId: folder.sid
|
|
813
|
+
}))
|
|
814
|
+
});
|
|
815
|
+
})
|
|
816
|
+
})]
|
|
817
|
+
});
|
|
818
|
+
};
|
|
819
|
+
|
|
820
|
+
var _excluded = ["isOpen", "onClose"];
|
|
821
|
+
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; }
|
|
822
|
+
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), !0).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; }
|
|
823
|
+
var MoveToFolderPane = function MoveToFolderPane(_ref) {
|
|
824
|
+
var isOpen = _ref.isOpen,
|
|
825
|
+
onClose = _ref.onClose,
|
|
826
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
827
|
+
return /*#__PURE__*/jsxRuntime.jsx(Pane, {
|
|
828
|
+
isOpen: isOpen,
|
|
829
|
+
onClose: onClose,
|
|
830
|
+
children: /*#__PURE__*/jsxRuntime.jsx(PaneBody, _objectSpread$1({}, _objectSpread$1(_objectSpread$1({}, rest), {}, {
|
|
831
|
+
onClose: onClose
|
|
832
|
+
})))
|
|
833
|
+
});
|
|
834
|
+
};
|
|
835
|
+
|
|
836
|
+
var FolderNode = function FolderNode(_ref) {
|
|
837
|
+
var _isActive = _ref.isActive,
|
|
838
|
+
folder = _ref.folder,
|
|
839
|
+
link = _ref.link;
|
|
840
|
+
return /*#__PURE__*/jsxRuntime.jsx(reactRouterDom.NavLink, {
|
|
841
|
+
activeClassName: "active",
|
|
842
|
+
className: "block",
|
|
843
|
+
isActive: function isActive() {
|
|
844
|
+
return _isActive;
|
|
845
|
+
},
|
|
846
|
+
to: link,
|
|
847
|
+
children: /*#__PURE__*/jsxRuntime.jsx(Tooltip, {
|
|
848
|
+
content: folder.name,
|
|
849
|
+
delay: [300, 0],
|
|
850
|
+
children: /*#__PURE__*/jsxRuntime.jsx(Typography, {
|
|
851
|
+
className: "line-clamp-1",
|
|
852
|
+
component: "span",
|
|
853
|
+
style: "body2",
|
|
854
|
+
children: folder.name
|
|
855
|
+
})
|
|
856
|
+
})
|
|
857
|
+
});
|
|
858
|
+
};
|
|
859
|
+
|
|
860
|
+
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; }
|
|
861
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).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; }
|
|
862
|
+
var FoldersTree = function FoldersTree(_ref) {
|
|
863
|
+
var configProps = _ref.config;
|
|
864
|
+
var config = _objectSpread(_objectSpread({}, useFolderActions.DEFAULT_CONFIG), configProps);
|
|
865
|
+
var _useState = react.useState([]),
|
|
866
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
867
|
+
expandedKeys = _useState2[0],
|
|
868
|
+
setExpandedKeys = _useState2[1];
|
|
869
|
+
var _useTranslation = reactI18next.useTranslation(),
|
|
870
|
+
t = _useTranslation.t;
|
|
871
|
+
var params = reactUtils.useQueryParams({
|
|
872
|
+
toCamelCase: false
|
|
873
|
+
});
|
|
874
|
+
var activeFolderSid = useFolderActions.getActiveFolderId(config);
|
|
875
|
+
var _useFetchFolders = useFolderActions.useFetchFolders(config),
|
|
876
|
+
folders = _useFetchFolders.data;
|
|
877
|
+
var updateExpandedKeys = function updateExpandedKeys() {
|
|
878
|
+
var _activeFolder$meta;
|
|
879
|
+
if (!folders) return;
|
|
880
|
+
// When active folder changes from external sources, update expanded keys to auto expand tree.
|
|
881
|
+
var expandedKeys = [];
|
|
882
|
+
var map = pathUtils.treeToMap(folders, "sid");
|
|
883
|
+
var activeFolder = map[activeFolderSid];
|
|
884
|
+
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;
|
|
885
|
+
if (parentSid) expandedKeys.push(parentSid);
|
|
886
|
+
setExpandedKeys(expandedKeys);
|
|
887
|
+
};
|
|
888
|
+
react.useEffect(function () {
|
|
889
|
+
// Non urgent update.
|
|
890
|
+
react.startTransition(updateExpandedKeys);
|
|
891
|
+
}, [activeFolderSid, folders]);
|
|
892
|
+
if (neetoCist.isNotPresent(folders)) {
|
|
893
|
+
return /*#__PURE__*/jsxRuntime.jsx(Typography, {
|
|
894
|
+
className: "w-full text-center",
|
|
895
|
+
style: "body2",
|
|
896
|
+
weight: "semibold",
|
|
897
|
+
children: t("folders.noFolders")
|
|
898
|
+
});
|
|
899
|
+
}
|
|
900
|
+
return /*#__PURE__*/jsxRuntime.jsx(Tree, {
|
|
901
|
+
expandedKeys: expandedKeys,
|
|
902
|
+
autoExpandParent: true,
|
|
903
|
+
blockNode: true,
|
|
904
|
+
showLine: true,
|
|
905
|
+
componentToken: {
|
|
906
|
+
titleHeight: 25,
|
|
907
|
+
indentSize: 25
|
|
908
|
+
},
|
|
909
|
+
fieldNames: {
|
|
910
|
+
key: "sid"
|
|
911
|
+
},
|
|
912
|
+
selectedKeys: [activeFolderSid],
|
|
913
|
+
treeData: folders,
|
|
914
|
+
titleRender: function titleRender(folder) {
|
|
915
|
+
return /*#__PURE__*/jsxRuntime.jsx(FolderNode, {
|
|
916
|
+
folder: folder,
|
|
917
|
+
isActive: folder.sid === activeFolderSid,
|
|
918
|
+
link: utils.buildUrl(config.folderPath, _objectSpread(_objectSpread({}, params), {}, {
|
|
919
|
+
folderId: folder.sid
|
|
920
|
+
}))
|
|
921
|
+
});
|
|
922
|
+
},
|
|
923
|
+
onExpand: setExpandedKeys
|
|
924
|
+
});
|
|
925
|
+
};
|
|
926
|
+
|
|
927
|
+
exports.FoldersContext = FoldersContext;
|
|
928
|
+
exports.FoldersList = FoldersList;
|
|
929
|
+
exports.FoldersTree = FoldersTree;
|
|
930
|
+
exports.MoveToFolderPane = MoveToFolderPane;
|
|
931
|
+
//# sourceMappingURL=components.js.map
|