@bigbinary/neeto-molecules 3.15.25 → 3.15.26

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.
@@ -2,15 +2,17 @@
2
2
 
3
3
  var neetoCist = require('@bigbinary/neeto-cist');
4
4
  var ramda = require('ramda');
5
+ var classnames = require('classnames');
6
+ var Typography = require('@bigbinary/neetoui/Typography');
7
+ var reactI18next = require('react-i18next');
8
+ var jsxRuntime = require('react/jsx-runtime');
5
9
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
6
10
  var React = require('react');
7
11
  var ExternalLink = require('@bigbinary/neeto-icons/ExternalLink');
8
12
  var Button = require('@bigbinary/neetoui/Button');
9
- var reactI18next = require('react-i18next');
10
13
  var CopyToClipboardButton = require('./CopyToClipboardButton.js');
11
14
  var MoreDropdown = require('./MoreDropdown.js');
12
15
  var formik = require('formik');
13
- var Typography = require('@bigbinary/neetoui/Typography');
14
16
  var Pane = require('@bigbinary/neetoui/Pane');
15
17
  var Input = require('@bigbinary/neetoui/formik/Input');
16
18
  var ActionBlock = require('@bigbinary/neetoui/formik/ActionBlock');
@@ -21,11 +23,12 @@ var Twitter = require('@bigbinary/neeto-icons/Twitter');
21
23
  var yup = require('yup');
22
24
  var general = require('@bigbinary/neeto-commons-frontend/utils/general');
23
25
  var injectCss = require('./inject-css-vQvjPR2x.js');
24
- var jsxRuntime = require('react/jsx-runtime');
26
+ var utils = require('@bigbinary/neeto-commons-frontend/utils');
25
27
  var Modal = require('@bigbinary/neetoui/Modal');
26
28
  var Input$1 = require('@bigbinary/neetoui/Input');
29
+ var Select = require('@bigbinary/neetoui/Select');
30
+ var DatePicker = require('@bigbinary/neetoui/DatePicker');
27
31
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
28
- var classnames = require('classnames');
29
32
  var reactRouterDom = require('react-router-dom');
30
33
  require('@babel/runtime/helpers/objectWithoutProperties');
31
34
  require('@bigbinary/neeto-icons/Copy');
@@ -54,6 +57,32 @@ function _interopNamespaceDefault(e) {
54
57
 
55
58
  var yup__namespace = /*#__PURE__*/_interopNamespaceDefault(yup);
56
59
 
60
+ var ExpiryNotice = function ExpiryNotice(_ref) {
61
+ var expiryConfiguration = _ref.expiryConfiguration;
62
+ var _useTranslation = reactI18next.useTranslation(),
63
+ t = _useTranslation.t;
64
+ var daysBeforeExpiry = expiryConfiguration.daysBeforeExpiry;
65
+ var notice = t("neetoMolecules.shareViaLink.expiryNotice.daysRemaining", {
66
+ count: daysBeforeExpiry
67
+ });
68
+ if (daysBeforeExpiry < 1) {
69
+ notice = t("neetoMolecules.shareViaLink.expiryNotice.expiresToday");
70
+ }
71
+ if (daysBeforeExpiry <= 0) {
72
+ notice = t("neetoMolecules.shareViaLink.expiryNotice.expired");
73
+ }
74
+ return /*#__PURE__*/jsxRuntime.jsx(Typography, {
75
+ "data-testid": "expiry-notice",
76
+ lineHeight: "normal",
77
+ style: "body2",
78
+ className: classnames({
79
+ "neeto-ui-text-error-800": daysBeforeExpiry <= 1,
80
+ "neeto-ui-text-gray-700": daysBeforeExpiry > 1
81
+ }),
82
+ children: notice
83
+ });
84
+ };
85
+
57
86
  var facebookShareLink = function facebookShareLink(_ref) {
58
87
  var url = _ref.url;
59
88
  return general.buildUrl("https://www.facebook.com/sharer/sharer.php", {
@@ -227,14 +256,42 @@ var EditURL = function EditURL(_ref) {
227
256
  };
228
257
 
229
258
  var RegenerateURL = function RegenerateURL(_ref) {
259
+ var _regenerateConfig$exp, _regenerateConfig$exp2, _globalProps$user$dat, _globalProps;
230
260
  var isOpen = _ref.isOpen,
231
261
  onClose = _ref.onClose,
232
262
  url = _ref.url,
233
263
  isLoading = _ref.isLoading,
234
- handleRegenerate = _ref.handleRegenerate;
264
+ handleRegenerate = _ref.handleRegenerate,
265
+ _ref$regenerateConfig = _ref.regenerateConfig,
266
+ regenerateConfig = _ref$regenerateConfig === void 0 ? {
267
+ expiresInOptions: []
268
+ } : _ref$regenerateConfig;
235
269
  var _useTranslation = reactI18next.useTranslation(),
236
270
  t = _useTranslation.t;
237
271
  var prevIsLoadingRef = React.useRef(isLoading);
272
+ var regenerateStrategy = neetoCist.isPresent(regenerateConfig === null || regenerateConfig === void 0 ? void 0 : regenerateConfig.expiresInOptions) ? "expiryBased" : "basic";
273
+ var _useState = React.useState(regenerateConfig === null || regenerateConfig === void 0 || (_regenerateConfig$exp = regenerateConfig.expiresInOptions) === null || _regenerateConfig$exp === void 0 || (_regenerateConfig$exp = _regenerateConfig$exp[0]) === null || _regenerateConfig$exp === void 0 ? void 0 : _regenerateConfig$exp.value),
274
+ _useState2 = _slicedToArray(_useState, 2),
275
+ selectedExpiresInOption = _useState2[0],
276
+ setSelectedExpiresInOption = _useState2[1];
277
+ var _useState3 = React.useState(utils.dayjs().add(10, "day").toDate()),
278
+ _useState4 = _slicedToArray(_useState3, 2),
279
+ selectedExpiresOnDate = _useState4[0],
280
+ setSelectedExpiresOnDate = _useState4[1];
281
+ var isSelectedExpiresInOptionNever = selectedExpiresInOption === "never";
282
+ var isSelectedExpiresInOptionCustom = selectedExpiresInOption === "custom";
283
+ var isSelectedExpiresInOptionValidNumberOfDays = neetoCist.isPresent(selectedExpiresInOption) && !isSelectedExpiresInOptionCustom && !isSelectedExpiresInOptionNever;
284
+ var isValidExpiryConfig = isSelectedExpiresInOptionNever || isSelectedExpiresInOptionCustom && neetoCist.isPresent(selectedExpiresOnDate) || isSelectedExpiresInOptionValidNumberOfDays;
285
+ var expiryConfigPayload = isSelectedExpiresInOptionValidNumberOfDays ? {
286
+ expiresInDays: selectedExpiresInOption
287
+ } : {
288
+ expiresOnDate: selectedExpiresOnDate
289
+ };
290
+ var onSubmit = function onSubmit() {
291
+ return regenerateStrategy === "basic" || isSelectedExpiresInOptionNever ? handleRegenerate() : handleRegenerate({
292
+ payload: expiryConfigPayload
293
+ });
294
+ };
238
295
  React.useEffect(function () {
239
296
  if (prevIsLoadingRef.current && !isLoading) onClose();
240
297
  prevIsLoadingRef.current = isLoading;
@@ -243,6 +300,7 @@ var RegenerateURL = function RegenerateURL(_ref) {
243
300
  isOpen: isOpen,
244
301
  onClose: onClose,
245
302
  "data-testid": "regenerate-url-modal",
303
+ size: regenerateStrategy === "basic" ? "medium" : "large",
246
304
  children: [/*#__PURE__*/jsxRuntime.jsx(Modal.Header, {
247
305
  children: /*#__PURE__*/jsxRuntime.jsx(Typography, {
248
306
  lineHeight: "normal",
@@ -253,10 +311,36 @@ var RegenerateURL = function RegenerateURL(_ref) {
253
311
  }), /*#__PURE__*/jsxRuntime.jsx(Modal.Body, {
254
312
  children: /*#__PURE__*/jsxRuntime.jsxs("div", {
255
313
  className: "w-full space-y-6",
256
- children: [/*#__PURE__*/jsxRuntime.jsx(Input$1, {
314
+ children: [regenerateStrategy === "basic" && /*#__PURE__*/jsxRuntime.jsx(Input$1, {
257
315
  disabled: true,
258
316
  label: t("neetoMolecules.shareViaLink.regenerateUrl.inputLabel"),
259
317
  value: url
318
+ }), regenerateStrategy === "expiryBased" && /*#__PURE__*/jsxRuntime.jsxs("div", {
319
+ className: "flex flex-row gap-2",
320
+ children: [/*#__PURE__*/jsxRuntime.jsx(Select, {
321
+ "data-testid": "expires-in-select",
322
+ defaultValue: (_regenerateConfig$exp2 = regenerateConfig.expiresInOptions) === null || _regenerateConfig$exp2 === void 0 ? void 0 : _regenerateConfig$exp2[0],
323
+ options: regenerateConfig.expiresInOptions,
324
+ className: classnames({
325
+ "w-1/2": isSelectedExpiresInOptionCustom,
326
+ "w-full": !isSelectedExpiresInOptionCustom
327
+ }),
328
+ label: t("neetoMolecules.shareViaLink.regenerateUrl.expiresInLabel"),
329
+ onChange: function onChange(option) {
330
+ return setSelectedExpiresInOption(option.value);
331
+ }
332
+ }), isSelectedExpiresInOptionCustom && /*#__PURE__*/jsxRuntime.jsx(DatePicker, {
333
+ "data-testid": "expires-on-date-picker",
334
+ dateFormat: (_globalProps$user$dat = (_globalProps = globalProps) === null || _globalProps === void 0 || (_globalProps = _globalProps.user) === null || _globalProps === void 0 ? void 0 : _globalProps.dateFormat) !== null && _globalProps$user$dat !== void 0 ? _globalProps$user$dat : undefined,
335
+ disabledDate: function disabledDate(d) {
336
+ return !d || d.isBefore(utils.dayjs());
337
+ },
338
+ picker: "date",
339
+ type: "date",
340
+ value: selectedExpiresOnDate,
341
+ label: t("neetoMolecules.shareViaLink.regenerateUrl.expiresOnLabel"),
342
+ onChange: setSelectedExpiresOnDate
343
+ })]
260
344
  }), /*#__PURE__*/jsxRuntime.jsx(Typography, {
261
345
  className: "neeto-ui-text-gray-700",
262
346
  lineHeight: "normal",
@@ -270,8 +354,9 @@ var RegenerateURL = function RegenerateURL(_ref) {
270
354
  "data-cy": "regenerate-url-confirm-button",
271
355
  "data-testid": "regenerate-url-confirm-button",
272
356
  loading: isLoading,
357
+ disabled: regenerateStrategy === "expiryBased" && !isValidExpiryConfig,
273
358
  label: t("neetoMolecules.shareViaLink.regenerateUrl.submitButtonLabel"),
274
- onClick: handleRegenerate
359
+ onClick: onSubmit
275
360
  }), /*#__PURE__*/jsxRuntime.jsx(Button, {
276
361
  "data-cy": "regenerate-url-cancel-button",
277
362
  "data-testid": "regenerate-url-cancel-button",
@@ -337,7 +422,7 @@ var Link = function Link(_ref) {
337
422
  }), isDropdownEnabled && /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
338
423
  children: [/*#__PURE__*/jsxRuntime.jsx(MoreDropdown, {
339
424
  menuItems: [{
340
- isVisible: enabledOptions.regenerate,
425
+ isVisible: enabledOptions.regenerate || neetoCist.isPresent(enabledOptions.regenerate),
341
426
  "data-testid": "regenerate-url-button",
342
427
  "data-cy": "regenerate-url-button",
343
428
  onClick: function onClick() {
@@ -360,6 +445,7 @@ var Link = function Link(_ref) {
360
445
  isLoading: isLoading,
361
446
  url: url,
362
447
  isOpen: isRegenerateURLModalOpen,
448
+ regenerateConfig: enabledOptions.regenerate,
363
449
  onClose: function onClose() {
364
450
  return setIsRegenerateURLModalOpen(false);
365
451
  }
@@ -1427,7 +1513,9 @@ var ShareViaLink = function ShareViaLink(_ref) {
1427
1513
  _ref$disableShareSoci = _ref.disableShareSocialMedia,
1428
1514
  disableShareSocialMedia = _ref$disableShareSoci === void 0 ? false : _ref$disableShareSoci,
1429
1515
  _ref$disableQRDownloa = _ref.disableQRDownload,
1430
- disableQRDownload = _ref$disableQRDownloa === void 0 ? false : _ref$disableQRDownloa;
1516
+ disableQRDownload = _ref$disableQRDownloa === void 0 ? false : _ref$disableQRDownloa,
1517
+ _ref$publicLinkExpiry = _ref.publicLinkExpiryConfiguration,
1518
+ publicLinkExpiryConfiguration = _ref$publicLinkExpiry === void 0 ? {} : _ref$publicLinkExpiry;
1431
1519
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
1432
1520
  className: "neeto-ui-border-gray-300 neeto-ui-rounded-lg neeto-ui-bg-white col-span-2 space-y-4 border p-6 sm:p-8",
1433
1521
  "data-testid": "share-via-link",
@@ -1443,6 +1531,8 @@ var ShareViaLink = function ShareViaLink(_ref) {
1443
1531
  previewUrl: urlOption.previewUrl,
1444
1532
  url: urlOption.url
1445
1533
  });
1534
+ }), neetoCist.isPresent(publicLinkExpiryConfiguration) && /*#__PURE__*/jsxRuntime.jsx(ExpiryNotice, {
1535
+ expiryConfiguration: publicLinkExpiryConfiguration
1446
1536
  }), isOtherShareOptionsEnabled && /*#__PURE__*/jsxRuntime.jsx(ShareBlock, {
1447
1537
  disableQRDownload: disableQRDownload,
1448
1538
  disableShareSocialMedia: disableShareSocialMedia,