@bigbinary/neeto-message-templates-frontend 0.7.2 → 0.8.0-beta1

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
 
@@ -173,7 +174,9 @@ const App = () => {
173
174
  type={type}
174
175
  isTestingTemplateDisabled={isTestingTemplateDisabled}
175
176
  manageTemplatesPaneCustomFields={manageTemplatesPaneCustomFields()}
176
- onMutationSuccess={() => queryClient.invalidateQueries(["rules"])}
177
+ onMutationSuccess={() => queryClient.invalidateQueries({
178
+ queryKey: ["rules"],
179
+ })}
177
180
  />
178
181
  );
179
182
  };
@@ -270,6 +273,7 @@ filtering and search capabilities.
270
273
  - `breadcrumbs`: An array of objects that specify breadcrumbs for navigation.
271
274
  - `onMutationSuccess`: The callback function which is triggered on the success
272
275
  of mutation functions(create, update & delete).
276
+ - `helpDocUrl`: Help article link.
273
277
 
274
278
  ##### Usage
275
279
 
@@ -287,7 +291,7 @@ const App = () => {
287
291
  return (
288
292
  <ApiTemplates
289
293
  {...{ breadcrumbs, ownerId }}
290
- onMutationSuccess={() => queryClient.invalidateQueries(["rules"])}
294
+ onMutationSuccess={() => queryClient.invalidateQueries({ queryKey: ["rules"] })}
291
295
  />
292
296
  );
293
297
  };
@@ -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');
@@ -15,8 +16,8 @@ var reactI18next = require('react-i18next');
15
16
  var i18next = require('i18next');
16
17
  var constants = require('@bigbinary/neeto-commons-frontend/constants');
17
18
  var MoreDropdown = require('@bigbinary/neeto-molecules/MoreDropdown');
19
+ var reactQuery = require('@tanstack/react-query');
18
20
  var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
19
- var reactQuery = require('react-query');
20
21
  var axios = require('axios');
21
22
  var require$$0 = require('util');
22
23
  var zustand = require('zustand');
@@ -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);
@@ -2336,9 +2338,12 @@ var ownerIdValue = function ownerIdValue(ownerId) {
2336
2338
  return ramda.isEmpty(ownerId) ? undefined : ownerId;
2337
2339
  };
2338
2340
  var useFetchTemplates = function useFetchTemplates(params, options) {
2339
- return reactQuery.useQuery([QUERY_KEYS.NEETO_MESSAGE_TEMPLATES, params], function () {
2340
- return messageTemplatesApi.fetchAll(params);
2341
- }, options);
2341
+ return reactQuery.useQuery(_objectSpread$d({
2342
+ queryKey: [QUERY_KEYS.NEETO_MESSAGE_TEMPLATES, params],
2343
+ queryFn: function queryFn() {
2344
+ return messageTemplatesApi.fetchAll(params);
2345
+ }
2346
+ }, options));
2342
2347
  };
2343
2348
  var useCreateTemplate = function useCreateTemplate(ownerId, options) {
2344
2349
  return reactUtils.useMutationWithInvalidation(function (messageTemplate) {
@@ -3339,12 +3344,13 @@ var List = function List(_ref) {
3339
3344
  isFilterApplied = _ref.isFilterApplied,
3340
3345
  ownerId = _ref.ownerId,
3341
3346
  type = _ref.type,
3342
- onMutationSuccess = _ref.onMutationSuccess;
3347
+ onMutationSuccess = _ref.onMutationSuccess,
3348
+ helpDocUrl = _ref.helpDocUrl;
3343
3349
  var _useTranslation = reactI18next.useTranslation(),
3344
3350
  t = _useTranslation.t;
3345
3351
  var _useDeleteTemplate = useDeleteTemplate(ownerId),
3346
3352
  deleteTemplate = _useDeleteTemplate.mutate,
3347
- isDeleting = _useDeleteTemplate.isLoading;
3353
+ isDeleting = _useDeleteTemplate.isPending;
3348
3354
  var templates = templatesData.templates,
3349
3355
  totalCount = templatesData.totalCount;
3350
3356
  var template = manageTemplatePane.template,
@@ -3354,6 +3360,34 @@ var List = function List(_ref) {
3354
3360
  var isSms = type === "sms";
3355
3361
  var typeLabelSingular = isSms ? labelSingular : labelSingular.toLowerCase();
3356
3362
  var emptyStateLabel = isSms ? label : label.toLowerCase();
3363
+ var noDataProps = _objectSpread$7(_objectSpread$7({}, !isFilterApplied && {
3364
+ primaryButtonProps: {
3365
+ label: addText,
3366
+ onClick: function onClick() {
3367
+ return setManageTemplatePane(ramda.assoc("isOpen", true));
3368
+ }
3369
+ },
3370
+ helpText: /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
3371
+ i18nKey: "neetoMessageTemplate.template.linkToHelpArticle",
3372
+ values: {
3373
+ entity: label
3374
+ },
3375
+ components: {
3376
+ Link: /*#__PURE__*/jsxRuntime.jsx(Button__default["default"], {
3377
+ className: "underline",
3378
+ href: helpDocUrl,
3379
+ style: "link",
3380
+ target: "_blank"
3381
+ })
3382
+ }
3383
+ })
3384
+ }), {}, {
3385
+ title: isFilterApplied ? t("neetoMessageTemplate.template.filtersEmptyState", {
3386
+ type: emptyStateLabel
3387
+ }) : t("neetoMessageTemplate.template.emptyState", {
3388
+ type: emptyStateLabel
3389
+ })
3390
+ });
3357
3391
  var handleDelete = function handleDelete() {
3358
3392
  deleteTemplate(template.id, {
3359
3393
  onSuccess: onMutationSuccess,
@@ -3385,20 +3419,7 @@ var List = function List(_ref) {
3385
3419
  })
3386
3420
  }) : /*#__PURE__*/jsxRuntime.jsx("div", {
3387
3421
  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
- }))
3422
+ children: /*#__PURE__*/jsxRuntime.jsx(NoData__default["default"], _objectSpread$7({}, noDataProps))
3402
3423
  }), /*#__PURE__*/jsxRuntime.jsx(Alert__default["default"], {
3403
3424
  isOpen: isDelete,
3404
3425
  isSubmitting: isDeleting,
@@ -3442,7 +3463,9 @@ var MessageTemplates = function MessageTemplates(_ref) {
3442
3463
  _ref$manageTemplatesP = _ref.manageTemplatesPaneCustomFields,
3443
3464
  manageTemplatesPaneCustomFields = _ref$manageTemplatesP === void 0 ? null : _ref$manageTemplatesP,
3444
3465
  _ref$onMutationSucces = _ref.onMutationSuccess,
3445
- onMutationSuccess = _ref$onMutationSucces === void 0 ? neetoCist.noop : _ref$onMutationSucces;
3466
+ onMutationSuccess = _ref$onMutationSucces === void 0 ? neetoCist.noop : _ref$onMutationSucces,
3467
+ _ref$helpDocUrl = _ref.helpDocUrl,
3468
+ helpDocUrl = _ref$helpDocUrl === void 0 ? "" : _ref$helpDocUrl;
3446
3469
  var _useState = react.useState(MESSAGE_TEMPLATE_INITIAL_STATE),
3447
3470
  _useState2 = _slicedToArray(_useState, 2),
3448
3471
  manageTemplatePane = _useState2[0],
@@ -3498,11 +3521,20 @@ var MessageTemplates = function MessageTemplates(_ref) {
3498
3521
  breadcrumbs: breadcrumbs,
3499
3522
  searchProps: renderSearchProps(label, value),
3500
3523
  size: "small",
3501
- title: label,
3502
3524
  actionBlock: /*#__PURE__*/jsxRuntime.jsx(Button__default["default"], {
3503
3525
  "data-cy": "add-".concat(neetoCist.hyphenate(value), "-button"),
3504
3526
  label: addText,
3505
3527
  onClick: handleActionClick
3528
+ }),
3529
+ title: /*#__PURE__*/jsxRuntime.jsxs("span", {
3530
+ className: "flex",
3531
+ children: [label, /*#__PURE__*/jsxRuntime.jsx(HelpPopover__default["default"], {
3532
+ className: "ml-2 self-center",
3533
+ helpLinkProps: {
3534
+ href: helpDocUrl
3535
+ },
3536
+ title: label
3537
+ })]
3506
3538
  })
3507
3539
  }), /*#__PURE__*/jsxRuntime.jsx(SubHeader__default["default"], {
3508
3540
  leftActionBlock: /*#__PURE__*/jsxRuntime.jsx(Typography__default["default"], {
@@ -3531,6 +3563,7 @@ var MessageTemplates = function MessageTemplates(_ref) {
3531
3563
  onChange: handleChange
3532
3564
  }), /*#__PURE__*/jsxRuntime.jsx(List, {
3533
3565
  addText: addText,
3566
+ helpDocUrl: helpDocUrl,
3534
3567
  isFilterApplied: isFilterApplied,
3535
3568
  isLoading: isLoading,
3536
3569
  label: label,
@@ -4152,10 +4185,10 @@ var Form = function Form(_ref) {
4152
4185
  t = _useTranslation.t;
4153
4186
  var _useCreateTemplate = useCreateTemplate(ownerId),
4154
4187
  createApiTemplate = _useCreateTemplate.mutate,
4155
- isCreating = _useCreateTemplate.isLoading;
4188
+ isCreating = _useCreateTemplate.isPending;
4156
4189
  var _useUpdateTemplate = useUpdateTemplate(ownerId),
4157
4190
  updateApiTemplate = _useUpdateTemplate.mutate,
4158
- isUpdating = _useUpdateTemplate.isLoading;
4191
+ isUpdating = _useUpdateTemplate.isPending;
4159
4192
  var isEdit = neetoCist.isNotEmpty(selectedApiTemplate);
4160
4193
  var handleSubmit = function handleSubmit(values, _ref2) {
4161
4194
  var setSubmitting = _ref2.setSubmitting;
@@ -4228,6 +4261,8 @@ var ApiTemplates = function ApiTemplates(_ref) {
4228
4261
  var ownerId = _ref.ownerId,
4229
4262
  _ref$breadcrumbs = _ref.breadcrumbs,
4230
4263
  breadcrumbs = _ref$breadcrumbs === void 0 ? [] : _ref$breadcrumbs,
4264
+ _ref$helpDocUrl = _ref.helpDocUrl,
4265
+ helpDocUrl = _ref$helpDocUrl === void 0 ? "" : _ref$helpDocUrl,
4231
4266
  _ref$onMutationSucces = _ref.onMutationSuccess,
4232
4267
  onMutationSuccess = _ref$onMutationSucces === void 0 ? neetoCist.noop : _ref$onMutationSucces;
4233
4268
  var _useTranslation = reactI18next.useTranslation(),
@@ -4279,6 +4314,7 @@ var ApiTemplates = function ApiTemplates(_ref) {
4279
4314
  totalCount = _useFetchTemplates$da2.totalCount,
4280
4315
  isLoading = _useFetchTemplates.isLoading,
4281
4316
  isFetching = _useFetchTemplates.isFetching;
4317
+ var title = t("neetoMessageTemplate.template.apiTemplates");
4282
4318
  var isFilterApplied = neetoCist.isNotEmpty(filters);
4283
4319
  var handleFiltersChange = function handleFiltersChange(filters) {
4284
4320
  setFilters(filters);
@@ -4286,7 +4322,7 @@ var ApiTemplates = function ApiTemplates(_ref) {
4286
4322
  };
4287
4323
  var _useDeleteTemplate = useDeleteTemplate(ownerId),
4288
4324
  deleteTemplate = _useDeleteTemplate.mutate,
4289
- isDeleting = _useDeleteTemplate.isLoading;
4325
+ isDeleting = _useDeleteTemplate.isPending;
4290
4326
  var _useUpdateTemplate = useUpdateTemplate(ownerId),
4291
4327
  updateTemplate = _useUpdateTemplate.mutate;
4292
4328
  var handleOpenEditPane = function handleOpenEditPane(apiTemplate) {
@@ -4324,11 +4360,38 @@ var ApiTemplates = function ApiTemplates(_ref) {
4324
4360
  }
4325
4361
  });
4326
4362
  };
4363
+ var noDataProps = _objectSpread$1(_objectSpread$1({}, !isFilterApplied && {
4364
+ primaryButtonProps: {
4365
+ label: t("neetoMessageTemplate.api.addApiTemplate"),
4366
+ onClick: function onClick() {
4367
+ return setIsFormPaneOpen(true);
4368
+ }
4369
+ },
4370
+ helpText: /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
4371
+ i18nKey: "neetoMessageTemplate.template.linkToHelpArticle",
4372
+ values: {
4373
+ entity: title
4374
+ },
4375
+ components: {
4376
+ Link: /*#__PURE__*/jsxRuntime.jsx(Button__default["default"], {
4377
+ className: "underline",
4378
+ href: helpDocUrl,
4379
+ style: "link",
4380
+ target: "_blank"
4381
+ })
4382
+ }
4383
+ })
4384
+ }), {}, {
4385
+ title: isFilterApplied ? t("neetoMessageTemplate.template.filtersEmptyState", {
4386
+ type: title
4387
+ }) : t("neetoMessageTemplate.template.emptyState", {
4388
+ type: title
4389
+ })
4390
+ });
4327
4391
  return /*#__PURE__*/jsxRuntime.jsxs(Container__default["default"], {
4328
4392
  children: [/*#__PURE__*/jsxRuntime.jsx(NeetoHeader__default["default"], {
4329
4393
  breadcrumbs: breadcrumbs,
4330
4394
  size: "small",
4331
- title: t("neetoMessageTemplate.template.apiTemplates"),
4332
4395
  actionBlock: /*#__PURE__*/jsxRuntime.jsx(Button__default["default"], {
4333
4396
  label: t("neetoMessageTemplate.api.addApiTemplate"),
4334
4397
  onClick: function onClick() {
@@ -4337,7 +4400,17 @@ var ApiTemplates = function ApiTemplates(_ref) {
4337
4400
  }),
4338
4401
  searchProps: {
4339
4402
  placeholder: t("neetoMessageTemplate.template.searchApiTemplates")
4340
- }
4403
+ },
4404
+ title: /*#__PURE__*/jsxRuntime.jsxs("span", {
4405
+ className: "flex",
4406
+ children: [title, /*#__PURE__*/jsxRuntime.jsx(HelpPopover__default["default"], {
4407
+ title: title,
4408
+ className: "ml-2 self-center",
4409
+ helpLinkProps: {
4410
+ href: helpDocUrl
4411
+ }
4412
+ })]
4413
+ })
4341
4414
  }), /*#__PURE__*/jsxRuntime.jsx(SubHeader__default["default"], {
4342
4415
  leftActionBlock: /*#__PURE__*/jsxRuntime.jsx(Typography__default["default"], {
4343
4416
  component: "h4",
@@ -4389,20 +4462,7 @@ var ApiTemplates = function ApiTemplates(_ref) {
4389
4462
  })
4390
4463
  }) : /*#__PURE__*/jsxRuntime.jsx("div", {
4391
4464
  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
- }))
4465
+ children: /*#__PURE__*/jsxRuntime.jsx(NoData__default["default"], _objectSpread$1({}, noDataProps))
4406
4466
  }), /*#__PURE__*/jsxRuntime.jsx(Pane__default["default"], {
4407
4467
  isOpen: isFormPaneOpen,
4408
4468
  onClose: handleCloseDeleteAlertAndFormPane,