@rh-support/manage 2.5.281 → 2.6.10

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.
Files changed (58) hide show
  1. package/lib/esm/ManageTabs.d.ts.map +1 -1
  2. package/lib/esm/ManageTabs.js +46 -18
  3. package/lib/esm/Routes.d.ts +1 -0
  4. package/lib/esm/Routes.d.ts.map +1 -1
  5. package/lib/esm/Routes.js +6 -0
  6. package/lib/esm/components/Groups/AddMembersModal/AddMembersModal.d.ts +12 -0
  7. package/lib/esm/components/Groups/AddMembersModal/AddMembersModal.d.ts.map +1 -0
  8. package/lib/esm/components/Groups/AddMembersModal/AddMembersModal.js +80 -0
  9. package/lib/esm/components/Groups/AddMembersModal/index.d.ts +2 -0
  10. package/lib/esm/components/Groups/AddMembersModal/index.d.ts.map +1 -0
  11. package/lib/esm/components/Groups/AddMembersModal/index.js +1 -0
  12. package/lib/esm/components/Groups/DefualtGroupSwitch/DefaultGroupSwitch.d.ts +5 -3
  13. package/lib/esm/components/Groups/DefualtGroupSwitch/DefaultGroupSwitch.d.ts.map +1 -1
  14. package/lib/esm/components/Groups/DefualtGroupSwitch/DefaultGroupSwitch.js +21 -14
  15. package/lib/esm/components/Groups/GroupSelect/GroupSelect.d.ts +1 -0
  16. package/lib/esm/components/Groups/GroupSelect/GroupSelect.d.ts.map +1 -1
  17. package/lib/esm/components/Groups/GroupSelect/GroupSelect.js +169 -85
  18. package/lib/esm/components/Groups/ManageGroupUsers/ManageGroupUsers.d.ts.map +1 -1
  19. package/lib/esm/components/Groups/ManageGroupUsers/ManageGroupUsers.js +182 -42
  20. package/lib/esm/components/ManageCaseLabels/AddEditCaseLabelModal.d.ts +19 -0
  21. package/lib/esm/components/ManageCaseLabels/AddEditCaseLabelModal.d.ts.map +1 -0
  22. package/lib/esm/components/ManageCaseLabels/AddEditCaseLabelModal.js +97 -0
  23. package/lib/esm/components/ManageCaseLabels/ManageCaseLabelsTab.d.ts +3 -0
  24. package/lib/esm/components/ManageCaseLabels/ManageCaseLabelsTab.d.ts.map +1 -0
  25. package/lib/esm/components/ManageCaseLabels/ManageCaseLabelsTab.js +220 -0
  26. package/lib/esm/components/ManageCaseLabels/index.d.ts +2 -0
  27. package/lib/esm/components/ManageCaseLabels/index.d.ts.map +1 -0
  28. package/lib/esm/components/ManageCaseLabels/index.js +1 -0
  29. package/lib/esm/components/ManageCaseLabels/types.d.ts +6 -0
  30. package/lib/esm/components/ManageCaseLabels/types.d.ts.map +1 -0
  31. package/lib/esm/components/ManageCaseLabels/types.js +1 -0
  32. package/lib/esm/components/ManagePreferences/PreferencesBody.d.ts.map +1 -1
  33. package/lib/esm/components/ManagePreferences/PreferencesBody.js +1 -5
  34. package/lib/esm/components/ManagePreferences/sections/PreferencesACL.d.ts.map +1 -1
  35. package/lib/esm/components/ManagePreferences/sections/PreferencesACL.js +3 -4
  36. package/lib/esm/components/ManagePreferences/sections/PreferencesCaseCreate.d.ts.map +1 -1
  37. package/lib/esm/components/ManagePreferences/sections/PreferencesCaseCreate.js +73 -58
  38. package/lib/esm/components/ManagePreferences/sections/PreferencesCaseView.d.ts.map +1 -1
  39. package/lib/esm/components/ManagePreferences/sections/PreferencesCaseView.js +43 -98
  40. package/lib/esm/constants/GroupSelectActions.d.ts +2 -1
  41. package/lib/esm/constants/GroupSelectActions.d.ts.map +1 -1
  42. package/lib/esm/constants/GroupSelectActions.js +1 -0
  43. package/lib/esm/hooks/useCaseGroupGraphQL.d.ts +42 -0
  44. package/lib/esm/hooks/useCaseGroupGraphQL.d.ts.map +1 -0
  45. package/lib/esm/hooks/useCaseGroupGraphQL.js +117 -0
  46. package/lib/esm/hooks/useCaseLabelGraphQL.d.ts +26 -0
  47. package/lib/esm/hooks/useCaseLabelGraphQL.d.ts.map +1 -0
  48. package/lib/esm/hooks/useCaseLabelGraphQL.js +104 -0
  49. package/lib/esm/hooks/useCurrentUserContact.d.ts +8 -0
  50. package/lib/esm/hooks/useCurrentUserContact.d.ts.map +1 -0
  51. package/lib/esm/hooks/useCurrentUserContact.js +74 -0
  52. package/lib/esm/hooks/useVersionsDiffer.d.ts.map +1 -1
  53. package/lib/esm/index.js +1 -0
  54. package/lib/esm/scss/_main.scss +77 -0
  55. package/lib/esm/utils/caseGroupMapper.d.ts +18 -0
  56. package/lib/esm/utils/caseGroupMapper.d.ts.map +1 -0
  57. package/lib/esm/utils/caseGroupMapper.js +50 -0
  58. package/package.json +9 -6
@@ -1 +1 @@
1
- {"version":3,"file":"ManageTabs.d.ts","sourceRoot":"","sources":["../../src/ManageTabs.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,mBAAmB,EAAa,MAAM,kBAAkB,CAAC;AAclE,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,qBAyMvC"}
1
+ {"version":3,"file":"ManageTabs.d.ts","sourceRoot":"","sources":["../../src/ManageTabs.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,mBAAmB,EAAa,MAAM,kBAAkB,CAAC;AAiBlE,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,qBAgOvC"}
@@ -1,6 +1,6 @@
1
1
  import { Tab, TabContent, Tabs, TabsComponent, TabTitleText } from '@patternfly/react-core';
2
- import { ErrorBoundary, useDocumentTitle } from '@rh-support/components';
3
- import { ability, CaseDetailsFields, resourceActions, resources } from '@rh-support/user-permissions';
2
+ import { ErrorBoundary, LoadingIndicator, useDocumentTitle } from '@rh-support/components';
3
+ import { ability, resourceActions, resources } from '@rh-support/user-permissions';
4
4
  import map from 'lodash/map';
5
5
  import React, { useState } from 'react';
6
6
  import { Trans, useTranslation } from 'react-i18next';
@@ -8,29 +8,46 @@ import { useParams } from 'react-router-dom';
8
8
  import { ConfigsTable } from './components/Configs/ConfigsTable';
9
9
  import { ManageGroupUsers } from './components/Groups/ManageGroupUsers';
10
10
  import { ManageGroupedBookmarkedAccountsTab } from './components/ManageBookmarkedAccountsTab';
11
+ import { ManageCaseLabelsTab } from './components/ManageCaseLabels';
11
12
  import { ExpiredContentManagement } from './components/ManageExpiredContents/ExpiredContentManagement';
12
- import { ManagePartnerships } from './components/ManagePartnerships/index';
13
+ // TODO: Uncomment when partnerships tab is re-implemented
14
+ // import { ManagePartnerships } from './components/ManagePartnerships/index';
13
15
  import { ManagePreferences } from './components/ManagePreferences';
14
16
  import { TagsManagement } from './components/ManageTags';
15
- import { NotificationEmails } from './components/NotificationEmails/index';
17
+ // import { NotificationEmails } from './components/NotificationEmails/index';
16
18
  import { TopContentManagement } from './components/TopContentManagement';
17
19
  import { PageTitle } from './constants/pageTitle';
20
+ import { useCurrentUserContact } from './hooks/useCurrentUserContact';
18
21
  import { Routes } from './Routes';
19
22
  export function ManageTabs(props) {
20
23
  var _a, _b;
21
24
  const [activeTabKey, setActiveTabKey] = useState(0);
22
25
  const { activeTab } = useParams();
23
26
  const { t } = useTranslation();
24
- const { groupsRoute, bookmarkedAccountsRoute, topContentRoute, notificationEmailsRoute, preferencesRoute, configsRoute, partnershipsRoute, tagsManagerRoute, expiredContentRoute, } = Routes.getPaths();
27
+ const { loading: contactLoading } = useCurrentUserContact();
28
+ const { groupsRoute, bookmarkedAccountsRoute, caseLabelsRoute, topContentRoute,
29
+ // notificationEmailsRoute,
30
+ preferencesRoute, configsRoute,
31
+ // partnershipsRoute, // TODO: Uncomment when partnerships tab is re-implemented
32
+ tagsManagerRoute, expiredContentRoute, } = Routes.getPaths();
25
33
  useDocumentTitle(PageTitle.MANAGE);
26
34
  const canViewManageTab = ability.can(resourceActions.READ, resources.MANAGE);
27
35
  const canViewManageTopContent = ability.can(resourceActions.READ, resources.TOP_CONTENT) && canViewManageTab;
28
36
  const canViewCaseGroups = ability.can(resourceActions.READ, resources.CASE_GROUPS) && canViewManageTab;
29
37
  const canManageBookmarkAccounts = ability.can(resourceActions.CREATE, resources.BOOKMARK_ACCOUNTS) && canViewManageTab;
30
- const canViewEmailNotificationTab = ability.can(resourceActions.READ, resources.NOTIFICATION_EMAIL);
31
- const canViewPartnershipsTab = ability.can(resourceActions.READ, resources.PARTNERSHIPS);
32
- const canAddCustomNotification = ability.can(resourceActions.PATCH, resources.CASE_DETAILS, CaseDetailsFields.CASE_DETAILS_SEND_NOTIFICATIONS);
38
+ // const canViewEmailNotificationTab = ability.can(resourceActions.READ, resources.NOTIFICATION_EMAIL);
39
+ // TODO: Uncomment when partnerships tab is re-implemented
40
+ // const canViewPartnershipsTab = ability.can(resourceActions.READ, resources.PARTNERSHIPS);
41
+ // const canAddCustomNotification = ability.can(
42
+ // resourceActions.PATCH,
43
+ // resources.CASE_DETAILS,
44
+ // CaseDetailsFields.CASE_DETAILS_SEND_NOTIFICATIONS
45
+ // );
33
46
  const canViewConfigsTab = ability.can(resourceActions.READ, resources.APP_INTERNAL_CONFIGS);
47
+ if (contactLoading) {
48
+ return (React.createElement("div", { className: "grid-main manage" },
49
+ React.createElement(LoadingIndicator, { show: true, size: "sm" })));
50
+ }
34
51
  const tabsToRender = [];
35
52
  canManageBookmarkAccounts &&
36
53
  tabsToRender.push({
@@ -50,6 +67,15 @@ export function ManageTabs(props) {
50
67
  component: React.createElement(ManageGroupUsers, null),
51
68
  id: 'manage-groups',
52
69
  });
70
+ tabsToRender.push({
71
+ title: 'Case labels',
72
+ key: 'case-labels-tab',
73
+ 'data-tracking-id': 'manage-case-labels-tab',
74
+ routePath: caseLabelsRoute,
75
+ component: React.createElement(ManageCaseLabelsTab, null),
76
+ id: 'manage-case-labels',
77
+ });
78
+ /* TODO: Re-enable notification emails tab when ready
53
79
  canViewEmailNotificationTab &&
54
80
  canAddCustomNotification &&
55
81
  tabsToRender.push({
@@ -57,18 +83,20 @@ export function ManageTabs(props) {
57
83
  key: 'notification-emails-tab',
58
84
  'data-tracking-id': 'notification-emails-tab',
59
85
  routePath: notificationEmailsRoute,
60
- component: React.createElement(NotificationEmails, null),
86
+ component: <NotificationEmails />,
61
87
  id: 'notification-emails',
62
88
  });
63
- canViewPartnershipsTab &&
64
- tabsToRender.push({
65
- title: 'Partnerships',
66
- key: 'partnerships-tab',
67
- 'data-tracking-id': 'partnerships-tab',
68
- routePath: partnershipsRoute,
69
- component: React.createElement(ManagePartnerships, null),
70
- id: 'partnerships',
71
- });
89
+ */
90
+ // TODO: Uncomment when partnerships tab is re-implemented
91
+ // canViewPartnershipsTab &&
92
+ // tabsToRender.push({
93
+ // title: 'Partnerships',
94
+ // key: 'partnerships-tab',
95
+ // 'data-tracking-id': 'partnerships-tab',
96
+ // routePath: partnershipsRoute,
97
+ // component: <ManagePartnerships />,
98
+ // id: 'partnerships',
99
+ // });
72
100
  tabsToRender.push({
73
101
  title: 'Preferences',
74
102
  key: 'preferences-tab',
@@ -11,6 +11,7 @@ interface ManageRoutes {
11
11
  };
12
12
  getPathsArray: () => string[];
13
13
  groups: Route;
14
+ caseLabels: Route;
14
15
  savedSearches: Route;
15
16
  topContent: Route;
16
17
  expiredContent: Route;
@@ -1 +1 @@
1
- {"version":3,"file":"Routes.d.ts","sourceRoot":"","sources":["../../src/Routes.ts"],"names":[],"mappings":"AAAA,UAAU,KAAK;IACX,QAAQ,CAAC,OAAO,EAAE,MAAM,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,YAAY;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,KAAK,CAAC;IAC1B,eAAe,EAAE,KAAK,CAAC;IACvB,QAAQ,EAAE,MAAM;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC1C,aAAa,EAAE,MAAM,MAAM,EAAE,CAAC;IAC9B,MAAM,EAAE,KAAK,CAAC;IACd,aAAa,EAAE,KAAK,CAAC;IACrB,UAAU,EAAE,KAAK,CAAC;IAClB,cAAc,EAAE,KAAK,CAAC;IACtB,WAAW,EAAE,KAAK,CAAC;IACnB,WAAW,EAAE,KAAK,CAAC;IACnB,kBAAkB,EAAE,KAAK,CAAC;IAC1B,OAAO,EAAE,KAAK,CAAC;IACf,YAAY,EAAE,KAAK,CAAC;CACvB;AAED,eAAO,MAAM,MAAM,EAAE,YAqFpB,CAAC"}
1
+ {"version":3,"file":"Routes.d.ts","sourceRoot":"","sources":["../../src/Routes.ts"],"names":[],"mappings":"AAAA,UAAU,KAAK;IACX,QAAQ,CAAC,OAAO,EAAE,MAAM,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,YAAY;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,KAAK,CAAC;IAC1B,eAAe,EAAE,KAAK,CAAC;IACvB,QAAQ,EAAE,MAAM;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC1C,aAAa,EAAE,MAAM,MAAM,EAAE,CAAC;IAC9B,MAAM,EAAE,KAAK,CAAC;IACd,UAAU,EAAE,KAAK,CAAC;IAClB,aAAa,EAAE,KAAK,CAAC;IACrB,UAAU,EAAE,KAAK,CAAC;IAClB,cAAc,EAAE,KAAK,CAAC;IACtB,WAAW,EAAE,KAAK,CAAC;IACnB,WAAW,EAAE,KAAK,CAAC;IACnB,kBAAkB,EAAE,KAAK,CAAC;IAC1B,OAAO,EAAE,KAAK,CAAC;IACf,YAAY,EAAE,KAAK,CAAC;CACvB;AAED,eAAO,MAAM,MAAM,EAAE,YA2FpB,CAAC"}
package/lib/esm/Routes.js CHANGED
@@ -12,6 +12,12 @@ export const Routes = {
12
12
  return getPath(this);
13
13
  },
14
14
  },
15
+ caseLabels: {
16
+ path: 'case-labels',
17
+ getPath() {
18
+ return getPath(this);
19
+ },
20
+ },
15
21
  fileDiagnostics: {
16
22
  path: 'file-diagnostics',
17
23
  getPath() {
@@ -0,0 +1,12 @@
1
+ import { ICaseGroup } from '@cee-eng/hydrajs/@types/api/public/caseGroups';
2
+ import React from 'react';
3
+ import type { IGroupUserWithContactId } from '../../../utils/caseGroupMapper';
4
+ interface IProps {
5
+ readonly group: ICaseGroup;
6
+ readonly existingMembers: IGroupUserWithContactId[];
7
+ readonly onSuccess: () => void;
8
+ readonly onClose: () => void;
9
+ }
10
+ export declare function AddMembersModal({ group, existingMembers, onSuccess, onClose }: IProps): React.JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=AddMembersModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddMembersModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/Groups/AddMembersModal/AddMembersModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;AAM3E,OAAO,KAAgC,MAAM,OAAO,CAAC;AAIrD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE9E,UAAU,MAAM;IACZ,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,uBAAuB,EAAE,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,MAAM,qBAyGrF"}
@@ -0,0 +1,80 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { Button, Modal, ModalBody, ModalFooter, ModalHeader, ModalVariant } from '@patternfly/react-core';
11
+ import { CaseContactsSelectorExternal, ToastNotification } from '@rh-support/components';
12
+ import { useGlobalStateContext } from '@rh-support/react-context';
13
+ import React, { useCallback, useState } from 'react';
14
+ import { useTranslation } from 'react-i18next';
15
+ import { useCreateCaseGroupMember } from '../../../hooks/useCaseGroupGraphQL';
16
+ export function AddMembersModal({ group, existingMembers, onSuccess, onClose }) {
17
+ var _a, _b;
18
+ const { t } = useTranslation();
19
+ const { globalMetadataState: { loggedInUserRights, loggedInUsersAccount }, } = useGlobalStateContext();
20
+ const { createMember, loading: createLoading } = useCreateCaseGroupMember();
21
+ const [selectedContacts, setSelectedContacts] = useState([]);
22
+ const [isSubmitting, setIsSubmitting] = useState(false);
23
+ const accountNumber = (_b = (_a = loggedInUsersAccount === null || loggedInUsersAccount === void 0 ? void 0 : loggedInUsersAccount.data) === null || _a === void 0 ? void 0 : _a.accountNumber) !== null && _b !== void 0 ? _b : '';
24
+ const contactSsoUsername = '';
25
+ const contactsToExclude = existingMembers.map((m) => ({
26
+ ssoUsername: m.ssoUsername,
27
+ firstName: m.firstName,
28
+ lastName: m.lastName,
29
+ }));
30
+ const onChange = useCallback((contacts) => {
31
+ if (!(contacts === null || contacts === void 0 ? void 0 : contacts.length))
32
+ return;
33
+ const contact = contacts[0];
34
+ if (!('ssoUsername' in contact))
35
+ return;
36
+ setSelectedContacts((prev) => {
37
+ const exists = prev.some((c) => c.ssoUsername === contact.ssoUsername);
38
+ return exists ? prev.filter((c) => c.ssoUsername !== contact.ssoUsername) : [...prev, contact];
39
+ });
40
+ }, []);
41
+ const onSubmit = () => __awaiter(this, void 0, void 0, function* () {
42
+ const validContacts = selectedContacts.filter((contact) => contact.id);
43
+ if (validContacts.length === 0)
44
+ return;
45
+ setIsSubmitting(true);
46
+ try {
47
+ const results = yield Promise.allSettled(validContacts.map((contact) => createMember(contact.id, group.groupNum)));
48
+ const succeeded = results.filter((r) => r.status === 'fulfilled');
49
+ const failed = results.filter((r) => r.status === 'rejected');
50
+ if (succeeded.length > 0) {
51
+ ToastNotification.addSuccessMessage(t('{{count}} people have been successfully added.', { count: succeeded.length }));
52
+ onSuccess();
53
+ }
54
+ if (failed.length > 0) {
55
+ const firstError = failed[0].reason;
56
+ const message = String((firstError === null || firstError === void 0 ? void 0 : firstError.message) || '');
57
+ if (message.includes('Organization Administrator')) {
58
+ ToastNotification.addDangerMessage(t('Organization Administrators cannot be added as case group members'));
59
+ }
60
+ else if (message.includes('insufficient access rights')) {
61
+ ToastNotification.addDangerMessage(t('You do not have permission to add members to this group'));
62
+ }
63
+ else {
64
+ ToastNotification.addDangerMessage(t('There was an error adding members to this group. Please try again or refresh'));
65
+ }
66
+ }
67
+ onClose();
68
+ }
69
+ finally {
70
+ setIsSubmitting(false);
71
+ }
72
+ });
73
+ return (React.createElement(Modal, { variant: ModalVariant.medium, isOpen: true, onClose: onClose, "aria-label": t('Add members to group') },
74
+ React.createElement(ModalHeader, { title: t('Add members to {{groupName}}', { groupName: group.name }) }),
75
+ React.createElement(ModalBody, null,
76
+ React.createElement(CaseContactsSelectorExternal, { id: "add-members-contact-select", selectedAccountNumber: accountNumber, loggedInUserRights: loggedInUserRights.data, contactSsoUsername: contactSsoUsername, contactsToExclude: [...contactsToExclude, ...selectedContacts], contactFilter: (contact) => !contact.isOrgAdmin, selected: selectedContacts, onChange: onChange, onContactEnriched: () => { }, multiple: true, clearButton: true, isDisabled: isSubmitting, placeholder: t('Search by name or SSO username') })),
77
+ React.createElement(ModalFooter, null,
78
+ React.createElement(Button, { key: "confirm", variant: "primary", onClick: onSubmit, isDisabled: selectedContacts.length === 0 || isSubmitting || createLoading, isLoading: isSubmitting, spinnerAriaValueText: isSubmitting ? t('Adding members') : undefined }, t('Add')),
79
+ React.createElement(Button, { key: "cancel", variant: "link", onClick: onClose, isDisabled: isSubmitting }, t('Cancel')))));
80
+ }
@@ -0,0 +1,2 @@
1
+ export * from './AddMembersModal';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/Groups/AddMembersModal/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1 @@
1
+ export * from './AddMembersModal';
@@ -1,10 +1,12 @@
1
- import { ICaseGroup, IGroupUser } from '@cee-eng/hydrajs/@types/api/public/caseGroups';
1
+ import { ICaseGroup } from '@cee-eng/hydrajs/@types/api/public/caseGroups';
2
2
  import React from 'react';
3
+ import type { IGroupUserWithContactId } from '../../../utils/caseGroupMapper';
3
4
  interface IProps {
4
5
  group: ICaseGroup;
5
- user: IGroupUser;
6
+ user: IGroupUserWithContactId;
6
7
  id: string;
7
- onToggle: (user: IGroupUser, isChecked: boolean) => void;
8
+ onToggle: (user: IGroupUserWithContactId, isChecked: boolean) => void;
9
+ onToggleSuccess?: (user: IGroupUserWithContactId, isChecked: boolean) => void;
8
10
  }
9
11
  export declare const DefaultGroupSwitch: (props: IProps) => React.JSX.Element;
10
12
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultGroupSwitch.d.ts","sourceRoot":"","sources":["../../../../../src/components/Groups/DefualtGroupSwitch/DefaultGroupSwitch.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;AAIvF,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,UAAU,MAAM;IACZ,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5D;AAED,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,sBA+C/C,CAAC"}
1
+ {"version":3,"file":"DefaultGroupSwitch.d.ts","sourceRoot":"","sources":["../../../../../src/components/Groups/DefualtGroupSwitch/DefaultGroupSwitch.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;AAG3E,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE9E,UAAU,MAAM;IACZ,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,uBAAuB,CAAC;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,CAAC,IAAI,EAAE,uBAAuB,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACtE,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,uBAAuB,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CACjF;AAED,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,sBAgD/C,CAAC"}
@@ -7,33 +7,40 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import { publicApi } from '@cee-eng/hydrajs';
11
10
  import { Switch } from '@patternfly/react-core';
12
- import { LoadingIndicator, ToastNotification, useFetch } from '@rh-support/components';
13
- import { useGlobalStateContext } from '@rh-support/react-context';
11
+ import { LoadingIndicator, ToastNotification } from '@rh-support/components';
14
12
  import React from 'react';
15
13
  import { useTranslation } from 'react-i18next';
14
+ import { useToggleDefaultGroup } from '../../../hooks/useCaseGroupGraphQL';
16
15
  export const DefaultGroupSwitch = (props) => {
17
- const { globalMetadataState: { loggedInUsersAccount }, } = useGlobalStateContext();
18
- const { group, id, user, onToggle } = props;
16
+ const { group, id, user, onToggle, onToggleSuccess } = props;
19
17
  // @ts-ignore
20
18
  const { t } = useTranslation();
21
- const toggleDefaultGroupFetch = useFetch(publicApi.caseGroups.toggleDefaultGroup, {
22
- propgateErrors: true,
23
- });
24
- // Handle Toggle
25
- const toggleDefault = (isChecked) => __awaiter(void 0, void 0, void 0, function* () {
19
+ const { toggleDefault, loading: isFetching } = useToggleDefaultGroup();
20
+ const handleToggle = (isChecked) => __awaiter(void 0, void 0, void 0, function* () {
21
+ if (!user.contactSfId) {
22
+ ToastNotification.addDangerMessage(t('Cannot update default group: contact information is missing'));
23
+ return;
24
+ }
26
25
  try {
27
26
  onToggle(user, isChecked);
28
- yield toggleDefaultGroupFetch.request(group.groupNum, user.ssoUsername, isChecked, loggedInUsersAccount.data.secureSupport);
27
+ const groupId = isChecked ? group.groupNum : null;
28
+ yield toggleDefault(user.contactSfId, groupId);
29
+ onToggleSuccess === null || onToggleSuccess === void 0 ? void 0 : onToggleSuccess(user, isChecked);
29
30
  ToastNotification.addSuccessMessage(t(`Default group updated successfully`));
30
31
  }
31
32
  catch (e) {
32
33
  onToggle(user, user.isDefault);
33
- ToastNotification.addDangerMessage(t('Could not toggle default status'));
34
+ const message = String((e === null || e === void 0 ? void 0 : e.message) || '');
35
+ if (message.includes('insufficient access rights')) {
36
+ ToastNotification.addDangerMessage(t('You do not have permission to change the default group for this user'));
37
+ }
38
+ else {
39
+ ToastNotification.addDangerMessage(t('Could not toggle default status'));
40
+ }
34
41
  }
35
42
  });
36
43
  return (React.createElement(React.Fragment, null,
37
- React.createElement(Switch, { "aria-label": "Toggle default group", "data-tracking-id": `group-user-toggle-default-${user.isDefault ? 'off' : 'on'}`, label: t('On'), id: id, isDisabled: user.access === false || user.write === false || toggleDefaultGroupFetch.isFetching, isChecked: user.isDefault, onChange: (_event, isChecked) => toggleDefault(isChecked) }),
38
- React.createElement(LoadingIndicator, { show: toggleDefaultGroupFetch.isFetching, size: "xs" })));
44
+ React.createElement(Switch, { "aria-label": "Toggle default group", "data-tracking-id": `group-user-toggle-default-${user.isDefault ? 'off' : 'on'}`, label: user.isDefault ? t('On') : t('Off'), id: id, isDisabled: isFetching || !user.contactSfId, isChecked: user.isDefault, onChange: (_event, isChecked) => handleToggle(isChecked) }),
45
+ React.createElement(LoadingIndicator, { show: isFetching, size: "xs" })));
39
46
  };
@@ -3,6 +3,7 @@ import React from 'react';
3
3
  interface IProps {
4
4
  isDisabled?: boolean;
5
5
  onSelect: (group: ICaseGroup | null) => void;
6
+ onAddMembers?: () => void;
6
7
  }
7
8
  export declare const GroupSelect: (props: IProps) => React.JSX.Element;
8
9
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"GroupSelect.d.ts","sourceRoot":"","sources":["../../../../../src/components/Groups/GroupSelect/GroupSelect.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;AAwC3E,OAAO,KAAmD,MAAM,OAAO,CAAC;AAKxE,UAAU,MAAM;IACZ,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;CAChD;AAKD,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,sBAmjBxC,CAAC"}
1
+ {"version":3,"file":"GroupSelect.d.ts","sourceRoot":"","sources":["../../../../../src/components/Groups/GroupSelect/GroupSelect.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;AAwC3E,OAAO,KAAmD,MAAM,OAAO,CAAC;AAWxE,UAAU,MAAM;IACZ,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAKD,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,sBAypBxC,CAAC"}