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