@bigbinary/neeto-molecules 1.0.36 → 1.0.38

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.
@@ -6,11 +6,33 @@ var utils = require('@bigbinary/neeto-commons-frontend/utils');
6
6
  var neetoIcons = require('@bigbinary/neeto-icons');
7
7
  var neetoui = require('@bigbinary/neetoui');
8
8
  var reactI18next = require('react-i18next');
9
+ var formik = require('formik');
10
+ var formik$1 = require('@bigbinary/neetoui/formik');
9
11
  var i18next = require('i18next');
12
+ var yup = require('yup');
10
13
 
11
14
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
15
 
16
+ function _interopNamespace(e) {
17
+ if (e && e.__esModule) return e;
18
+ var n = Object.create(null);
19
+ if (e) {
20
+ Object.keys(e).forEach(function (k) {
21
+ if (k !== 'default') {
22
+ var d = Object.getOwnPropertyDescriptor(e, k);
23
+ Object.defineProperty(n, k, d.get ? d : {
24
+ enumerable: true,
25
+ get: function () { return e[k]; }
26
+ });
27
+ }
28
+ });
29
+ }
30
+ n["default"] = e;
31
+ return Object.freeze(n);
32
+ }
33
+
13
34
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
35
+ var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
14
36
 
15
37
  function _arrayWithHoles(arr) {
16
38
  if (Array.isArray(arr)) return arr;
@@ -67,11 +89,150 @@ function _slicedToArray(arr, i) {
67
89
  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
68
90
  }
69
91
 
92
+ var facebookShareLink = function facebookShareLink(_ref) {
93
+ var id = _ref.id;
94
+ return utils.buildUrl("https://www.facebook.com/sharer/sharer.php", {
95
+ u: "https://".concat(window.location.host, "/").concat(id)
96
+ });
97
+ };
98
+ var linkedInShareLink = function linkedInShareLink(_ref2) {
99
+ var id = _ref2.id,
100
+ title = _ref2.title;
101
+ return utils.buildUrl("https://www.linkedin.com/shareArticle", {
102
+ mini: true,
103
+ url: "https://".concat(window.location.host, "/").concat(id),
104
+ title: title
105
+ });
106
+ };
107
+ var twitterShareLink = function twitterShareLink(_ref3) {
108
+ var id = _ref3.id,
109
+ title = _ref3.title;
110
+ return utils.buildUrl("http://twitter.com/share", {
111
+ text: title,
112
+ url: "https://".concat(window.location.host, "/").concat(id)
113
+ });
114
+ };
115
+ var downloadCanvas = function downloadCanvas(canvas) {
116
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
117
+ var _options$name = options.name,
118
+ name = _options$name === void 0 ? "image" : _options$name,
119
+ _options$extension = options.extension,
120
+ extension = _options$extension === void 0 ? "png" : _options$extension;
121
+ var canvasUrl = canvas.toDataURL("image/".concat(extension));
122
+ var element = document.createElement("a");
123
+ element.href = canvasUrl;
124
+ element.download = "".concat(name, ".").concat(extension);
125
+ element.click();
126
+ element.remove();
127
+ };
128
+ var getPathname = function getPathname(url) {
129
+ return new URL(url).pathname.slice(1);
130
+ };
131
+ var getPrefixFromUrl = function getPrefixFromUrl(url) {
132
+ return "".concat(new URL(url).origin, "/");
133
+ };
134
+ var truncatePrefix = function truncatePrefix(url) {
135
+ return url.length > MAX_PREFIX_SIZE ? "...".concat(url.slice(-MAX_PREFIX_SIZE)) : url;
136
+ };
137
+
138
+ var SOCIAL_MEDIA_OPTIONS = {
139
+ FACEBOOK: {
140
+ label: i18next.t("neetoMolecules.shareViaLink.socialMediaShare.facebook"),
141
+ icon: neetoIcons.Facebook,
142
+ generateShareUrl: facebookShareLink
143
+ },
144
+ LINKEDIN: {
145
+ label: i18next.t("neetoMolecules.shareViaLink.socialMediaShare.linkedIn"),
146
+ icon: neetoIcons.Linkedin,
147
+ generateShareUrl: linkedInShareLink
148
+ },
149
+ TWITTER: {
150
+ label: i18next.t("neetoMolecules.shareViaLink.socialMediaShare.twitter"),
151
+ icon: neetoIcons.Twitter,
152
+ generateShareUrl: twitterShareLink
153
+ }
154
+ };
155
+ var PATH_VALIDATION_SCHEMA = yup__namespace.object().shape({
156
+ path: yup__namespace.string().required(i18next.t("neetoMolecules.shareViaLink.editUrl.validationError")).matches(/^[A-Za-z0-9]([\w/-])*$/, i18next.t("neetoMolecules.shareViaLink.editUrl.validationError"))
157
+ });
158
+ var MAX_PREFIX_SIZE = 30;
159
+
160
+ 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}}
161
+
162
+ var css = ".no-padding .neeto-ui-input.neeto-ui-input--medium input{padding:0}.no-padding .neeto-ui-input__prefix{color:rgb(var(--neeto-ui-gray-600))!important}";
163
+ n(css,{});
164
+
165
+ var EditURL = function EditURL(_ref) {
166
+ var editUrlProps = _ref.editUrlProps,
167
+ isOpen = _ref.isOpen,
168
+ onClose = _ref.onClose,
169
+ url = _ref.url,
170
+ isLoading = _ref.isLoading,
171
+ handleEdit = _ref.handleEdit;
172
+ var _useTranslation = reactI18next.useTranslation(),
173
+ t = _useTranslation.t;
174
+ var focusRef = React.useRef(null);
175
+ var handleSubmit = function handleSubmit(values) {
176
+ handleEdit(values.path);
177
+ onClose();
178
+ };
179
+ return /*#__PURE__*/React__default["default"].createElement(neetoui.Modal, {
180
+ "data-testid": "edit-url-modal",
181
+ initialFocusRef: focusRef,
182
+ isOpen: isOpen,
183
+ onClose: onClose
184
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Modal.Header, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
185
+ lineHeight: "normal",
186
+ style: "h2",
187
+ weight: "semibold"
188
+ }, t("neetoMolecules.shareViaLink.editUrl.title"))), /*#__PURE__*/React__default["default"].createElement(formik.Formik, {
189
+ enableReinitialize: true,
190
+ initialValues: {
191
+ path: (editUrlProps === null || editUrlProps === void 0 ? void 0 : editUrlProps.editablePath) || getPathname(url)
192
+ },
193
+ validationSchema: PATH_VALIDATION_SCHEMA,
194
+ onSubmit: handleSubmit
195
+ }, function (_ref2) {
196
+ var isSubmitting = _ref2.isSubmitting,
197
+ dirty = _ref2.dirty;
198
+ return /*#__PURE__*/React__default["default"].createElement(formik.Form, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Modal.Body, {
199
+ className: "w-full space-y-6"
200
+ }, /*#__PURE__*/React__default["default"].createElement(formik$1.Input, {
201
+ className: "no-padding",
202
+ "data-testid": "edit-url-input",
203
+ label: t("neetoMolecules.shareViaLink.editUrl.inputLabel"),
204
+ maxLength: editUrlProps === null || editUrlProps === void 0 ? void 0 : editUrlProps.maxLength,
205
+ name: "path",
206
+ ref: focusRef,
207
+ prefix: truncatePrefix((editUrlProps === null || editUrlProps === void 0 ? void 0 : editUrlProps.prefix) || getPrefixFromUrl(url))
208
+ }), /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
209
+ className: "neeto-ui-text-gray-700",
210
+ lineHeight: "normal",
211
+ style: "body2"
212
+ }, t("neetoMolecules.shareViaLink.editUrl.description"))), /*#__PURE__*/React__default["default"].createElement(neetoui.Modal.Footer, {
213
+ className: "space-x-2"
214
+ }, /*#__PURE__*/React__default["default"].createElement(formik$1.Button, {
215
+ "data-testid": "edit-url-confirm-button",
216
+ disabled: isSubmitting || !dirty,
217
+ loading: isLoading,
218
+ type: "submit",
219
+ label: t("neetoMolecules.shareViaLink.editUrl.submitButtonLabel")
220
+ }), /*#__PURE__*/React__default["default"].createElement(formik$1.Button, {
221
+ "data-testid": "edit-url-cancel-button",
222
+ disabled: isSubmitting,
223
+ style: "text",
224
+ type: "reset",
225
+ label: t("neetoMolecules.shareViaLink.editUrl.cancelButtonLabel"),
226
+ onClick: onClose
227
+ })));
228
+ }));
229
+ };
230
+
70
231
  var RegenerateURL = function RegenerateURL(_ref) {
71
232
  var isOpen = _ref.isOpen,
72
233
  onClose = _ref.onClose,
73
234
  url = _ref.url,
74
- isRegenerating = _ref.isRegenerating,
235
+ isLoading = _ref.isLoading,
75
236
  handleRegenerate = _ref.handleRegenerate;
76
237
  var _useTranslation = reactI18next.useTranslation(),
77
238
  t = _useTranslation.t;
@@ -93,15 +254,11 @@ var RegenerateURL = function RegenerateURL(_ref) {
93
254
  className: "neeto-ui-text-gray-700",
94
255
  lineHeight: "normal",
95
256
  style: "body2"
96
- }, t("neetoMolecules.shareViaLink.regenerateUrl.description")), /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
97
- className: "neeto-ui-text-gray-700",
98
- lineHeight: "normal",
99
- style: "body2"
100
- }, t("neetoMolecules.shareViaLink.regenerateUrl.confirmation")))), /*#__PURE__*/React__default["default"].createElement(neetoui.Modal.Footer, {
257
+ }, t("neetoMolecules.shareViaLink.regenerateUrl.description")))), /*#__PURE__*/React__default["default"].createElement(neetoui.Modal.Footer, {
101
258
  className: "space-x-2"
102
259
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
103
260
  "data-testid": "regenerate-url-confirm-button",
104
- loading: isRegenerating,
261
+ loading: isLoading,
105
262
  label: t("neetoMolecules.shareViaLink.regenerateUrl.submitButtonLabel"),
106
263
  onClick: function onClick() {
107
264
  handleRegenerate();
@@ -118,18 +275,25 @@ var RegenerateURL = function RegenerateURL(_ref) {
118
275
  var Menu = neetoui.Dropdown.Menu,
119
276
  MenuItem = neetoui.Dropdown.MenuItem;
120
277
  var Link = function Link(_ref) {
121
- var enableRegenerateUrl = _ref.enableRegenerateUrl,
278
+ var editUrlProps = _ref.editUrlProps,
279
+ enabledOptions = _ref.enabledOptions,
122
280
  entityName = _ref.entityName,
281
+ handleEdit = _ref.handleEdit,
123
282
  handleRegenerate = _ref.handleRegenerate,
124
- isRegenerating = _ref.isRegenerating,
283
+ isLoading = _ref.isLoading,
125
284
  previewUrl = _ref.previewUrl,
126
285
  url = _ref.url;
127
286
  var _useState = React.useState(false),
128
287
  _useState2 = _slicedToArray(_useState, 2),
129
288
  isRegenerateURLModalOpen = _useState2[0],
130
289
  setIsRegenerateURLModalOpen = _useState2[1];
290
+ var _useState3 = React.useState(false),
291
+ _useState4 = _slicedToArray(_useState3, 2),
292
+ isEditURLModalOpen = _useState4[0],
293
+ setIsEditURLModalOpen = _useState4[1];
131
294
  var _useTranslation = reactI18next.useTranslation(),
132
295
  t = _useTranslation.t;
296
+ var isDropdownEnabled = enabledOptions.regenerate || enabledOptions.edit;
133
297
  return /*#__PURE__*/React__default["default"].createElement("div", {
134
298
  className: "space-y-4",
135
299
  "data-testid": "link-block"
@@ -171,80 +335,40 @@ var Link = function Link(_ref) {
171
335
  }),
172
336
  position: "top"
173
337
  }
174
- }), enableRegenerateUrl && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Dropdown, {
338
+ }), isDropdownEnabled && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Dropdown, {
175
339
  buttonStyle: "text",
176
340
  icon: neetoIcons.MenuHorizontal
177
- }, /*#__PURE__*/React__default["default"].createElement(Menu, null, /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
341
+ }, /*#__PURE__*/React__default["default"].createElement(Menu, null, enabledOptions.regenerate && /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
178
342
  "data-testid": "regenerate-url-button",
343
+ isDisabled: !enabledOptions.regenerate,
179
344
  onClick: function onClick() {
180
345
  return setIsRegenerateURLModalOpen(true);
181
346
  }
182
- }, t("neetoMolecules.shareViaLink.regenerateUrl.title")))), /*#__PURE__*/React__default["default"].createElement(RegenerateURL, {
347
+ }, t("neetoMolecules.shareViaLink.regenerateUrl.title")), enabledOptions.edit && /*#__PURE__*/React__default["default"].createElement(MenuItem.Button, {
348
+ "data-testid": "edit-url-button",
349
+ onClick: function onClick() {
350
+ return setIsEditURLModalOpen(true);
351
+ }
352
+ }, t("neetoMolecules.shareViaLink.editUrl.title")))), /*#__PURE__*/React__default["default"].createElement(RegenerateURL, {
183
353
  handleRegenerate: handleRegenerate,
354
+ isLoading: isLoading,
184
355
  isOpen: isRegenerateURLModalOpen,
185
- isRegenerating: isRegenerating,
186
356
  url: url,
187
357
  onClose: function onClose() {
188
358
  return setIsRegenerateURLModalOpen(false);
189
359
  }
360
+ }), /*#__PURE__*/React__default["default"].createElement(EditURL, {
361
+ editUrlProps: editUrlProps,
362
+ handleEdit: handleEdit,
363
+ isLoading: isLoading,
364
+ isOpen: isEditURLModalOpen,
365
+ url: url,
366
+ onClose: function onClose() {
367
+ return setIsEditURLModalOpen(false);
368
+ }
190
369
  }))));
191
370
  };
192
371
 
193
- var facebookShareLink = function facebookShareLink(_ref) {
194
- var id = _ref.id;
195
- return utils.buildUrl("https://www.facebook.com/sharer/sharer.php", {
196
- u: "https://".concat(window.location.host, "/").concat(id)
197
- });
198
- };
199
- var linkedInShareLink = function linkedInShareLink(_ref2) {
200
- var id = _ref2.id,
201
- title = _ref2.title;
202
- return utils.buildUrl("https://www.linkedin.com/shareArticle", {
203
- mini: true,
204
- url: "https://".concat(window.location.host, "/").concat(id),
205
- title: title
206
- });
207
- };
208
- var twitterShareLink = function twitterShareLink(_ref3) {
209
- var id = _ref3.id,
210
- title = _ref3.title;
211
- return utils.buildUrl("http://twitter.com/share", {
212
- text: title,
213
- url: "https://".concat(window.location.host, "/").concat(id)
214
- });
215
- };
216
- var downloadCanvas = function downloadCanvas(canvas) {
217
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
218
- var _options$name = options.name,
219
- name = _options$name === void 0 ? "image" : _options$name,
220
- _options$extension = options.extension,
221
- extension = _options$extension === void 0 ? "png" : _options$extension;
222
- var canvasUrl = canvas.toDataURL("image/".concat(extension));
223
- var element = document.createElement("a");
224
- element.href = canvasUrl;
225
- element.download = "".concat(name, ".").concat(extension);
226
- element.click();
227
- element.remove();
228
- };
229
-
230
- var SOCIAL_MEDIA_OPTIONS = {
231
- FACEBOOK: {
232
- label: i18next.t("neetoMolecules.shareViaLink.socialMediaShare.facebook"),
233
- icon: neetoIcons.Facebook,
234
- generateShareUrl: facebookShareLink
235
- },
236
- LINKEDIN: {
237
- label: i18next.t("neetoMolecules.shareViaLink.socialMediaShare.linkedIn"),
238
- icon: neetoIcons.Linkedin,
239
- generateShareUrl: linkedInShareLink
240
- },
241
- TWITTER: {
242
- label: i18next.t("neetoMolecules.shareViaLink.socialMediaShare.twitter"),
243
- icon: neetoIcons.Twitter,
244
- generateShareUrl: twitterShareLink
245
- }
246
- };
247
-
248
372
  var __defProp = Object.defineProperty;
249
373
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
250
374
  var __hasOwnProp = Object.prototype.hasOwnProperty;
@@ -1215,12 +1339,22 @@ var SocialMedia = function SocialMedia(_ref) {
1215
1339
  };
1216
1340
 
1217
1341
  var ShareViaLink = function ShareViaLink(_ref) {
1218
- var _ref$isRegenerating = _ref.isRegenerating,
1219
- isRegenerating = _ref$isRegenerating === void 0 ? false : _ref$isRegenerating,
1220
- _ref$enableRegenerate = _ref.enableRegenerateUrl,
1221
- enableRegenerateUrl = _ref$enableRegenerate === void 0 ? false : _ref$enableRegenerate,
1342
+ var _ref$isLoading = _ref.isLoading,
1343
+ isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,
1344
+ _ref$enabledOptions = _ref.enabledOptions,
1345
+ enabledOptions = _ref$enabledOptions === void 0 ? {
1346
+ regenerate: false,
1347
+ edit: false
1348
+ } : _ref$enabledOptions,
1349
+ _ref$editUrlProps = _ref.editUrlProps,
1350
+ editUrlProps = _ref$editUrlProps === void 0 ? {
1351
+ prefix: "",
1352
+ editablePath: ""
1353
+ } : _ref$editUrlProps,
1222
1354
  entity = _ref.entity,
1223
1355
  entityName = _ref.entityName,
1356
+ _ref$handleEdit = _ref.handleEdit,
1357
+ handleEdit = _ref$handleEdit === void 0 ? pure.noop : _ref$handleEdit,
1224
1358
  _ref$handleRegenerate = _ref.handleRegenerate,
1225
1359
  handleRegenerate = _ref$handleRegenerate === void 0 ? pure.noop : _ref$handleRegenerate,
1226
1360
  _ref$previewUrl = _ref.previewUrl,
@@ -1231,10 +1365,12 @@ var ShareViaLink = function ShareViaLink(_ref) {
1231
1365
  className: "neeto-ui-border-gray-400 neeto-ui-shadow-xs neeto-ui-rounded-lg neeto-ui-bg-white col-span-2 space-y-4 border p-8",
1232
1366
  "data-testid": "share-via-link"
1233
1367
  }, /*#__PURE__*/React__default["default"].createElement(Link, {
1234
- enableRegenerateUrl: enableRegenerateUrl,
1368
+ editUrlProps: editUrlProps,
1369
+ enabledOptions: enabledOptions,
1235
1370
  entityName: entityName,
1371
+ handleEdit: handleEdit,
1236
1372
  handleRegenerate: handleRegenerate,
1237
- isRegenerating: isRegenerating,
1373
+ isLoading: isLoading,
1238
1374
  previewUrl: previewUrl,
1239
1375
  url: url
1240
1376
  }), /*#__PURE__*/React__default["default"].createElement(SocialMedia, {