@bigbinary/neeto-molecules 1.0.114 → 1.0.115

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
@@ -53,6 +53,7 @@ https://neeto-molecules.neeto.com/
53
53
  - [Codeblock](./docs/components.md#Codeblock)
54
54
  - [Breadcrumbs](./docs/components.md#Breadcrumbs)
55
55
  - [Security](./docs/components.md#Security)
56
+ - [SendToFields](./docs/components.md#SendToFieldsComponent)
56
57
 
57
58
  ## Installation Instructions
58
59
 
@@ -13,10 +13,10 @@ var ramda = require('ramda');
13
13
  var yup = require('yup');
14
14
  var pure = require('@bigbinary/neeto-commons-frontend/pure');
15
15
  var neetoIcons = require('@bigbinary/neeto-icons');
16
+ var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
16
17
  var require$$0 = require('stream');
17
18
  var utils = require('@bigbinary/neeto-commons-frontend/utils');
18
19
  var DynamicVariables = require('@bigbinary/neeto-molecules/DynamicVariables');
19
- var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
20
20
 
21
21
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
22
22
 
@@ -175,7 +175,6 @@ var REPLY_TO_FIELD_VALIDATION = yup__namespace.object({
175
175
  }))
176
176
  });
177
177
  var EDITOR_ADDONS = ["highlight", "emoji", "code-block", "block-quote", "image-upload", "divider", "video-embed"];
178
- var ALLOWED_FILE_PICKER_TYPES = [".csv"];
179
178
 
180
179
  /* eslint-disable @bigbinary/neeto/use-zustand-for-global-state-management */
181
180
  var EmailFormContext = /*#__PURE__*/React__default["default"].createContext({
@@ -231,6 +230,21 @@ var ReplyToField = function ReplyToField(_ref) {
231
230
  });
232
231
  };
233
232
 
233
+ function _extends() {
234
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
235
+ for (var i = 1; i < arguments.length; i++) {
236
+ var source = arguments[i];
237
+ for (var key in source) {
238
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
239
+ target[key] = source[key];
240
+ }
241
+ }
242
+ }
243
+ return target;
244
+ };
245
+ return _extends.apply(this, arguments);
246
+ }
247
+
234
248
  function _arrayLikeToArray(arr, len) {
235
249
  if (len == null || len > arr.length) len = arr.length;
236
250
  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
@@ -632,6 +646,8 @@ try {
632
646
  }
633
647
  }
634
648
 
649
+ var ALLOWED_FILE_PICKER_TYPES = [".csv"];
650
+
635
651
  var FilePicker = function FilePicker(_ref) {
636
652
  var _ref$types = _ref.types,
637
653
  types = _ref$types === void 0 ? [] : _ref$types,
@@ -2604,10 +2620,16 @@ var parseCsvEmails = /*#__PURE__*/function () {
2604
2620
  return h.toLowerCase().replace(/\W/g, "");
2605
2621
  },
2606
2622
  complete: function complete(results) {
2607
- var emails = results.data.filter(ramda.prop("email")).map(function (item) {
2608
- return item.email.trim();
2609
- });
2610
- onSuccess(createEmailOptions(emails));
2623
+ var _results$meta$fields;
2624
+ var isEmailFieldPresent = (_results$meta$fields = results.meta.fields) === null || _results$meta$fields === void 0 ? void 0 : _results$meta$fields.includes("email");
2625
+ if (isEmailFieldPresent) {
2626
+ var emails = results.data.filter(ramda.prop("email")).map(function (item) {
2627
+ return item.email.trim();
2628
+ });
2629
+ onSuccess(createEmailOptions(emails));
2630
+ } else {
2631
+ neetoui.Toastr.error(i18next.t("neetoMolecules.sendToFields.errors.invalidCsv"));
2632
+ }
2611
2633
  }
2612
2634
  });
2613
2635
  case 1:
@@ -2620,37 +2642,35 @@ var parseCsvEmails = /*#__PURE__*/function () {
2620
2642
  return _ref.apply(this, arguments);
2621
2643
  };
2622
2644
  }();
2623
- var getValidationSchema = function getValidationSchema(_ref2) {
2624
- var showSendToField = _ref2.showSendToField,
2625
- showReplyToField = _ref2.showReplyToField,
2626
- customValidations = _ref2.customValidations;
2627
- var schema = EMAIL_FORM_VALIDATION_SCHEMA.clone();
2628
- if (showSendToField) schema = schema.concat(SEND_TO_FIELD_VALIDATION);
2629
- if (showReplyToField) schema = schema.concat(REPLY_TO_FIELD_VALIDATION);
2630
- return schema.shape(customValidations);
2631
- };
2632
2645
 
2633
- var SendToField = function SendToField() {
2646
+ var SendToFields = function SendToFields(_ref) {
2647
+ var emailInputProps = _ref.emailInputProps,
2648
+ ccInputProps = _ref.ccInputProps,
2649
+ bccInputProps = _ref.bccInputProps,
2650
+ _ref$showUploadCsvBut = _ref.showUploadCsvButton,
2651
+ showUploadCsvButton = _ref$showUploadCsvBut === void 0 ? false : _ref$showUploadCsvBut,
2652
+ _ref$showCcBccButton = _ref.showCcBccButton,
2653
+ showCcBccButton = _ref$showCcBccButton === void 0 ? false : _ref$showCcBccButton;
2654
+ var sendToFieldRef = React.useRef();
2655
+ var _useFormikContext = formik.useFormikContext(),
2656
+ _useFormikContext$val = _useFormikContext.values,
2657
+ showCopyEmails = _useFormikContext$val.showCopyEmails,
2658
+ existingSendToEmails = _useFormikContext$val[emailInputProps.name || "sendTo"],
2659
+ setFieldValue = _useFormikContext.setFieldValue;
2634
2660
  var _useTranslation = reactI18next.useTranslation(),
2635
2661
  t = _useTranslation.t;
2636
- var _useFormikContext = formik.useFormikContext(),
2637
- setFieldValue = _useFormikContext.setFieldValue,
2638
- values = _useFormikContext.values;
2639
- var sendToFieldRef = React.useRef();
2640
- var showCopyEmailFieldValue = values.showCopyEmails,
2641
- existingSendToEmails = values.sendTo;
2642
2662
  var handleCSVFile = /*#__PURE__*/function () {
2643
- var _ref = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(files) {
2644
- var _sendToFieldRef$curre, setNotifyEmails;
2663
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/regenerator.mark(function _callee(files) {
2664
+ var _sendToFieldRef$curre, onSuccess;
2645
2665
  return regenerator.wrap(function _callee$(_context) {
2646
2666
  while (1) switch (_context.prev = _context.next) {
2647
2667
  case 0:
2648
2668
  _context.prev = 0;
2649
- setNotifyEmails = function setNotifyEmails(values) {
2650
- return setFieldValue("sendTo", [].concat(_toConsumableArray(existingSendToEmails), _toConsumableArray(values)));
2669
+ onSuccess = function onSuccess(values) {
2670
+ return setFieldValue(emailInputProps.name || "sendTo", [].concat(_toConsumableArray(existingSendToEmails), _toConsumableArray(values)));
2651
2671
  };
2652
2672
  _context.next = 4;
2653
- return parseCsvEmails(files[0], setNotifyEmails);
2673
+ return parseCsvEmails(files[0], onSuccess);
2654
2674
  case 4:
2655
2675
  (_sendToFieldRef$curre = sendToFieldRef.current) === null || _sendToFieldRef$curre === void 0 ? void 0 : _sendToFieldRef$curre.focus();
2656
2676
  _context.next = 10;
@@ -2666,14 +2686,18 @@ var SendToField = function SendToField() {
2666
2686
  }, _callee, null, [[0, 7]]);
2667
2687
  }));
2668
2688
  return function handleCSVFile(_x) {
2669
- return _ref.apply(this, arguments);
2689
+ return _ref2.apply(this, arguments);
2670
2690
  };
2671
2691
  }();
2672
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
2673
- className: "flex w-full flex-col gap-2"
2674
- }, /*#__PURE__*/React__default["default"].createElement("div", {
2675
- className: "flex items-center justify-between"
2676
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Label, null, t("neetoMolecules.emailForm.labels.sendTo")), /*#__PURE__*/React__default["default"].createElement(FilePicker, {
2692
+ var handelCcBccButtonClick = function handelCcBccButtonClick(e) {
2693
+ e.stopPropagation();
2694
+ setFieldValue("showCopyEmails", !showCopyEmails);
2695
+ };
2696
+ return /*#__PURE__*/React__default["default"].createElement("div", {
2697
+ className: "relative w-full flex-col gap-2"
2698
+ }, showUploadCsvButton && /*#__PURE__*/React__default["default"].createElement("div", {
2699
+ className: "absolute top-0 right-1"
2700
+ }, /*#__PURE__*/React__default["default"].createElement(FilePicker, {
2677
2701
  types: ALLOWED_FILE_PICKER_TYPES,
2678
2702
  onChange: handleCSVFile
2679
2703
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
@@ -2681,35 +2705,57 @@ var SendToField = function SendToField() {
2681
2705
  icon: neetoIcons.Upload,
2682
2706
  label: t("neetoMolecules.emailForm.uploadCSV"),
2683
2707
  size: "small",
2684
- style: "link"
2685
- }))), /*#__PURE__*/React__default["default"].createElement(formik$1.MultiEmailInput, {
2686
- id: "sendTo",
2687
- label: "",
2708
+ style: "link",
2709
+ tooltipProps: {
2710
+ content: t("neetoMolecules.sendToFields.uploadCsvTooltip"),
2711
+ position: "right"
2712
+ }
2713
+ }))), /*#__PURE__*/React__default["default"].createElement(formik$1.MultiEmailInput, _extends({
2714
+ "data-testid": "emails",
2688
2715
  name: "sendTo",
2689
- ref: sendToFieldRef,
2690
- placeholder: t("neetoMolecules.emailForm.placeholders.commaSeparatedEmails"),
2691
- suffix: /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
2716
+ ref: sendToFieldRef
2717
+ }, emailInputProps, {
2718
+ suffix: showCcBccButton && /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
2692
2719
  "data-cy": "cc-bcc-button",
2720
+ "data-testid": "cc-bcc-button",
2693
2721
  label: t("neetoMolecules.emailForm.labels.ccBcc"),
2694
2722
  size: "small",
2695
2723
  style: "link",
2696
- onClick: function onClick() {
2697
- return setFieldValue("showCopyEmails", !showCopyEmailFieldValue);
2698
- }
2724
+ onClick: handelCcBccButtonClick
2699
2725
  })
2700
- })), showCopyEmailFieldValue && /*#__PURE__*/React__default["default"].createElement("div", {
2701
- className: "flex w-full flex-col gap-6"
2702
- }, /*#__PURE__*/React__default["default"].createElement(formik$1.MultiEmailInput, {
2703
- label: t("neetoMolecules.emailForm.labels.cc"),
2704
- name: "sendToCc",
2705
- placeholder: t("neetoMolecules.emailForm.placeholders.commaSeparatedEmails")
2706
- }), /*#__PURE__*/React__default["default"].createElement(formik$1.MultiEmailInput, {
2707
- label: t("neetoMolecules.emailForm.labels.bCc"),
2708
- name: "sendToBcc",
2709
- placeholder: t("neetoMolecules.emailForm.placeholders.commaSeparatedEmails")
2710
- })));
2726
+ })), showCopyEmails && /*#__PURE__*/React__default["default"].createElement("div", {
2727
+ className: "mt-5 flex w-full flex-col gap-6"
2728
+ }, /*#__PURE__*/React__default["default"].createElement(formik$1.MultiEmailInput, _extends({
2729
+ name: "sendToBcc"
2730
+ }, ccInputProps)), /*#__PURE__*/React__default["default"].createElement(formik$1.MultiEmailInput, _extends({
2731
+ name: "sendToCc"
2732
+ }, bccInputProps))));
2711
2733
  };
2712
2734
 
2735
+ var SendToField = reactUtils.withT(function (_ref) {
2736
+ var t = _ref.t;
2737
+ return /*#__PURE__*/React__default["default"].createElement(SendToFields, {
2738
+ showCcBccButton: true,
2739
+ showUploadCsvButton: true,
2740
+ bccInputProps: {
2741
+ label: t("neetoMolecules.emailForm.labels.bCc"),
2742
+ name: "sendToBcc",
2743
+ placeholder: t("neetoMolecules.emailForm.placeholders.commaSeparatedEmails")
2744
+ },
2745
+ ccInputProps: {
2746
+ label: t("neetoMolecules.emailForm.labels.cc"),
2747
+ name: "sendToCc",
2748
+ placeholder: t("neetoMolecules.emailForm.placeholders.commaSeparatedEmails")
2749
+ },
2750
+ emailInputProps: {
2751
+ id: "sendTo",
2752
+ name: "sendTo",
2753
+ label: t("neetoMolecules.emailForm.labels.sendTo"),
2754
+ placeholder: t("neetoMolecules.emailForm.placeholders.commaSeparatedEmails")
2755
+ }
2756
+ });
2757
+ });
2758
+
2713
2759
  function _arrayWithHoles(arr) {
2714
2760
  if (Array.isArray(arr)) return arr;
2715
2761
  }
@@ -2892,6 +2938,16 @@ var EmailForm = function EmailForm(_ref) {
2892
2938
  }));
2893
2939
  };
2894
2940
 
2941
+ var getValidationSchema = function getValidationSchema(_ref) {
2942
+ var showSendToField = _ref.showSendToField,
2943
+ showReplyToField = _ref.showReplyToField,
2944
+ customValidations = _ref.customValidations;
2945
+ var schema = EMAIL_FORM_VALIDATION_SCHEMA.clone();
2946
+ if (showSendToField) schema = schema.concat(SEND_TO_FIELD_VALIDATION);
2947
+ if (showReplyToField) schema = schema.concat(REPLY_TO_FIELD_VALIDATION);
2948
+ return schema.shape(customValidations);
2949
+ };
2950
+
2895
2951
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2896
2952
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2897
2953
  var EmailFormProvider = function EmailFormProvider(_ref) {