@bigbinary/neeto-access-control-frontend 1.0.0 → 1.1.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.
package/dist/index.cjs.js CHANGED
@@ -14,17 +14,28 @@ var Form = require('@bigbinary/neetoui/formik/Form');
14
14
  var Input = require('@bigbinary/neetoui/formik/Input');
15
15
  var Radio = require('@bigbinary/neetoui/formik/Radio');
16
16
  var reactI18next = require('react-i18next');
17
- var reactQuery = require('@tanstack/react-query');
18
17
  var constants = require('@bigbinary/neeto-commons-frontend/constants');
19
- var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
20
- var ramda = require('ramda');
21
- var axios = require('axios');
22
- var formik = require('formik');
23
18
  var Delete = require('@bigbinary/neeto-icons/Delete');
19
+ var SubHeader = require('@bigbinary/neeto-molecules/SubHeader');
20
+ var TableWrapper = require('@bigbinary/neeto-molecules/TableWrapper');
21
+ var Alert = require('@bigbinary/neetoui/Alert');
24
22
  var Button = require('@bigbinary/neetoui/Button');
23
+ var NoData = require('@bigbinary/neetoui/NoData');
24
+ var Pane = require('@bigbinary/neetoui/Pane');
25
+ var Table = require('@bigbinary/neetoui/Table');
26
+ var Typography = require('@bigbinary/neetoui/Typography');
27
+ var ramda = require('ramda');
28
+ var reactQuery = require('@tanstack/react-query');
29
+ var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
30
+ var axios = require('axios');
31
+ var Modal = require('@bigbinary/neetoui/Modal');
32
+ var MultiEmailInput = require('@bigbinary/neetoui/formik/MultiEmailInput');
33
+ var jsxRuntime = require('react/jsx-runtime');
25
34
  var i18next = require('i18next');
35
+ var MoreDropdown = require('@bigbinary/neeto-molecules/MoreDropdown');
36
+ var Tooltip = require('@bigbinary/neetoui/Tooltip');
37
+ var formik = require('formik');
26
38
  var yup = require('yup');
27
- var jsxRuntime = require('react/jsx-runtime');
28
39
  var NeetoHeader = require('@bigbinary/neeto-molecules/Header');
29
40
  var HelpPopover = require('@bigbinary/neeto-molecules/HelpPopover');
30
41
 
@@ -57,9 +68,20 @@ var ActionBlock__default = /*#__PURE__*/_interopDefaultLegacy(ActionBlock);
57
68
  var Form__default = /*#__PURE__*/_interopDefaultLegacy(Form);
58
69
  var Input__default = /*#__PURE__*/_interopDefaultLegacy(Input);
59
70
  var Radio__default = /*#__PURE__*/_interopDefaultLegacy(Radio);
60
- var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
61
71
  var Delete__default = /*#__PURE__*/_interopDefaultLegacy(Delete);
72
+ var SubHeader__default = /*#__PURE__*/_interopDefaultLegacy(SubHeader);
73
+ var TableWrapper__default = /*#__PURE__*/_interopDefaultLegacy(TableWrapper);
74
+ var Alert__default = /*#__PURE__*/_interopDefaultLegacy(Alert);
62
75
  var Button__default = /*#__PURE__*/_interopDefaultLegacy(Button);
76
+ var NoData__default = /*#__PURE__*/_interopDefaultLegacy(NoData);
77
+ var Pane__default = /*#__PURE__*/_interopDefaultLegacy(Pane);
78
+ var Table__default = /*#__PURE__*/_interopDefaultLegacy(Table);
79
+ var Typography__default = /*#__PURE__*/_interopDefaultLegacy(Typography);
80
+ var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
81
+ var Modal__default = /*#__PURE__*/_interopDefaultLegacy(Modal);
82
+ var MultiEmailInput__default = /*#__PURE__*/_interopDefaultLegacy(MultiEmailInput);
83
+ var MoreDropdown__default = /*#__PURE__*/_interopDefaultLegacy(MoreDropdown);
84
+ var Tooltip__default = /*#__PURE__*/_interopDefaultLegacy(Tooltip);
63
85
  var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
64
86
  var NeetoHeader__default = /*#__PURE__*/_interopDefaultLegacy(NeetoHeader);
65
87
  var HelpPopover__default = /*#__PURE__*/_interopDefaultLegacy(HelpPopover);
@@ -105,8 +127,461 @@ function _defineProperty(obj, key, value) {
105
127
  return obj;
106
128
  }
107
129
 
130
+ function _arrayWithHoles(arr) {
131
+ if (Array.isArray(arr)) return arr;
132
+ }
133
+
134
+ function _iterableToArrayLimit(r, l) {
135
+ var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
136
+ if (null != t) {
137
+ var e,
138
+ n,
139
+ i,
140
+ u,
141
+ a = [],
142
+ f = !0,
143
+ o = !1;
144
+ try {
145
+ if (i = (t = t.call(r)).next, 0 === l) {
146
+ if (Object(t) !== t) return;
147
+ f = !1;
148
+ } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
149
+ } catch (r) {
150
+ o = !0, n = r;
151
+ } finally {
152
+ try {
153
+ if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;
154
+ } finally {
155
+ if (o) throw n;
156
+ }
157
+ }
158
+ return a;
159
+ }
160
+ }
161
+
162
+ function _arrayLikeToArray(arr, len) {
163
+ if (len == null || len > arr.length) len = arr.length;
164
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
165
+ return arr2;
166
+ }
167
+
168
+ function _unsupportedIterableToArray(o, minLen) {
169
+ if (!o) return;
170
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
171
+ var n = Object.prototype.toString.call(o).slice(8, -1);
172
+ if (n === "Object" && o.constructor) n = o.constructor.name;
173
+ if (n === "Map" || n === "Set") return Array.from(o);
174
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
175
+ }
176
+
177
+ function _nonIterableRest() {
178
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
179
+ }
180
+
181
+ function _slicedToArray(arr, i) {
182
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
183
+ }
184
+
185
+ function _objectWithoutPropertiesLoose(source, excluded) {
186
+ if (source == null) return {};
187
+ var target = {};
188
+ var sourceKeys = Object.keys(source);
189
+ var key, i;
190
+ for (i = 0; i < sourceKeys.length; i++) {
191
+ key = sourceKeys[i];
192
+ if (excluded.indexOf(key) >= 0) continue;
193
+ target[key] = source[key];
194
+ }
195
+ return target;
196
+ }
197
+
198
+ function _objectWithoutProperties(source, excluded) {
199
+ if (source == null) return {};
200
+ var target = _objectWithoutPropertiesLoose(source, excluded);
201
+ var key, i;
202
+ if (Object.getOwnPropertySymbols) {
203
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
204
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
205
+ key = sourceSymbolKeys[i];
206
+ if (excluded.indexOf(key) >= 0) continue;
207
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
208
+ target[key] = source[key];
209
+ }
210
+ }
211
+ return target;
212
+ }
213
+
108
214
  var ACCESS_CONTROL_BASE_PATH = "/secure/api/v1";
109
215
 
216
+ var invitationsPath = "".concat(ACCESS_CONTROL_BASE_PATH, "/configuration/invitations");
217
+ var list = function list(params) {
218
+ return axios__default["default"].get(invitationsPath, {
219
+ params: params
220
+ });
221
+ };
222
+ var bulkCreate = function bulkCreate(_ref) {
223
+ var configurationId = _ref.configurationId,
224
+ payload = _ref.payload;
225
+ return axios__default["default"].post("".concat(invitationsPath, "/bulk_create"), payload, {
226
+ params: {
227
+ neetoAccessControlConfigurationId: configurationId
228
+ }
229
+ });
230
+ };
231
+ var bulkDestroy = function bulkDestroy(_ref2) {
232
+ var configurationId = _ref2.configurationId,
233
+ payload = _ref2.payload;
234
+ return axios__default["default"].post("".concat(invitationsPath, "/bulk_destroy"), payload, {
235
+ params: {
236
+ neetoAccessControlConfigurationId: configurationId
237
+ }
238
+ });
239
+ };
240
+ var invitationsApi = {
241
+ list: list,
242
+ bulkDestroy: bulkDestroy,
243
+ bulkCreate: bulkCreate
244
+ };
245
+
246
+ var QUERY_KEYS = {
247
+ ACCESS_CONTROL_CONFIGURATION: "access-control-configuration",
248
+ ACCESS_CONTROL_CONFIGURATION_INVITATIONS: "access-control-configuration-invitations"
249
+ };
250
+
251
+ var _excluded = ["ownerId", "ownerType"];
252
+ 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; }
253
+ 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; }
254
+ var ACCESS_CONTROL_CONFIGURATION_INVITATIONS$1 = QUERY_KEYS.ACCESS_CONTROL_CONFIGURATION_INVITATIONS;
255
+ var useListInvitations = function useListInvitations(_ref, options) {
256
+ var ownerId = _ref.ownerId,
257
+ ownerType = _ref.ownerType,
258
+ otherParams = _objectWithoutProperties(_ref, _excluded);
259
+ return reactQuery.useQuery(_objectSpread$3({
260
+ queryKey: [ACCESS_CONTROL_CONFIGURATION_INVITATIONS$1, ownerType, ownerId, otherParams],
261
+ queryFn: function queryFn() {
262
+ return invitationsApi.list(otherParams);
263
+ },
264
+ staleTime: constants.DEFAULT_STALE_TIME
265
+ }, options));
266
+ };
267
+ var useBulkCreateInvitations = function useBulkCreateInvitations(_ref2, options) {
268
+ var configurationId = _ref2.configurationId,
269
+ ownerId = _ref2.ownerId,
270
+ ownerType = _ref2.ownerType;
271
+ return reactUtils.useMutationWithInvalidation(function (payload) {
272
+ return invitationsApi.bulkCreate({
273
+ configurationId: configurationId,
274
+ payload: payload
275
+ });
276
+ }, _objectSpread$3({
277
+ keysToInvalidate: [[ACCESS_CONTROL_CONFIGURATION_INVITATIONS$1, ownerType, ownerId]]
278
+ }, options));
279
+ };
280
+ var useBulkDestroyInvitations = function useBulkDestroyInvitations(_ref3, options) {
281
+ var configurationId = _ref3.configurationId,
282
+ ownerId = _ref3.ownerId,
283
+ ownerType = _ref3.ownerType;
284
+ return reactUtils.useMutationWithInvalidation(function (payload) {
285
+ return invitationsApi.bulkDestroy({
286
+ configurationId: configurationId,
287
+ payload: payload
288
+ });
289
+ }, _objectSpread$3({
290
+ keysToInvalidate: [[ACCESS_CONTROL_CONFIGURATION_INVITATIONS$1, ownerType, ownerId]]
291
+ }, options));
292
+ };
293
+
294
+ var TRUNCATE_LENGTH = 45;
295
+ var ADD_EMAILS_FORM_INIT_VALUES = {
296
+ emails: []
297
+ };
298
+
299
+ var AddEmails = function AddEmails(_ref) {
300
+ var isOpen = _ref.isOpen,
301
+ onClose = _ref.onClose,
302
+ configurationId = _ref.configurationId,
303
+ ownerType = _ref.ownerType,
304
+ ownerId = _ref.ownerId;
305
+ var _useTranslation = reactI18next.useTranslation(),
306
+ t = _useTranslation.t;
307
+ var emailsInputRef = react.useRef();
308
+ var _useBulkCreateInvitat = useBulkCreateInvitations({
309
+ configurationId: configurationId,
310
+ ownerType: ownerType,
311
+ ownerId: ownerId
312
+ }),
313
+ addEmails = _useBulkCreateInvitat.mutate;
314
+ var handleAddEmails = function handleAddEmails(_ref2, _ref3) {
315
+ var emails = _ref2.emails;
316
+ var setSubmitting = _ref3.setSubmitting;
317
+ var payload = {
318
+ emails: ramda.pluck("value", emails)
319
+ };
320
+ addEmails(payload, {
321
+ onSuccess: function onSuccess() {
322
+ onClose();
323
+ },
324
+ onError: function onError() {
325
+ return setSubmitting(false);
326
+ }
327
+ });
328
+ };
329
+ return /*#__PURE__*/jsxRuntime.jsxs(Modal__default["default"], {
330
+ isOpen: isOpen,
331
+ onClose: onClose,
332
+ initialFocusRef: emailsInputRef,
333
+ children: [/*#__PURE__*/jsxRuntime.jsx(Modal__default["default"].Header, {
334
+ description: t("neetoAccessControl.addEmails.description"),
335
+ children: /*#__PURE__*/jsxRuntime.jsx(Typography__default["default"], {
336
+ style: "h2",
337
+ children: t("neetoAccessControl.buttons.addEmails")
338
+ })
339
+ }), /*#__PURE__*/jsxRuntime.jsxs(Form__default["default"], {
340
+ formikProps: {
341
+ initialValues: ADD_EMAILS_FORM_INIT_VALUES,
342
+ onSubmit: handleAddEmails
343
+ },
344
+ children: [/*#__PURE__*/jsxRuntime.jsx(Modal__default["default"].Body, {
345
+ children: /*#__PURE__*/jsxRuntime.jsx(MultiEmailInput__default["default"], {
346
+ name: "emails",
347
+ placeholder: t("neetoAccessControl.addEmails.placeholder"),
348
+ ref: emailsInputRef
349
+ })
350
+ }), /*#__PURE__*/jsxRuntime.jsx(Modal__default["default"].Footer, {
351
+ children: /*#__PURE__*/jsxRuntime.jsx(ActionBlock__default["default"], {
352
+ cancelButtonProps: {
353
+ onClick: onClose
354
+ },
355
+ submitButtonProps: {
356
+ label: t("neetoAccessControl.buttons.addEmails")
357
+ }
358
+ })
359
+ })]
360
+ })]
361
+ });
362
+ };
363
+
364
+ var renderColumnData = function renderColumnData(_ref) {
365
+ var onDelete = _ref.onDelete;
366
+ return [{
367
+ title: i18next.t("neetoAccessControl.titles.emails"),
368
+ dataIndex: "email",
369
+ key: "email",
370
+ width: 75,
371
+ render: function render(email, inviteData) {
372
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
373
+ className: "flex items-center justify-between gap-x-3",
374
+ children: [/*#__PURE__*/jsxRuntime.jsx(Tooltip__default["default"], {
375
+ content: email,
376
+ disabled: email.length < TRUNCATE_LENGTH,
377
+ children: /*#__PURE__*/jsxRuntime.jsx(Typography__default["default"], {
378
+ style: "body2",
379
+ children: neetoCist.truncate(email, TRUNCATE_LENGTH)
380
+ })
381
+ }), /*#__PURE__*/jsxRuntime.jsx(MoreDropdown__default["default"], {
382
+ dropdownProps: {
383
+ strategy: "fixed"
384
+ },
385
+ menuItems: [{
386
+ key: "delete",
387
+ label: i18next.t("neetoAccessControl.labels.delete"),
388
+ onClick: function onClick() {
389
+ return onDelete(inviteData);
390
+ }
391
+ }]
392
+ })]
393
+ });
394
+ }
395
+ }, {
396
+ title: i18next.t("neetoAccessControl.titles.status"),
397
+ dataIndex: "status",
398
+ key: "status",
399
+ width: 75,
400
+ render: function render(status) {
401
+ return neetoCist.humanize(status);
402
+ }
403
+ }];
404
+ };
405
+
406
+ var Invitations = function Invitations(_ref) {
407
+ var _selectedEmails$;
408
+ var invitationsTableColumnData = _ref.invitationsTableColumnData,
409
+ configurationId = _ref.configurationId,
410
+ ownerType = _ref.ownerType,
411
+ ownerId = _ref.ownerId,
412
+ isOpen = _ref.isOpen,
413
+ onClose = _ref.onClose;
414
+ var _useState = react.useState([]),
415
+ _useState2 = _slicedToArray(_useState, 2),
416
+ selectedEmails = _useState2[0],
417
+ setSelectedEmails = _useState2[1];
418
+ var _useState3 = react.useState(false),
419
+ _useState4 = _slicedToArray(_useState3, 2),
420
+ showDeleteAlert = _useState4[0],
421
+ setShowDeleteAlert = _useState4[1];
422
+ var _useState5 = react.useState(false),
423
+ _useState6 = _slicedToArray(_useState5, 2),
424
+ showAddEmails = _useState6[0],
425
+ setShowAddEmails = _useState6[1];
426
+ var _useState7 = react.useState(constants.DEFAULT_PAGE_INDEX),
427
+ _useState8 = _slicedToArray(_useState7, 2),
428
+ page = _useState8[0],
429
+ setPage = _useState8[1];
430
+ var _useTranslation = reactI18next.useTranslation(),
431
+ t = _useTranslation.t;
432
+ var _useListInvitations = useListInvitations({
433
+ neetoAccessControlConfigurationId: configurationId,
434
+ ownerType: ownerType,
435
+ ownerId: ownerId,
436
+ page: page,
437
+ pageSize: constants.DEFAULT_PAGE_SIZE
438
+ }, {
439
+ enabled: isOpen
440
+ }),
441
+ _useListInvitations$d = _useListInvitations.data,
442
+ _useListInvitations$d2 = _useListInvitations$d === void 0 ? {} : _useListInvitations$d,
443
+ _useListInvitations$d3 = _useListInvitations$d2.invitations,
444
+ invitations = _useListInvitations$d3 === void 0 ? [] : _useListInvitations$d3,
445
+ _useListInvitations$d4 = _useListInvitations$d2.totalCount,
446
+ totalCount = _useListInvitations$d4 === void 0 ? 0 : _useListInvitations$d4,
447
+ isFetching = _useListInvitations.isFetching,
448
+ isLoading = _useListInvitations.isLoading;
449
+ var _useBulkDestroyInvita = useBulkDestroyInvitations({
450
+ configurationId: configurationId,
451
+ ownerType: ownerType,
452
+ ownerId: ownerId
453
+ }),
454
+ deleteEmailInvites = _useBulkDestroyInvita.mutate,
455
+ isPending = _useBulkDestroyInvita.isPending;
456
+ var handleAddEmails = function handleAddEmails() {
457
+ setShowAddEmails(true);
458
+ };
459
+ var handleOnClose = function handleOnClose() {
460
+ onClose();
461
+ setSelectedEmails([]);
462
+ };
463
+ var handleDeleteEmailInvites = function handleDeleteEmailInvites() {
464
+ var payload = {
465
+ emails: ramda.pluck("email", selectedEmails)
466
+ };
467
+ deleteEmailInvites(payload, {
468
+ onSuccess: function onSuccess() {
469
+ setSelectedEmails([]);
470
+ setShowDeleteAlert(false);
471
+ }
472
+ });
473
+ };
474
+ var handleDeleteAction = function handleDeleteAction(inviteData) {
475
+ setSelectedEmails([inviteData]);
476
+ setShowDeleteAlert(true);
477
+ };
478
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
479
+ children: [/*#__PURE__*/jsxRuntime.jsxs(Pane__default["default"], {
480
+ isOpen: isOpen,
481
+ size: "large",
482
+ onClose: handleOnClose,
483
+ children: [/*#__PURE__*/jsxRuntime.jsx(Pane__default["default"].Header, {
484
+ children: /*#__PURE__*/jsxRuntime.jsx(Typography__default["default"], {
485
+ style: "h2",
486
+ weight: "semibold",
487
+ children: t("neetoAccessControl.titles.invitations")
488
+ })
489
+ }), /*#__PURE__*/jsxRuntime.jsx(Pane__default["default"].Body, {
490
+ className: "pt-2",
491
+ children: neetoCist.isNotEmpty(invitations) ? /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
492
+ children: [/*#__PURE__*/jsxRuntime.jsx(SubHeader__default["default"], {
493
+ leftActionBlock: ramda.isEmpty(selectedEmails) ? /*#__PURE__*/jsxRuntime.jsx(Typography__default["default"], {
494
+ component: "h4",
495
+ style: "h4",
496
+ children: t("neetoAccessControl.titles.emailsWithCount", {
497
+ count: totalCount
498
+ })
499
+ }) : /*#__PURE__*/jsxRuntime.jsxs("div", {
500
+ className: "flex items-center gap-4",
501
+ children: [/*#__PURE__*/jsxRuntime.jsx(Typography__default["default"], {
502
+ style: "h4",
503
+ children: t("neetoAccessControl.titles.selectedEmailsWithCount", {
504
+ count: selectedEmails.length,
505
+ totalCount: totalCount
506
+ })
507
+ }), /*#__PURE__*/jsxRuntime.jsx(Button__default["default"], {
508
+ icon: Delete__default["default"],
509
+ style: "secondary",
510
+ tooltipProps: {
511
+ content: t("neetoAccessControl.labels.delete")
512
+ },
513
+ onClick: function onClick() {
514
+ return setShowDeleteAlert(true);
515
+ }
516
+ })]
517
+ }),
518
+ rightActionBlock: /*#__PURE__*/jsxRuntime.jsx(Button__default["default"], {
519
+ label: t("neetoAccessControl.buttons.addEmails"),
520
+ onClick: handleAddEmails
521
+ })
522
+ }), /*#__PURE__*/jsxRuntime.jsx(TableWrapper__default["default"], {
523
+ hasPagination: totalCount > constants.DEFAULT_PAGE_SIZE,
524
+ children: /*#__PURE__*/jsxRuntime.jsx(Table__default["default"], {
525
+ totalCount: totalCount,
526
+ fixedHeight: true,
527
+ rowSelection: true,
528
+ currentPageNumber: page,
529
+ handlePageChange: setPage,
530
+ loading: isFetching,
531
+ rowData: invitations,
532
+ selectedRowKeys: ramda.pluck("id", selectedEmails),
533
+ columnData: invitationsTableColumnData !== null && invitationsTableColumnData !== void 0 ? invitationsTableColumnData : renderColumnData({
534
+ onDelete: handleDeleteAction
535
+ }),
536
+ onRowSelect: function onRowSelect(_, selectedRows) {
537
+ return setSelectedEmails(selectedRows);
538
+ }
539
+ })
540
+ })]
541
+ }) : /*#__PURE__*/jsxRuntime.jsxs("div", {
542
+ className: "flex h-full w-full justify-center",
543
+ children: [!isLoading && /*#__PURE__*/jsxRuntime.jsx(NoData__default["default"], {
544
+ title: t("neetoAccessControl.labels.noInvitations"),
545
+ primaryButtonProps: {
546
+ label: t("neetoAccessControl.buttons.addEmails"),
547
+ onClick: handleAddEmails
548
+ }
549
+ }), isLoading && /*#__PURE__*/jsxRuntime.jsx(PageLoader__default["default"], {})]
550
+ })
551
+ })]
552
+ }), /*#__PURE__*/jsxRuntime.jsx(AddEmails, {
553
+ configurationId: configurationId,
554
+ ownerId: ownerId,
555
+ ownerType: ownerType,
556
+ isOpen: showAddEmails,
557
+ onClose: function onClose() {
558
+ return setShowAddEmails(false);
559
+ }
560
+ }), /*#__PURE__*/jsxRuntime.jsx(Alert__default["default"], {
561
+ isOpen: showDeleteAlert,
562
+ isSubmitting: isPending,
563
+ submitButtonLabel: t("neetoAccessControl.labels.delete"),
564
+ message: /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
565
+ components: [{
566
+ strong: /*#__PURE__*/jsxRuntime.jsx("strong", {})
567
+ }],
568
+ i18nKey: "neetoAccessControl.alerts.deleteInviation.message",
569
+ values: {
570
+ count: selectedEmails.length,
571
+ email: (_selectedEmails$ = selectedEmails[0]) === null || _selectedEmails$ === void 0 ? void 0 : _selectedEmails$.email
572
+ }
573
+ }),
574
+ title: t("neetoAccessControl.alerts.deleteInviation.title", {
575
+ count: selectedEmails.length
576
+ }),
577
+ onClose: function onClose() {
578
+ return setShowDeleteAlert(false);
579
+ },
580
+ onSubmit: handleDeleteEmailInvites
581
+ })]
582
+ });
583
+ };
584
+
110
585
  var configurationPath = "".concat(ACCESS_CONTROL_BASE_PATH, "/configuration");
111
586
  var show = function show(params) {
112
587
  return axios__default["default"].get(configurationPath, {
@@ -131,13 +606,10 @@ var configurationsApi = {
131
606
  update: update
132
607
  };
133
608
 
134
- var QUERY_KEYS = {
135
- ACCESS_CONTROL_CONFIGURATION: "access-control-configuration"
136
- };
137
-
138
609
  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; }
139
610
  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; }
140
- var ACCESS_CONTROL_CONFIGURATION = QUERY_KEYS.ACCESS_CONTROL_CONFIGURATION;
611
+ var ACCESS_CONTROL_CONFIGURATION = QUERY_KEYS.ACCESS_CONTROL_CONFIGURATION,
612
+ ACCESS_CONTROL_CONFIGURATION_INVITATIONS = QUERY_KEYS.ACCESS_CONTROL_CONFIGURATION_INVITATIONS;
141
613
  var useShowConfiguration = function useShowConfiguration(_ref) {
142
614
  var ownerId = _ref.ownerId,
143
615
  ownerType = _ref.ownerType;
@@ -163,7 +635,7 @@ var useUpdateConfiguration = function useUpdateConfiguration(_ref2, options) {
163
635
  payload: payload
164
636
  });
165
637
  }, _objectSpread$2({
166
- keysToInvalidate: [[ACCESS_CONTROL_CONFIGURATION, ownerType, ownerId]]
638
+ keysToInvalidate: [[ACCESS_CONTROL_CONFIGURATION, ownerType, ownerId], [ACCESS_CONTROL_CONFIGURATION_INVITATIONS, ownerType, ownerId]]
167
639
  }, options));
168
640
  };
169
641
 
@@ -171,7 +643,8 @@ var AUTH = {
171
643
  NO: "no",
172
644
  EMAIL: "email",
173
645
  BASIC: "basic",
174
- SESSION: "session"
646
+ SESSION: "session",
647
+ INVITED: "invited"
175
648
  };
176
649
  var AUTH_OPTIONS = [{
177
650
  label: i18next.t("neetoAccessControl.auth.no"),
@@ -181,6 +654,9 @@ var AUTH_OPTIONS = [{
181
654
  label: i18next.t("neetoAccessControl.auth.basic"),
182
655
  value: AUTH.BASIC,
183
656
  "data-cy": neetoCist.hyphenate(i18next.t("neetoAccessControl.auth.basic"))
657
+ }, {
658
+ label: i18next.t("neetoAccessControl.auth.invited"),
659
+ value: AUTH.INVITED
184
660
  }, {
185
661
  label: i18next.t("neetoAccessControl.auth.email"),
186
662
  value: AUTH.EMAIL,
@@ -240,6 +716,20 @@ var buildPayload = function buildPayload(values) {
240
716
  }
241
717
  return payload;
242
718
  };
719
+ var renderLabelWithViewInvitation = function renderLabelWithViewInvitation(_ref2) {
720
+ var onViewInvites = _ref2.onViewInvites;
721
+ return /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
722
+ i18nKey: "neetoAccessControl.auth.invitedWithViewButton",
723
+ components: {
724
+ button: /*#__PURE__*/jsxRuntime.jsx(Button__default["default"], {
725
+ className: "mt-1",
726
+ size: "small",
727
+ style: "link",
728
+ onClick: onViewInvites
729
+ })
730
+ }
731
+ });
732
+ };
243
733
 
244
734
  var AllowedKeywords = reactUtils.withT(function (_ref) {
245
735
  var t = _ref.t,
@@ -319,11 +809,19 @@ var Configuration = function Configuration(_ref) {
319
809
  var ownerId = _ref.ownerId,
320
810
  ownerType = _ref.ownerType,
321
811
  onReset = _ref.onReset,
322
- onSuccess = _ref.onSuccess,
812
+ _onSuccess = _ref.onSuccess,
323
813
  headerProps = _ref.headerProps,
324
814
  className = _ref.className,
325
815
  _ref$handleCancel = _ref.handleCancel,
326
- handleCancel = _ref$handleCancel === void 0 ? neetoCist.noop : _ref$handleCancel;
816
+ handleCancel = _ref$handleCancel === void 0 ? neetoCist.noop : _ref$handleCancel,
817
+ _ref$onConfigurationC = _ref.onConfigurationChangedToInviteOnly,
818
+ onConfigurationChangedToInviteOnly = _ref$onConfigurationC === void 0 ? neetoCist.noop : _ref$onConfigurationC,
819
+ _ref$invitationsTable = _ref.invitationsTableColumnData,
820
+ invitationsTableColumnData = _ref$invitationsTable === void 0 ? null : _ref$invitationsTable;
821
+ var _useState = react.useState(false),
822
+ _useState2 = _slicedToArray(_useState, 2),
823
+ showInviationsPane = _useState2[0],
824
+ setShowInviationsPane = _useState2[1];
327
825
  var _useTranslation = reactI18next.useTranslation(),
328
826
  t = _useTranslation.t;
329
827
  var _useShowConfiguration = useShowConfiguration({
@@ -332,13 +830,22 @@ var Configuration = function Configuration(_ref) {
332
830
  }),
333
831
  _useShowConfiguration2 = _useShowConfiguration.data,
334
832
  configuration = _useShowConfiguration2 === void 0 ? {} : _useShowConfiguration2,
335
- isLoading = _useShowConfiguration.isLoading;
833
+ isLoading = _useShowConfiguration.isLoading,
834
+ isFetching = _useShowConfiguration.isFetching;
336
835
  var configurationInitialValues = buildConfigurationInitialValues(configuration);
337
836
  var _useUpdateConfigurati = useUpdateConfiguration({
338
837
  ownerId: ownerId,
339
838
  ownerType: ownerType
340
839
  }, {
341
- onSuccess: onSuccess
840
+ onSuccess: function onSuccess(values) {
841
+ var _values$configuration = values.configuration,
842
+ _values$configuration2 = _values$configuration === void 0 ? {} : _values$configuration,
843
+ auth = _values$configuration2.auth;
844
+ if (auth === AUTH.INVITED) {
845
+ handleShowInvitations();
846
+ }
847
+ _onSuccess(values);
848
+ }
342
849
  }),
343
850
  updateConfiguration = _useUpdateConfigurati.mutate;
344
851
  var handleSubmit = function handleSubmit(values, _ref2) {
@@ -350,12 +857,15 @@ var Configuration = function Configuration(_ref) {
350
857
  }
351
858
  });
352
859
  };
860
+ var handleShowInvitations = onConfigurationChangedToInviteOnly === neetoCist.noop ? function () {
861
+ return setShowInviationsPane(true);
862
+ } : onConfigurationChangedToInviteOnly;
353
863
  return /*#__PURE__*/jsxRuntime.jsxs(Container__default["default"], {
354
864
  children: [/*#__PURE__*/jsxRuntime.jsx(Header, {
355
865
  headerProps: headerProps
356
- }), isLoading ? /*#__PURE__*/jsxRuntime.jsx(PageLoader__default["default"], {}) : /*#__PURE__*/jsxRuntime.jsx(Scrollable__default["default"], {
866
+ }), isLoading ? /*#__PURE__*/jsxRuntime.jsx(PageLoader__default["default"], {}) : /*#__PURE__*/jsxRuntime.jsxs(Scrollable__default["default"], {
357
867
  className: "w-full",
358
- children: /*#__PURE__*/jsxRuntime.jsx(Form__default["default"], {
868
+ children: [/*#__PURE__*/jsxRuntime.jsx(Form__default["default"], {
359
869
  className: classNames__default["default"]("space-y-6", className),
360
870
  formikProps: {
361
871
  initialValues: configurationInitialValues,
@@ -375,7 +885,20 @@ var Configuration = function Configuration(_ref) {
375
885
  name: "auth",
376
886
  children: AUTH_OPTIONS.map(function (props) {
377
887
  return /*#__PURE__*/react.createElement(Radio__default["default"].Item, _objectSpread(_objectSpread({}, props), {}, {
378
- key: props.value
888
+ key: props.value,
889
+ className: classNames__default["default"]({
890
+ "items-start": (configuration === null || configuration === void 0 ? void 0 : configuration.auth) === props.value && (configuration === null || configuration === void 0 ? void 0 : configuration.auth) === AUTH.INVITED
891
+ }),
892
+ label: (configuration === null || configuration === void 0 ? void 0 : configuration.auth) === props.value && (configuration === null || configuration === void 0 ? void 0 : configuration.auth) === AUTH.INVITED ? renderLabelWithViewInvitation({
893
+ onViewInvites: function onViewInvites() {
894
+ return setShowInviationsPane(true);
895
+ }
896
+ }) : props.label,
897
+ labelProps: {
898
+ className: classNames__default["default"]({
899
+ "flex flex-col items-start justify-start": (configuration === null || configuration === void 0 ? void 0 : configuration.auth) === props.value && (configuration === null || configuration === void 0 ? void 0 : configuration.auth) === AUTH.INVITED
900
+ })
901
+ }
379
902
  }));
380
903
  })
381
904
  }), values.auth === AUTH.BASIC && /*#__PURE__*/jsxRuntime.jsx("div", {
@@ -395,11 +918,23 @@ var Configuration = function Configuration(_ref) {
395
918
  }), /*#__PURE__*/jsxRuntime.jsx(ActionBlock__default["default"], {
396
919
  cancelButtonProps: {
397
920
  onClick: handleCancel
398
- }
921
+ },
922
+ submitButtonProps: values.auth === AUTH.INVITED ? {
923
+ label: t("neetoAccessControl.buttons.saveChangesAndInvite")
924
+ } : {}
399
925
  })]
400
926
  });
401
927
  }
402
- })
928
+ }), /*#__PURE__*/jsxRuntime.jsx(Invitations, {
929
+ invitationsTableColumnData: invitationsTableColumnData,
930
+ ownerId: ownerId,
931
+ ownerType: ownerType,
932
+ configurationId: configuration.id,
933
+ isOpen: showInviationsPane && !isFetching,
934
+ onClose: function onClose() {
935
+ return setShowInviationsPane(false);
936
+ }
937
+ })]
403
938
  })]
404
939
  });
405
940
  };