@bigbinary/neeto-webhooks-frontend 3.0.11 → 3.0.12

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.
@@ -0,0 +1,1205 @@
1
+ 'use strict';
2
+
3
+ var ramda = require('ramda');
4
+ var reactRouterDom = require('react-router-dom');
5
+ var main = require('../../main-B8V9tERH.js');
6
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
7
+ var neetoCist = require('@bigbinary/neeto-cist');
8
+ var constants = require('@bigbinary/neeto-commons-frontend/v2/constants');
9
+ var reactUtils = require('@bigbinary/neeto-commons-frontend/v2/react-utils');
10
+ var utils = require('@bigbinary/neeto-commons-frontend/v2/utils');
11
+ var neetoAtoms = require('@bigbinary/neeto-atoms');
12
+ var Container = require('@bigbinary/neeto-molecules/v2/Container');
13
+ var Header$2 = require('@bigbinary/neeto-molecules/v2/Header');
14
+ var TableWrapper = require('@bigbinary/neeto-molecules/v2/TableWrapper');
15
+ var reactI18next = require('react-i18next');
16
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
17
+ var reactQuery = require('@tanstack/react-query');
18
+ var reactQueryDevtools = require('@tanstack/react-query-devtools');
19
+ var jsxRuntime = require('react/jsx-runtime');
20
+ var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
21
+ var _regeneratorRuntime = require('@babel/runtime/regenerator');
22
+ var DateFormat = require('@bigbinary/neeto-molecules/v2/DateFormat');
23
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
24
+ var react = require('react');
25
+ var i18next = require('i18next');
26
+ var formik = require('@bigbinary/neeto-atoms/formik');
27
+ var formik$1 = require('formik');
28
+ var lucideReact = require('lucide-react');
29
+ var HelpPopover = require('@bigbinary/neeto-molecules/v2/HelpPopover');
30
+ var MoreDropdown = require('@bigbinary/neeto-molecules/v2/MoreDropdown');
31
+ var yup = require('yup');
32
+ var SubHeader = require('@bigbinary/neeto-molecules/v2/SubHeader');
33
+ require('@bigbinary/neeto-commons-frontend/initializers');
34
+ require('@bigbinary/neeto-commons-frontend/constants');
35
+ require('axios');
36
+ require('@bigbinary/neeto-commons-frontend/react-utils');
37
+
38
+ function _interopNamespaceDefault(e) {
39
+ var n = Object.create(null);
40
+ if (e) {
41
+ Object.keys(e).forEach(function (k) {
42
+ if (k !== 'default') {
43
+ var d = Object.getOwnPropertyDescriptor(e, k);
44
+ Object.defineProperty(n, k, d.get ? d : {
45
+ enumerable: true,
46
+ get: function () { return e[k]; }
47
+ });
48
+ }
49
+ });
50
+ }
51
+ n.default = e;
52
+ return Object.freeze(n);
53
+ }
54
+
55
+ var yup__namespace = /*#__PURE__*/_interopNamespaceDefault(yup);
56
+
57
+ function ownKeys$3(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
58
+ function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
59
+ var withReactQuery = function withReactQuery(Component) {
60
+ var QueryWrapper = function QueryWrapper(props) {
61
+ return /*#__PURE__*/jsxRuntime.jsxs(reactQuery.QueryClientProvider, {
62
+ client: main.queryClient,
63
+ children: [/*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread$3({}, props)), /*#__PURE__*/jsxRuntime.jsx(reactQueryDevtools.ReactQueryDevtools, {
64
+ initialIsOpen: false,
65
+ position: "bottom"
66
+ })]
67
+ });
68
+ };
69
+ return QueryWrapper;
70
+ };
71
+
72
+ var DELIVERY_TAB = {
73
+ response: "response",
74
+ request: "request"
75
+ };
76
+
77
+ var Snippet = function Snippet(_ref) {
78
+ var children = _ref.children,
79
+ _ref$dataTestid = _ref.dataTestid,
80
+ dataTestid = _ref$dataTestid === void 0 ? "" : _ref$dataTestid;
81
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
82
+ className: "neeto-ui-rounded neeto-ui-border-gray-300 neeto-ui-bg-gray-100 my-2 whitespace-pre-wrap break-all border p-4",
83
+ "data-testid": dataTestid,
84
+ children: children
85
+ });
86
+ };
87
+
88
+ var TransactionDetails = function TransactionDetails(_ref) {
89
+ var delivery = _ref.delivery;
90
+ var _useState = react.useState(DELIVERY_TAB.request),
91
+ _useState2 = _slicedToArray(_useState, 2),
92
+ activeHeader = _useState2[0],
93
+ setActiveHeader = _useState2[1];
94
+ var _useTranslation = reactI18next.useTranslation(),
95
+ t = _useTranslation.t;
96
+ var status = delivery.status,
97
+ identifier = delivery.identifier,
98
+ responseStatusCode = delivery.responseStatusCode,
99
+ sid = delivery.sid;
100
+ var renderPayload = function renderPayload() {
101
+ try {
102
+ return JSON.stringify(JSON.parse(delivery.requestBody), null, 2);
103
+ } catch (_unused) {
104
+ return "";
105
+ }
106
+ };
107
+ return /*#__PURE__*/jsxRuntime.jsx(jsxRuntime.Fragment, {
108
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
109
+ className: "neeto-ui-bg-white sticky top-0 mb-2 flex w-full flex-col",
110
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
111
+ className: "flex w-full flex-col space-y-2 pb-4",
112
+ children: [/*#__PURE__*/jsxRuntime.jsxs("span", {
113
+ className: "flex items-center space-x-1",
114
+ children: [t("neetoWebhooks.delivery.sid"), ":", /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
115
+ className: "px-2 font-bold",
116
+ "data-testid": "delivery-sid",
117
+ variant: "body2",
118
+ children: sid
119
+ })]
120
+ }), /*#__PURE__*/jsxRuntime.jsxs("span", {
121
+ className: "flex items-center space-x-1",
122
+ children: [t("neetoWebhooks.delivery.deliveryId"), ":", /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
123
+ className: "px-2 font-bold",
124
+ "data-testid": "delivery-identifier",
125
+ variant: "body2",
126
+ children: identifier
127
+ })]
128
+ }), /*#__PURE__*/jsxRuntime.jsxs("span", {
129
+ className: "flex items-center",
130
+ children: [t("neetoWebhooks.common.responseStatus"), ":", /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
131
+ className: "px-2 font-bold",
132
+ "data-testid": "delivery-response-code",
133
+ variant: "body2",
134
+ children: responseStatusCode
135
+ }), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Badge, {
136
+ variant: status === "success" ? "green-subtle" : "amber-subtle",
137
+ children: status
138
+ })]
139
+ })]
140
+ }), /*#__PURE__*/jsxRuntime.jsxs(neetoAtoms.Tabs, {
141
+ value: activeHeader,
142
+ onValueChange: setActiveHeader,
143
+ children: [/*#__PURE__*/jsxRuntime.jsxs(neetoAtoms.Tabs.List, {
144
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Tabs.Item, {
145
+ value: DELIVERY_TAB.request,
146
+ children: t("neetoWebhooks.delivery.request")
147
+ }), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Tabs.Item, {
148
+ value: DELIVERY_TAB.response,
149
+ children: t("neetoWebhooks.delivery.response")
150
+ })]
151
+ }), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Tabs.Content, {
152
+ value: DELIVERY_TAB.request,
153
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
154
+ className: "mt-2 w-full space-y-4",
155
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
156
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
157
+ variant: "h5",
158
+ children: t("neetoWebhooks.delivery.header")
159
+ }), /*#__PURE__*/jsxRuntime.jsx(Snippet, {
160
+ dataTestid: "delivery-request-header",
161
+ children: delivery.requestHeader
162
+ })]
163
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
164
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
165
+ variant: "h5",
166
+ children: t("neetoWebhooks.delivery.payload")
167
+ }), /*#__PURE__*/jsxRuntime.jsx(Snippet, {
168
+ dataTestid: "delivery-request-payload",
169
+ children: renderPayload()
170
+ })]
171
+ })]
172
+ })
173
+ }), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Tabs.Content, {
174
+ value: DELIVERY_TAB.response,
175
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
176
+ className: "mt-2 w-full space-y-4",
177
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
178
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
179
+ variant: "h5",
180
+ children: t("neetoWebhooks.delivery.header")
181
+ }), /*#__PURE__*/jsxRuntime.jsx(Snippet, {
182
+ dataTestid: "delivery-response-header",
183
+ children: delivery.responseHeader
184
+ })]
185
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
186
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
187
+ variant: "h5",
188
+ children: t("neetoWebhooks.delivery.body")
189
+ }), /*#__PURE__*/jsxRuntime.jsx(Snippet, {
190
+ dataTestid: "delivery-response-body",
191
+ children: delivery.responseBody
192
+ })]
193
+ })]
194
+ })
195
+ })]
196
+ })]
197
+ })
198
+ });
199
+ };
200
+
201
+ var Details = function Details(_ref) {
202
+ var _delivery$webhook;
203
+ var onClose = _ref.onClose,
204
+ deliveryId = _ref.deliveryId,
205
+ webhookSid = _ref.webhookSid;
206
+ var _useTranslation = reactI18next.useTranslation(),
207
+ t = _useTranslation.t;
208
+ var _useRedeliverWebhook = main.useRedeliverWebhook(deliveryId, webhookSid),
209
+ isRedelivering = _useRedeliverWebhook.isPending,
210
+ redeliverWebhook = _useRedeliverWebhook.mutateAsync;
211
+ var _useShowDelivery = main.useShowDelivery(deliveryId, webhookSid),
212
+ isLoading = _useShowDelivery.isPending,
213
+ _useShowDelivery$data = _useShowDelivery.data,
214
+ _useShowDelivery$data2 = _useShowDelivery$data === void 0 ? {} : _useShowDelivery$data,
215
+ delivery = _useShowDelivery$data2.delivery;
216
+ var handleRedeliverClick = /*#__PURE__*/function () {
217
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
218
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
219
+ while (1) switch (_context.prev = _context.next) {
220
+ case 0:
221
+ _context.next = 2;
222
+ return redeliverWebhook();
223
+ case 2:
224
+ case "end":
225
+ return _context.stop();
226
+ }
227
+ }, _callee);
228
+ }));
229
+ return function handleRedeliverClick() {
230
+ return _ref2.apply(this, arguments);
231
+ };
232
+ }();
233
+ return /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Sheet, {
234
+ onClose: onClose,
235
+ isOpen: neetoCist.isPresent(deliveryId),
236
+ size: "large",
237
+ children: /*#__PURE__*/jsxRuntime.jsx(jsxRuntime.Fragment, {
238
+ children: isLoading ? /*#__PURE__*/jsxRuntime.jsx("div", {
239
+ className: "flex h-full w-full items-center justify-center",
240
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Spinner, {})
241
+ }) : /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
242
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Sheet.Header, {
243
+ children: /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
244
+ children: [/*#__PURE__*/jsxRuntime.jsx(DateFormat.Date, {
245
+ date: delivery.createdAt,
246
+ tooltipProps: {
247
+ disabled: true
248
+ },
249
+ typographyProps: {
250
+ variant: "h2",
251
+ weight: "semibold"
252
+ }
253
+ }), /*#__PURE__*/jsxRuntime.jsx("span", {
254
+ children: " \u2022 "
255
+ }), /*#__PURE__*/jsxRuntime.jsx(DateFormat.Time, {
256
+ date: delivery.createdAt,
257
+ tooltipProps: {
258
+ disabled: true
259
+ },
260
+ typographyProps: {
261
+ variant: "h2",
262
+ weight: "normal"
263
+ }
264
+ })]
265
+ })
266
+ }), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Sheet.Body, {
267
+ children: neetoCist.isPresent(delivery) && /*#__PURE__*/jsxRuntime.jsx(TransactionDetails, {
268
+ delivery: delivery
269
+ })
270
+ }), /*#__PURE__*/jsxRuntime.jsxs(neetoAtoms.Sheet.Footer, {
271
+ className: "gap-x-2",
272
+ children: [(delivery === null || delivery === void 0 ? void 0 : delivery.eventId) && /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, {
273
+ disabled: isRedelivering || ((_delivery$webhook = delivery.webhook) === null || _delivery$webhook === void 0 ? void 0 : _delivery$webhook.versionExpired),
274
+ label: t("neetoWebhooks.delivery.redeliver"),
275
+ loading: isRedelivering,
276
+ onClick: handleRedeliverClick
277
+ }), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, {
278
+ label: t("neetoWebhooks.buttons.cancel"),
279
+ variant: "ghost",
280
+ onClick: onClose
281
+ })]
282
+ })]
283
+ })
284
+ })
285
+ });
286
+ };
287
+
288
+ var buildColumns$1 = function buildColumns(_ref) {
289
+ var deliveryDetailsPath = _ref.deliveryDetailsPath,
290
+ page = _ref.page;
291
+ return [{
292
+ id: "identifier",
293
+ accessorKey: "identifier",
294
+ header: i18next.t("neetoWebhooks.delivery.deliveryId"),
295
+ size: 390,
296
+ cell: function cell(_ref2) {
297
+ var row = _ref2.row;
298
+ var delivery = row.original;
299
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
300
+ className: "flex items-center gap-x-3",
301
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, {
302
+ variant: "link",
303
+ to: utils.buildUrl(deliveryDetailsPath, {
304
+ deliveryId: delivery.sid,
305
+ page: page
306
+ }),
307
+ weight: "semibold",
308
+ children: delivery.identifier
309
+ }), delivery.redelivery && /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Badge, {
310
+ variant: "blue",
311
+ children: i18next.t("neetoWebhooks.delivery.redelivery")
312
+ })]
313
+ });
314
+ }
315
+ }, {
316
+ id: "createdAt",
317
+ accessorKey: "createdAt",
318
+ header: i18next.t("neetoWebhooks.tableHeaders.createdAt"),
319
+ size: 280,
320
+ cell: function cell(_ref3) {
321
+ var getValue = _ref3.getValue;
322
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
323
+ className: "flex items-center justify-between space-x-1",
324
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
325
+ children: /*#__PURE__*/jsxRuntime.jsx(DateFormat.DateTime, {
326
+ date: getValue()
327
+ })
328
+ })
329
+ });
330
+ }
331
+ }, {
332
+ id: "responseStatusCode",
333
+ header: i18next.t("neetoWebhooks.common.responseStatus"),
334
+ size: 250,
335
+ cell: function cell(_ref4) {
336
+ var row = _ref4.row;
337
+ var _row$original = row.original,
338
+ responseStatusCode = _row$original.responseStatusCode,
339
+ status = _row$original.status;
340
+ return /*#__PURE__*/jsxRuntime.jsxs("span", {
341
+ className: "flex items-center",
342
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
343
+ className: "px-2",
344
+ variant: "body2",
345
+ children: responseStatusCode
346
+ }), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Badge, {
347
+ variant: status === "success" ? "green" : "amber",
348
+ children: status
349
+ })]
350
+ });
351
+ }
352
+ }, {
353
+ id: "event",
354
+ accessorKey: "event",
355
+ header: i18next.t("neetoWebhooks.common.event", constants.SINGULAR),
356
+ size: 270,
357
+ cell: function cell(_ref5) {
358
+ var _getValue;
359
+ var getValue = _ref5.getValue;
360
+ return (_getValue = getValue()) === null || _getValue === void 0 ? void 0 : _getValue.label;
361
+ }
362
+ }];
363
+ };
364
+
365
+ var Deliveries = function Deliveries(_ref) {
366
+ var webhooksUrl = _ref.webhooksUrl,
367
+ hostBreadcrumbs = _ref.breadcrumbs,
368
+ helpLink = _ref.helpLink;
369
+ var _useRouteMatch = reactRouterDom.useRouteMatch(),
370
+ deliveriesUrl = _useRouteMatch.url;
371
+ var history = reactRouterDom.useHistory();
372
+ var _useTranslation = reactI18next.useTranslation(),
373
+ t = _useTranslation.t;
374
+ var _useParams = reactRouterDom.useParams(),
375
+ webhookId = _useParams.webhookId,
376
+ deliveryId = _useParams.deliveryId;
377
+ var _useQueryParams = reactUtils.useQueryParams(),
378
+ _useQueryParams$page = _useQueryParams.page,
379
+ page = _useQueryParams$page === void 0 ? constants.DEFAULT_PAGE_INDEX : _useQueryParams$page;
380
+ var deliveriesPath = main.getDeliveriesPath(webhooksUrl);
381
+ var deliveryDetailsPath = main.getDeliveryDetailsPath(deliveriesUrl);
382
+ var _useFetchDeliveries = main.useFetchDeliveries(webhookId, {
383
+ page: page,
384
+ pageSize: constants.DEFAULT_PAGE_SIZE
385
+ }),
386
+ isLoading = _useFetchDeliveries.isLoading,
387
+ isFetching = _useFetchDeliveries.isFetching,
388
+ _useFetchDeliveries$d = _useFetchDeliveries.data,
389
+ _useFetchDeliveries$d2 = _useFetchDeliveries$d === void 0 ? {} : _useFetchDeliveries$d,
390
+ totalCount = _useFetchDeliveries$d2.totalCount,
391
+ _useFetchDeliveries$d3 = _useFetchDeliveries$d2.deliveries,
392
+ deliveries = _useFetchDeliveries$d3 === void 0 ? [] : _useFetchDeliveries$d3;
393
+ var breadcrumbsWithoutWebhooksTitle = neetoCist.removeBy({
394
+ text: t("neetoWebhooks.webhook.title")
395
+ }, hostBreadcrumbs);
396
+ var breadcrumbs = [].concat(_toConsumableArray(breadcrumbsWithoutWebhooksTitle), [{
397
+ link: webhooksUrl,
398
+ text: t("neetoWebhooks.webhook.title")
399
+ }, {
400
+ link: window.location.pathname,
401
+ text: t("neetoWebhooks.delivery.title")
402
+ }]);
403
+ if (isLoading) {
404
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
405
+ className: "flex justify-center items-center w-full h-screen",
406
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Spinner, {})
407
+ });
408
+ }
409
+ return /*#__PURE__*/jsxRuntime.jsxs(Container, {
410
+ className: "w-full",
411
+ children: [/*#__PURE__*/jsxRuntime.jsx(Header$2, {
412
+ breadcrumbs: breadcrumbs,
413
+ title: t("neetoWebhooks.delivery.title"),
414
+ titleHelpPopoverProps: {
415
+ title: t("neetoWebhooks.delivery.title"),
416
+ description: t("neetoWebhooks.delivery.helpDescription"),
417
+ helpLinkProps: {
418
+ href: helpLink
419
+ }
420
+ }
421
+ }), neetoCist.isNotEmpty(deliveries) ? /*#__PURE__*/jsxRuntime.jsx(TableWrapper, {
422
+ hasPagination: totalCount > constants.DEFAULT_PAGE_SIZE,
423
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.DataTable, {
424
+ totalCount: totalCount,
425
+ columns: buildColumns$1({
426
+ deliveryDetailsPath: deliveryDetailsPath,
427
+ page: page
428
+ }),
429
+ currentPage: Number(page),
430
+ data: deliveries,
431
+ loading: isFetching,
432
+ pageSize: constants.DEFAULT_PAGE_SIZE
433
+ })
434
+ }) : /*#__PURE__*/jsxRuntime.jsx("div", {
435
+ className: "flex justify-center items-center w-full h-full",
436
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Empty, {
437
+ description: t("neetoWebhooks.delivery.empty.description"),
438
+ title: t("neetoWebhooks.delivery.empty.title")
439
+ })
440
+ }), /*#__PURE__*/jsxRuntime.jsx(Details, {
441
+ deliveryId: deliveryId,
442
+ webhookSid: webhookId,
443
+ onClose: function onClose() {
444
+ return history.replace(utils.buildUrl(deliveriesPath, {
445
+ webhookId: webhookId,
446
+ page: page
447
+ }));
448
+ }
449
+ })]
450
+ });
451
+ };
452
+ var Deliveries$1 = withReactQuery(Deliveries);
453
+
454
+ var MENU_ITEMS = {
455
+ EDIT: "edit",
456
+ DELETE: "delete"
457
+ };
458
+ var WEBHOOK_INITIAL_VALUES = {
459
+ endpoint: "",
460
+ events: [],
461
+ secret: "",
462
+ isActive: true
463
+ };
464
+
465
+ var EventCheckbox = function EventCheckbox(_ref) {
466
+ var events = _ref.events,
467
+ values = _ref.values,
468
+ arrayHelpers = _ref.arrayHelpers,
469
+ onEventsChange = _ref.onEventsChange;
470
+ var handleToggle = function handleToggle(isSelected, index, event) {
471
+ if (isSelected) {
472
+ arrayHelpers.remove(index);
473
+ } else {
474
+ arrayHelpers.push(event);
475
+ }
476
+ onEventsChange === null || onEventsChange === void 0 || onEventsChange();
477
+ };
478
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
479
+ children: events.map(function (event) {
480
+ var _values$events;
481
+ var index = neetoCist.findIndexBy(event, (_values$events = values.events) !== null && _values$events !== void 0 ? _values$events : []);
482
+ var isSelected = index > -1;
483
+ return /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Checkbox, {
484
+ checked: isSelected,
485
+ className: "my-4",
486
+ label: event.label,
487
+ onCheckedChange: function onCheckedChange() {
488
+ return handleToggle(isSelected, index, event);
489
+ }
490
+ }, event.identifier);
491
+ })
492
+ });
493
+ };
494
+
495
+ var ToggleActiveSwitch = function ToggleActiveSwitch(_ref) {
496
+ var isActive = _ref.isActive,
497
+ webhookId = _ref.webhookId;
498
+ var _useState = react.useState(isActive),
499
+ _useState2 = _slicedToArray(_useState, 2),
500
+ status = _useState2[0],
501
+ setStatus = _useState2[1];
502
+ var previousStatusRef = react.useRef(isActive);
503
+ var _useUpdateWebhook = main.useUpdateWebhook(webhookId, {
504
+ onError: function onError() {
505
+ // Revert to the previous state
506
+ setStatus(previousStatusRef.current);
507
+ },
508
+ onSuccess: function onSuccess() {
509
+ // Update the previous status ref on successful update
510
+ previousStatusRef.current = status;
511
+ }
512
+ }),
513
+ updateWebhook = _useUpdateWebhook.mutate;
514
+ var handleToggle = function handleToggle(updatedStatus) {
515
+ // Store the current status as previous before changing
516
+ previousStatusRef.current = status;
517
+ setStatus(updatedStatus);
518
+ updateWebhook({
519
+ id: webhookId,
520
+ payload: {
521
+ isActive: updatedStatus
522
+ }
523
+ });
524
+ };
525
+ return /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Switch, {
526
+ checked: status,
527
+ onCheckedChange: handleToggle
528
+ });
529
+ };
530
+
531
+ function ownKeys$2(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
532
+ function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
533
+ var getMenuItems = function getMenuItems(_ref) {
534
+ var onEdit = _ref.onEdit,
535
+ onDelete = _ref.onDelete;
536
+ return [{
537
+ key: MENU_ITEMS.EDIT,
538
+ label: i18next.t("neetoWebhooks.buttons.edit"),
539
+ "data-testid": "neeto-webhooks-edit-button",
540
+ onClick: onEdit
541
+ }, {
542
+ key: MENU_ITEMS.DELETE,
543
+ label: i18next.t("neetoWebhooks.buttons.delete"),
544
+ "data-testid": "neeto-webhooks-delete-button",
545
+ onClick: onDelete
546
+ }];
547
+ };
548
+ var getValidationSchema = function getValidationSchema(webhooks) {
549
+ return yup__namespace.object().shape({
550
+ endpoint: yup__namespace.string().trim().matches(/^(https?):\/\//i, i18next.t("neetoWebhooks.errors.webhook.invalidUrlProtocol")).url(i18next.t("neetoWebhooks.errors.webhook.invalidUrl")).required(i18next.t("neetoWebhooks.errors.webhook.required")).test("Is endpoint unique", i18next.t("neetoWebhooks.errors.webhook.urlNotUnique"), function (endpoint, ctx) {
551
+ return !ramda.pluck("endpoint", neetoCist.removeById(ctx.parent.id, webhooks)).includes(endpoint === null || endpoint === void 0 ? void 0 : endpoint.trim());
552
+ }),
553
+ events: yup__namespace.array()["default"]([]).min(1, i18next.t("neetoWebhooks.errors.webhook.events.required")),
554
+ secret: yup__namespace.string().trim().nullable()
555
+ });
556
+ };
557
+ var buildPayload = function buildPayload(_ref2) {
558
+ var _initialValues$events;
559
+ var isEditing = _ref2.isEditing,
560
+ values = _ref2.values,
561
+ initialValues = _ref2.initialValues;
562
+ var events = values.events.map(function (_ref3) {
563
+ var identifier = _ref3.identifier;
564
+ return {
565
+ identifier: identifier
566
+ };
567
+ });
568
+ if (!isEditing) return _objectSpread$2(_objectSpread$2({}, values), {}, {
569
+ eventsAttributes: events
570
+ });
571
+ var deletable = ((_initialValues$events = initialValues.events) !== null && _initialValues$events !== void 0 ? _initialValues$events : []).filter(function (_ref4) {
572
+ var identifier = _ref4.identifier;
573
+ return !neetoCist.findBy({
574
+ identifier: identifier
575
+ }, values.events);
576
+ }).map(ramda.assoc("_destroy", true));
577
+ var creatable = values.events.filter(function (_ref5) {
578
+ var identifier = _ref5.identifier;
579
+ return !neetoCist.findBy({
580
+ identifier: identifier
581
+ }, initialValues.events);
582
+ });
583
+ return _objectSpread$2(_objectSpread$2({}, values), {}, {
584
+ eventsAttributes: [].concat(_toConsumableArray(creatable), _toConsumableArray(deletable))
585
+ });
586
+ };
587
+ var formatTimeUntilExpiration = function formatTimeUntilExpiration(expiresAt) {
588
+ if (!expiresAt) return null;
589
+ var now = new Date();
590
+ var expiry = new Date(expiresAt);
591
+ var diffMs = expiry - now;
592
+ if (diffMs <= 0) return null;
593
+ var diffHours = Math.floor(diffMs / (1000 * 60 * 60));
594
+ var diffDays = Math.floor(diffHours / 24);
595
+ if (diffDays > 0) {
596
+ return i18next.t("neetoWebhooks.webhook.versionStatus.expiresIn.days", {
597
+ count: diffDays
598
+ });
599
+ }
600
+ var remainingHours = diffHours;
601
+ var remainingMinutes = Math.floor(diffMs % (1000 * 60 * 60) / (1000 * 60));
602
+ return i18next.t("neetoWebhooks.webhook.versionStatus.expiresIn.hoursAndMinutes", {
603
+ hours: remainingHours,
604
+ hoursPlural: remainingHours !== 1 ? "s" : "",
605
+ minutes: remainingMinutes,
606
+ minutesPlural: remainingMinutes !== 1 ? "s" : ""
607
+ });
608
+ };
609
+ var formatExpiredDate = function formatExpiredDate(expiresAt) {
610
+ if (!expiresAt) return null;
611
+ var expiry = new Date(expiresAt);
612
+ return i18next.t("neetoWebhooks.webhook.versionStatus.expiredOn", {
613
+ date: expiry.toLocaleDateString()
614
+ });
615
+ };
616
+ var buildColumns = function buildColumns(_ref6) {
617
+ var handleDelete = _ref6.handleDelete,
618
+ handleEdit = _ref6.handleEdit,
619
+ deliveriesPath = _ref6.deliveriesPath;
620
+ return [{
621
+ id: "endpoint",
622
+ accessorKey: "endpoint",
623
+ header: i18next.t("neetoWebhooks.common.endpoint"),
624
+ size: 700,
625
+ cell: function cell(_ref7) {
626
+ var row = _ref7.row,
627
+ getValue = _ref7.getValue;
628
+ var webhook = row.original;
629
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
630
+ className: "flex items-center justify-between space-x-3",
631
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, {
632
+ variant: "link",
633
+ to: utils.buildUrl(deliveriesPath, {
634
+ webhookId: webhook.sid
635
+ }),
636
+ children: getValue()
637
+ }), /*#__PURE__*/jsxRuntime.jsx(MoreDropdown, {
638
+ dropdownButtonProps: {
639
+ className: "me-1 my-1"
640
+ },
641
+ menuItems: getMenuItems({
642
+ onEdit: function onEdit() {
643
+ return handleEdit(webhook.id);
644
+ },
645
+ onDelete: function onDelete() {
646
+ return handleDelete(webhook.id);
647
+ }
648
+ })
649
+ })]
650
+ });
651
+ }
652
+ }, {
653
+ id: "isActive",
654
+ accessorKey: "isActive",
655
+ header: i18next.t("neetoWebhooks.webhook.active"),
656
+ size: 150,
657
+ cell: function cell(_ref8) {
658
+ var row = _ref8.row,
659
+ getValue = _ref8.getValue;
660
+ return /*#__PURE__*/jsxRuntime.jsx(ToggleActiveSwitch, {
661
+ isActive: getValue(),
662
+ webhookId: row.original.id
663
+ });
664
+ }
665
+ }, {
666
+ id: "version",
667
+ accessorKey: "version",
668
+ header: i18next.t("neetoWebhooks.webhook.version"),
669
+ size: 200,
670
+ cell: function cell(_ref9) {
671
+ var row = _ref9.row,
672
+ getValue = _ref9.getValue;
673
+ var webhook = row.original;
674
+ var timeMessage = webhook.versionExpired ? formatExpiredDate(webhook.versionExpiresAt) : formatTimeUntilExpiration(webhook.versionExpiresAt);
675
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
676
+ className: "flex flex-col space-y-1",
677
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
678
+ className: "flex items-center space-x-2",
679
+ children: [/*#__PURE__*/jsxRuntime.jsx("span", {
680
+ children: getValue()
681
+ }), webhook.versionExpired && /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Badge, {
682
+ variant: "red",
683
+ children: "expired"
684
+ }), webhook.versionDeprecated && !webhook.versionExpired && /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Badge, {
685
+ variant: "amber",
686
+ children: "deprecated"
687
+ })]
688
+ }), timeMessage && /*#__PURE__*/jsxRuntime.jsxs("div", {
689
+ className: "text-xs neeto-ui-text-gray-600",
690
+ children: [timeMessage, ".", " ", /*#__PURE__*/jsxRuntime.jsx("a", {
691
+ className: "text-blue-600 hover:text-blue-800 underline",
692
+ href: webhook.defaultVersionPayloadDocUrl,
693
+ rel: "noopener noreferrer",
694
+ target: "_blank",
695
+ children: i18next.t("neetoWebhooks.webhook.versionStatus.moreDetails")
696
+ }), "."]
697
+ })]
698
+ });
699
+ }
700
+ }, {
701
+ id: "events",
702
+ accessorKey: "events",
703
+ header: i18next.t("neetoWebhooks.common.event", constants.PLURAL),
704
+ size: 300,
705
+ cell: function cell(_ref10) {
706
+ var getValue = _ref10.getValue;
707
+ return /*#__PURE__*/jsxRuntime.jsx("span", {
708
+ className: "whitespace-normal",
709
+ children: ramda.pluck("label", getValue()).sort().join(", ")
710
+ });
711
+ }
712
+ }];
713
+ };
714
+ var generateRandomSecret = function generateRandomSecret() {
715
+ return main.v4().replace(/-/g, "");
716
+ };
717
+
718
+ function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
719
+ function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
720
+ var AddWebhookPane = function AddWebhookPane(_ref) {
721
+ var editingWebhookId = _ref.editingWebhookId,
722
+ entityId = _ref.entityId,
723
+ entityType = _ref.entityType,
724
+ isOpen = _ref.isOpen,
725
+ onClose = _ref.onClose,
726
+ onCreate = _ref.onCreate,
727
+ webhooks = _ref.webhooks,
728
+ webhooksHelpLink = _ref.webhooksHelpLink,
729
+ secretsHelpLink = _ref.secretsHelpLink;
730
+ var _useTranslation = reactI18next.useTranslation(),
731
+ t = _useTranslation.t;
732
+ var _useState = react.useState(false),
733
+ _useState2 = _slicedToArray(_useState, 2),
734
+ isSecretInputFieldVisible = _useState2[0],
735
+ setIsSecretInputFieldVisible = _useState2[1];
736
+ var _useCreateWebhook = main.useCreateWebhook({
737
+ onSuccess: function onSuccess() {
738
+ onClose();
739
+ onCreate === null || onCreate === void 0 || onCreate();
740
+ }
741
+ }),
742
+ createWebhook = _useCreateWebhook.mutate;
743
+ var _useShowWebhook = main.useShowWebhook(editingWebhookId),
744
+ _useShowWebhook$data = _useShowWebhook.data,
745
+ _useShowWebhook$data2 = _useShowWebhook$data === void 0 ? {} : _useShowWebhook$data,
746
+ _useShowWebhook$data3 = _useShowWebhook$data2.webhook,
747
+ webhook = _useShowWebhook$data3 === void 0 ? {} : _useShowWebhook$data3;
748
+ var _useUpdateWebhook = main.useUpdateWebhook(editingWebhookId, {
749
+ onSuccess: onClose
750
+ }),
751
+ updateWebhook = _useUpdateWebhook.mutate;
752
+ var endpointRef = react.useRef();
753
+ var _useFetchEvents = main.useFetchEvents(),
754
+ _useFetchEvents$data = _useFetchEvents.data,
755
+ events = _useFetchEvents$data === void 0 ? [] : _useFetchEvents$data,
756
+ isLoading = _useFetchEvents.isLoading;
757
+ var initialValues = react.useMemo(function () {
758
+ return editingWebhookId ? _objectSpread$1(_objectSpread$1(_objectSpread$1({}, WEBHOOK_INITIAL_VALUES), webhook), {}, {
759
+ events: Array.isArray(webhook === null || webhook === void 0 ? void 0 : webhook.events) ? webhook === null || webhook === void 0 ? void 0 : webhook.events : []
760
+ }) : _objectSpread$1(_objectSpread$1({}, WEBHOOK_INITIAL_VALUES), {}, {
761
+ events: events
762
+ });
763
+ }, [editingWebhookId, webhook, events]);
764
+ var isWebhookExpiredOrDeprecated = editingWebhookId && (webhook.versionExpired || webhook.versionDeprecated);
765
+ var handleSubmit = function handleSubmit(values) {
766
+ // Check if webhook is expired or deprecated before allowing edit
767
+ if (editingWebhookId && (webhook.versionExpired || webhook.versionDeprecated)) {
768
+ return;
769
+ }
770
+ var payload = buildPayload({
771
+ isEditing: editingWebhookId,
772
+ values: values,
773
+ initialValues: initialValues
774
+ });
775
+ editingWebhookId ? updateWebhook({
776
+ id: editingWebhookId,
777
+ payload: payload,
778
+ entityId: entityId
779
+ }) : createWebhook(_objectSpread$1(_objectSpread$1({}, payload), {}, {
780
+ entityId: entityId,
781
+ entityType: entityType
782
+ }));
783
+ };
784
+ var handleClick = function handleClick(setFieldValue) {
785
+ var randomWebhookSecret = generateRandomSecret();
786
+ setFieldValue("secret", randomWebhookSecret);
787
+ setIsSecretInputFieldVisible(true);
788
+ };
789
+ var handleRegenerate = function handleRegenerate(setFieldValue) {
790
+ var randomWebhookSecret = generateRandomSecret();
791
+ setFieldValue("secret", randomWebhookSecret);
792
+ };
793
+ var handleDelete = function handleDelete(setFieldValue) {
794
+ setFieldValue("secret", null);
795
+ setIsSecretInputFieldVisible(false);
796
+ };
797
+ react.useEffect(function () {
798
+ if (webhook !== null && webhook !== void 0 && webhook.secret) {
799
+ setIsSecretInputFieldVisible(true);
800
+ }
801
+ }, [webhook]);
802
+ return /*#__PURE__*/jsxRuntime.jsx(formik.Form, {
803
+ formikProps: {
804
+ enableReinitialize: true,
805
+ validationSchema: getValidationSchema(webhooks),
806
+ initialValues: initialValues,
807
+ onSubmit: function onSubmit(values) {
808
+ return handleSubmit(getValidationSchema().cast(values));
809
+ }
810
+ },
811
+ children: function children(_ref2) {
812
+ var setFieldValue = _ref2.setFieldValue,
813
+ setFieldTouched = _ref2.setFieldTouched,
814
+ values = _ref2.values,
815
+ isValid = _ref2.isValid,
816
+ dirty = _ref2.dirty;
817
+ return /*#__PURE__*/jsxRuntime.jsxs(neetoAtoms.Sheet, {
818
+ isOpen: isOpen,
819
+ onClose: onClose,
820
+ initialFocusRef: endpointRef,
821
+ children: [/*#__PURE__*/jsxRuntime.jsxs(neetoAtoms.Sheet.Header, {
822
+ className: "flex items-center gap-x-2",
823
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
824
+ as: "h2",
825
+ "data-testid": "add-new-webhook-pane-header",
826
+ variant: "h2",
827
+ weight: "semibold",
828
+ children: editingWebhookId ? t("neetoWebhooks.webhook.edit") : t("neetoWebhooks.webhook.add")
829
+ }), /*#__PURE__*/jsxRuntime.jsx(HelpPopover, {
830
+ description: t("neetoWebhooks.webhook.helpDescription"),
831
+ helpLinkProps: {
832
+ href: webhooksHelpLink
833
+ },
834
+ title: t("neetoWebhooks.webhook.title")
835
+ })]
836
+ }), isLoading ? /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Sheet.Body, {
837
+ children: /*#__PURE__*/jsxRuntime.jsx("div", {
838
+ className: "flex items-center justify-center",
839
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Spinner, {})
840
+ })
841
+ }) : /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
842
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Sheet.Body, {
843
+ className: "pb-6",
844
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
845
+ className: "w-full space-y-4 md:space-y-6",
846
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
847
+ className: "mb-2",
848
+ variant: "body2",
849
+ children: t("neetoWebhooks.webhook.postRequestIsSentToEndpointURL")
850
+ }), /*#__PURE__*/jsxRuntime.jsx(formik.Textarea, {
851
+ required: true,
852
+ "data-testid": "endpoint-input-field",
853
+ label: t("neetoWebhooks.webhook.endpoint"),
854
+ name: "endpoint",
855
+ placeholder: t("neetoWebhooks.webhook.endpointPlaceholder"),
856
+ ref: endpointRef,
857
+ rows: 1
858
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
859
+ className: "space-y-2",
860
+ children: [/*#__PURE__*/jsxRuntime.jsxs(neetoAtoms.Label, {
861
+ className: "flex items-center gap-x-2",
862
+ children: [t("neetoWebhooks.webhook.secret"), /*#__PURE__*/jsxRuntime.jsx(HelpPopover, {
863
+ helpLinkProps: {
864
+ href: secretsHelpLink
865
+ },
866
+ popoverProps: {
867
+ position: "bottom"
868
+ },
869
+ title: t("neetoWebhooks.webhook.secretkeyHelpTitle"),
870
+ description: t("neetoWebhooks.webhook.secretkeyHelpDescription")
871
+ })]
872
+ }), isSecretInputFieldVisible ? /*#__PURE__*/jsxRuntime.jsxs("div", {
873
+ className: "flex items-center justify-between space-x-2",
874
+ children: [/*#__PURE__*/jsxRuntime.jsx(formik.Input, {
875
+ "data-testid": "secret-key-input-field",
876
+ name: "secret",
877
+ placeholder: t("neetoWebhooks.webhook.secretPlaceholder")
878
+ }), /*#__PURE__*/jsxRuntime.jsx(MoreDropdown, {
879
+ menuItems: [{
880
+ key: "regenerate-secret",
881
+ label: t("neetoWebhooks.buttons.regenerate"),
882
+ "data-testid": "regenerate-secret",
883
+ onClick: function onClick() {
884
+ return handleRegenerate(setFieldValue);
885
+ }
886
+ }, {
887
+ key: "delete-secret",
888
+ label: t("neetoWebhooks.buttons.delete"),
889
+ "data-testid": "delete-secret",
890
+ onClick: function onClick() {
891
+ return handleDelete(setFieldValue);
892
+ }
893
+ }]
894
+ })]
895
+ }) : /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, {
896
+ "data-testid": "add-secret-key",
897
+ icon: lucideReact.Plus,
898
+ iconPosition: "left",
899
+ label: t("neetoWebhooks.buttons.generateSecretKey"),
900
+ variant: "link",
901
+ onClick: function onClick() {
902
+ return handleClick(setFieldValue);
903
+ }
904
+ })]
905
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
906
+ className: "space-y-2",
907
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Label, {
908
+ required: true,
909
+ children: t("neetoWebhooks.common.event", constants.PLURAL)
910
+ }), /*#__PURE__*/jsxRuntime.jsx(formik$1.FieldArray, {
911
+ name: "events",
912
+ render: function render(arrayHelpers) {
913
+ return /*#__PURE__*/jsxRuntime.jsx(EventCheckbox, {
914
+ arrayHelpers: arrayHelpers,
915
+ events: events,
916
+ values: values,
917
+ onEventsChange: function onEventsChange() {
918
+ return setFieldTouched("events", true);
919
+ }
920
+ });
921
+ }
922
+ }), /*#__PURE__*/jsxRuntime.jsx(formik$1.ErrorMessage, {
923
+ name: "events",
924
+ render: function render(msg) {
925
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
926
+ className: "neeto-ui-text-error-800 text-xs mt-1",
927
+ "data-testid": "event-error-text",
928
+ children: msg
929
+ });
930
+ }
931
+ })]
932
+ })]
933
+ })
934
+ }), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Sheet.Footer, {
935
+ children: /*#__PURE__*/jsxRuntime.jsx(formik.ActionBlock, {
936
+ cancelButtonProps: {
937
+ onClick: onClose
938
+ },
939
+ submitButtonProps: {
940
+ disabled: isWebhookExpiredOrDeprecated || !isValid || editingWebhookId && !dirty
941
+ }
942
+ })
943
+ })]
944
+ })]
945
+ });
946
+ }
947
+ });
948
+ };
949
+
950
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
951
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
952
+ var Header = reactUtils.withT(function (_ref) {
953
+ var t = _ref.t,
954
+ breadcrumbs = _ref.breadcrumbs,
955
+ title = _ref.title,
956
+ titleHelpPopoverProps = _ref.titleHelpPopoverProps,
957
+ setIsAddWebhookPaneOpen = _ref.setIsAddWebhookPaneOpen,
958
+ headerSize = _ref.headerSize,
959
+ webhooks = _ref.webhooks,
960
+ webhooksHelpLink = _ref.webhooksHelpLink;
961
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
962
+ children: [/*#__PURE__*/jsxRuntime.jsx(Header$2, {
963
+ breadcrumbs: breadcrumbs,
964
+ size: headerSize,
965
+ title: title || t("neetoWebhooks.webhook.title"),
966
+ actionBlock: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, {
967
+ "data-testid": "add-new-webhook-button",
968
+ label: t("neetoWebhooks.webhook.add"),
969
+ onClick: function onClick() {
970
+ return setIsAddWebhookPaneOpen(true);
971
+ }
972
+ }),
973
+ titleHelpPopoverProps: _objectSpread({
974
+ description: t("neetoWebhooks.webhook.helpDescription"),
975
+ helpLinkProps: {
976
+ href: webhooksHelpLink
977
+ },
978
+ title: t("neetoWebhooks.webhook.title")
979
+ }, titleHelpPopoverProps)
980
+ }), neetoCist.isNotEmpty(webhooks) && /*#__PURE__*/jsxRuntime.jsx(SubHeader, {
981
+ leftActionBlock: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
982
+ as: "h4",
983
+ variant: "h4",
984
+ children: t("neetoWebhooks.common.webhookWithCount", {
985
+ count: webhooks.length
986
+ })
987
+ })
988
+ })]
989
+ });
990
+ });
991
+ var Header$1 = /*#__PURE__*/react.memo(Header);
992
+
993
+ var Webhooks = function Webhooks(_ref) {
994
+ var deliveriesPath = _ref.deliveriesPath,
995
+ entityType = _ref.entityType,
996
+ breadcrumbs = _ref.breadcrumbs,
997
+ title = _ref.title,
998
+ titleHelpPopoverProps = _ref.titleHelpPopoverProps,
999
+ entityId = _ref.entityId,
1000
+ onCreate = _ref.onCreate,
1001
+ onDelete = _ref.onDelete,
1002
+ headerSize = _ref.headerSize,
1003
+ _ref$containerClassNa = _ref.containerClassName,
1004
+ containerClassName = _ref$containerClassNa === void 0 ? "" : _ref$containerClassNa,
1005
+ webhooksHelpLink = _ref.webhooksHelpLink,
1006
+ secretsHelpLink = _ref.secretsHelpLink;
1007
+ var _useState = react.useState(null),
1008
+ _useState2 = _slicedToArray(_useState, 2),
1009
+ editingWebhookId = _useState2[0],
1010
+ setEditingWebhookId = _useState2[1];
1011
+ var _useState3 = react.useState(null),
1012
+ _useState4 = _slicedToArray(_useState3, 2),
1013
+ deletingWebhookId = _useState4[0],
1014
+ setDeletingWebhookId = _useState4[1];
1015
+ var _useState5 = react.useState(false),
1016
+ _useState6 = _slicedToArray(_useState5, 2),
1017
+ isAddWebhookPaneOpen = _useState6[0],
1018
+ setIsAddWebhookPaneOpen = _useState6[1];
1019
+ var _useState7 = react.useState(false),
1020
+ _useState8 = _slicedToArray(_useState7, 2),
1021
+ isDeleteAlertOpen = _useState8[0],
1022
+ setIsDeleteAlertOpen = _useState8[1];
1023
+ var _useTranslation = reactI18next.useTranslation(),
1024
+ t = _useTranslation.t;
1025
+ var _useQueryParams = reactUtils.useQueryParams(),
1026
+ _useQueryParams$page = _useQueryParams.page,
1027
+ page = _useQueryParams$page === void 0 ? constants.DEFAULT_PAGE_INDEX : _useQueryParams$page;
1028
+ var _useFetchWebhooks = main.useFetchWebhooks({
1029
+ entityId: entityId,
1030
+ page: page,
1031
+ pageSize: constants.DEFAULT_PAGE_SIZE
1032
+ }),
1033
+ isLoading = _useFetchWebhooks.isLoading,
1034
+ isFetching = _useFetchWebhooks.isFetching,
1035
+ _useFetchWebhooks$dat = _useFetchWebhooks.data,
1036
+ _useFetchWebhooks$dat2 = _useFetchWebhooks$dat === void 0 ? {} : _useFetchWebhooks$dat,
1037
+ _useFetchWebhooks$dat3 = _useFetchWebhooks$dat2.webhooks,
1038
+ webhooks = _useFetchWebhooks$dat3 === void 0 ? [] : _useFetchWebhooks$dat3,
1039
+ _useFetchWebhooks$dat4 = _useFetchWebhooks$dat2.totalCount,
1040
+ totalCount = _useFetchWebhooks$dat4 === void 0 ? 0 : _useFetchWebhooks$dat4;
1041
+ var _useDestroyWebhook = main.useDestroyWebhook({
1042
+ onSuccess: function onSuccess() {
1043
+ setIsDeleteAlertOpen(false);
1044
+ onDelete === null || onDelete === void 0 || onDelete();
1045
+ }
1046
+ }),
1047
+ isDeleting = _useDestroyWebhook.isPending,
1048
+ destroyWebhook = _useDestroyWebhook.mutate;
1049
+ var handlePaneClose = function handlePaneClose() {
1050
+ setEditingWebhookId(null);
1051
+ setIsAddWebhookPaneOpen(false);
1052
+ };
1053
+ var handleEdit = react.useCallback(function (id) {
1054
+ setEditingWebhookId(id);
1055
+ setIsAddWebhookPaneOpen(true);
1056
+ }, []);
1057
+ var handleDelete = react.useCallback(function (id) {
1058
+ setDeletingWebhookId(id);
1059
+ setIsDeleteAlertOpen(true);
1060
+ }, []);
1061
+ if (isLoading) {
1062
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
1063
+ className: "flex justify-center items-center w-full h-screen",
1064
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Spinner, {})
1065
+ });
1066
+ }
1067
+ return /*#__PURE__*/jsxRuntime.jsxs(Container, {
1068
+ className: containerClassName,
1069
+ children: [/*#__PURE__*/jsxRuntime.jsx(Header$1, {
1070
+ breadcrumbs: breadcrumbs,
1071
+ headerSize: headerSize,
1072
+ setIsAddWebhookPaneOpen: setIsAddWebhookPaneOpen,
1073
+ title: title,
1074
+ titleHelpPopoverProps: titleHelpPopoverProps,
1075
+ webhooks: webhooks,
1076
+ webhooksHelpLink: webhooksHelpLink
1077
+ }), neetoCist.isNotEmpty(webhooks) ? /*#__PURE__*/jsxRuntime.jsx(TableWrapper, {
1078
+ hasPagination: totalCount > constants.DEFAULT_PAGE_SIZE,
1079
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.DataTable, {
1080
+ totalCount: totalCount,
1081
+ currentPage: Number(page),
1082
+ data: webhooks,
1083
+ loading: isFetching,
1084
+ pageSize: constants.DEFAULT_PAGE_SIZE,
1085
+ columns: buildColumns({
1086
+ handleDelete: handleDelete,
1087
+ handleEdit: handleEdit,
1088
+ deliveriesPath: deliveriesPath
1089
+ })
1090
+ })
1091
+ }) : /*#__PURE__*/jsxRuntime.jsx("div", {
1092
+ className: "flex justify-center items-center w-full h-full",
1093
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Empty, {
1094
+ title: t("neetoWebhooks.webhook.empty"),
1095
+ description: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, {
1096
+ href: webhooksHelpLink,
1097
+ label: t("neetoWebhooks.webhook.emptyHelpText"),
1098
+ rel: "noreferrer",
1099
+ target: "_blank",
1100
+ variant: "link"
1101
+ }),
1102
+ primaryButtonProps: {
1103
+ label: t("neetoWebhooks.webhook.add"),
1104
+ onClick: function onClick() {
1105
+ return setIsAddWebhookPaneOpen(true);
1106
+ }
1107
+ }
1108
+ })
1109
+ }), /*#__PURE__*/jsxRuntime.jsx(AddWebhookPane, {
1110
+ editingWebhookId: editingWebhookId,
1111
+ entityId: entityId,
1112
+ entityType: entityType,
1113
+ onCreate: onCreate,
1114
+ secretsHelpLink: secretsHelpLink,
1115
+ webhooks: webhooks,
1116
+ webhooksHelpLink: webhooksHelpLink,
1117
+ isOpen: isAddWebhookPaneOpen,
1118
+ onClose: handlePaneClose
1119
+ }), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Alert, {
1120
+ isOpen: isDeleteAlertOpen,
1121
+ isSubmitting: isDeleting,
1122
+ submitButtonLabel: t("neetoWebhooks.buttons.delete"),
1123
+ message: t("neetoWebhooks.alert.delete.message", {
1124
+ entity: t("neetoWebhooks.entity.webhook")
1125
+ }),
1126
+ title: t("neetoWebhooks.alert.delete.title", {
1127
+ entity: t("neetoWebhooks.entity.webhook")
1128
+ }),
1129
+ onClose: function onClose() {
1130
+ return setIsDeleteAlertOpen(false);
1131
+ },
1132
+ onSubmit: function onSubmit() {
1133
+ return destroyWebhook(deletingWebhookId, {
1134
+ entityId: entityId
1135
+ });
1136
+ }
1137
+ })]
1138
+ });
1139
+ };
1140
+ var Webhooks$1 = withReactQuery(Webhooks);
1141
+
1142
+ var NeetoWebhooks = function NeetoWebhooks(_ref) {
1143
+ var entityType = _ref.entityType,
1144
+ entityId = _ref.entityId,
1145
+ _ref$breadcrumbs = _ref.breadcrumbs,
1146
+ breadcrumbs = _ref$breadcrumbs === void 0 ? [] : _ref$breadcrumbs,
1147
+ title = _ref.title,
1148
+ titleHelpPopoverProps = _ref.titleHelpPopoverProps,
1149
+ onCreate = _ref.onCreate,
1150
+ onDelete = _ref.onDelete,
1151
+ headerSize = _ref.headerSize,
1152
+ containerClassName = _ref.containerClassName,
1153
+ _ref$helpLinkUrls = _ref.helpLinkUrls,
1154
+ helpLinkUrls = _ref$helpLinkUrls === void 0 ? {} : _ref$helpLinkUrls;
1155
+ var _useRouteMatch = reactRouterDom.useRouteMatch(),
1156
+ webhooksPath = _useRouteMatch.path,
1157
+ webhooksUrl = _useRouteMatch.url;
1158
+ var deliveriesPath = main.getDeliveriesPath(webhooksUrl);
1159
+ var deliveryDetailsPath = main.getDeliveryDetailsPath(deliveriesPath);
1160
+ var helpLinks = ramda.mergeRight(main.HELP_LINK_URLS, helpLinkUrls);
1161
+ return /*#__PURE__*/jsxRuntime.jsxs(reactRouterDom.Switch, {
1162
+ children: [/*#__PURE__*/jsxRuntime.jsx(reactRouterDom.Route, {
1163
+ exact: true,
1164
+ path: webhooksPath,
1165
+ component: function component() {
1166
+ return /*#__PURE__*/jsxRuntime.jsx(Webhooks$1, {
1167
+ breadcrumbs: breadcrumbs,
1168
+ containerClassName: containerClassName,
1169
+ deliveriesPath: deliveriesPath,
1170
+ entityId: entityId,
1171
+ entityType: entityType,
1172
+ headerSize: headerSize,
1173
+ onCreate: onCreate,
1174
+ onDelete: onDelete,
1175
+ title: title,
1176
+ titleHelpPopoverProps: titleHelpPopoverProps,
1177
+ secretsHelpLink: helpLinks.secrets,
1178
+ webhooksHelpLink: helpLinks.webhooks
1179
+ });
1180
+ }
1181
+ }), /*#__PURE__*/jsxRuntime.jsx(reactRouterDom.Route, {
1182
+ exact: true,
1183
+ path: deliveryDetailsPath,
1184
+ render: function render() {
1185
+ return /*#__PURE__*/jsxRuntime.jsx(Deliveries$1, {
1186
+ breadcrumbs: breadcrumbs,
1187
+ webhooksUrl: webhooksUrl,
1188
+ helpLink: helpLinks.deliveries
1189
+ });
1190
+ }
1191
+ }), /*#__PURE__*/jsxRuntime.jsx(reactRouterDom.Route, {
1192
+ path: deliveriesPath,
1193
+ render: function render() {
1194
+ return /*#__PURE__*/jsxRuntime.jsx(Deliveries$1, {
1195
+ breadcrumbs: breadcrumbs,
1196
+ webhooksUrl: webhooksUrl,
1197
+ helpLink: helpLinks.deliveries
1198
+ });
1199
+ }
1200
+ })]
1201
+ });
1202
+ };
1203
+
1204
+ module.exports = NeetoWebhooks;
1205
+ //# sourceMappingURL=NeetoWebhooks.js.map