@bigbinary/neeto-tags-frontend 1.5.5 → 1.5.7
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 +1 -1
- package/app/javascript/src/translations/en.json +3 -0
- package/dist/index.cjs.js +107 -59
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.js +108 -60
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
package/dist/index.cjs.js
CHANGED
|
@@ -5,13 +5,14 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var React = require('react');
|
|
6
6
|
var neetoCist = require('@bigbinary/neeto-cist');
|
|
7
7
|
var constants = require('@bigbinary/neeto-commons-frontend/constants');
|
|
8
|
+
var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
|
|
8
9
|
var neetoIcons = require('@bigbinary/neeto-icons');
|
|
9
10
|
var neetoui = require('@bigbinary/neetoui');
|
|
10
11
|
var ramda = require('ramda');
|
|
11
12
|
var reactI18next = require('react-i18next');
|
|
13
|
+
var i18next = require('i18next');
|
|
12
14
|
var classNames = require('classnames');
|
|
13
15
|
var reactRouterDom = require('react-router-dom');
|
|
14
|
-
var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
|
|
15
16
|
var Container = require('@bigbinary/neeto-molecules/Container');
|
|
16
17
|
var PageLoader = require('@bigbinary/neeto-molecules/PageLoader');
|
|
17
18
|
var SubHeader = require('@bigbinary/neeto-molecules/SubHeader');
|
|
@@ -20,7 +21,6 @@ var reactQuery = require('react-query');
|
|
|
20
21
|
var axios = require('axios');
|
|
21
22
|
var NeetoHeader = require('@bigbinary/neeto-molecules/Header');
|
|
22
23
|
var formik = require('@bigbinary/neetoui/formik');
|
|
23
|
-
var i18next = require('i18next');
|
|
24
24
|
var yup = require('yup');
|
|
25
25
|
var devtools = require('react-query/devtools');
|
|
26
26
|
|
|
@@ -124,18 +124,70 @@ function _slicedToArray(arr, i) {
|
|
|
124
124
|
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
+
var KEYBOARD_SHORTCUTS = {
|
|
128
|
+
addTag: {
|
|
129
|
+
sequence: "t",
|
|
130
|
+
description: i18next.t("neetoTags.shortcuts.addTag")
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
|
|
127
134
|
var e=[],t=[];function n(n,r){if(n&&"undefined"!=typeof document){var a,s=!0===r.prepend?"prepend":"append",d=!0===r.singleTag,i="string"==typeof r.container?document.querySelector(r.container):document.getElementsByTagName("head")[0];if(d){var u=e.indexOf(i);-1===u&&(u=e.push(i)-1,t[u]={}),a=t[u]&&t[u][s]?t[u][s]:t[u][s]=c();}else a=c();65279===n.charCodeAt(0)&&(n=n.substring(1)),a.styleSheet?a.styleSheet.cssText+=n:a.appendChild(document.createTextNode(n));}function c(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),r.attributes)for(var t=Object.keys(r.attributes),n=0;n<t.length;n++)e.setAttribute(t[n],r.attributes[t[n]]);var a="prepend"===s?"afterbegin":"beforeend";return i.insertAdjacentElement(a,e),e}}
|
|
128
135
|
|
|
129
|
-
var css$1 = ".neeto-
|
|
136
|
+
var css$1 = ".neeto-tags__metadata-card__spinner{scale:.6}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC9qYXZhc2NyaXB0L3NyYy9jb21wb25lbnRzL1RhZ3Mvc3R5bGVzLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0NBQ0UsUUFDRiIsInNvdXJjZXNDb250ZW50IjpbIi5uZWV0by10YWdzX19tZXRhZGF0YS1jYXJkX19zcGlubmVyIHtcbiAgc2NhbGU6IDAuNjtcbn1cbiJdfQ== */";
|
|
130
137
|
n(css$1,{});
|
|
131
138
|
|
|
139
|
+
var TagsList = function TagsList(_ref) {
|
|
140
|
+
var selectedTags = _ref.selectedTags,
|
|
141
|
+
isDisabled = _ref.isDisabled,
|
|
142
|
+
handleDeleteTag = _ref.handleDeleteTag,
|
|
143
|
+
tagProps = _ref.tagProps;
|
|
144
|
+
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
145
|
+
className: "neeto-ui-flex neeto-ui-flex-row neeto-ui-flex-wrap neeto-ui-items-start neeto-ui-justify-start gap-2 break-all"
|
|
146
|
+
}, selectedTags === null || selectedTags === void 0 ? void 0 : selectedTags.map(function (tag) {
|
|
147
|
+
return /*#__PURE__*/React__default["default"].createElement(neetoui.Tag, _extends({
|
|
148
|
+
disabled: isDisabled,
|
|
149
|
+
key: tag.value,
|
|
150
|
+
label: tag.label,
|
|
151
|
+
style: "primary",
|
|
152
|
+
className: classNames__default["default"]({
|
|
153
|
+
"cursor-not-allowed opacity-50": isDisabled
|
|
154
|
+
}),
|
|
155
|
+
onClose: function onClose() {
|
|
156
|
+
return !isDisabled && handleDeleteTag(tag);
|
|
157
|
+
}
|
|
158
|
+
}, tagProps));
|
|
159
|
+
}));
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
var TagsSelector = reactUtils.withT(function (_ref) {
|
|
163
|
+
var t = _ref.t,
|
|
164
|
+
defaultMenuIsOpen = _ref.defaultMenuIsOpen,
|
|
165
|
+
tags = _ref.tags,
|
|
166
|
+
onChange = _ref.onChange,
|
|
167
|
+
onCreateOption = _ref.onCreateOption,
|
|
168
|
+
selectProps = _ref.selectProps;
|
|
169
|
+
return /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
|
|
170
|
+
defaultMenuIsOpen: defaultMenuIsOpen,
|
|
171
|
+
onChange: onChange,
|
|
172
|
+
onCreateOption: onCreateOption,
|
|
173
|
+
autoFocus: true,
|
|
174
|
+
isCreateable: true,
|
|
175
|
+
className: "neeto-ui-mt-4",
|
|
176
|
+
maxLength: 50,
|
|
177
|
+
options: tags,
|
|
178
|
+
placeholder: t("neetoTags.placeholder.selectOrCreateTag")
|
|
179
|
+
}, selectProps));
|
|
180
|
+
});
|
|
181
|
+
|
|
132
182
|
var Title = function Title(_ref) {
|
|
133
183
|
var _ref$titleProps = _ref.titleProps,
|
|
134
184
|
titleProps = _ref$titleProps === void 0 ? {} : _ref$titleProps,
|
|
135
185
|
title = _ref.title,
|
|
136
186
|
isUpdating = _ref.isUpdating,
|
|
137
187
|
setIsTagsDropdownVisible = _ref.setIsTagsDropdownVisible,
|
|
138
|
-
showAddTagsOnTitle = _ref.showAddTagsOnTitle
|
|
188
|
+
showAddTagsOnTitle = _ref.showAddTagsOnTitle,
|
|
189
|
+
isDisabled = _ref.isDisabled,
|
|
190
|
+
isLoading = _ref.isLoading;
|
|
139
191
|
var _useTranslation = reactI18next.useTranslation(),
|
|
140
192
|
t = _useTranslation.t;
|
|
141
193
|
var tagsTitle = title || t("neetoTags.common.tag", constants.PLURAL);
|
|
@@ -169,12 +221,13 @@ var Title = function Title(_ref) {
|
|
|
169
221
|
weight: "bold"
|
|
170
222
|
}, titleProps), tagsTitle), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
171
223
|
className: "inline-flex h-6 items-center"
|
|
172
|
-
}, isUpdating && /*#__PURE__*/React__default["default"].createElement(neetoui.Spinner, {
|
|
173
|
-
className: "neeto-
|
|
224
|
+
}, (isUpdating || isLoading) && /*#__PURE__*/React__default["default"].createElement(neetoui.Spinner, {
|
|
225
|
+
className: "neeto-tags__metadata-card__spinner"
|
|
174
226
|
}), !isUpdating && isCheckIconVisible && /*#__PURE__*/React__default["default"].createElement(neetoIcons.Check, {
|
|
175
227
|
className: "neeto-ui-text-success-500",
|
|
176
228
|
size: 20
|
|
177
229
|
}))), showAddTagsOnTitle && /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
|
|
230
|
+
disabled: isDisabled,
|
|
178
231
|
icon: neetoIcons.Settings,
|
|
179
232
|
size: "15",
|
|
180
233
|
style: "icon",
|
|
@@ -211,16 +264,24 @@ var Tags$2 = function Tags(_ref) {
|
|
|
211
264
|
isUpdating = _ref$isUpdating === void 0 ? false : _ref$isUpdating,
|
|
212
265
|
_ref$showAddTagsOnTit = _ref.showAddTagsOnTitle,
|
|
213
266
|
showAddTagsOnTitle = _ref$showAddTagsOnTit === void 0 ? true : _ref$showAddTagsOnTit,
|
|
267
|
+
_ref$isLoading = _ref.isLoading,
|
|
268
|
+
isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,
|
|
214
269
|
_ref$showTitleBar = _ref.showTitleBar,
|
|
215
270
|
showTitleBar = _ref$showTitleBar === void 0 ? true : _ref$showTitleBar,
|
|
216
271
|
_ref$bodyProps = _ref.bodyProps,
|
|
217
|
-
bodyProps = _ref$bodyProps === void 0 ? {} : _ref$bodyProps
|
|
272
|
+
bodyProps = _ref$bodyProps === void 0 ? {} : _ref$bodyProps,
|
|
273
|
+
_ref$isDisabled = _ref.isDisabled,
|
|
274
|
+
isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled;
|
|
218
275
|
var _useTranslation = reactI18next.useTranslation(),
|
|
219
276
|
t = _useTranslation.t;
|
|
220
277
|
var _useState = React.useState(false),
|
|
221
278
|
_useState2 = _slicedToArray(_useState, 2),
|
|
222
279
|
isTagsDropdownVisible = _useState2[0],
|
|
223
280
|
setIsTagsDropdownVisible = _useState2[1];
|
|
281
|
+
reactUtils.useHotKeys(KEYBOARD_SHORTCUTS.addTag.sequence, function (event) {
|
|
282
|
+
event.preventDefault();
|
|
283
|
+
setIsTagsDropdownVisible(true);
|
|
284
|
+
});
|
|
224
285
|
var tags = React.useMemo(function () {
|
|
225
286
|
if (!allTags) return [];
|
|
226
287
|
if (!selectedTags) return allTags;
|
|
@@ -249,44 +310,40 @@ var Tags$2 = function Tags(_ref) {
|
|
|
249
310
|
};
|
|
250
311
|
var isAddTagsButtonVisible = !showAddTagsOnTitle && !isTagsDropdownVisible;
|
|
251
312
|
var isTagsBodyVisible = neetoCist.isNotEmpty(selectedTags) || isTagsDropdownVisible || isAddTagsButtonVisible;
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
313
|
+
var titleComponentProps = {
|
|
314
|
+
isDisabled: isDisabled,
|
|
315
|
+
isLoading: isLoading,
|
|
255
316
|
isUpdating: isUpdating,
|
|
256
317
|
setIsTagsDropdownVisible: setIsTagsDropdownVisible,
|
|
257
318
|
showAddTagsOnTitle: showAddTagsOnTitle,
|
|
258
319
|
title: title,
|
|
259
320
|
titleProps: titleProps
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
style: "primary",
|
|
269
|
-
onClose: function onClose() {
|
|
270
|
-
return handleDeleteTag(tag);
|
|
271
|
-
}
|
|
272
|
-
}, tagProps));
|
|
273
|
-
})), isTagsDropdownVisible && /*#__PURE__*/React__default["default"].createElement(neetoui.Select, _extends({
|
|
274
|
-
autoFocus: true,
|
|
275
|
-
isCreateable: true,
|
|
276
|
-
className: "neeto-ui-mt-4",
|
|
321
|
+
};
|
|
322
|
+
var tagsListProps = {
|
|
323
|
+
handleDeleteTag: handleDeleteTag,
|
|
324
|
+
isDisabled: isDisabled,
|
|
325
|
+
selectedTags: selectedTags,
|
|
326
|
+
tagProps: tagProps
|
|
327
|
+
};
|
|
328
|
+
var tagsSelectorProps = {
|
|
277
329
|
defaultMenuIsOpen: showAddTagsOnTitle,
|
|
278
|
-
|
|
279
|
-
options: tags,
|
|
280
|
-
placeholder: t("neetoTags.placeholder.selectOrCreateTag"),
|
|
330
|
+
tags: tags,
|
|
281
331
|
onChange: function onChange(event) {
|
|
282
332
|
return handleAddExistingTag(event);
|
|
283
333
|
},
|
|
284
334
|
onCreateOption: function onCreateOption(event) {
|
|
285
335
|
setIsTagsDropdownVisible(false);
|
|
286
336
|
onTagCreate(event);
|
|
287
|
-
}
|
|
288
|
-
|
|
337
|
+
},
|
|
338
|
+
selectProps: selectProps
|
|
339
|
+
};
|
|
340
|
+
return /*#__PURE__*/React__default["default"].createElement("div", _extends({
|
|
341
|
+
className: "neeto-ui-tags-wrapper flex w-full flex-col items-start gap-2"
|
|
342
|
+
}, containerProps), showTitleBar && /*#__PURE__*/React__default["default"].createElement(Title, titleComponentProps), isTagsBodyVisible && /*#__PURE__*/React__default["default"].createElement("div", _extends({
|
|
343
|
+
className: "neeto-ui-bg-white neeto-ui-border-gray-300 neeto-ui-rounded-lg w-full border p-4"
|
|
344
|
+
}, bodyProps), neetoCist.isNotEmpty(selectedTags) && /*#__PURE__*/React__default["default"].createElement(TagsList, tagsListProps), isTagsDropdownVisible && /*#__PURE__*/React__default["default"].createElement(TagsSelector, tagsSelectorProps), isAddTagsButtonVisible && /*#__PURE__*/React__default["default"].createElement(neetoui.Button, _extends({
|
|
289
345
|
className: "neeto-ui-mt-4",
|
|
346
|
+
disabled: isDisabled,
|
|
290
347
|
icon: neetoIcons.Plus,
|
|
291
348
|
label: t("neetoTags.button.addTag", constants.SINGULAR),
|
|
292
349
|
size: "small",
|
|
@@ -501,9 +558,6 @@ var Header = function Header(_ref) {
|
|
|
501
558
|
tagsMergable = _ref$tagsMergable === void 0 ? false : _ref$tagsMergable,
|
|
502
559
|
setPaneType = _ref.setPaneType,
|
|
503
560
|
setSelectedTag = _ref.setSelectedTag,
|
|
504
|
-
_ref$searchTerm = _ref.searchTerm,
|
|
505
|
-
searchTerm = _ref$searchTerm === void 0 ? "" : _ref$searchTerm,
|
|
506
|
-
setSearchTerm = _ref.setSearchTerm,
|
|
507
561
|
_ref$goToFirstPage = _ref.goToFirstPage,
|
|
508
562
|
goToFirstPage = _ref$goToFirstPage === void 0 ? neetoCist.noop : _ref$goToFirstPage,
|
|
509
563
|
_ref$tagsPath = _ref.tagsPath,
|
|
@@ -512,6 +566,9 @@ var Header = function Header(_ref) {
|
|
|
512
566
|
var _useTranslation = reactI18next.useTranslation(),
|
|
513
567
|
t = _useTranslation.t;
|
|
514
568
|
var history = reactRouterDom.useHistory();
|
|
569
|
+
var resetPage = reactUtils.useFuncDebounce(function () {
|
|
570
|
+
return goToFirstPage();
|
|
571
|
+
});
|
|
515
572
|
var ActionBlock = function ActionBlock() {
|
|
516
573
|
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, tagsMergable && /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
|
|
517
574
|
"data-cy": "neeto-tags-merge-tags-button",
|
|
@@ -529,17 +586,12 @@ var Header = function Header(_ref) {
|
|
|
529
586
|
}));
|
|
530
587
|
};
|
|
531
588
|
return /*#__PURE__*/React__default["default"].createElement(NeetoHeader__default["default"], {
|
|
532
|
-
actionBlock: /*#__PURE__*/React__default["default"].createElement(ActionBlock, null),
|
|
533
589
|
breadcrumbs: breadcrumbs,
|
|
590
|
+
actionBlock: /*#__PURE__*/React__default["default"].createElement(ActionBlock, null),
|
|
534
591
|
title: t("neetoTags.common.tag", constants.PLURAL),
|
|
535
592
|
searchProps: {
|
|
536
593
|
"data-cy": "neeto-tags-search-text-input-field",
|
|
537
|
-
|
|
538
|
-
onChange: function onChange(_ref2) {
|
|
539
|
-
var value = _ref2.target.value;
|
|
540
|
-
value.trim() && goToFirstPage();
|
|
541
|
-
setSearchTerm(value);
|
|
542
|
-
},
|
|
594
|
+
onChange: resetPage,
|
|
543
595
|
placeholder: t("neetoTags.placeholder.searchTags")
|
|
544
596
|
}
|
|
545
597
|
});
|
|
@@ -774,26 +826,24 @@ var Dashboard = function Dashboard(_ref) {
|
|
|
774
826
|
_useState2 = _slicedToArray(_useState, 2),
|
|
775
827
|
selectedTag = _useState2[0],
|
|
776
828
|
setSelectedTag = _useState2[1];
|
|
777
|
-
var _useState3 = React.useState(
|
|
829
|
+
var _useState3 = React.useState(constants.DEFAULT_PAGE_INDEX),
|
|
778
830
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
var _useState5 = React.useState(
|
|
831
|
+
page = _useState4[0],
|
|
832
|
+
setPage = _useState4[1];
|
|
833
|
+
var _useState5 = React.useState(null),
|
|
782
834
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
var _useState7 = React.useState(
|
|
835
|
+
paneType = _useState6[0],
|
|
836
|
+
setPaneType = _useState6[1];
|
|
837
|
+
var _useState7 = React.useState(false),
|
|
786
838
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
var
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
setIsDeleteAlertOpen = _useState10[1];
|
|
793
|
-
var debouncedSearchTerm = reactUtils.useDebounce(searchTerm, 500);
|
|
839
|
+
isDeleteAlertOpen = _useState8[0],
|
|
840
|
+
setIsDeleteAlertOpen = _useState8[1];
|
|
841
|
+
var _useQueryParams = reactUtils.useQueryParams(),
|
|
842
|
+
_useQueryParams$searc = _useQueryParams.search_term,
|
|
843
|
+
searchTerm = _useQueryParams$searc === void 0 ? "" : _useQueryParams$searc;
|
|
794
844
|
var _useFetchTags = useFetchTags({
|
|
795
845
|
url: tagType.url,
|
|
796
|
-
searchTerm:
|
|
846
|
+
searchTerm: searchTerm,
|
|
797
847
|
pageSize: constants.DEFAULT_PAGE_SIZE,
|
|
798
848
|
page: page
|
|
799
849
|
}),
|
|
@@ -861,9 +911,7 @@ var Dashboard = function Dashboard(_ref) {
|
|
|
861
911
|
breadcrumbs: breadcrumbs,
|
|
862
912
|
data: data,
|
|
863
913
|
displayMenu: displayMenu,
|
|
864
|
-
searchTerm: searchTerm,
|
|
865
914
|
setPaneType: setPaneType,
|
|
866
|
-
setSearchTerm: setSearchTerm,
|
|
867
915
|
setSelectedTag: setSelectedTag,
|
|
868
916
|
tagsMergable: tagsMergable,
|
|
869
917
|
tagsPath: tagsPath,
|