@bigbinary/neeto-tags-frontend 1.5.4 → 1.5.6

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 CHANGED
@@ -1,4 +1,4 @@
1
- # neeto-tags-nano
1
+ # neetoTagsNano
2
2
 
3
3
  This repo acts as the source of truth for the new nano's structure, configs,
4
4
  data etc.
@@ -55,6 +55,9 @@
55
55
  "nameMaxLength": "Name must be less than {{length}} characters.",
56
56
  "nameRequired": "Name is a required field.",
57
57
  "nameMustBeString": "Name must be a string"
58
+ },
59
+ "shortcuts": {
60
+ "addTag": "Add Tags"
58
61
  }
59
62
  }
60
63
  }
package/dist/index.cjs.js CHANGED
@@ -5,12 +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');
14
+ var classNames = require('classnames');
12
15
  var reactRouterDom = require('react-router-dom');
13
- var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
14
16
  var Container = require('@bigbinary/neeto-molecules/Container');
15
17
  var PageLoader = require('@bigbinary/neeto-molecules/PageLoader');
16
18
  var SubHeader = require('@bigbinary/neeto-molecules/SubHeader');
@@ -19,9 +21,7 @@ var reactQuery = require('react-query');
19
21
  var axios = require('axios');
20
22
  var NeetoHeader = require('@bigbinary/neeto-molecules/Header');
21
23
  var formik = require('@bigbinary/neetoui/formik');
22
- var i18next = require('i18next');
23
24
  var yup = require('yup');
24
- var classames = require('classnames');
25
25
  var devtools = require('react-query/devtools');
26
26
 
27
27
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -45,6 +45,7 @@ function _interopNamespace(e) {
45
45
  }
46
46
 
47
47
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
48
+ var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames);
48
49
  var Container__default = /*#__PURE__*/_interopDefaultLegacy(Container);
49
50
  var PageLoader__default = /*#__PURE__*/_interopDefaultLegacy(PageLoader);
50
51
  var SubHeader__default = /*#__PURE__*/_interopDefaultLegacy(SubHeader);
@@ -52,7 +53,6 @@ var TableWrapper__default = /*#__PURE__*/_interopDefaultLegacy(TableWrapper);
52
53
  var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
53
54
  var NeetoHeader__default = /*#__PURE__*/_interopDefaultLegacy(NeetoHeader);
54
55
  var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
55
- var classames__default = /*#__PURE__*/_interopDefaultLegacy(classames);
56
56
 
57
57
  function _extends() {
58
58
  _extends = Object.assign ? Object.assign.bind() : function (target) {
@@ -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-chat__metadata-card__spinner{scale:.6}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC9qYXZhc2NyaXB0L3NyYy9jb21wb25lbnRzL1RhZ3Mvc3R5bGVzLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0NBQ0UsUUFDRiIsInNvdXJjZXNDb250ZW50IjpbIi5uZWV0by1jaGF0X19tZXRhZGF0YS1jYXJkX19zcGlubmVyIHtcbiAgc2NhbGU6IDAuNjtcbn1cbiJdfQ== */";
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);
@@ -160,7 +212,7 @@ var Title = function Title(_ref) {
160
212
  }, 5000);
161
213
  }, [didStartUpdate, isUpdating]);
162
214
  return /*#__PURE__*/React__default["default"].createElement("div", {
163
- className: "flex w-full items-center justify-between gap-2"
215
+ className: classNames__default["default"]("flex w-full items-center justify-between gap-2", titleProps.containerClassName)
164
216
  }, /*#__PURE__*/React__default["default"].createElement("div", {
165
217
  className: "flex items-center gap-2"
166
218
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, _extends({
@@ -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-chat__metadata-card__spinner"
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
- return /*#__PURE__*/React__default["default"].createElement("div", _extends({
253
- className: "neeto-ui-tags-wrapper flex w-full flex-col items-start gap-2"
254
- }, containerProps), showTitleBar && /*#__PURE__*/React__default["default"].createElement(Title, {
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
- }), isTagsBodyVisible && /*#__PURE__*/React__default["default"].createElement("div", _extends({
261
- className: "neeto-ui-bg-white neeto-ui-border-gray-300 neeto-ui-rounded-lg w-full border p-4"
262
- }, bodyProps), neetoCist.isNotEmpty(selectedTags) && /*#__PURE__*/React__default["default"].createElement("div", {
263
- className: "neeto-ui-flex neeto-ui-flex-row neeto-ui-flex-wrap neeto-ui-items-start neeto-ui-justify-start gap-2 break-all"
264
- }, selectedTags === null || selectedTags === void 0 ? void 0 : selectedTags.map(function (tag, index) {
265
- return /*#__PURE__*/React__default["default"].createElement(neetoui.Tag, _extends({
266
- key: "".concat(index, "-").concat(tag.label),
267
- label: tag.label,
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
- maxLength: 50,
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
- }, selectProps)), isAddTagsButtonVisible && /*#__PURE__*/React__default["default"].createElement(neetoui.Button, _extends({
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",
@@ -1028,7 +1085,7 @@ var List = function List(_ref) {
1028
1085
  return /*#__PURE__*/React__default["default"].createElement("div", {
1029
1086
  "data-cy": "neeto-tags-merge-".concat(listType.value, "-tags"),
1030
1087
  key: tag.id,
1031
- className: classames__default["default"]("neeto-ui-flex neeto-ui-justify-between neeto-ui-items-center neeto-tags-border neeto-ui-border-white neeto-ui-p-2 neeto-ui-rounded-lg neeto-ui-mt-2 neeto-ui-cursor-pointer", {
1088
+ className: classNames__default["default"]("neeto-ui-flex neeto-ui-justify-between neeto-ui-items-center neeto-tags-border neeto-ui-border-white neeto-ui-p-2 neeto-ui-rounded-lg neeto-ui-mt-2 neeto-ui-cursor-pointer", {
1032
1089
  "neeto-ui-bg-pastel-blue neeto-ui-border-primary-600": selectedTagIds,
1033
1090
  "hover:neeto-ui-bg-gray-100": !selectedTagIds,
1034
1091
  "neeto-ui-cursor-not-allowed neeto-ui-bg-gray-100 neeto-ui-text-gray-500": selectedCounterTags