@bigbinary/neeto-webhooks-frontend 1.6.13 → 1.6.15

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.
@@ -48,6 +48,7 @@
48
48
  "webhook": {
49
49
  "title": "Webhooks",
50
50
  "description": "All new action event details will be posted to the configured webhook URLs",
51
+ "helpDescription": "Receive a webhook when the specified events take place.",
51
52
  "empty": "There are no webhooks defined currently",
52
53
  "add": "Add new webhook",
53
54
  "endpoint": "Endpoint",
@@ -55,7 +56,10 @@
55
56
  "event_other": "Events",
56
57
  "endpointPlaceholder": "Enter endpoint URL",
57
58
  "eventPlaceholder": "Select webhook events",
58
- "secret": "Secret key (optional) <helpLink><info></helpLink>",
59
+ "secret": "Secret key (optional)",
60
+ "secretkeyHelpTitle": "Securing webhook requests",
61
+ "secretkeyHelpDescription": "Adding a secret key will help you to verify that the webhook request was actually sent from neeto.",
62
+
59
63
  "secretPlaceholder": "Enter secret key",
60
64
  "edit": "Edit Webhook",
61
65
  "active": "Active",
package/dist/index.cjs.js CHANGED
@@ -6,6 +6,7 @@ var React = require('react');
6
6
  var reactRouterDom = require('react-router-dom');
7
7
  var neetoCist = require('@bigbinary/neeto-cist');
8
8
  var constants = require('@bigbinary/neeto-commons-frontend/constants');
9
+ var utils = require('@bigbinary/neeto-commons-frontend/utils');
9
10
  var Container = require('@bigbinary/neeto-molecules/Container');
10
11
  var Header$2 = require('@bigbinary/neeto-molecules/Header');
11
12
  var PageLoader = require('@bigbinary/neeto-molecules/PageLoader');
@@ -19,9 +20,9 @@ var DateFormat = require('@bigbinary/neeto-molecules/DateFormat');
19
20
  var i18next = require('i18next');
20
21
  var ramda = require('ramda');
21
22
  var neetoIcons = require('@bigbinary/neeto-icons');
23
+ var HelpPopover = require('@bigbinary/neeto-molecules/HelpPopover');
22
24
  var MoreDropdown = require('@bigbinary/neeto-molecules/MoreDropdown');
23
25
  var formik = require('@bigbinary/neetoui/formik');
24
- var utils = require('@bigbinary/neeto-commons-frontend/utils');
25
26
  var yup = require('yup');
26
27
 
27
28
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -51,12 +52,16 @@ var PageLoader__default = /*#__PURE__*/_interopDefaultLegacy(PageLoader);
51
52
  var TableWrapper__default = /*#__PURE__*/_interopDefaultLegacy(TableWrapper);
52
53
  var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
53
54
  var DateFormat__default = /*#__PURE__*/_interopDefaultLegacy(DateFormat);
55
+ var HelpPopover__default = /*#__PURE__*/_interopDefaultLegacy(HelpPopover);
54
56
  var MoreDropdown__default = /*#__PURE__*/_interopDefaultLegacy(MoreDropdown);
55
57
  var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
56
58
 
57
59
  var getDeliveriesPath = function getDeliveriesPath(webhooksPath) {
58
60
  return "".concat(webhooksPath, "/:webhookId/deliveries");
59
61
  };
62
+ var getDeliveryDetailsPath = function getDeliveryDetailsPath(deliveriesPath) {
63
+ return "".concat(deliveriesPath, "/:deliveryId/");
64
+ };
60
65
 
61
66
  function _arrayLikeToArray(arr, len) {
62
67
  if (len == null || len > arr.length) len = arr.length;
@@ -191,7 +196,8 @@ var useShowDelivery = function useShowDelivery(id) {
191
196
  return reactQuery.useQuery([QUERY_KEYS.DELIVERY_DETAILS, id], function () {
192
197
  return deliveriesApi.show(id);
193
198
  }, {
194
- staleTime: DELIVERY_STALE_TIME
199
+ staleTime: DELIVERY_STALE_TIME,
200
+ enabled: !!id
195
201
  });
196
202
  };
197
203
  var useRedeliverWebhook = function useRedeliverWebhook() {
@@ -606,30 +612,18 @@ var Snippet = function Snippet(_ref) {
606
612
 
607
613
  var TransactionDetails = function TransactionDetails(_ref) {
608
614
  var delivery = _ref.delivery;
609
- var deliveryId = delivery.id,
610
- status = delivery.status,
611
- identifier = delivery.identifier,
612
- responseStatusCode = delivery.responseStatusCode;
613
615
  var _useState = React.useState(DELIVERY_TAB.request),
614
616
  _useState2 = _slicedToArray(_useState, 2),
615
617
  activeHeader = _useState2[0],
616
618
  setActiveHeader = _useState2[1];
617
619
  var _useTranslation = reactI18next.useTranslation(),
618
620
  t = _useTranslation.t;
619
- var _useShowDelivery = useShowDelivery(deliveryId),
620
- isLoading = _useShowDelivery.isLoading,
621
- _useShowDelivery$data = _useShowDelivery.data,
622
- _useShowDelivery$data2 = _useShowDelivery$data === void 0 ? {} : _useShowDelivery$data,
623
- _useShowDelivery$data3 = _useShowDelivery$data2.delivery,
624
- deliveryDetails = _useShowDelivery$data3 === void 0 ? {} : _useShowDelivery$data3;
625
- if (isLoading) {
626
- return /*#__PURE__*/React__default["default"].createElement("div", {
627
- className: "flex w-full items-center justify-center py-6"
628
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Spinner, null));
629
- }
621
+ var status = delivery.status,
622
+ identifier = delivery.identifier,
623
+ responseStatusCode = delivery.responseStatusCode;
630
624
  var renderPayload = function renderPayload() {
631
625
  try {
632
- return JSON.stringify(JSON.parse(deliveryDetails.requestBody), null, 2);
626
+ return JSON.stringify(JSON.parse(delivery.requestBody), null, 2);
633
627
  } catch (_unused) {
634
628
  return "";
635
629
  }
@@ -670,7 +664,7 @@ var TransactionDetails = function TransactionDetails(_ref) {
670
664
  style: "h5"
671
665
  }, t("neetoWebhooks.delivery.header")), /*#__PURE__*/React__default["default"].createElement(Snippet, {
672
666
  dataCy: "delivery-request-header"
673
- }, deliveryDetails.requestHeader)), /*#__PURE__*/React__default["default"].createElement("div", null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
667
+ }, delivery.requestHeader)), /*#__PURE__*/React__default["default"].createElement("div", null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
674
668
  style: "h5"
675
669
  }, t("neetoWebhooks.delivery.payload")), /*#__PURE__*/React__default["default"].createElement(Snippet, {
676
670
  dataCy: "delivery-request-payload"
@@ -680,31 +674,33 @@ var TransactionDetails = function TransactionDetails(_ref) {
680
674
  style: "h5"
681
675
  }, t("neetoWebhooks.delivery.header")), /*#__PURE__*/React__default["default"].createElement(Snippet, {
682
676
  dataCy: "delivery-response-header"
683
- }, deliveryDetails.responseHeader)), /*#__PURE__*/React__default["default"].createElement("div", null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
677
+ }, delivery.responseHeader)), /*#__PURE__*/React__default["default"].createElement("div", null, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
684
678
  style: "h5"
685
679
  }, t("neetoWebhooks.delivery.body")), /*#__PURE__*/React__default["default"].createElement(Snippet, {
686
680
  dataCy: "delivery-response-body"
687
- }, deliveryDetails.responseBody)))));
681
+ }, delivery.responseBody)))));
688
682
  };
689
683
 
690
684
  var Details = function Details(_ref) {
691
- var delivery = _ref.delivery,
692
- onClose = _ref.onClose;
693
- var createdAt = delivery.createdAt,
694
- id = delivery.id,
695
- event = delivery.event;
685
+ var onClose = _ref.onClose,
686
+ deliveryId = _ref.deliveryId;
696
687
  var _useTranslation = reactI18next.useTranslation(),
697
688
  t = _useTranslation.t;
698
689
  var _useRedeliverWebhook = useRedeliverWebhook(),
699
690
  isRedelivering = _useRedeliverWebhook.isLoading,
700
691
  redeliverWebhook = _useRedeliverWebhook.mutateAsync;
692
+ var _useShowDelivery = useShowDelivery(deliveryId),
693
+ isLoading = _useShowDelivery.isLoading,
694
+ _useShowDelivery$data = _useShowDelivery.data,
695
+ _useShowDelivery$data2 = _useShowDelivery$data === void 0 ? {} : _useShowDelivery$data,
696
+ delivery = _useShowDelivery$data2.delivery;
701
697
  var handleRedeliverClick = /*#__PURE__*/function () {
702
698
  var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
703
699
  return _regeneratorRuntime.wrap(function _callee$(_context) {
704
700
  while (1) switch (_context.prev = _context.next) {
705
701
  case 0:
706
702
  _context.next = 2;
707
- return redeliverWebhook(id);
703
+ return redeliverWebhook(deliveryId);
708
704
  case 2:
709
705
  case "end":
710
706
  return _context.stop();
@@ -715,12 +711,15 @@ var Details = function Details(_ref) {
715
711
  return _ref2.apply(this, arguments);
716
712
  };
717
713
  }();
714
+ if (neetoCist.isNotPresent(delivery)) {
715
+ return null;
716
+ }
718
717
  return /*#__PURE__*/React__default["default"].createElement(neetoui.Pane, {
719
- isOpen: neetoCist.isPresent(delivery),
720
- size: "large",
721
- onClose: onClose
722
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Header, null, /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(DateFormat__default["default"].Date, {
723
- date: createdAt,
718
+ onClose: onClose,
719
+ isOpen: neetoCist.isPresent(deliveryId),
720
+ size: "large"
721
+ }, /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, isLoading ? /*#__PURE__*/React__default["default"].createElement(PageLoader__default["default"], null) : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Header, null, /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(DateFormat__default["default"].Date, {
722
+ date: delivery.createdAt,
724
723
  tooltipProps: {
725
724
  disabled: true
726
725
  },
@@ -729,7 +728,7 @@ var Details = function Details(_ref) {
729
728
  weight: "semibold"
730
729
  }
731
730
  }), /*#__PURE__*/React__default["default"].createElement("span", null, " \u2022 "), /*#__PURE__*/React__default["default"].createElement(DateFormat__default["default"].Time, {
732
- date: createdAt,
731
+ date: delivery.createdAt,
733
732
  tooltipProps: {
734
733
  disabled: true
735
734
  },
@@ -751,7 +750,7 @@ var Details = function Details(_ref) {
751
750
  label: t("neetoWebhooks.buttons.cancel"),
752
751
  style: "text",
753
752
  onClick: onClose
754
- })));
753
+ })))));
755
754
  };
756
755
 
757
756
  var buildColumns$1 = function buildColumns(_ref) {
@@ -768,7 +767,7 @@ var buildColumns$1 = function buildColumns(_ref) {
768
767
  style: "link",
769
768
  weight: "semibold",
770
769
  onClick: function onClick() {
771
- return handleDetailsClick(delivery);
770
+ return handleDetailsClick(delivery.sid);
772
771
  }
773
772
  }, delivery.identifier), delivery.redelivery && /*#__PURE__*/React__default["default"].createElement(neetoui.Tag, {
774
773
  style: "info"
@@ -818,14 +817,16 @@ var Deliveries = function Deliveries(_ref) {
818
817
  _useState2 = _slicedToArray(_useState, 2),
819
818
  pageNumber = _useState2[0],
820
819
  setPageNumber = _useState2[1];
821
- var _useState3 = React.useState({}),
822
- _useState4 = _slicedToArray(_useState3, 2),
823
- selectedDelivery = _useState4[0],
824
- setSelectedDelivery = _useState4[1];
820
+ var _useRouteMatch = reactRouterDom.useRouteMatch(),
821
+ deliveriesUrl = _useRouteMatch.url;
822
+ var history = reactRouterDom.useHistory();
825
823
  var _useTranslation = reactI18next.useTranslation(),
826
824
  t = _useTranslation.t;
827
825
  var _useParams = reactRouterDom.useParams(),
828
- webhookId = _useParams.webhookId;
826
+ webhookId = _useParams.webhookId,
827
+ deliveryId = _useParams.deliveryId;
828
+ var deliveriesPath = getDeliveriesPath(webhooksUrl);
829
+ var deliveryDetailsPath = getDeliveryDetailsPath(deliveriesUrl);
829
830
  var _useFetchDeliveries = useFetchDeliveries({
830
831
  sid: webhookId,
831
832
  page: pageNumber,
@@ -849,6 +850,16 @@ var Deliveries = function Deliveries(_ref) {
849
850
  link: window.location.pathname,
850
851
  text: endpoint
851
852
  }]);
853
+ var handleDetailsClick = function handleDetailsClick(sid) {
854
+ return history.push(utils.buildUrl(deliveryDetailsPath, {
855
+ deliveryId: sid
856
+ }));
857
+ };
858
+ var handleClose = function handleClose() {
859
+ history.push(utils.buildUrl(deliveriesPath, {
860
+ webhookId: webhookId
861
+ }));
862
+ };
852
863
  if (isLoading) return /*#__PURE__*/React__default["default"].createElement(PageLoader__default["default"], null);
853
864
  return /*#__PURE__*/React__default["default"].createElement(Container__default["default"], {
854
865
  className: "w-full"
@@ -860,26 +871,22 @@ var Deliveries = function Deliveries(_ref) {
860
871
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Table, {
861
872
  totalCount: totalCount,
862
873
  fixedHeight: true,
874
+ columnData: buildColumns$1({
875
+ handleDetailsClick: handleDetailsClick
876
+ }),
863
877
  currentPageNumber: pageNumber,
864
878
  defaultPageSize: constants.DEFAULT_PAGE_SIZE,
865
- handlePageChange: function handlePageChange(page) {
866
- return setPageNumber(page);
867
- },
879
+ handlePageChange: setPageNumber,
868
880
  loading: isFetching,
869
- rowData: deliveries,
870
- columnData: buildColumns$1({
871
- handleDetailsClick: setSelectedDelivery
872
- })
881
+ rowData: deliveries
873
882
  })) : /*#__PURE__*/React__default["default"].createElement("div", {
874
883
  className: "flex h-full w-full items-center justify-center"
875
884
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.NoData, {
876
885
  description: t("neetoWebhooks.delivery.empty.description"),
877
886
  title: t("neetoWebhooks.delivery.empty.title")
878
887
  })), /*#__PURE__*/React__default["default"].createElement(Details, {
879
- delivery: selectedDelivery,
880
- onClose: function onClose() {
881
- return setSelectedDelivery({});
882
- }
888
+ deliveryId: deliveryId,
889
+ onClose: handleClose
883
890
  }));
884
891
  };
885
892
  var Deliveries$1 = withReactQuery(Deliveries);
@@ -1280,19 +1287,18 @@ var AddWebhookPane = function AddWebhookPane(_ref) {
1280
1287
  onClose: onClose,
1281
1288
  initialFocusRef: endpointRef
1282
1289
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Pane.Header, {
1283
- className: "flex items-center space-x-3"
1290
+ className: "flex items-center gap-x-2"
1284
1291
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
1285
1292
  "data-cy": "add-new-webhook-pane-header",
1286
1293
  style: "h2",
1287
1294
  weight: "semibold"
1288
- }, editingWebhookId ? t("neetoWebhooks.webhook.edit") : t("neetoWebhooks.webhook.add")), /*#__PURE__*/React__default["default"].createElement("a", {
1289
- href: WEBHOOK_HELP_URL,
1290
- rel: "noreferrer",
1291
- target: "_blank"
1292
- }, /*#__PURE__*/React__default["default"].createElement(neetoIcons.Info, {
1293
- className: "neeto-ui-text-primary-800 mt-0.5 cursor-pointer",
1294
- size: 20
1295
- }))), /*#__PURE__*/React__default["default"].createElement(formik.Form, {
1295
+ }, editingWebhookId ? t("neetoWebhooks.webhook.edit") : t("neetoWebhooks.webhook.add")), /*#__PURE__*/React__default["default"].createElement(HelpPopover__default["default"], {
1296
+ description: t("neetoWebhooks.webhook.helpDescription"),
1297
+ helpLinkProps: {
1298
+ href: WEBHOOK_HELP_URL
1299
+ },
1300
+ title: t("neetoWebhooks.webhook.title")
1301
+ })), /*#__PURE__*/React__default["default"].createElement(formik.Form, {
1296
1302
  formikProps: {
1297
1303
  enableReinitialize: true,
1298
1304
  validationSchema: getValidationSchema(webhooks),
@@ -1332,20 +1338,15 @@ var AddWebhookPane = function AddWebhookPane(_ref) {
1332
1338
  }, /*#__PURE__*/React__default["default"].createElement(formik.Input, {
1333
1339
  "data-cy": "secret-key-input-field",
1334
1340
  name: "secret",
1335
- label: /*#__PURE__*/React__default["default"].createElement(reactI18next.Trans, {
1336
- i18nKey: "neetoWebhooks.webhook.secret",
1337
- components: {
1338
- helpLink: /*#__PURE__*/React__default["default"].createElement("a", {
1339
- href: WEBHOOK_SECRETS_HELP_URL,
1340
- rel: "noreferrer",
1341
- target: "_blank"
1342
- }),
1343
- info: /*#__PURE__*/React__default["default"].createElement(neetoIcons.Info, {
1344
- className: "neeto-ui-text-primary-800 mt-0.5 cursor-pointer",
1345
- size: 20
1346
- })
1347
- }
1348
- }),
1341
+ label: /*#__PURE__*/React__default["default"].createElement("span", {
1342
+ className: "flex items-center gap-x-2"
1343
+ }, t("neetoWebhooks.webhook.secret"), /*#__PURE__*/React__default["default"].createElement(HelpPopover__default["default"], {
1344
+ helpLinkProps: {
1345
+ href: WEBHOOK_SECRETS_HELP_URL
1346
+ },
1347
+ description: t("neetoWebhooks.webhook.secretkeyHelpDescription"),
1348
+ title: t("neetoWebhooks.webhook.secretkeyHelpTitle")
1349
+ })),
1349
1350
  placeholder: t("neetoWebhooks.webhook.secretPlaceholder")
1350
1351
  }), /*#__PURE__*/React__default["default"].createElement("div", {
1351
1352
  className: "mt-6"
@@ -1548,6 +1549,7 @@ var NeetoWebhooks = function NeetoWebhooks(_ref) {
1548
1549
  webhooksPath = _useRouteMatch.path,
1549
1550
  webhooksUrl = _useRouteMatch.url;
1550
1551
  var deliveriesPath = getDeliveriesPath(webhooksUrl);
1552
+ var deliveryDetailsPath = getDeliveryDetailsPath(deliveriesPath);
1551
1553
  return /*#__PURE__*/React__default["default"].createElement(reactRouterDom.Switch, null, /*#__PURE__*/React__default["default"].createElement(reactRouterDom.Route, {
1552
1554
  exact: true,
1553
1555
  path: webhooksPath,
@@ -1561,6 +1563,15 @@ var NeetoWebhooks = function NeetoWebhooks(_ref) {
1561
1563
  onDelete: onDelete
1562
1564
  });
1563
1565
  }
1566
+ }), /*#__PURE__*/React__default["default"].createElement(reactRouterDom.Route, {
1567
+ exact: true,
1568
+ path: deliveryDetailsPath,
1569
+ render: function render() {
1570
+ return /*#__PURE__*/React__default["default"].createElement(Deliveries$1, {
1571
+ breadcrumbs: breadcrumbs,
1572
+ webhooksUrl: webhooksUrl
1573
+ });
1574
+ }
1564
1575
  }), /*#__PURE__*/React__default["default"].createElement(reactRouterDom.Route, {
1565
1576
  component: function component() {
1566
1577
  return /*#__PURE__*/React__default["default"].createElement(Deliveries$1, {