@bigbinary/neeto-message-templates-frontend 0.7.2 → 0.7.4

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
@@ -128,6 +128,7 @@ along with filtering and search capabilities.
128
128
  templates pane.
129
129
  - `onMutationSuccess`: The callback function which is triggered on the success
130
130
  of mutation functions(create, update & delete).
131
+ - `helpDocUrl`: Help article link.
131
132
 
132
133
  ##### Usage
133
134
 
@@ -270,6 +271,7 @@ filtering and search capabilities.
270
271
  - `breadcrumbs`: An array of objects that specify breadcrumbs for navigation.
271
272
  - `onMutationSuccess`: The callback function which is triggered on the success
272
273
  of mutation functions(create, update & delete).
274
+ - `helpDocUrl`: Help article link.
273
275
 
274
276
  ##### Usage
275
277
 
@@ -24,6 +24,7 @@
24
24
  "subject": "Subject",
25
25
  "title": "Template",
26
26
  "active": "Active",
27
+ "linkToHelpArticle": "Here is how you can use <Link>{{entity}}</Link>.",
27
28
  "templateDeleteConfirmation": "You are deleting the template <strong>{{name}}</strong>. This can't be undone.",
28
29
  "deleteTemplate": "Delete {{label, anyCase}}?",
29
30
  "emailTemplates": "Email templates",
package/dist/index.cjs.js CHANGED
@@ -7,6 +7,7 @@ var neetoCist = require('@bigbinary/neeto-cist');
7
7
  var neetoFiltersFrontend = require('@bigbinary/neeto-filters-frontend');
8
8
  var Container = require('@bigbinary/neeto-molecules/Container');
9
9
  var NeetoHeader = require('@bigbinary/neeto-molecules/Header');
10
+ var HelpPopover = require('@bigbinary/neeto-molecules/HelpPopover');
10
11
  var SubHeader = require('@bigbinary/neeto-molecules/SubHeader');
11
12
  var Button = require('@bigbinary/neetoui/Button');
12
13
  var Typography = require('@bigbinary/neetoui/Typography');
@@ -63,6 +64,7 @@ function _interopNamespace(e) {
63
64
 
64
65
  var Container__default = /*#__PURE__*/_interopDefaultLegacy(Container);
65
66
  var NeetoHeader__default = /*#__PURE__*/_interopDefaultLegacy(NeetoHeader);
67
+ var HelpPopover__default = /*#__PURE__*/_interopDefaultLegacy(HelpPopover);
66
68
  var SubHeader__default = /*#__PURE__*/_interopDefaultLegacy(SubHeader);
67
69
  var Button__default = /*#__PURE__*/_interopDefaultLegacy(Button);
68
70
  var Typography__default = /*#__PURE__*/_interopDefaultLegacy(Typography);
@@ -3339,7 +3341,8 @@ var List = function List(_ref) {
3339
3341
  isFilterApplied = _ref.isFilterApplied,
3340
3342
  ownerId = _ref.ownerId,
3341
3343
  type = _ref.type,
3342
- onMutationSuccess = _ref.onMutationSuccess;
3344
+ onMutationSuccess = _ref.onMutationSuccess,
3345
+ helpDocUrl = _ref.helpDocUrl;
3343
3346
  var _useTranslation = reactI18next.useTranslation(),
3344
3347
  t = _useTranslation.t;
3345
3348
  var _useDeleteTemplate = useDeleteTemplate(ownerId),
@@ -3354,6 +3357,34 @@ var List = function List(_ref) {
3354
3357
  var isSms = type === "sms";
3355
3358
  var typeLabelSingular = isSms ? labelSingular : labelSingular.toLowerCase();
3356
3359
  var emptyStateLabel = isSms ? label : label.toLowerCase();
3360
+ var noDataProps = _objectSpread$7(_objectSpread$7({}, !isFilterApplied && {
3361
+ primaryButtonProps: {
3362
+ label: addText,
3363
+ onClick: function onClick() {
3364
+ return setManageTemplatePane(ramda.assoc("isOpen", true));
3365
+ }
3366
+ },
3367
+ helpText: /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
3368
+ i18nKey: "neetoMessageTemplate.template.linkToHelpArticle",
3369
+ values: {
3370
+ entity: label
3371
+ },
3372
+ components: {
3373
+ Link: /*#__PURE__*/jsxRuntime.jsx(Button__default["default"], {
3374
+ className: "underline",
3375
+ href: helpDocUrl,
3376
+ style: "link",
3377
+ target: "_blank"
3378
+ })
3379
+ }
3380
+ })
3381
+ }), {}, {
3382
+ title: isFilterApplied ? t("neetoMessageTemplate.template.filtersEmptyState", {
3383
+ type: emptyStateLabel
3384
+ }) : t("neetoMessageTemplate.template.emptyState", {
3385
+ type: emptyStateLabel
3386
+ })
3387
+ });
3357
3388
  var handleDelete = function handleDelete() {
3358
3389
  deleteTemplate(template.id, {
3359
3390
  onSuccess: onMutationSuccess,
@@ -3385,20 +3416,7 @@ var List = function List(_ref) {
3385
3416
  })
3386
3417
  }) : /*#__PURE__*/jsxRuntime.jsx("div", {
3387
3418
  className: "flex h-full w-full items-center justify-center",
3388
- children: /*#__PURE__*/jsxRuntime.jsx(NoData__default["default"], _objectSpread$7(_objectSpread$7({}, !isFilterApplied && {
3389
- primaryButtonProps: {
3390
- label: addText,
3391
- onClick: function onClick() {
3392
- return setManageTemplatePane(ramda.assoc("isOpen", true));
3393
- }
3394
- }
3395
- }), {}, {
3396
- title: isFilterApplied ? t("neetoMessageTemplate.template.filtersEmptyState", {
3397
- type: emptyStateLabel
3398
- }) : t("neetoMessageTemplate.template.emptyState", {
3399
- type: emptyStateLabel
3400
- })
3401
- }))
3419
+ children: /*#__PURE__*/jsxRuntime.jsx(NoData__default["default"], _objectSpread$7({}, noDataProps))
3402
3420
  }), /*#__PURE__*/jsxRuntime.jsx(Alert__default["default"], {
3403
3421
  isOpen: isDelete,
3404
3422
  isSubmitting: isDeleting,
@@ -3442,7 +3460,9 @@ var MessageTemplates = function MessageTemplates(_ref) {
3442
3460
  _ref$manageTemplatesP = _ref.manageTemplatesPaneCustomFields,
3443
3461
  manageTemplatesPaneCustomFields = _ref$manageTemplatesP === void 0 ? null : _ref$manageTemplatesP,
3444
3462
  _ref$onMutationSucces = _ref.onMutationSuccess,
3445
- onMutationSuccess = _ref$onMutationSucces === void 0 ? neetoCist.noop : _ref$onMutationSucces;
3463
+ onMutationSuccess = _ref$onMutationSucces === void 0 ? neetoCist.noop : _ref$onMutationSucces,
3464
+ _ref$helpDocUrl = _ref.helpDocUrl,
3465
+ helpDocUrl = _ref$helpDocUrl === void 0 ? "" : _ref$helpDocUrl;
3446
3466
  var _useState = react.useState(MESSAGE_TEMPLATE_INITIAL_STATE),
3447
3467
  _useState2 = _slicedToArray(_useState, 2),
3448
3468
  manageTemplatePane = _useState2[0],
@@ -3498,11 +3518,20 @@ var MessageTemplates = function MessageTemplates(_ref) {
3498
3518
  breadcrumbs: breadcrumbs,
3499
3519
  searchProps: renderSearchProps(label, value),
3500
3520
  size: "small",
3501
- title: label,
3502
3521
  actionBlock: /*#__PURE__*/jsxRuntime.jsx(Button__default["default"], {
3503
3522
  "data-cy": "add-".concat(neetoCist.hyphenate(value), "-button"),
3504
3523
  label: addText,
3505
3524
  onClick: handleActionClick
3525
+ }),
3526
+ title: /*#__PURE__*/jsxRuntime.jsxs("span", {
3527
+ className: "flex",
3528
+ children: [label, /*#__PURE__*/jsxRuntime.jsx(HelpPopover__default["default"], {
3529
+ className: "ml-2 self-center",
3530
+ helpLinkProps: {
3531
+ href: helpDocUrl
3532
+ },
3533
+ title: label
3534
+ })]
3506
3535
  })
3507
3536
  }), /*#__PURE__*/jsxRuntime.jsx(SubHeader__default["default"], {
3508
3537
  leftActionBlock: /*#__PURE__*/jsxRuntime.jsx(Typography__default["default"], {
@@ -3531,6 +3560,7 @@ var MessageTemplates = function MessageTemplates(_ref) {
3531
3560
  onChange: handleChange
3532
3561
  }), /*#__PURE__*/jsxRuntime.jsx(List, {
3533
3562
  addText: addText,
3563
+ helpDocUrl: helpDocUrl,
3534
3564
  isFilterApplied: isFilterApplied,
3535
3565
  isLoading: isLoading,
3536
3566
  label: label,
@@ -4031,13 +4061,16 @@ var KeyValuePairs = reactUtils.withT(function (_ref) {
4031
4061
  className: "flex h-8 space-x-3",
4032
4062
  children: [/*#__PURE__*/jsxRuntime.jsx(Input__default["default"], {
4033
4063
  className: "w-2/5",
4064
+ "data-cy": "key-input-".concat(index),
4034
4065
  name: "".concat(name, ".").concat(index, ".key"),
4035
4066
  placeholder: t("neetoMessageTemplate.api.key")
4036
4067
  }), /*#__PURE__*/jsxRuntime.jsx(Input__default["default"], {
4037
4068
  className: "w-3/5",
4069
+ "data-cy": "value-input-".concat(index),
4038
4070
  name: "".concat(name, ".").concat(index, ".value"),
4039
4071
  placeholder: t("neetoMessageTemplate.api.value"),
4040
4072
  suffix: showDeleteButton && /*#__PURE__*/jsxRuntime.jsx(Button__default["default"], {
4073
+ "data-cy": "delete-key-value-pair-".concat(index),
4041
4074
  icon: neetoIcons.Delete,
4042
4075
  size: "small",
4043
4076
  style: "text",
@@ -4053,6 +4086,7 @@ var KeyValuePairs = reactUtils.withT(function (_ref) {
4053
4086
  }, index);
4054
4087
  }), /*#__PURE__*/jsxRuntime.jsx(Button__default["default"], {
4055
4088
  className: "w-full justify-center",
4089
+ "data-cy": "add-key-value-pair-button",
4056
4090
  label: t("neetoMessageTemplate.api.addKeyValuePair"),
4057
4091
  style: "secondary",
4058
4092
  onClick: function onClick() {
@@ -4093,30 +4127,37 @@ var buildTableColumnData = function buildTableColumnData(_ref) {
4093
4127
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
4094
4128
  className: "flex items-center justify-between gap-x-3",
4095
4129
  children: [/*#__PURE__*/jsxRuntime.jsx(Button__default["default"], {
4130
+ "data-cy": "api-template-name-link",
4096
4131
  label: name,
4097
4132
  style: "link",
4098
4133
  onClick: function onClick() {
4099
4134
  return handleOpenEditPane(apiTemplate);
4100
4135
  }
4101
4136
  }), /*#__PURE__*/jsxRuntime.jsx(MoreDropdown__default["default"], {
4137
+ dropdownButtonProps: {
4138
+ "data-cy": "api-template-dropdown"
4139
+ },
4102
4140
  dropdownProps: {
4103
4141
  strategy: "fixed"
4104
4142
  },
4105
4143
  menuItems: [{
4106
4144
  key: "edit",
4107
4145
  label: i18next.t("neetoMessageTemplate.template.edit"),
4146
+ "data-cy": "api-template-button-edit-button",
4108
4147
  onClick: function onClick() {
4109
4148
  return handleOpenEditPane(apiTemplate);
4110
4149
  }
4111
4150
  }, {
4112
4151
  key: "status",
4113
4152
  label: ramda.equals(apiTemplate.status, TEMPLATE_STATUS.ACTIVE) ? i18next.t("neetoMessageTemplate.template.markAsInactive") : i18next.t("neetoMessageTemplate.template.markAsActive"),
4153
+ "data-cy": "api-template-button-status-button",
4114
4154
  onClick: function onClick() {
4115
4155
  return handleMarkAsActiveOrInactive(apiTemplate);
4116
4156
  }
4117
4157
  }, {
4118
4158
  key: "delete",
4119
4159
  label: i18next.t("neetoMessageTemplate.template.delete"),
4160
+ "data-cy": "api-template-button-delete-button",
4120
4161
  onClick: function onClick() {
4121
4162
  return handleOpenDeleteAlert(apiTemplate);
4122
4163
  }
@@ -4228,6 +4269,8 @@ var ApiTemplates = function ApiTemplates(_ref) {
4228
4269
  var ownerId = _ref.ownerId,
4229
4270
  _ref$breadcrumbs = _ref.breadcrumbs,
4230
4271
  breadcrumbs = _ref$breadcrumbs === void 0 ? [] : _ref$breadcrumbs,
4272
+ _ref$helpDocUrl = _ref.helpDocUrl,
4273
+ helpDocUrl = _ref$helpDocUrl === void 0 ? "" : _ref$helpDocUrl,
4231
4274
  _ref$onMutationSucces = _ref.onMutationSuccess,
4232
4275
  onMutationSuccess = _ref$onMutationSucces === void 0 ? neetoCist.noop : _ref$onMutationSucces;
4233
4276
  var _useTranslation = reactI18next.useTranslation(),
@@ -4279,6 +4322,7 @@ var ApiTemplates = function ApiTemplates(_ref) {
4279
4322
  totalCount = _useFetchTemplates$da2.totalCount,
4280
4323
  isLoading = _useFetchTemplates.isLoading,
4281
4324
  isFetching = _useFetchTemplates.isFetching;
4325
+ var title = t("neetoMessageTemplate.template.apiTemplates");
4282
4326
  var isFilterApplied = neetoCist.isNotEmpty(filters);
4283
4327
  var handleFiltersChange = function handleFiltersChange(filters) {
4284
4328
  setFilters(filters);
@@ -4324,20 +4368,59 @@ var ApiTemplates = function ApiTemplates(_ref) {
4324
4368
  }
4325
4369
  });
4326
4370
  };
4371
+ var noDataProps = _objectSpread$1(_objectSpread$1({}, !isFilterApplied && {
4372
+ primaryButtonProps: {
4373
+ label: t("neetoMessageTemplate.api.addApiTemplate"),
4374
+ onClick: function onClick() {
4375
+ return setIsFormPaneOpen(true);
4376
+ }
4377
+ },
4378
+ helpText: /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
4379
+ i18nKey: "neetoMessageTemplate.template.linkToHelpArticle",
4380
+ values: {
4381
+ entity: title
4382
+ },
4383
+ components: {
4384
+ Link: /*#__PURE__*/jsxRuntime.jsx(Button__default["default"], {
4385
+ className: "underline",
4386
+ href: helpDocUrl,
4387
+ style: "link",
4388
+ target: "_blank"
4389
+ })
4390
+ }
4391
+ })
4392
+ }), {}, {
4393
+ title: isFilterApplied ? t("neetoMessageTemplate.template.filtersEmptyState", {
4394
+ type: title
4395
+ }) : t("neetoMessageTemplate.template.emptyState", {
4396
+ type: title
4397
+ })
4398
+ });
4327
4399
  return /*#__PURE__*/jsxRuntime.jsxs(Container__default["default"], {
4328
4400
  children: [/*#__PURE__*/jsxRuntime.jsx(NeetoHeader__default["default"], {
4329
4401
  breadcrumbs: breadcrumbs,
4330
4402
  size: "small",
4331
- title: t("neetoMessageTemplate.template.apiTemplates"),
4332
4403
  actionBlock: /*#__PURE__*/jsxRuntime.jsx(Button__default["default"], {
4404
+ "data-cy": "add-api-templates-button",
4333
4405
  label: t("neetoMessageTemplate.api.addApiTemplate"),
4334
4406
  onClick: function onClick() {
4335
4407
  return setIsFormPaneOpen(true);
4336
4408
  }
4337
4409
  }),
4338
4410
  searchProps: {
4339
- placeholder: t("neetoMessageTemplate.template.searchApiTemplates")
4340
- }
4411
+ placeholder: t("neetoMessageTemplate.template.searchApiTemplates"),
4412
+ "data-cy": "api-templates-search-input"
4413
+ },
4414
+ title: /*#__PURE__*/jsxRuntime.jsxs("span", {
4415
+ className: "flex",
4416
+ children: [title, /*#__PURE__*/jsxRuntime.jsx(HelpPopover__default["default"], {
4417
+ title: title,
4418
+ className: "ml-2 self-center",
4419
+ helpLinkProps: {
4420
+ href: helpDocUrl
4421
+ }
4422
+ })]
4423
+ })
4341
4424
  }), /*#__PURE__*/jsxRuntime.jsx(SubHeader__default["default"], {
4342
4425
  leftActionBlock: /*#__PURE__*/jsxRuntime.jsx(Typography__default["default"], {
4343
4426
  component: "h4",
@@ -4389,20 +4472,7 @@ var ApiTemplates = function ApiTemplates(_ref) {
4389
4472
  })
4390
4473
  }) : /*#__PURE__*/jsxRuntime.jsx("div", {
4391
4474
  className: "flex h-full w-full items-center justify-center",
4392
- children: /*#__PURE__*/jsxRuntime.jsx(NoData__default["default"], _objectSpread$1(_objectSpread$1({}, !isFilterApplied && {
4393
- primaryButtonProps: {
4394
- label: t("neetoMessageTemplate.api.addApiTemplate"),
4395
- onClick: function onClick() {
4396
- return setIsFormPaneOpen(true);
4397
- }
4398
- }
4399
- }), {}, {
4400
- title: isFilterApplied ? t("neetoMessageTemplate.template.filtersEmptyState", {
4401
- type: t("neetoMessageTemplate.template.apiTemplates")
4402
- }) : t("neetoMessageTemplate.template.emptyState", {
4403
- type: t("neetoMessageTemplate.template.apiTemplates")
4404
- })
4405
- }))
4475
+ children: /*#__PURE__*/jsxRuntime.jsx(NoData__default["default"], _objectSpread$1({}, noDataProps))
4406
4476
  }), /*#__PURE__*/jsxRuntime.jsx(Pane__default["default"], {
4407
4477
  isOpen: isFormPaneOpen,
4408
4478
  onClose: handleCloseDeleteAlertAndFormPane,
@@ -4538,10 +4608,12 @@ var SendToApiForm = function SendToApiForm(_ref) {
4538
4608
  children: /*#__PURE__*/jsxRuntime.jsx(ActionBlock__default["default"], {
4539
4609
  isSubmitting: isSubmitting,
4540
4610
  cancelButtonProps: {
4541
- onClick: onClose
4611
+ onClick: onClose,
4612
+ "data-cy": "api-template-cancel-button"
4542
4613
  },
4543
4614
  submitButtonProps: {
4544
- label: t("neetoMessageTemplate.template.send")
4615
+ label: t("neetoMessageTemplate.template.send"),
4616
+ "data-cy": "api-template-send-button"
4545
4617
  }
4546
4618
  })
4547
4619
  })]