@bigbinary/neeto-api-keys-frontend 2.0.0 → 2.2.0

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,748 @@
1
+ import { useState, useEffect, useRef } from 'react';
2
+ import { t } from 'i18next';
3
+ import { isNotEmpty, isPresent, isNotPresent } from '@bigbinary/neeto-cist';
4
+ import { DEFAULT_PAGE_INDEX, DEFAULT_PAGE_SIZE, PLURAL } from '@bigbinary/neeto-commons-frontend/constants';
5
+ import { useMutationWithInvalidation, withT, withTitle, useQueryParams, useDebounce } from '@bigbinary/neeto-commons-frontend/react-utils';
6
+ import Header from '@bigbinary/neeto-molecules/Header';
7
+ import HelpPopover from '@bigbinary/neeto-molecules/HelpPopover';
8
+ import Alert from '@bigbinary/neetoui/Alert';
9
+ import Button from '@bigbinary/neetoui/Button';
10
+ import { useTranslation, Trans } from 'react-i18next';
11
+ import { isEmpty, prop } from 'ramda';
12
+ import { useHistory } from 'react-router-dom';
13
+ import { getQueryParams, buildUrl, dateFormat } from '@bigbinary/neeto-commons-frontend/utils';
14
+ import { globalProps as globalProps$1 } from '@bigbinary/neeto-commons-frontend/initializers';
15
+ import { useQuery } from '@tanstack/react-query';
16
+ import axios from 'axios';
17
+ import Pane from '@bigbinary/neetoui/Pane';
18
+ import Typography from '@bigbinary/neetoui/Typography';
19
+ import NeetoUIForm from '@bigbinary/neetoui/formik/Form';
20
+ import Input from '@bigbinary/neetoui/formik/Input';
21
+ import Checkbox from '@bigbinary/neetoui/formik/Checkbox';
22
+ import ActionBlock from '@bigbinary/neetoui/formik/ActionBlock';
23
+ import { Field } from 'formik';
24
+ import NeetoUIDatePicker from '@bigbinary/neetoui/DatePicker';
25
+ import dayjs from 'dayjs';
26
+ import CopyToClipboardButton from '@bigbinary/neeto-molecules/CopyToClipboardButton';
27
+ import MoreDropdown from '@bigbinary/neeto-molecules/MoreDropdown';
28
+ import Tag from '@bigbinary/neetoui/Tag';
29
+ import * as yup from 'yup';
30
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
31
+ import PageLoader from '@bigbinary/neeto-molecules/PageLoader';
32
+ import TableWrapper from '@bigbinary/neeto-molecules/TableWrapper';
33
+ import NeetoUITable from '@bigbinary/neetoui/Table';
34
+ import NoData from '@bigbinary/neetoui/NoData';
35
+
36
+ function _typeof(o) {
37
+ "@babel/helpers - typeof";
38
+
39
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
40
+ return typeof o;
41
+ } : function (o) {
42
+ return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
43
+ }, _typeof(o);
44
+ }
45
+
46
+ function _toPrimitive(input, hint) {
47
+ if (_typeof(input) !== "object" || input === null) return input;
48
+ var prim = input[Symbol.toPrimitive];
49
+ if (prim !== undefined) {
50
+ var res = prim.call(input, hint || "default");
51
+ if (_typeof(res) !== "object") return res;
52
+ throw new TypeError("@@toPrimitive must return a primitive value.");
53
+ }
54
+ return (hint === "string" ? String : Number)(input);
55
+ }
56
+
57
+ function _toPropertyKey(arg) {
58
+ var key = _toPrimitive(arg, "string");
59
+ return _typeof(key) === "symbol" ? key : String(key);
60
+ }
61
+
62
+ function _defineProperty(obj, key, value) {
63
+ key = _toPropertyKey(key);
64
+ if (key in obj) {
65
+ Object.defineProperty(obj, key, {
66
+ value: value,
67
+ enumerable: true,
68
+ configurable: true,
69
+ writable: true
70
+ });
71
+ } else {
72
+ obj[key] = value;
73
+ }
74
+ return obj;
75
+ }
76
+
77
+ function _arrayWithHoles(arr) {
78
+ if (Array.isArray(arr)) return arr;
79
+ }
80
+
81
+ function _iterableToArrayLimit(r, l) {
82
+ var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
83
+ if (null != t) {
84
+ var e,
85
+ n,
86
+ i,
87
+ u,
88
+ a = [],
89
+ f = !0,
90
+ o = !1;
91
+ try {
92
+ if (i = (t = t.call(r)).next, 0 === l) {
93
+ if (Object(t) !== t) return;
94
+ f = !1;
95
+ } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
96
+ } catch (r) {
97
+ o = !0, n = r;
98
+ } finally {
99
+ try {
100
+ if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;
101
+ } finally {
102
+ if (o) throw n;
103
+ }
104
+ }
105
+ return a;
106
+ }
107
+ }
108
+
109
+ function _arrayLikeToArray(arr, len) {
110
+ if (len == null || len > arr.length) len = arr.length;
111
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
112
+ return arr2;
113
+ }
114
+
115
+ function _unsupportedIterableToArray(o, minLen) {
116
+ if (!o) return;
117
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
118
+ var n = Object.prototype.toString.call(o).slice(8, -1);
119
+ if (n === "Object" && o.constructor) n = o.constructor.name;
120
+ if (n === "Map" || n === "Set") return Array.from(o);
121
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
122
+ }
123
+
124
+ function _nonIterableRest() {
125
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
126
+ }
127
+
128
+ function _slicedToArray(arr, i) {
129
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
130
+ }
131
+
132
+ var getPageFromSearchParams = function getPageFromSearchParams() {
133
+ var _getQueryParams = getQueryParams(),
134
+ page = _getQueryParams.page;
135
+ return parseInt(page) || DEFAULT_PAGE_INDEX;
136
+ };
137
+ var setPageSearchParam = function setPageSearchParam(_ref) {
138
+ var page = _ref.page,
139
+ history = _ref.history;
140
+ var searchParams = page !== DEFAULT_PAGE_INDEX && buildUrl("", {
141
+ page: page
142
+ });
143
+ history.push({
144
+ search: searchParams
145
+ });
146
+ };
147
+
148
+ var usePagination = function usePagination(_ref) {
149
+ var searchTerm = _ref.searchTerm;
150
+ var _useState = useState(getPageFromSearchParams),
151
+ _useState2 = _slicedToArray(_useState, 2),
152
+ currentPage = _useState2[0],
153
+ setCurrentPage = _useState2[1];
154
+ var history = useHistory();
155
+ useEffect(function () {
156
+ handlePageChange(getPageFromSearchParams());
157
+ }, []);
158
+ useEffect(function () {
159
+ if (isNotEmpty(searchTerm) && currentPage !== DEFAULT_PAGE_INDEX) {
160
+ handlePageChange(DEFAULT_PAGE_INDEX);
161
+ }
162
+ }, [searchTerm]);
163
+ var handlePageChange = function handlePageChange(page) {
164
+ setCurrentPage(page);
165
+ setPageSearchParam({
166
+ page: page,
167
+ history: history
168
+ });
169
+ };
170
+ var onFetchSuccess = function onFetchSuccess(_ref2) {
171
+ var totalCount = _ref2.totalCount,
172
+ apiKeys = _ref2.apiKeys;
173
+ if (totalCount !== 0 && isEmpty(apiKeys)) {
174
+ handlePageChange(DEFAULT_PAGE_INDEX);
175
+ }
176
+ };
177
+ return {
178
+ currentPage: currentPage,
179
+ handlePageChange: handlePageChange,
180
+ onFetchSuccess: onFetchSuccess
181
+ };
182
+ };
183
+
184
+ var API_KEYS_BASE_URL = "/neeto_api_keys_engine/api/v1/api_keys";
185
+ var HELP_DOC_URL = "https://help.".concat(globalProps$1.appName.toLowerCase(), ".com/articles/api-keys");
186
+
187
+ var fetch = function fetch(params) {
188
+ return axios.get(API_KEYS_BASE_URL, {
189
+ params: params
190
+ });
191
+ };
192
+ var create = function create(payload) {
193
+ return axios.post(API_KEYS_BASE_URL, {
194
+ apiKey: payload
195
+ });
196
+ };
197
+ var update = function update(_ref) {
198
+ var id = _ref.id,
199
+ payload = _ref.payload;
200
+ return axios.put("".concat(API_KEYS_BASE_URL, "/").concat(id), {
201
+ apiKey: payload
202
+ });
203
+ };
204
+ var destroy = function destroy(id) {
205
+ return axios["delete"]("".concat(API_KEYS_BASE_URL, "/").concat(id));
206
+ };
207
+ var apiKeysApi = {
208
+ fetch: fetch,
209
+ create: create,
210
+ update: update,
211
+ destroy: destroy
212
+ };
213
+
214
+ var QUERY_KEYS = {
215
+ API_KEYS: "api-keys"
216
+ };
217
+
218
+ function ownKeys$4(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; }
219
+ function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
220
+ var useFetchApiKeys = function useFetchApiKeys(_ref) {
221
+ var params = _ref.params,
222
+ _ref$options = _ref.options,
223
+ options = _ref$options === void 0 ? {} : _ref$options;
224
+ return useQuery(_objectSpread$4({
225
+ queryKey: [QUERY_KEYS.API_KEYS, params],
226
+ queryFn: function queryFn() {
227
+ return apiKeysApi.fetch(params);
228
+ }
229
+ }, options));
230
+ };
231
+ var useCreateApiKey = function useCreateApiKey(onSuccess) {
232
+ return useMutationWithInvalidation(apiKeysApi.create, {
233
+ keysToInvalidate: [[QUERY_KEYS.API_KEYS]],
234
+ onSuccess: onSuccess
235
+ });
236
+ };
237
+ var useUpdateApiKey = function useUpdateApiKey(onSuccess) {
238
+ return useMutationWithInvalidation(function (_ref2) {
239
+ var id = _ref2.id,
240
+ payload = _ref2.payload;
241
+ return apiKeysApi.update({
242
+ id: id,
243
+ payload: payload
244
+ });
245
+ }, {
246
+ keysToInvalidate: [[QUERY_KEYS.API_KEYS]],
247
+ onSuccess: onSuccess
248
+ });
249
+ };
250
+ var useDeleteApiKey = function useDeleteApiKey(onSuccess) {
251
+ return useMutationWithInvalidation(apiKeysApi.destroy, {
252
+ keysToInvalidate: [[QUERY_KEYS.API_KEYS]],
253
+ onSuccess: onSuccess
254
+ });
255
+ };
256
+
257
+ var INITIAL_VALUES = {
258
+ expiresAt: null,
259
+ label: "",
260
+ hasNoExpiry: true
261
+ };
262
+ var NEXT_DAY = dayjs().add(1, "day").startOf("day");
263
+ var VALIDATION_SCHEMA = yup.object({
264
+ expiresAt: yup.date().when("hasNoExpiry", function (hasNoExpiry, field) {
265
+ return hasNoExpiry ? field.nullable() : field.nullable().required(t("neetoApiKeys.validations.required", {
266
+ entity: t("neetoApiKeys.fields.expiryDate")
267
+ })).min(NEXT_DAY, t("neetoApiKeys.validations.expiry", {
268
+ date: dateFormat.date(NEXT_DAY)
269
+ }));
270
+ }),
271
+ label: yup.string().required(t("neetoApiKeys.validations.required", {
272
+ entity: t("neetoApiKeys.fields.label")
273
+ }))
274
+ });
275
+ var MENU_ITEMS = {
276
+ EDIT: "edit",
277
+ DELETE: "delete"
278
+ };
279
+
280
+ var isInPast = function isInPast(date) {
281
+ return dayjs(date).isBefore(dayjs());
282
+ };
283
+ var partlyHideToken = function partlyHideToken(key) {
284
+ return key.slice(-4).padStart(20, "*");
285
+ };
286
+ var formatExpiry = function formatExpiry(date) {
287
+ return dayjs(date).diff(dayjs(), "day") <= 2 ? dateFormat.fromNow(date) : dateFormat.date(date);
288
+ };
289
+ var getMenuItems = function getMenuItems(_ref) {
290
+ var onEdit = _ref.onEdit,
291
+ onDelete = _ref.onDelete;
292
+ return [{
293
+ key: MENU_ITEMS.EDIT,
294
+ label: t("neetoApiKeys.buttons.edit"),
295
+ onClick: onEdit
296
+ }, {
297
+ key: MENU_ITEMS.DELETE,
298
+ label: t("neetoApiKeys.buttons.delete"),
299
+ onClick: onDelete
300
+ }];
301
+ };
302
+ var buildColumnData = function buildColumnData(_ref2) {
303
+ var handleDelete = _ref2.handleDelete,
304
+ handleEdit = _ref2.handleEdit;
305
+ return [{
306
+ title: t("neetoApiKeys.table.headers.label"),
307
+ key: "label",
308
+ dataIndex: "label",
309
+ width: 400,
310
+ render: function render(label, apiKey) {
311
+ return /*#__PURE__*/jsxs("div", {
312
+ className: "flex items-center justify-between space-x-3",
313
+ children: [/*#__PURE__*/jsx(Typography, {
314
+ style: "body2",
315
+ children: label
316
+ }), /*#__PURE__*/jsx(MoreDropdown, {
317
+ dropdownProps: {
318
+ strategy: "fixed"
319
+ },
320
+ menuItems: getMenuItems({
321
+ onEdit: function onEdit() {
322
+ return handleEdit(apiKey);
323
+ },
324
+ onDelete: function onDelete() {
325
+ return handleDelete(apiKey);
326
+ }
327
+ })
328
+ })]
329
+ });
330
+ }
331
+ }, {
332
+ title: t("neetoApiKeys.table.headers.token"),
333
+ key: "token",
334
+ dataIndex: "token",
335
+ width: 400,
336
+ render: function render(token) {
337
+ return /*#__PURE__*/jsxs("div", {
338
+ className: "flex items-center justify-between gap-x-3",
339
+ children: [/*#__PURE__*/jsx(Typography, {
340
+ style: "body2",
341
+ children: partlyHideToken(token)
342
+ }), /*#__PURE__*/jsx(CopyToClipboardButton, {
343
+ style: "text",
344
+ value: token
345
+ })]
346
+ });
347
+ }
348
+ }, {
349
+ title: t("neetoApiKeys.table.headers.status"),
350
+ key: "status",
351
+ width: 144,
352
+ render: function render(_, _ref3) {
353
+ var expiresAt = _ref3.expiresAt;
354
+ return isPresent(expiresAt) && isInPast(expiresAt) ? /*#__PURE__*/jsx(Tag, {
355
+ style: "warning",
356
+ children: t("neetoApiKeys.tags.expired")
357
+ }) : /*#__PURE__*/jsx(Tag, {
358
+ style: "success",
359
+ children: t("neetoApiKeys.tags.active")
360
+ });
361
+ }
362
+ }, {
363
+ title: t("neetoApiKeys.table.headers.expiresAt"),
364
+ key: "expiresAt",
365
+ dataIndex: "expiresAt",
366
+ width: 200,
367
+ render: function render(expiresAt) {
368
+ return isPresent(expiresAt) ? formatExpiry(expiresAt) : /*#__PURE__*/jsx(Typography, {
369
+ style: "body2",
370
+ children: t("neetoApiKeys.common.never")
371
+ });
372
+ }
373
+ }, {
374
+ title: t("neetoApiKeys.table.headers.createdAt"),
375
+ key: "createdAt",
376
+ dataIndex: "createdAt",
377
+ width: 200,
378
+ render: function render(createdAt) {
379
+ return isPresent(createdAt) ? dateFormat.dateTime(createdAt) : /*#__PURE__*/jsx(Typography, {
380
+ style: "body2",
381
+ children: t("neetoApiKeys.common.never")
382
+ });
383
+ }
384
+ }];
385
+ };
386
+ var getStartOfTime = function getStartOfTime(time, unit) {
387
+ return dayjs(time).startOf(unit);
388
+ };
389
+
390
+ 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; }
391
+ 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), !0).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; }
392
+ var DatePicker = function DatePicker(_ref) {
393
+ var defaultValue = _ref.defaultValue,
394
+ disabledDate = _ref.disabledDate,
395
+ label = _ref.label,
396
+ placeholder = _ref.placeholder,
397
+ name = _ref.name,
398
+ _ref$disabled = _ref.disabled,
399
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled;
400
+ return /*#__PURE__*/jsx(Field, {
401
+ name: name,
402
+ children: function children(_ref2) {
403
+ var _globalProps;
404
+ var field = _ref2.field,
405
+ meta = _ref2.meta,
406
+ setFieldValue = _ref2.form.setFieldValue;
407
+ return /*#__PURE__*/jsx(NeetoUIDatePicker, _objectSpread$3(_objectSpread$3({
408
+ defaultValue: defaultValue,
409
+ disabled: disabled,
410
+ disabledDate: disabledDate,
411
+ label: label,
412
+ placeholder: placeholder,
413
+ allowClear: false,
414
+ className: "w-full",
415
+ error: meta.touched && meta.error,
416
+ format: (_globalProps = globalProps) === null || _globalProps === void 0 || (_globalProps = _globalProps.user) === null || _globalProps === void 0 ? void 0 : _globalProps.dateFormat,
417
+ getPopupContainer: prop("parentNode")
418
+ }, field), {}, {
419
+ onChange: function onChange(date) {
420
+ setFieldValue(field.name, getStartOfTime(date, "day"));
421
+ }
422
+ }));
423
+ }
424
+ });
425
+ };
426
+
427
+ var Form = withT(function (_ref) {
428
+ var t = _ref.t,
429
+ _ref$initialValues = _ref.initialValues,
430
+ initialValues = _ref$initialValues === void 0 ? INITIAL_VALUES : _ref$initialValues,
431
+ isSubmitting = _ref.isSubmitting,
432
+ onClose = _ref.onClose,
433
+ onSubmit = _ref.onSubmit,
434
+ initialFocusRef = _ref.initialFocusRef;
435
+ return /*#__PURE__*/jsx(NeetoUIForm, {
436
+ formikProps: {
437
+ validationSchema: VALIDATION_SCHEMA,
438
+ initialValues: initialValues,
439
+ onSubmit: onSubmit
440
+ },
441
+ children: function children(_ref2) {
442
+ var setFieldValue = _ref2.setFieldValue,
443
+ _ref2$values = _ref2.values,
444
+ _ref2$values2 = _ref2$values === void 0 ? {} : _ref2$values,
445
+ hasNoExpiry = _ref2$values2.hasNoExpiry,
446
+ expiresAt = _ref2$values2.expiresAt;
447
+ return /*#__PURE__*/jsxs(Fragment, {
448
+ children: [/*#__PURE__*/jsx(Pane.Body, {
449
+ children: /*#__PURE__*/jsxs("div", {
450
+ className: "w-full space-y-4",
451
+ children: [/*#__PURE__*/jsx(Input, {
452
+ autoFocus: true,
453
+ label: t("neetoApiKeys.fields.label"),
454
+ name: "label",
455
+ placeholder: t("neetoApiKeys.placeholders.label"),
456
+ ref: initialFocusRef
457
+ }), /*#__PURE__*/jsxs("div", {
458
+ className: "space-y-2",
459
+ children: [!hasNoExpiry && /*#__PURE__*/jsx(DatePicker, {
460
+ defaultValue: expiresAt,
461
+ disabledDate: function disabledDate(date) {
462
+ return date < NEXT_DAY;
463
+ },
464
+ label: t("neetoApiKeys.fields.expiryDate"),
465
+ name: "expiresAt",
466
+ placeholder: t("neetoApiKeys.placeholders.selectExpiryDate")
467
+ }), /*#__PURE__*/jsx(Checkbox, {
468
+ checked: hasNoExpiry,
469
+ label: t("neetoApiKeys.fields.neverExpire"),
470
+ name: "hasNoExpiry",
471
+ onChange: function onChange() {
472
+ setFieldValue("expiresAt", null);
473
+ setFieldValue("hasNoExpiry", !hasNoExpiry);
474
+ }
475
+ })]
476
+ })]
477
+ })
478
+ }), /*#__PURE__*/jsx(Pane.Footer, {
479
+ children: /*#__PURE__*/jsx(ActionBlock, {
480
+ isSubmitting: isSubmitting,
481
+ cancelButtonProps: {
482
+ onClick: onClose
483
+ }
484
+ })
485
+ })]
486
+ });
487
+ }
488
+ });
489
+ });
490
+
491
+ var Create = function Create(_ref) {
492
+ var onClose = _ref.onClose,
493
+ isOpen = _ref.isOpen;
494
+ var initialFocusRef = useRef(null);
495
+ var _useCreateApiKey = useCreateApiKey(onClose),
496
+ createApiKey = _useCreateApiKey.mutate,
497
+ isCreating = _useCreateApiKey.isPending;
498
+ var _useTranslation = useTranslation(),
499
+ t = _useTranslation.t;
500
+ return /*#__PURE__*/jsxs(Pane, {
501
+ initialFocusRef: initialFocusRef,
502
+ isOpen: isOpen,
503
+ onClose: onClose,
504
+ children: [/*#__PURE__*/jsx(Pane.Header, {
505
+ children: /*#__PURE__*/jsxs(Typography, {
506
+ style: "h2",
507
+ children: [t("neetoApiKeys.headers.createApiKey"), /*#__PURE__*/jsx(HelpPopover, {
508
+ className: "ml-2",
509
+ description: t("neetoApiKeys.tooltips.apiKeysDescription"),
510
+ helpLinkProps: {
511
+ href: HELP_DOC_URL
512
+ },
513
+ title: t("neetoApiKeys.tooltips.apiKeys")
514
+ })]
515
+ })
516
+ }), /*#__PURE__*/jsx(Form, {
517
+ initialFocusRef: initialFocusRef,
518
+ onClose: onClose,
519
+ isSubmitting: isCreating,
520
+ onSubmit: createApiKey
521
+ })]
522
+ });
523
+ };
524
+
525
+ 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; }
526
+ 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), !0).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; }
527
+ var Update = function Update(_ref) {
528
+ var onClose = _ref.onClose,
529
+ apiKey = _ref.apiKey;
530
+ var initialFocusRef = useRef(null);
531
+ var _useUpdateApiKey = useUpdateApiKey(onClose),
532
+ updateApiKey = _useUpdateApiKey.mutate,
533
+ isUpdating = _useUpdateApiKey.isPending;
534
+ var _useTranslation = useTranslation(),
535
+ t = _useTranslation.t;
536
+ var handleUpdate = function handleUpdate(values) {
537
+ updateApiKey({
538
+ id: apiKey.id,
539
+ payload: values
540
+ });
541
+ };
542
+ var initialValues = _objectSpread$2(_objectSpread$2({}, apiKey), {}, {
543
+ hasNoExpiry: isNotPresent(apiKey.expiresAt)
544
+ });
545
+ return /*#__PURE__*/jsxs(Pane, {
546
+ initialFocusRef: initialFocusRef,
547
+ onClose: onClose,
548
+ isOpen: isNotEmpty(apiKey),
549
+ children: [/*#__PURE__*/jsx(Pane.Header, {
550
+ children: /*#__PURE__*/jsxs(Typography, {
551
+ style: "h2",
552
+ children: [t("neetoApiKeys.headers.updateApiKey"), /*#__PURE__*/jsx(HelpPopover, {
553
+ className: "ml-2",
554
+ description: t("neetoApiKeys.tooltips.apiKeysDescription"),
555
+ helpLinkProps: {
556
+ href: HELP_DOC_URL
557
+ },
558
+ title: t("neetoApiKeys.tooltips.apiKeys")
559
+ })]
560
+ })
561
+ }), /*#__PURE__*/jsx(Form, {
562
+ initialFocusRef: initialFocusRef,
563
+ initialValues: initialValues,
564
+ onClose: onClose,
565
+ isSubmitting: isUpdating,
566
+ onSubmit: handleUpdate
567
+ })]
568
+ });
569
+ };
570
+
571
+ 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; }
572
+ 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), !0).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; }
573
+ var Table = function Table(_ref) {
574
+ var handleDelete = _ref.handleDelete,
575
+ handleEdit = _ref.handleEdit,
576
+ currentPage = _ref.currentPage,
577
+ setIsCreatePaneOpen = _ref.setIsCreatePaneOpen,
578
+ _ref$noDataProps = _ref.noDataProps,
579
+ noDataProps = _ref$noDataProps === void 0 ? {} : _ref$noDataProps,
580
+ data = _ref.data,
581
+ isLoading = _ref.isLoading,
582
+ isFetching = _ref.isFetching,
583
+ handlePageChange = _ref.handlePageChange;
584
+ var _useTranslation = useTranslation(),
585
+ t = _useTranslation.t;
586
+ if (isLoading) return /*#__PURE__*/jsx(PageLoader, {});
587
+ if (isEmpty(data === null || data === void 0 ? void 0 : data.apiKeys)) {
588
+ return /*#__PURE__*/jsxs("div", {
589
+ className: "flex h-full w-full items-center justify-center",
590
+ children: [/*#__PURE__*/jsx(NoData, _objectSpread$1({
591
+ className: "w-full",
592
+ title: t("neetoApiKeys.noData.title"),
593
+ helpText: /*#__PURE__*/jsx(Trans, {
594
+ i18nKey: "neetoApiKeys.noData.helpText",
595
+ components: {
596
+ helpLink: /*#__PURE__*/jsx(Button, {
597
+ href: HELP_DOC_URL,
598
+ style: "link",
599
+ target: "_blank"
600
+ })
601
+ }
602
+ }),
603
+ primaryButtonProps: {
604
+ label: t("neetoApiKeys.buttons.addApiKey"),
605
+ onClick: function onClick() {
606
+ return setIsCreatePaneOpen(true);
607
+ }
608
+ }
609
+ }, noDataProps)), ";"]
610
+ });
611
+ }
612
+ return /*#__PURE__*/jsx(TableWrapper, {
613
+ hasPagination: (data === null || data === void 0 ? void 0 : data.totalCount) > DEFAULT_PAGE_SIZE,
614
+ children: /*#__PURE__*/jsx(NeetoUITable, {
615
+ handlePageChange: handlePageChange,
616
+ fixedHeight: true,
617
+ columnData: buildColumnData({
618
+ handleDelete: handleDelete,
619
+ handleEdit: handleEdit
620
+ }),
621
+ currentPageNumber: currentPage,
622
+ defaultPageSize: DEFAULT_PAGE_SIZE,
623
+ loading: isFetching,
624
+ rowData: data === null || data === void 0 ? void 0 : data.apiKeys,
625
+ totalCount: data === null || data === void 0 ? void 0 : data.totalCount
626
+ })
627
+ });
628
+ };
629
+
630
+ 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; }
631
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).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; }
632
+ var ApiKeys = function ApiKeys(_ref) {
633
+ var noDataProps = _ref.noDataProps,
634
+ headerProps = _ref.headerProps;
635
+ var _useState = useState({}),
636
+ _useState2 = _slicedToArray(_useState, 2),
637
+ apiKeyToBeDeleted = _useState2[0],
638
+ setApiKeyToBeDeleted = _useState2[1];
639
+ var _useState3 = useState({}),
640
+ _useState4 = _slicedToArray(_useState3, 2),
641
+ apiKeyToBeEdited = _useState4[0],
642
+ setApiKeyToBeEdited = _useState4[1];
643
+ var _useState5 = useState(false),
644
+ _useState6 = _slicedToArray(_useState5, 2),
645
+ isCreatePaneOpen = _useState6[0],
646
+ setIsCreatePaneOpen = _useState6[1];
647
+ var _useTranslation = useTranslation(),
648
+ t = _useTranslation.t;
649
+ var _useQueryParams = useQueryParams(),
650
+ _useQueryParams$searc = _useQueryParams.searchTerm,
651
+ searchTerm = _useQueryParams$searc === void 0 ? "" : _useQueryParams$searc;
652
+ var _useDeleteApiKey = useDeleteApiKey(function () {
653
+ return setApiKeyToBeDeleted({});
654
+ }),
655
+ deleteApiKey = _useDeleteApiKey.mutate,
656
+ isDeleting = _useDeleteApiKey.isPending;
657
+ var debouncedSearchTerm = useDebounce(searchTerm);
658
+ var _usePagination = usePagination({
659
+ searchTerm: debouncedSearchTerm
660
+ }),
661
+ currentPage = _usePagination.currentPage,
662
+ handlePageChange = _usePagination.handlePageChange,
663
+ onFetchSuccess = _usePagination.onFetchSuccess;
664
+ var queryParams = {
665
+ searchTerm: debouncedSearchTerm,
666
+ page: currentPage,
667
+ pageSize: DEFAULT_PAGE_SIZE
668
+ };
669
+ var _useFetchApiKeys = useFetchApiKeys({
670
+ params: queryParams
671
+ }),
672
+ data = _useFetchApiKeys.data,
673
+ isLoading = _useFetchApiKeys.isLoading,
674
+ isFetching = _useFetchApiKeys.isFetching;
675
+ var showFilters = isPresent(debouncedSearchTerm) || (data === null || data === void 0 ? void 0 : data.totalCount) > 0;
676
+ useEffect(function () {
677
+ if (!data) return;
678
+ onFetchSuccess(data);
679
+ }, [data]);
680
+ return /*#__PURE__*/jsxs("div", {
681
+ className: "flex h-full w-full flex-col",
682
+ children: [/*#__PURE__*/jsx(Header, _objectSpread({
683
+ actionBlock: /*#__PURE__*/jsx(Button, {
684
+ label: t("neetoApiKeys.buttons.addApiKey"),
685
+ onClick: function onClick() {
686
+ return setIsCreatePaneOpen(true);
687
+ }
688
+ }),
689
+ searchProps: showFilters && {
690
+ placeholder: t("neetoApiKeys.placeholders.search")
691
+ },
692
+ title: /*#__PURE__*/jsxs("div", {
693
+ className: "flex items-center gap-x-2",
694
+ children: [t("neetoApiKeys.common.apiKey", PLURAL), /*#__PURE__*/jsx(HelpPopover, {
695
+ description: t("neetoApiKeys.tooltips.apiKeysDescription"),
696
+ helpLinkProps: {
697
+ href: HELP_DOC_URL
698
+ },
699
+ title: t("neetoApiKeys.tooltips.apiKeys")
700
+ })]
701
+ })
702
+ }, headerProps)), /*#__PURE__*/jsx(Table, {
703
+ currentPage: currentPage,
704
+ data: data,
705
+ handlePageChange: handlePageChange,
706
+ isFetching: isFetching,
707
+ isLoading: isLoading,
708
+ noDataProps: noDataProps,
709
+ setIsCreatePaneOpen: setIsCreatePaneOpen,
710
+ handleDelete: setApiKeyToBeDeleted,
711
+ handleEdit: setApiKeyToBeEdited
712
+ }), /*#__PURE__*/jsx(Alert, {
713
+ isOpen: isNotEmpty(apiKeyToBeDeleted),
714
+ isSubmitting: isDeleting,
715
+ submitButtonLabel: t("neetoApiKeys.buttons.delete"),
716
+ title: t("neetoApiKeys.alert.titles.deleteApiKey"),
717
+ message: /*#__PURE__*/jsx(Trans, {
718
+ components: {
719
+ bold: /*#__PURE__*/jsx("strong", {})
720
+ },
721
+ i18nKey: "neetoApiKeys.alert.descriptions.deleteApiKey",
722
+ values: {
723
+ name: apiKeyToBeDeleted.label
724
+ }
725
+ }),
726
+ onClose: function onClose() {
727
+ return setApiKeyToBeDeleted({});
728
+ },
729
+ onSubmit: function onSubmit() {
730
+ return deleteApiKey(apiKeyToBeDeleted.id);
731
+ }
732
+ }), /*#__PURE__*/jsx(Create, {
733
+ isOpen: isCreatePaneOpen,
734
+ onClose: function onClose() {
735
+ return setIsCreatePaneOpen(false);
736
+ }
737
+ }), /*#__PURE__*/jsx(Update, {
738
+ apiKey: apiKeyToBeEdited,
739
+ onClose: function onClose() {
740
+ return setApiKeyToBeEdited({});
741
+ }
742
+ })]
743
+ });
744
+ };
745
+ var index = withTitle(ApiKeys, t("neetoApiKeys.common.apiKey", PLURAL));
746
+
747
+ export { index as default };
748
+ //# sourceMappingURL=ApiKeys.js.map