@bigbinary/neeto-message-templates-frontend 0.0.9 → 0.2.0

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
@@ -21,10 +21,10 @@ the creation of SMS, Email and Whatsapp templates.
21
21
  bundle install
22
22
  ```
23
23
 
24
- 3. Configure the organization model in the host application.
24
+ 3. Configure the owner model in the host application.
25
25
 
26
26
  ```ruby
27
- has_many :message_templates, class_name: "NeetoMessageTemplatesEngine::MessageTemplate", dependent: :destroy
27
+ has_many :message_templates, as: :owner, class_name: "NeetoMessageTemplatesEngine::MessageTemplate", dependent: :destroy
28
28
  ```
29
29
 
30
30
  4. Add this line to your application's `config/routes.rb` file
@@ -55,6 +55,15 @@ the creation of SMS, Email and Whatsapp templates.
55
55
  end
56
56
  ```
57
57
 
58
+ 7. Create an initializer file in the host app under
59
+ `configs/initializers/neeto-message-templates.rb` & provide the name of owner
60
+ model for the message templates. The message_templates `belongs_to` this
61
+ `owner`.
62
+
63
+ ```ruby
64
+ NeetoMessageTemplatesEngine.owner_class = "Organization"
65
+ ```
66
+
58
67
  # Frontend Package Installation
59
68
 
60
69
  Install the latest `neetoMessageTemplates` package using the below command:
@@ -80,6 +89,10 @@ yarn add @bigbinary/neeto-message-templates-frontend
80
89
 
81
90
  - `templateVariables`: (optional) To add dynamic variables to form body field.
82
91
 
92
+ - `ownerId`: (optional) To provide the `id` of the owner if it is not an
93
+ Organization model. If the owner is an Organization, this prop can be left
94
+ unspecified.
95
+
83
96
  ### Usage
84
97
 
85
98
  ```javascript
@@ -141,6 +154,10 @@ const App = () => {
141
154
 
142
155
  - `templateVariables`: (optional) To add dynamic variables to form body field.
143
156
 
157
+ - `ownerId`: (optional) To provide the `id` of the owner if it is not an
158
+ Organization model. If the owner is an Organization, this prop can be left
159
+ unspecified.
160
+
144
161
  ### Usage
145
162
 
146
163
  ```js
package/dist/index.cjs.js CHANGED
@@ -13,8 +13,8 @@ var ramda = require('ramda');
13
13
  var reactQuery = require('react-query');
14
14
  var devtools = require('react-query/devtools');
15
15
  var neetoIcons = require('@bigbinary/neeto-icons');
16
- var axios = require('axios');
17
16
  var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
17
+ var axios = require('axios');
18
18
  var zustand = require('zustand');
19
19
  var neetoEditor = require('@bigbinary/neeto-editor');
20
20
  var formik$1 = require('@bigbinary/neetoui/formik');
@@ -5280,9 +5280,11 @@ var template = {
5280
5280
  search: "Search {{what}}",
5281
5281
  markAsActive: "Mark as active",
5282
5282
  markAsInactive: "Mark as inactive",
5283
+ close: "Close",
5283
5284
  "delete": "Delete",
5284
5285
  edit: "Edit",
5285
5286
  saveChanges: "Save changes",
5287
+ send: "Send",
5286
5288
  cancel: "Cancel",
5287
5289
  emailAddress: "Email address",
5288
5290
  phoneNumber: "Phone number",
@@ -5303,13 +5305,16 @@ var template = {
5303
5305
  sendTestEmail: "Send test email",
5304
5306
  sendTestSms: "Send test sms",
5305
5307
  filtersEmptyState: "There are no {{type}} to show for applied filters.",
5308
+ preview: "Template Preview",
5309
+ resolveVariable: "Resolve {{type}} variables",
5306
5310
  validation: {
5307
5311
  namePresence: "Name is required",
5308
5312
  subjectPresence: "Subject is required",
5309
5313
  bodyPresence: "Body is required",
5310
5314
  emailAddressPresence: "Email address is required",
5311
5315
  emailAddressFormatValidation: "Invalid email address",
5312
- validPhoneNumber: "Enter valid phone number"
5316
+ validPhoneNumber: "Enter valid phone number",
5317
+ variablePresence: "Variable should not be empty"
5313
5318
  }
5314
5319
  };
5315
5320
  var sendMessage = {
@@ -5422,18 +5427,31 @@ var fetchMessageTemplates = function fetchMessageTemplates(params) {
5422
5427
  params: params
5423
5428
  });
5424
5429
  };
5425
- var createMessageTemplate = function createMessageTemplate(params) {
5430
+ var createMessageTemplate = function createMessageTemplate(_ref) {
5431
+ var messageTemplate = _ref.messageTemplate,
5432
+ ownerId = _ref.ownerId;
5426
5433
  return axios__default["default"].post(MESSAGE_TEMPLATE_BASE_URL, {
5427
- messageTemplate: params
5434
+ messageTemplate: messageTemplate,
5435
+ ownerId: ownerId
5428
5436
  });
5429
5437
  };
5430
- var updateMessageTemplate = function updateMessageTemplate(id, params) {
5438
+ var updateMessageTemplate = function updateMessageTemplate(_ref2) {
5439
+ var id = _ref2.id,
5440
+ messageTemplate = _ref2.messageTemplate,
5441
+ ownerId = _ref2.ownerId;
5431
5442
  return axios__default["default"].patch("".concat(MESSAGE_TEMPLATE_BASE_URL, "/").concat(id), {
5432
- messageTemplate: params
5443
+ messageTemplate: messageTemplate,
5444
+ ownerId: ownerId
5433
5445
  });
5434
5446
  };
5435
- var deleteMessageTemplate = function deleteMessageTemplate(id) {
5436
- return axios__default["default"]["delete"]("".concat(MESSAGE_TEMPLATE_BASE_URL, "/").concat(id));
5447
+ var deleteMessageTemplate = function deleteMessageTemplate(_ref3) {
5448
+ var id = _ref3.id,
5449
+ ownerId = _ref3.ownerId;
5450
+ return axios__default["default"]["delete"]("".concat(MESSAGE_TEMPLATE_BASE_URL, "/").concat(id), {
5451
+ data: {
5452
+ ownerId: ownerId
5453
+ }
5454
+ });
5437
5455
  };
5438
5456
  var messageTemplatesApi = {
5439
5457
  fetchAll: fetchMessageTemplates,
@@ -5446,42 +5464,46 @@ var QUERY_KEYS = {
5446
5464
  MESSAGE_TEMPLATE: "message-templates"
5447
5465
  };
5448
5466
 
5467
+ var ownerIdValue = function ownerIdValue(ownerId) {
5468
+ return ramda.isEmpty(ownerId) ? undefined : ownerId;
5469
+ };
5449
5470
  var useFetchTemplates = function useFetchTemplates(params) {
5450
5471
  return reactQuery.useQuery([QUERY_KEYS.MESSAGE_TEMPLATE, params], function () {
5451
5472
  return messageTemplatesApi.fetchAll(params);
5452
5473
  });
5453
5474
  };
5454
- var useCreateTemplate = function useCreateTemplate(options) {
5455
- var queryClient = reactQuery.useQueryClient();
5456
- return reactQuery.useMutation(function (payload) {
5457
- return messageTemplatesApi.create(payload);
5475
+ var useCreateTemplate = function useCreateTemplate(ownerId, options) {
5476
+ return reactUtils.useMutationWithInvalidation(function (messageTemplate) {
5477
+ return messageTemplatesApi.create({
5478
+ messageTemplate: messageTemplate,
5479
+ ownerId: ownerIdValue(ownerId)
5480
+ });
5458
5481
  }, {
5459
- onSuccess: function onSuccess() {
5460
- queryClient.invalidateQueries(QUERY_KEYS.MESSAGE_TEMPLATE);
5461
- options === null || options === void 0 ? void 0 : options.onSuccess();
5462
- }
5482
+ keysToInvalidate: [QUERY_KEYS.MESSAGE_TEMPLATE],
5483
+ onSuccess: options === null || options === void 0 ? void 0 : options.onSuccess
5463
5484
  });
5464
5485
  };
5465
- var useUpdateTemplate = function useUpdateTemplate() {
5466
- var queryClient = reactQuery.useQueryClient();
5467
- return reactQuery.useMutation(function (_ref) {
5486
+ var useUpdateTemplate = function useUpdateTemplate(ownerId) {
5487
+ return reactUtils.useMutationWithInvalidation(function (_ref) {
5468
5488
  var id = _ref.id,
5469
5489
  payload = _ref.payload;
5470
- return messageTemplatesApi.update(id, payload);
5490
+ return messageTemplatesApi.update({
5491
+ id: id,
5492
+ messageTemplate: payload,
5493
+ ownerId: ownerIdValue(ownerId)
5494
+ });
5471
5495
  }, {
5472
- onSuccess: function onSuccess() {
5473
- queryClient.invalidateQueries(QUERY_KEYS.MESSAGE_TEMPLATE);
5474
- }
5496
+ keysToInvalidate: [QUERY_KEYS.MESSAGE_TEMPLATE]
5475
5497
  });
5476
5498
  };
5477
- var useDeleteTemplate = function useDeleteTemplate() {
5478
- var queryClient = reactQuery.useQueryClient();
5479
- return reactQuery.useMutation(function (id) {
5480
- return messageTemplatesApi["delete"](id);
5499
+ var useDeleteTemplate = function useDeleteTemplate(ownerId) {
5500
+ return reactUtils.useMutationWithInvalidation(function (id) {
5501
+ return messageTemplatesApi["delete"]({
5502
+ id: id,
5503
+ ownerId: ownerIdValue(ownerId)
5504
+ });
5481
5505
  }, {
5482
- onSuccess: function onSuccess() {
5483
- queryClient.invalidateQueries(QUERY_KEYS.MESSAGE_TEMPLATE);
5484
- }
5506
+ keysToInvalidate: [QUERY_KEYS.MESSAGE_TEMPLATE]
5485
5507
  });
5486
5508
  };
5487
5509
 
@@ -5497,10 +5519,11 @@ function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if
5497
5519
  function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
5498
5520
  var RowActions = function RowActions(_ref) {
5499
5521
  var template = _ref.template,
5500
- setManageTemplatePane = _ref.setManageTemplatePane;
5522
+ setManageTemplatePane = _ref.setManageTemplatePane,
5523
+ ownerId = _ref.ownerId;
5501
5524
  var _useTranslation = useTranslation(),
5502
5525
  t = _useTranslation.t;
5503
- var _useUpdateTemplate = useUpdateTemplate(),
5526
+ var _useUpdateTemplate = useUpdateTemplate(ownerId),
5504
5527
  update = _useUpdateTemplate.mutate;
5505
5528
  var Menu = neetoui.Dropdown.Menu,
5506
5529
  MenuItem = neetoui.Dropdown.MenuItem;
@@ -5558,7 +5581,7 @@ var renderSearchProps = function renderSearchProps(label, setSearchTerm, searchT
5558
5581
  value: searchTerm
5559
5582
  };
5560
5583
  };
5561
- var buildTableColumnData = function buildTableColumnData(setManageTemplatePane) {
5584
+ var buildTableColumnData = function buildTableColumnData(setManageTemplatePane, ownerId) {
5562
5585
  return [{
5563
5586
  dataIndex: "name",
5564
5587
  key: "name",
@@ -5572,6 +5595,7 @@ var buildTableColumnData = function buildTableColumnData(setManageTemplatePane)
5572
5595
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
5573
5596
  style: "body2"
5574
5597
  }, name), /*#__PURE__*/React__default["default"].createElement(RowActions, {
5598
+ ownerId: ownerId,
5575
5599
  setManageTemplatePane: setManageTemplatePane,
5576
5600
  template: template
5577
5601
  }));
@@ -6086,7 +6110,7 @@ var TestMessage = function TestMessage(_ref) {
6086
6110
 
6087
6111
  function ownKeys$2(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; }
6088
6112
  function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6089
- var Form$1 = function Form(_ref) {
6113
+ var Form = function Form(_ref) {
6090
6114
  var onClose = _ref.onClose,
6091
6115
  isEdit = _ref.isEdit,
6092
6116
  _ref$template = _ref.template,
@@ -6204,7 +6228,7 @@ var AddEdit = function AddEdit(_ref) {
6204
6228
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Header, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
6205
6229
  style: "h2",
6206
6230
  weight: "semibold"
6207
- }, label)), /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Body, null, /*#__PURE__*/React__default["default"].createElement(Form$1, {
6231
+ }, label)), /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Body, null, /*#__PURE__*/React__default["default"].createElement(Form, {
6208
6232
  createUpdateTemplate: createUpdateTemplate,
6209
6233
  handleSubmitTestTemplate: handleSubmitTestTemplate,
6210
6234
  isEdit: isEdit,
@@ -6236,7 +6260,7 @@ var useFilters = function useFilters() {
6236
6260
  };
6237
6261
  };
6238
6262
 
6239
- var useTemplates = function useTemplates(type) {
6263
+ var useTemplates = function useTemplates(type, ownerId) {
6240
6264
  var _useState = React.useState(neetoFiltersFrontend.buildFiltersFromURL(buildTableColumnData().filter(ramda.prop("node")))),
6241
6265
  _useState2 = _slicedToArray(_useState, 2),
6242
6266
  filters = _useState2[0],
@@ -6251,16 +6275,17 @@ var useTemplates = function useTemplates(type) {
6251
6275
  pageIndex: pageIndex,
6252
6276
  pageSize: pageSize,
6253
6277
  filters: JSON.stringify(filters),
6254
- templateType: MESSAGE_TEMPLATES[type].value
6278
+ templateType: MESSAGE_TEMPLATES[type].value,
6279
+ ownerId: ramda.isEmpty(ownerId) ? undefined : ownerId
6255
6280
  };
6256
6281
  var _useFetchTemplates = useFetchTemplates(templateParams),
6257
6282
  _useFetchTemplates$da = _useFetchTemplates.data,
6258
6283
  templatesData = _useFetchTemplates$da === void 0 ? {} : _useFetchTemplates$da,
6259
6284
  isLoadingTemplates = _useFetchTemplates.isLoading,
6260
6285
  isFetching = _useFetchTemplates.isFetching;
6261
- var _useCreateTemplate = useCreateTemplate(),
6286
+ var _useCreateTemplate = useCreateTemplate(ownerId),
6262
6287
  create = _useCreateTemplate.mutate;
6263
- var _useUpdateTemplate = useUpdateTemplate(),
6288
+ var _useUpdateTemplate = useUpdateTemplate(ownerId),
6264
6289
  update = _useUpdateTemplate.mutate;
6265
6290
  var createUpdateTemplate = function createUpdateTemplate(_ref, options) {
6266
6291
  var isEdit = _ref.isEdit,
@@ -6294,10 +6319,11 @@ var List = function List(_ref) {
6294
6319
  pageProperties = _ref.pageProperties,
6295
6320
  label = _ref.label,
6296
6321
  addText = _ref.addText,
6297
- isFilterApplied = _ref.isFilterApplied;
6322
+ isFilterApplied = _ref.isFilterApplied,
6323
+ ownerId = _ref.ownerId;
6298
6324
  var _useTranslation = useTranslation(),
6299
6325
  t = _useTranslation.t;
6300
- var _useDeleteTemplate = useDeleteTemplate(),
6326
+ var _useDeleteTemplate = useDeleteTemplate(ownerId),
6301
6327
  deleteTemplate = _useDeleteTemplate.mutate,
6302
6328
  isDeleting = _useDeleteTemplate.isLoading;
6303
6329
  var templates = templatesData.templates,
@@ -6318,7 +6344,7 @@ var List = function List(_ref) {
6318
6344
  }, !ramda.isEmpty(templates) ? /*#__PURE__*/React__default["default"].createElement(TableWrapper__default["default"], {
6319
6345
  hasPagination: totalCount > pageSize
6320
6346
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Table, {
6321
- columnData: buildTableColumnData(setManageTemplatePane),
6347
+ columnData: buildTableColumnData(setManageTemplatePane, ownerId),
6322
6348
  currentPageNumber: pageIndex,
6323
6349
  defaultPageSize: pageSize,
6324
6350
  loading: isLoading,
@@ -6380,7 +6406,9 @@ var MessageTemplates = function MessageTemplates(_ref) {
6380
6406
  _ref$shouldIncludeTes = _ref.shouldIncludeTestTemplate,
6381
6407
  shouldIncludeTestTemplate = _ref$shouldIncludeTes === void 0 ? true : _ref$shouldIncludeTes,
6382
6408
  _ref$templateVariable = _ref.templateVariables,
6383
- templateVariables = _ref$templateVariable === void 0 ? {} : _ref$templateVariable;
6409
+ templateVariables = _ref$templateVariable === void 0 ? {} : _ref$templateVariable,
6410
+ _ref$ownerId = _ref.ownerId,
6411
+ ownerId = _ref$ownerId === void 0 ? "" : _ref$ownerId;
6384
6412
  var _useState = React.useState(MESSAGE_TEMPLATE_INITIAL_STATE),
6385
6413
  _useState2 = _slicedToArray(_useState, 2),
6386
6414
  manageTemplatePane = _useState2[0],
@@ -6394,7 +6422,7 @@ var MessageTemplates = function MessageTemplates(_ref) {
6394
6422
  filterColumns = _useFilters.filterColumns,
6395
6423
  setSearchTerm = _useFilters.setSearchTerm,
6396
6424
  searchTerm = _useFilters.searchTerm;
6397
- var _useTemplates = useTemplates(type),
6425
+ var _useTemplates = useTemplates(type, ownerId),
6398
6426
  isLoading = _useTemplates.isLoading,
6399
6427
  templatesData = _useTemplates.templatesData,
6400
6428
  createUpdateTemplate = _useTemplates.createUpdateTemplate,
@@ -6455,6 +6483,7 @@ var MessageTemplates = function MessageTemplates(_ref) {
6455
6483
  label: label,
6456
6484
  labelSingular: labelSingular,
6457
6485
  manageTemplatePane: manageTemplatePane,
6486
+ ownerId: ownerId,
6458
6487
  pageProperties: pageProperties,
6459
6488
  setManageTemplatePane: setManageTemplatePane,
6460
6489
  setPageProperties: setPageProperties,
@@ -6475,13 +6504,13 @@ var MessageTemplates = function MessageTemplates(_ref) {
6475
6504
  };
6476
6505
  var index$1 = withReactQuery(MessageTemplates);
6477
6506
 
6507
+ var formatEditorContent = function formatEditorContent(value) {
6508
+ return value === null || value === void 0 ? void 0 : value.replaceAll(/<\/?(?!img)\w*\b[^>]*>/gi, "").trim();
6509
+ };
6478
6510
  var SEND_MESSAGE_INITIAL_VALUES = {
6479
6511
  subject: "",
6480
6512
  body: ""
6481
6513
  };
6482
- var formatEditorContent = function formatEditorContent(value) {
6483
- return value === null || value === void 0 ? void 0 : value.replaceAll(/<\/?(?!img)\w*\b[^>]*>/gi, "").trim();
6484
- };
6485
6514
  var EMAIL_MESSAGE_FORM_SCHEMA = yup__namespace.object().shape({
6486
6515
  subject: yup__namespace.string().trim().required(t$1("template.validation.subjectPresence")),
6487
6516
  body: yup__namespace.string().test("body", t$1("template.validation.bodyPresence"), function (value) {
@@ -6493,10 +6522,15 @@ var SMS_MESSAGE_FORM_VALIDATION_SCHEMA = yup__namespace.object().shape({
6493
6522
  return !!formatEditorContent(value);
6494
6523
  })
6495
6524
  });
6525
+ var WHATSAPP_MESSAGE_FORM_VALIDATIONS_SCHEMA = yup__namespace.object().shape({
6526
+ variableContents: yup__namespace.object().shape({
6527
+ body: yup__namespace.array().of(yup__namespace.string().required(t$1("template.validation.variablePresence")))
6528
+ })
6529
+ });
6496
6530
 
6497
6531
  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; }
6498
6532
  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; }
6499
- var Form = function Form(_ref) {
6533
+ var EmailAndSms = function EmailAndSms(_ref) {
6500
6534
  var isEmailTemplate = _ref.isEmailTemplate,
6501
6535
  onClose = _ref.onClose,
6502
6536
  templates = _ref.templates,
@@ -6573,7 +6607,7 @@ var Form = function Form(_ref) {
6573
6607
  className: "absolute bottom-0 left-0 flex gap-x-2"
6574
6608
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
6575
6609
  disabled: !dirty || isSubmitting,
6576
- label: t("template.saveChanges"),
6610
+ label: t("template.send"),
6577
6611
  loading: isSubmitting,
6578
6612
  type: "submit"
6579
6613
  }), /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
@@ -6585,6 +6619,125 @@ var Form = function Form(_ref) {
6585
6619
  });
6586
6620
  };
6587
6621
 
6622
+ var Whatsapp = function Whatsapp(_ref) {
6623
+ var _templates$, _templates$2, _templates$3, _templates$4;
6624
+ var templates = _ref.templates,
6625
+ onClose = _ref.onClose,
6626
+ handleSubmit = _ref.handleSubmit;
6627
+ var _useTranslation = useTranslation(),
6628
+ t = _useTranslation.t;
6629
+ var getInitialVariableComponents = function getInitialVariableComponents(variables) {
6630
+ var initialComponents = {};
6631
+ variables.forEach(function (_ref2) {
6632
+ var type = _ref2.type,
6633
+ count = _ref2.count;
6634
+ initialComponents[type] = Array(count).fill("");
6635
+ });
6636
+ return initialComponents;
6637
+ };
6638
+ var getTemplateMessage = function getTemplateMessage(components) {
6639
+ return pure.nullSafe(ramda.pluck)("text", components).join("\n");
6640
+ };
6641
+ if (ramda.isEmpty(templates)) {
6642
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, null, t("template.emptyState", {
6643
+ type: t("template.whatsappTemplates")
6644
+ })), /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Footer, {
6645
+ className: "absolute bottom-0 left-0"
6646
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
6647
+ label: t("template.close"),
6648
+ onClick: onClose
6649
+ })));
6650
+ }
6651
+ var initialFormValues = {
6652
+ selectedTemplate: {
6653
+ label: (_templates$ = templates[0]) === null || _templates$ === void 0 ? void 0 : _templates$.name,
6654
+ value: (_templates$2 = templates[0]) === null || _templates$2 === void 0 ? void 0 : _templates$2.id
6655
+ },
6656
+ templateMessage: getTemplateMessage((_templates$3 = templates[0]) === null || _templates$3 === void 0 ? void 0 : _templates$3.components),
6657
+ variableContents: getInitialVariableComponents((_templates$4 = templates[0]) === null || _templates$4 === void 0 ? void 0 : _templates$4.variableCount)
6658
+ };
6659
+ return /*#__PURE__*/React__default["default"].createElement(formik$1.Form, {
6660
+ formProps: {
6661
+ noValidate: true,
6662
+ className: "flex w-full flex-col gap-y-4 pb-6"
6663
+ },
6664
+ formikProps: {
6665
+ initialValues: initialFormValues,
6666
+ validationSchema: WHATSAPP_MESSAGE_FORM_VALIDATIONS_SCHEMA,
6667
+ onSubmit: handleSubmit
6668
+ }
6669
+ }, function (_ref3) {
6670
+ var dirty = _ref3.dirty,
6671
+ isSubmitting = _ref3.isSubmitting,
6672
+ values = _ref3.values,
6673
+ setValues = _ref3.setValues;
6674
+ var handleTemplateChange = function handleTemplateChange(value) {
6675
+ if (!value) return;
6676
+ var template = pure.findBy({
6677
+ id: value === null || value === void 0 ? void 0 : value.value
6678
+ }, templates);
6679
+ setValues({
6680
+ selectedTemplate: {
6681
+ label: template.name,
6682
+ value: template.id
6683
+ },
6684
+ templateMessage: getTemplateMessage(template.components),
6685
+ variableContents: getInitialVariableComponents(template.variableCount)
6686
+ });
6687
+ };
6688
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(formik$1.Select, {
6689
+ required: true,
6690
+ defaultValue: initialFormValues.selectedTemplate,
6691
+ label: t("template.title"),
6692
+ name: "selectedTemplate",
6693
+ options: templates.map(function (_ref4) {
6694
+ var name = _ref4.name,
6695
+ id = _ref4.id;
6696
+ return {
6697
+ label: name,
6698
+ value: id
6699
+ };
6700
+ }),
6701
+ onChange: handleTemplateChange
6702
+ }), /*#__PURE__*/React__default["default"].createElement(neetoui.Textarea, {
6703
+ disabled: true,
6704
+ nakedTextarea: true,
6705
+ label: t("template.preview"),
6706
+ value: values.templateMessage
6707
+ }), pure.isNotEmpty(values.variableContents) && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, Object.keys(values.variableContents).map(function (group) {
6708
+ return /*#__PURE__*/React__default["default"].createElement("div", {
6709
+ className: "flex flex-col gap-y-2",
6710
+ key: group
6711
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
6712
+ style: "h4"
6713
+ }, t("template.resolveVariable", {
6714
+ type: pure.capitalize(group)
6715
+ })), values.variableContents[group].map(function (_, index) {
6716
+ return /*#__PURE__*/React__default["default"].createElement("div", {
6717
+ key: "".concat(group, "-").concat(index)
6718
+ }, /*#__PURE__*/React__default["default"].createElement(formik$1.Input, {
6719
+ required: true,
6720
+ key: "".concat(group, "-").concat(index),
6721
+ label: "{{".concat(index + 1, "}}"),
6722
+ name: "variableContents.".concat(group, ".").concat(index)
6723
+ }));
6724
+ }));
6725
+ })), /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Footer, {
6726
+ className: "absolute bottom-0 left-0 flex gap-x-2"
6727
+ }, /*#__PURE__*/React__default["default"].createElement(formik$1.Button, {
6728
+ disabled: !dirty || isSubmitting,
6729
+ label: t("template.send"),
6730
+ loading: isSubmitting,
6731
+ type: "submit"
6732
+ }), /*#__PURE__*/React__default["default"].createElement(formik$1.Button, {
6733
+ label: t("template.cancel"),
6734
+ style: "text",
6735
+ type: "reset",
6736
+ onClick: onClose
6737
+ })));
6738
+ });
6739
+ };
6740
+
6588
6741
  var SendMessagePane = function SendMessagePane(_ref) {
6589
6742
  var _ref$isOpen = _ref.isOpen,
6590
6743
  isOpen = _ref$isOpen === void 0 ? false : _ref$isOpen,
@@ -6601,7 +6754,9 @@ var SendMessagePane = function SendMessagePane(_ref) {
6601
6754
  _ref$customFieldsVali = _ref.customFieldsValidationSchema,
6602
6755
  customFieldsValidationSchema = _ref$customFieldsVali === void 0 ? {} : _ref$customFieldsVali,
6603
6756
  _ref$templateVariable = _ref.templateVariables,
6604
- templateVariables = _ref$templateVariable === void 0 ? {} : _ref$templateVariable;
6757
+ templateVariables = _ref$templateVariable === void 0 ? {} : _ref$templateVariable,
6758
+ _ref$ownerId = _ref.ownerId,
6759
+ ownerId = _ref$ownerId === void 0 ? "" : _ref$ownerId;
6605
6760
  var _useTranslation = useTranslation(),
6606
6761
  t = _useTranslation.t;
6607
6762
  var initialFocusField = React.useRef();
@@ -6611,7 +6766,8 @@ var SendMessagePane = function SendMessagePane(_ref) {
6611
6766
  var value = MESSAGE_TEMPLATES[type].value;
6612
6767
  var templateParams = {
6613
6768
  status: "active",
6614
- templateType: value
6769
+ templateType: value,
6770
+ ownerId: ownerId
6615
6771
  };
6616
6772
  var _useFetchTemplates = useFetchTemplates(templateParams),
6617
6773
  _useFetchTemplates$da = _useFetchTemplates.data,
@@ -6619,6 +6775,7 @@ var SendMessagePane = function SendMessagePane(_ref) {
6619
6775
  _useFetchTemplates$da3 = _useFetchTemplates$da2.templates,
6620
6776
  templates = _useFetchTemplates$da3 === void 0 ? [] : _useFetchTemplates$da3;
6621
6777
  var isEmailTemplate = type === "email";
6778
+ var isWhatsappTemplate = type === "whatsapp";
6622
6779
  return /*#__PURE__*/React__default["default"].createElement(neetoui.Pane, {
6623
6780
  initialFocusRef: initialFocusField,
6624
6781
  isOpen: isOpen,
@@ -6626,7 +6783,11 @@ var SendMessagePane = function SendMessagePane(_ref) {
6626
6783
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Header, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
6627
6784
  style: "h2",
6628
6785
  weight: "semibold"
6629
- }, t("common.send"), " ", type)), /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Body, null, /*#__PURE__*/React__default["default"].createElement(Form, {
6786
+ }, t("common.send"), " ", type)), /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Body, null, isWhatsappTemplate ? /*#__PURE__*/React__default["default"].createElement(Whatsapp, {
6787
+ handleSubmit: handleSubmit,
6788
+ templates: templates,
6789
+ onClose: onClose
6790
+ }) : /*#__PURE__*/React__default["default"].createElement(EmailAndSms, {
6630
6791
  customFields: customFields,
6631
6792
  customFieldsInitialValues: customFieldsInitialValues,
6632
6793
  customFieldsValidationSchema: customFieldsValidationSchema,