@bigbinary/neeto-webhooks-frontend 3.0.11 → 3.0.13

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