@rh-support/manage 2.5.279 → 2.5.281

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 +18 -46
  3. package/lib/esm/Routes.d.ts +0 -1
  4. package/lib/esm/Routes.d.ts.map +1 -1
  5. package/lib/esm/Routes.js +0 -6
  6. package/lib/esm/components/Groups/DefualtGroupSwitch/DefaultGroupSwitch.d.ts +3 -5
  7. package/lib/esm/components/Groups/DefualtGroupSwitch/DefaultGroupSwitch.d.ts.map +1 -1
  8. package/lib/esm/components/Groups/DefualtGroupSwitch/DefaultGroupSwitch.js +14 -21
  9. package/lib/esm/components/Groups/GroupSelect/GroupSelect.d.ts +0 -1
  10. package/lib/esm/components/Groups/GroupSelect/GroupSelect.d.ts.map +1 -1
  11. package/lib/esm/components/Groups/GroupSelect/GroupSelect.js +85 -169
  12. package/lib/esm/components/Groups/ManageGroupUsers/ManageGroupUsers.d.ts.map +1 -1
  13. package/lib/esm/components/Groups/ManageGroupUsers/ManageGroupUsers.js +42 -169
  14. package/lib/esm/components/ManagePreferences/PreferencesBody.d.ts.map +1 -1
  15. package/lib/esm/components/ManagePreferences/PreferencesBody.js +5 -1
  16. package/lib/esm/components/ManagePreferences/sections/PreferencesACL.d.ts.map +1 -1
  17. package/lib/esm/components/ManagePreferences/sections/PreferencesACL.js +4 -3
  18. package/lib/esm/components/ManagePreferences/sections/PreferencesCaseCreate.d.ts.map +1 -1
  19. package/lib/esm/components/ManagePreferences/sections/PreferencesCaseCreate.js +58 -73
  20. package/lib/esm/components/ManagePreferences/sections/PreferencesCaseView.d.ts.map +1 -1
  21. package/lib/esm/components/ManagePreferences/sections/PreferencesCaseView.js +98 -43
  22. package/lib/esm/constants/GroupSelectActions.d.ts +1 -2
  23. package/lib/esm/constants/GroupSelectActions.d.ts.map +1 -1
  24. package/lib/esm/constants/GroupSelectActions.js +0 -1
  25. package/lib/esm/hooks/useVersionsDiffer.d.ts.map +1 -1
  26. package/lib/esm/index.js +0 -1
  27. package/lib/esm/scss/_main.scss +0 -77
  28. package/package.json +8 -11
  29. package/lib/esm/components/Groups/AddMembersModal/AddMembersModal.d.ts +0 -12
  30. package/lib/esm/components/Groups/AddMembersModal/AddMembersModal.d.ts.map +0 -1
  31. package/lib/esm/components/Groups/AddMembersModal/AddMembersModal.js +0 -80
  32. package/lib/esm/components/Groups/AddMembersModal/index.d.ts +0 -2
  33. package/lib/esm/components/Groups/AddMembersModal/index.d.ts.map +0 -1
  34. package/lib/esm/components/Groups/AddMembersModal/index.js +0 -1
  35. package/lib/esm/components/ManageCaseLabels/AddEditCaseLabelModal.d.ts +0 -19
  36. package/lib/esm/components/ManageCaseLabels/AddEditCaseLabelModal.d.ts.map +0 -1
  37. package/lib/esm/components/ManageCaseLabels/AddEditCaseLabelModal.js +0 -97
  38. package/lib/esm/components/ManageCaseLabels/ManageCaseLabelsTab.d.ts +0 -3
  39. package/lib/esm/components/ManageCaseLabels/ManageCaseLabelsTab.d.ts.map +0 -1
  40. package/lib/esm/components/ManageCaseLabels/ManageCaseLabelsTab.js +0 -220
  41. package/lib/esm/components/ManageCaseLabels/index.d.ts +0 -2
  42. package/lib/esm/components/ManageCaseLabels/index.d.ts.map +0 -1
  43. package/lib/esm/components/ManageCaseLabels/index.js +0 -1
  44. package/lib/esm/components/ManageCaseLabels/types.d.ts +0 -6
  45. package/lib/esm/components/ManageCaseLabels/types.d.ts.map +0 -1
  46. package/lib/esm/components/ManageCaseLabels/types.js +0 -1
  47. package/lib/esm/hooks/useCaseGroupGraphQL.d.ts +0 -42
  48. package/lib/esm/hooks/useCaseGroupGraphQL.d.ts.map +0 -1
  49. package/lib/esm/hooks/useCaseGroupGraphQL.js +0 -117
  50. package/lib/esm/hooks/useCaseLabelGraphQL.d.ts +0 -26
  51. package/lib/esm/hooks/useCaseLabelGraphQL.d.ts.map +0 -1
  52. package/lib/esm/hooks/useCaseLabelGraphQL.js +0 -104
  53. package/lib/esm/hooks/useCurrentUserContact.d.ts +0 -8
  54. package/lib/esm/hooks/useCurrentUserContact.d.ts.map +0 -1
  55. package/lib/esm/hooks/useCurrentUserContact.js +0 -74
  56. package/lib/esm/utils/caseGroupMapper.d.ts +0 -18
  57. package/lib/esm/utils/caseGroupMapper.d.ts.map +0 -1
  58. package/lib/esm/utils/caseGroupMapper.js +0 -50
@@ -1 +1 @@
1
- {"version":3,"file":"ManageGroupUsers.d.ts","sourceRoot":"","sources":["../../../../../src/components/Groups/ManageGroupUsers/ManageGroupUsers.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAsC5D,eAAO,MAAM,gBAAgB,yBAiW5B,CAAC"}
1
+ {"version":3,"file":"ManageGroupUsers.d.ts","sourceRoot":"","sources":["../../../../../src/components/Groups/ManageGroupUsers/ManageGroupUsers.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAS5D,eAAO,MAAM,gBAAgB,yBA4L5B,CAAC"}
@@ -7,93 +7,39 @@ 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 { Button, Modal, ModalBody, ModalFooter, ModalHeader, ModalVariant, SearchInput, Tooltip, } from '@patternfly/react-core';
11
- import { ErrorBoundary, ToastNotification, usePrevious } from '@rh-support/components';
12
- import { GlobalMetadataReducerConstants, useGlobalDispatchContext, useGlobalStateContext, } from '@rh-support/react-context';
13
- import { ability, resourceActions, resources } from '@rh-support/user-permissions';
10
+ import { publicApi } from '@cee-eng/hydrajs';
11
+ import { SearchInput } from '@patternfly/react-core';
12
+ import { ErrorBoundary, ToastNotification, useFetch, usePrevious } from '@rh-support/components';
13
+ import { useGlobalStateContext } from '@rh-support/react-context';
14
14
  import isEmpty from 'lodash/isEmpty';
15
15
  import React, { useEffect, useMemo, useState } from 'react';
16
16
  import { Trans, useTranslation } from 'react-i18next';
17
17
  import { useLocation } from 'react-router-dom';
18
- import { useCaseGroupMembers, useDeleteCaseGroupMember } from '../../../hooks/useCaseGroupGraphQL';
19
18
  import { ManageTable } from '../../ManageTable/ManageTable';
20
- import { AddMembersModal } from '../AddMembersModal';
21
19
  import { DefaultGroupSwitch } from '../DefualtGroupSwitch';
22
20
  import { GroupSelect } from '../GroupSelect';
23
- // TODO: Uncomment when updateUsers is migrated to GraphQL
24
- // import { GroupUserPermissionsSelect } from '../GroupUserPermissionsSelect';
25
- const RemoveMemberButton = ({ user, onRemove, isDisabled }) => {
26
- const { t } = useTranslation();
27
- const button = (React.createElement(Button, { variant: "link", isDanger: true, onClick: () => onRemove(user), isAriaDisabled: user.isOrgAdmin || isDisabled }, t('Remove')));
28
- if (user.isOrgAdmin) {
29
- return (React.createElement(Tooltip, { content: t('Organization Administrators cannot be removed because they have access to all groups') }, button));
30
- }
31
- return button;
32
- };
21
+ import { GroupUserPermissionsSelect } from '../GroupUserPermissionsSelect';
33
22
  export const ManageGroupUsers = () => {
34
- var _a, _b;
35
23
  const { t } = useTranslation();
36
24
  const location = useLocation();
37
- const { globalMetadataState: { caseGroups, loggedInUsersAccount, loggedInUser }, } = useGlobalStateContext();
38
- const dispatchToGlobalMetadataReducer = useGlobalDispatchContext();
25
+ const { globalMetadataState: { loggedInUsersAccount }, } = useGlobalStateContext();
39
26
  const disableGroupSelect = !loggedInUsersAccount || !loggedInUsersAccount.data || !loggedInUsersAccount.data.accountNumber;
40
27
  const [selectedGroup, setSelectedGroup] = useState();
41
- const { data: groupUsers, loading: isFetching, error: membersError, fetchMembers, refetch } = useCaseGroupMembers();
42
- const previousMembersError = usePrevious(membersError);
43
- useEffect(() => {
44
- if (membersError && !previousMembersError) {
45
- ToastNotification.addDangerMessage(t('There was an error loading group members. Please try again or refresh'));
46
- }
47
- }, [membersError, previousMembersError, t]);
48
- const defaultCaseGroupId = (_b = (_a = loggedInUser === null || loggedInUser === void 0 ? void 0 : loggedInUser.data) === null || _a === void 0 ? void 0 : _a.defaultCaseGroup) !== null && _b !== void 0 ? _b : null;
49
- const membersWithOrgAdmin = useMemo(() => {
50
- var _a, _b, _c, _d;
51
- const loggedInContact = loggedInUser === null || loggedInUser === void 0 ? void 0 : loggedInUser.data;
52
- const selectedGroupId = selectedGroup === null || selectedGroup === void 0 ? void 0 : selectedGroup.groupNum;
53
- const syncLoggedInUserDefault = (members) => {
54
- if (!(loggedInContact === null || loggedInContact === void 0 ? void 0 : loggedInContact.ssoUsername) || !selectedGroupId)
55
- return members;
56
- return members.map((member) => member.ssoUsername === loggedInContact.ssoUsername
57
- ? Object.assign(Object.assign({}, member), { isDefault: defaultCaseGroupId === selectedGroupId }) : member);
58
- };
59
- const members = syncLoggedInUserDefault(groupUsers || []);
60
- const user = loggedInContact;
61
- if (!(user === null || user === void 0 ? void 0 : user.isOrgAdmin) || !user.ssoUsername || !selectedGroup)
62
- return members;
63
- const alreadyPresent = members.some((m) => m.ssoUsername === user.ssoUsername);
64
- if (alreadyPresent)
65
- return members;
66
- const syntheticEntry = {
67
- firstName: (_a = user.firstName) !== null && _a !== void 0 ? _a : '',
68
- lastName: (_b = user.lastName) !== null && _b !== void 0 ? _b : '',
69
- isOrgAdmin: true,
70
- access: true,
71
- write: false,
72
- isDefault: defaultCaseGroupId === selectedGroup.groupNum,
73
- ssoUsername: user.ssoUsername,
74
- email: (_c = user.email) !== null && _c !== void 0 ? _c : '',
75
- contactSfId: (_d = user.id) !== null && _d !== void 0 ? _d : '',
76
- memberRecordId: '',
77
- };
78
- return [...members, syntheticEntry];
79
- }, [groupUsers, loggedInUser === null || loggedInUser === void 0 ? void 0 : loggedInUser.data, selectedGroup, defaultCaseGroupId]);
80
- const canManageCaseGroups = ability.can(resourceActions.CREATE, resources.CASE_GROUPS);
81
- const [isAddMembersModalOpen, setIsAddMembersModalOpen] = useState(false);
82
- const [memberToRemove, setMemberToRemove] = useState(null);
83
- const { deleteMember, loading: isDeleting } = useDeleteCaseGroupMember();
84
- // TODO: Uncomment when updateUsers is migrated to GraphQL
85
- // function onPermissionError(error: Error, user: IGroupUser) {
86
- // setData([...data]);
87
- // const message = t(`Could not change permission for {{user}}: {{error}}`, {
88
- // user: `${user.firstName} ${user.lastName}`,
89
- // error: error.message,
90
- // });
91
- // ToastNotification.addDangerMessage(message);
92
- // }
28
+ const { clearResponse, isFetching, request, data: response, } = useFetch(publicApi.caseGroups.getCaseGroupUsers);
29
+ const groupUsers = useMemo(() => response || [], [response]);
30
+ // errors
31
+ function onPermissionError(error, user) {
32
+ setData([...data]);
33
+ const message = t(`Could not change permission for {{user}}: {{error}}`, {
34
+ user: `${user.firstName} ${user.lastName}`,
35
+ error: error.message,
36
+ });
37
+ ToastNotification.addDangerMessage(message);
38
+ }
93
39
  // set and sort fetched data.
94
- const [initialData, setInitialData] = useState(membersWithOrgAdmin);
95
- const [data, setData] = useState(membersWithOrgAdmin);
96
- useEffect(() => setAllData(membersWithOrgAdmin || []), [membersWithOrgAdmin]);
40
+ const [initialData, setInitialData] = useState(groupUsers);
41
+ const [data, setData] = useState(groupUsers);
42
+ useEffect(() => setAllData(response || []), [response]);
97
43
  function setAllData(users) {
98
44
  setInitialData(users);
99
45
  setData(users);
@@ -112,63 +58,21 @@ export const ManageGroupUsers = () => {
112
58
  return tempUser;
113
59
  }));
114
60
  };
115
- const onDefaultToggleSuccess = (user, isChecked) => {
116
- var _a;
117
- if (user.ssoUsername !== ((_a = loggedInUser === null || loggedInUser === void 0 ? void 0 : loggedInUser.data) === null || _a === void 0 ? void 0 : _a.ssoUsername) || !selectedGroup)
118
- return;
119
- const groupId = isChecked ? selectedGroup.groupNum : null;
120
- const updatedLoggedInUserData = Object.assign(Object.assign({}, loggedInUser.data), { defaultCaseGroup: groupId });
121
- dispatchToGlobalMetadataReducer({
122
- type: GlobalMetadataReducerConstants.setLoggedInUser,
123
- payload: {
124
- loggedInUser: Object.assign(Object.assign({}, loggedInUser), { data: updatedLoggedInUserData }),
125
- },
126
- });
127
- if (caseGroups === null || caseGroups === void 0 ? void 0 : caseGroups.data) {
128
- const updatedGroups = caseGroups.data.map((group) => (Object.assign(Object.assign({}, group), { isDefault: groupId !== null && group.groupNum === groupId })));
129
- dispatchToGlobalMetadataReducer({
130
- type: GlobalMetadataReducerConstants.setCaseGroups,
131
- payload: {
132
- caseGroups: Object.assign(Object.assign({}, caseGroups), { data: updatedGroups }),
133
- },
134
- });
135
- }
136
- };
137
61
  const onGroupSelect = (group) => __awaiter(void 0, void 0, void 0, function* () {
138
62
  setSelectedGroup(group);
139
63
  if (group) {
140
- fetchMembers(group.groupNum);
64
+ request(loggedInUsersAccount.data.accountNumber, group.groupNum);
141
65
  }
142
66
  else {
143
- setAllData([]);
144
- }
145
- });
146
- const handleRemoveMember = () => __awaiter(void 0, void 0, void 0, function* () {
147
- if (!(memberToRemove === null || memberToRemove === void 0 ? void 0 : memberToRemove.memberRecordId))
148
- return;
149
- try {
150
- yield deleteMember(memberToRemove.memberRecordId);
151
- ToastNotification.addSuccessMessage(t('{{name}} has been removed from the group', {
152
- name: `${memberToRemove.firstName} ${memberToRemove.lastName}`,
153
- }));
154
- refetch();
155
- }
156
- catch (error) {
157
- ToastNotification.addDangerMessage(t('Could not remove member from group: {{message}}', {
158
- message: error instanceof Error ? error.message : String(error),
159
- }));
160
- }
161
- finally {
162
- setMemberToRemove(null);
67
+ clearResponse();
163
68
  }
164
69
  });
165
- // TODO: Uncomment when updateUsers is migrated to GraphQL
166
- // function onPermissionsChange(user: IGroupUser) {
167
- // const initialUsers = initialData.map((value) => (value.ssoUsername === user.ssoUsername ? user : value));
168
- // const users = data.map((value) => (value.ssoUsername === user.ssoUsername ? user : value));
169
- // setInitialData(initialUsers);
170
- // setData(users);
171
- // }
70
+ function onPermissionsChange(user) {
71
+ const initialUsers = initialData.map((value) => (value.ssoUsername === user.ssoUsername ? user : value));
72
+ const users = data.map((value) => (value.ssoUsername === user.ssoUsername ? user : value));
73
+ setInitialData(initialUsers);
74
+ setData(users);
75
+ }
172
76
  const columns = [
173
77
  {
174
78
  accessor: (user) => user.firstName,
@@ -188,38 +92,16 @@ export const ManageGroupUsers = () => {
188
92
  id: 'sso-username',
189
93
  title: t('Login'),
190
94
  },
191
- // TODO: Uncomment when updateUsers is migrated to GraphQL
192
- // {
193
- // id: 'permissions',
194
- // title: t('Permissions'),
195
- // cell: (user) =>
196
- // user.isOrgAdmin ? (
197
- // t('Admin/Full access')
198
- // ) : (
199
- // <GroupUserPermissionsSelect
200
- // onChange={onPermissionsChange}
201
- // account={loggedInUsersAccount.data}
202
- // group={selectedGroup}
203
- // users={data}
204
- // user={user}
205
- // onError={onPermissionError}
206
- // />
207
- // ),
208
- // },
209
- ...(canManageCaseGroups
210
- ? [
211
- {
212
- id: 'default',
213
- title: t('Default group'),
214
- cell: (user, index) => (React.createElement(DefaultGroupSwitch, { id: `${index}`, onToggle: onDefaultToggle, onToggleSuccess: onDefaultToggleSuccess, group: selectedGroup, user: user })),
215
- },
216
- {
217
- id: 'remove',
218
- title: '',
219
- cell: (user) => (React.createElement(RemoveMemberButton, { user: user, onRemove: setMemberToRemove, isDisabled: isDeleting })),
220
- },
221
- ]
222
- : []),
95
+ {
96
+ id: 'permissions',
97
+ title: t('Permissions'),
98
+ cell: (user) => user.isOrgAdmin ? (t('Admin/Full access')) : (React.createElement(GroupUserPermissionsSelect, { onChange: onPermissionsChange, account: loggedInUsersAccount.data, group: selectedGroup, users: data, user: user, onError: onPermissionError })),
99
+ },
100
+ {
101
+ id: 'default',
102
+ title: t('Default group'),
103
+ cell: (user, index) => (React.createElement(DefaultGroupSwitch, { id: `${index}`, onToggle: onDefaultToggle, group: selectedGroup, user: user })),
104
+ },
223
105
  ];
224
106
  // filter out search query.
225
107
  const [userSearch, setUserSearch] = useState('');
@@ -239,12 +121,12 @@ export const ManageGroupUsers = () => {
239
121
  else {
240
122
  setData(initialData);
241
123
  }
242
- }, [initialData, userSearch, setData, previousUserSearch, membersWithOrgAdmin]);
124
+ }, [initialData, userSearch, setData, previousUserSearch, groupUsers]);
243
125
  useEffect(() => {
244
126
  if (location.pathname !== '/manage/groups') {
245
127
  return;
246
128
  }
247
- setAllData(membersWithOrgAdmin || []);
129
+ setAllData(response || []);
248
130
  // eslint-disable-next-line react-hooks/exhaustive-deps
249
131
  }, [location.pathname, loggedInUsersAccount.data]);
250
132
  return (React.createElement(React.Fragment, null,
@@ -252,20 +134,11 @@ export const ManageGroupUsers = () => {
252
134
  React.createElement("h2", { className: "pf-v6-u-pb-sm" }, t('Groups')),
253
135
  React.createElement("p", null, t('To filter cases while searching, add or edit groups.'))),
254
136
  React.createElement("div", { className: "toolbar pf-v6-u-justify-content-space-between" },
255
- React.createElement(GroupSelect, { isDisabled: isFetching || disableGroupSelect, onSelect: onGroupSelect, onAddMembers: () => setIsAddMembersModalOpen(true) }),
137
+ React.createElement(GroupSelect, { isDisabled: isFetching || disableGroupSelect, onSelect: onGroupSelect }),
256
138
  React.createElement("span", { className: "toolbar-right" },
257
139
  React.createElement("label", { htmlFor: "account-group-filter" },
258
140
  React.createElement(Trans, null, "Filter by")),
259
141
  React.createElement(SearchInput, { className: "pf-v6-u-flex-grow-1 pf-v6-c-search-input pf-v6-u-background-color-100", id: "account-group-filter", value: userSearch, isDisabled: isFetching || !selectedGroup, onChange: (_, value) => setUserSearch(value), placeholder: t('Search for people in this group'), "aria-label": "Group search input", onClear: () => setUserSearch('') }))),
260
142
  React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading group users list') } },
261
- React.createElement(ManageTable, { ariaLabel: t('Table to manage groups'), columns: columns, data: data, sortInfo: { column: 'first-name', direction: 'asc' }, isFetching: isFetching, isError: false, pagination: false })),
262
- memberToRemove && (React.createElement(Modal, { variant: ModalVariant.small, isOpen: true, onClose: () => setMemberToRemove(null), "aria-label": t('Confirm removal') },
263
- React.createElement(ModalHeader, { title: t('Remove member') }),
264
- React.createElement(ModalBody, null, t('Are you sure you want to remove {{name}} from this group?', {
265
- name: `${memberToRemove.firstName} ${memberToRemove.lastName}`,
266
- })),
267
- React.createElement(ModalFooter, null,
268
- React.createElement(Button, { variant: "danger", onClick: handleRemoveMember, isLoading: isDeleting, isDisabled: isDeleting }, t('Remove')),
269
- React.createElement(Button, { variant: "link", onClick: () => setMemberToRemove(null), isDisabled: isDeleting }, t('Cancel'))))),
270
- canManageCaseGroups && isAddMembersModalOpen && selectedGroup && (React.createElement(AddMembersModal, { group: selectedGroup, existingMembers: initialData, onSuccess: refetch, onClose: () => setIsAddMembersModalOpen(false) }))));
143
+ React.createElement(ManageTable, { ariaLabel: t('Table to manage groups'), columns: columns, data: data, sortInfo: { column: 'first-name', direction: 'asc' }, isFetching: isFetching, isError: false }))));
271
144
  };
@@ -1 +1 @@
1
- {"version":3,"file":"PreferencesBody.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePreferences/PreferencesBody.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,UAAU,MAAM;CAAG;AAEnB,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,qBAQ5C"}
1
+ {"version":3,"file":"PreferencesBody.d.ts","sourceRoot":"","sources":["../../../../src/components/ManagePreferences/PreferencesBody.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,UAAU,MAAM;CAAG;AAEnB,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,qBAa5C"}
@@ -1,10 +1,14 @@
1
+ import { useGlobalStateContext } from '@rh-support/react-context';
1
2
  import React from 'react';
3
+ import { PreferencesACL } from './sections/PreferencesACL';
2
4
  import { PreferencesCaseCreate } from './sections/PreferencesCaseCreate';
3
5
  import { PreferencesCaseSearch } from './sections/PreferencesCaseSearch';
4
6
  import { PreferencesCaseView } from './sections/PreferencesCaseView';
5
7
  export function PreferencesBody(props) {
8
+ const { globalMetadataState: { loggedInUserRights }, } = useGlobalStateContext();
6
9
  return (React.createElement("div", { className: "pfe-l-grid pfe-m-gutters pfe-m-all-4-col" },
7
10
  React.createElement(PreferencesCaseSearch, null),
8
11
  React.createElement(PreferencesCaseView, null),
9
- React.createElement(PreferencesCaseCreate, null)));
12
+ React.createElement(PreferencesCaseCreate, null),
13
+ loggedInUserRights.data.isOrgAdmin() && !loggedInUserRights.data.isInternal() && React.createElement(PreferencesACL, null)));
10
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PreferencesACL.d.ts","sourceRoot":"","sources":["../../../../../src/components/ManagePreferences/sections/PreferencesACL.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAKpD,wBAAgB,cAAc,sBAuF7B"}
1
+ {"version":3,"file":"PreferencesACL.d.ts","sourceRoot":"","sources":["../../../../../src/components/ManagePreferences/sections/PreferencesACL.tsx"],"names":[],"mappings":"AASA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAKpD,wBAAgB,cAAc,sBAwF7B"}
@@ -11,14 +11,15 @@ import { accounts } from '@cee-eng/hydrajs';
11
11
  import { Card, CardBody, CardHeader, Spinner, Tooltip } from '@patternfly/react-core';
12
12
  import InfoCircleIcon from '@patternfly/react-icons/dist/js/icons/info-circle-icon';
13
13
  import { useFetch } from '@rh-support/components';
14
- import { GlobalMetadataStateContext } from '@rh-support/react-context';
14
+ import { fetchLoggedInUsersAccount, GlobalMetadataDispatchContext, GlobalMetadataStateContext, } from '@rh-support/react-context';
15
15
  import React, { useContext, useState } from 'react';
16
16
  import { Trans, useTranslation } from 'react-i18next';
17
17
  import { PreferenceSwitch } from '../components/PreferenceSwitch';
18
18
  export function PreferencesACL() {
19
19
  var _a;
20
20
  const { t } = useTranslation();
21
- const { globalMetadataState: { loggedInUsersAccount }, } = useContext(GlobalMetadataStateContext);
21
+ const { globalMetadataState: { loggedInUsersAccount, loggedInUserJwtToken }, } = useContext(GlobalMetadataStateContext);
22
+ const dispatchToGlobalMetadataReducer = useContext(GlobalMetadataDispatchContext);
22
23
  const [isAclActivated, setIsAclActivated] = useState((_a = loggedInUsersAccount.data) === null || _a === void 0 ? void 0 : _a.hasGroupACLs);
23
24
  const [isAclLoading, setIsAclLoading] = useState(false);
24
25
  const { request: updateAcl } = useFetch(accounts.updateAcl);
@@ -26,7 +27,7 @@ export function PreferencesACL() {
26
27
  try {
27
28
  setIsAclLoading(true);
28
29
  yield updateAcl(!isAclActivated, loggedInUsersAccount.data.accountNumber);
29
- // TODO: migrate to GraphQL - fetchLoggedInUsersAccount(dispatchToGlobalMetadataReducer, loggedInUserJwtToken, true, apolloClient);
30
+ fetchLoggedInUsersAccount(dispatchToGlobalMetadataReducer, loggedInUserJwtToken, true);
30
31
  setIsAclActivated(!isAclActivated);
31
32
  }
32
33
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"PreferencesCaseCreate.d.ts","sourceRoot":"","sources":["../../../../../src/components/ManagePreferences/sections/PreferencesCaseCreate.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAkBhF,UAAU,MAAM;CAAG;AACnB,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,qBAwNlD"}
1
+ {"version":3,"file":"PreferencesCaseCreate.d.ts","sourceRoot":"","sources":["../../../../../src/components/ManagePreferences/sections/PreferencesCaseCreate.tsx"],"names":[],"mappings":"AAcA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAO/D,UAAU,MAAM;CAAG;AACnB,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,qBA0MlD"}
@@ -7,74 +7,62 @@ 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 { useApolloClient } from '@apollo/client/react';
10
+ import { publicApi } from '@cee-eng/hydrajs';
11
11
  import { Card, CardBody, CardHeader, SelectOption } from '@patternfly/react-core';
12
- import { ToastNotification } from '@rh-support/components';
13
- import { fetchCaseGroupsForAccount, fetchCaseGroupsForSSO, fetchLanguageMetadata, GlobalMetadataDispatchContext, GlobalMetadataReducerConstants, GlobalMetadataStateContext, } from '@rh-support/react-context';
12
+ import { ToastNotification, useFetch } from '@rh-support/components';
13
+ import { fetchLanguageMetadata, GlobalMetadataDispatchContext, GlobalMetadataReducerConstants, GlobalMetadataStateContext, } from '@rh-support/react-context';
14
14
  import { haventLoadedMetadata, PreferredLanguages } from '@rh-support/utils';
15
15
  import isEmpty from 'lodash/isEmpty';
16
16
  import map from 'lodash/map';
17
- import React, { useContext, useEffect, useMemo, useRef, useState } from 'react';
17
+ import React, { useContext, useEffect, useState } from 'react';
18
18
  import { Trans, useTranslation } from 'react-i18next';
19
- import { useToggleDefaultGroup } from '../../../hooks/useCaseGroupGraphQL';
19
+ import { useLocation } from 'react-router-dom';
20
20
  import { useUserPreferences } from '../../../hooks/useUserPreferences';
21
21
  import { PreferenceSelect } from '../components/PreferenceSelect';
22
- const UNGROUPED_CASE_LABEL = 'Ungrouped Case';
23
- function resolveDefaultGroupLabel(defaultCaseGroupId, groupList) {
24
- var _a;
25
- if (!defaultCaseGroupId || defaultCaseGroupId === '-1') {
26
- return UNGROUPED_CASE_LABEL;
27
- }
28
- const defaultGroup = groupList.find((group) => group.groupNum === defaultCaseGroupId);
29
- return (_a = defaultGroup === null || defaultGroup === void 0 ? void 0 : defaultGroup.name) !== null && _a !== void 0 ? _a : UNGROUPED_CASE_LABEL;
30
- }
31
22
  export function PreferencesCaseCreate(props) {
32
- var _a, _b, _c, _d, _e, _f;
33
23
  const { t } = useTranslation();
34
- const apolloClient = useApolloClient();
35
- const { globalMetadataState: { caseGroups, caseLanguages, loggedInUser, loggedInUserJwtToken, loggedInUsersAccount }, } = useContext(GlobalMetadataStateContext);
24
+ const location = useLocation();
25
+ const { globalMetadataState: { caseGroups, caseLanguages, loggedInUserJwtToken, loggedInUserRights, loggedInUsersAccount, }, } = useContext(GlobalMetadataStateContext);
36
26
  const dispatchToGlobalMetadataReducer = useContext(GlobalMetadataDispatchContext);
37
27
  const languageConst = caseLanguages.data;
38
- const { toggleDefault } = useToggleDefaultGroup();
39
- const groupList = useMemo(() => caseGroups.data || [], [caseGroups.data]);
40
- const contactId = (_a = loggedInUser === null || loggedInUser === void 0 ? void 0 : loggedInUser.data) === null || _a === void 0 ? void 0 : _a.id;
41
- const defaultCaseGroupId = (_c = (_b = loggedInUser === null || loggedInUser === void 0 ? void 0 : loggedInUser.data) === null || _b === void 0 ? void 0 : _b.defaultCaseGroup) !== null && _c !== void 0 ? _c : null;
42
- const salesforceAccountId = (_d = loggedInUsersAccount.data) === null || _d === void 0 ? void 0 : _d.salesforceAccountId;
43
- const loggedInContactId = (_e = loggedInUser === null || loggedInUser === void 0 ? void 0 : loggedInUser.data) === null || _e === void 0 ? void 0 : _e.id;
44
- const loggedInIsOrgAdmin = (_f = loggedInUser === null || loggedInUser === void 0 ? void 0 : loggedInUser.data) === null || _f === void 0 ? void 0 : _f.isOrgAdmin;
45
- const hasFetchedCaseGroups = useRef(false);
46
- const updateDefaultGroupPref = (groupId) => __awaiter(this, void 0, void 0, function* () {
47
- if (!contactId) {
48
- ToastNotification.addDangerMessage(t('Cannot update default group: contact information is missing'));
49
- throw new Error('Missing contact id');
28
+ const getDefaultGroupFetch = useFetch(publicApi.caseGroups.getCaseGroupsForSSO, {
29
+ propgateErrors: true,
30
+ });
31
+ const toggleDefaultGroupFetch = useFetch(publicApi.caseGroups.toggleDefaultGroup, {
32
+ propgateErrors: true,
33
+ });
34
+ const grabDefaultGroupList = (ssoUser) => __awaiter(this, void 0, void 0, function* () {
35
+ try {
36
+ let list = yield getDefaultGroupFetch.request(ssoUser);
37
+ setUserDefaultGroupList(list);
38
+ let filteredDefaultGroup = (list ? list : []).filter((group) => group.isDefault === true);
39
+ if (!isEmpty(filteredDefaultGroup)) {
40
+ setOriginalDefaultGroup(filteredDefaultGroup[0].name);
41
+ }
42
+ else {
43
+ setOriginalDefaultGroup('Ungrouped Case');
44
+ }
45
+ }
46
+ catch (error) {
47
+ console.log(error);
50
48
  }
49
+ });
50
+ const updateDefaultGroupPref = (groupNum) => __awaiter(this, void 0, void 0, function* () {
51
+ var _a;
51
52
  try {
52
- yield toggleDefault(contactId, groupId);
53
- const updatedGroups = groupList.map((group) => (Object.assign(Object.assign({}, group), { isDefault: groupId !== null && group.groupNum === groupId })));
53
+ yield toggleDefaultGroupFetch.request(groupNum, loggedInUserRights.data.getSSOUsername(), true, loggedInUsersAccount.data.secureSupport);
54
+ const updatedGroups = (caseGroups.data || []).map((group) => (Object.assign(Object.assign({}, group), { isDefault: group.groupNum === groupNum })));
54
55
  dispatchToGlobalMetadataReducer({
55
56
  type: GlobalMetadataReducerConstants.setCaseGroups,
56
57
  payload: {
57
58
  caseGroups: Object.assign(Object.assign({}, caseGroups), { data: updatedGroups }),
58
59
  },
59
60
  });
60
- const updatedLoggedInUserData = Object.assign(Object.assign({}, loggedInUser.data), { defaultCaseGroup: groupId });
61
- dispatchToGlobalMetadataReducer({
62
- type: GlobalMetadataReducerConstants.setLoggedInUser,
63
- payload: {
64
- loggedInUser: Object.assign(Object.assign({}, loggedInUser), { data: updatedLoggedInUserData }),
65
- },
66
- });
67
- setOriginalDefaultGroup(resolveDefaultGroupLabel(groupId, updatedGroups));
61
+ setUserDefaultGroupList(updatedGroups);
62
+ setOriginalDefaultGroup(((_a = updatedGroups.find((g) => g.isDefault)) === null || _a === void 0 ? void 0 : _a.name) || 'Ungrouped Case');
68
63
  }
69
64
  catch (error) {
70
- const message = String((error === null || error === void 0 ? void 0 : error.message) || '');
71
- if (message.includes('insufficient access rights')) {
72
- ToastNotification.addDangerMessage(t('You do not have permission to change the default group'));
73
- }
74
- else if (message !== 'Missing contact id') {
75
- ToastNotification.addDangerMessage(t('Failed to update default group'));
76
- }
77
- throw error;
65
+ console.log(error);
78
66
  }
79
67
  });
80
68
  const languagesList = map(languageConst, (cl) => ({
@@ -83,6 +71,7 @@ export function PreferencesCaseCreate(props) {
83
71
  }));
84
72
  const [originalPreferredLanguage, setOriginalPreferredLanguage] = useState('');
85
73
  const [originalDefaultGroup, setOriginalDefaultGroup] = useState('');
74
+ const [userDefaultGroupList, setUserDefaultGroupList] = useState();
86
75
  const { getPreferredLanguage, updatePreferredLanguage } = useUserPreferences();
87
76
  const preferredLangTitleId = 'preferred-language-select';
88
77
  const defaultGroupTitleId = 'default-group-select';
@@ -106,13 +95,18 @@ export function PreferencesCaseCreate(props) {
106
95
  }
107
96
  });
108
97
  const onDefaultGroupSelect = (event, selection) => __awaiter(this, void 0, void 0, function* () {
109
- if (selection === UNGROUPED_CASE_LABEL) {
110
- yield updateDefaultGroupPref(null);
111
- return;
98
+ try {
99
+ if (selection === 'Ungrouped Case') {
100
+ updateDefaultGroupPref('-1');
101
+ }
102
+ if (!isEmpty(userDefaultGroupList)) {
103
+ let filteredGroupSelect = userDefaultGroupList.filter((group) => group.name === selection);
104
+ yield updateDefaultGroupPref(filteredGroupSelect[0].groupNum);
105
+ setOriginalDefaultGroup(filteredGroupSelect[0].name);
106
+ }
112
107
  }
113
- const selectedGroup = groupList.find((group) => group.name === selection);
114
- if (selectedGroup) {
115
- yield updateDefaultGroupPref(selectedGroup.groupNum);
108
+ catch (error) {
109
+ console.log(error);
116
110
  }
117
111
  });
118
112
  useEffect(() => {
@@ -130,31 +124,22 @@ export function PreferencesCaseCreate(props) {
130
124
  // eslint-disable-next-line react-hooks/exhaustive-deps
131
125
  }, [caseLanguages, caseGroups, dispatchToGlobalMetadataReducer, loggedInUserJwtToken]);
132
126
  useEffect(() => {
133
- if (loggedInUser.isFetching)
134
- return;
135
- setOriginalDefaultGroup(resolveDefaultGroupLabel(defaultCaseGroupId, groupList));
136
- }, [defaultCaseGroupId, groupList, loggedInUser.isFetching]);
137
- useEffect(() => {
138
- if (haventLoadedMetadata(caseLanguages)) {
139
- fetchLanguageMetadata(dispatchToGlobalMetadataReducer, apolloClient);
140
- }
127
+ grabDefaultGroupList(loggedInUserRights.data.getSSOUsername());
141
128
  // eslint-disable-next-line react-hooks/exhaustive-deps
142
- }, [caseLanguages, apolloClient]);
129
+ }, [loggedInUserRights, caseGroups]);
143
130
  useEffect(() => {
144
- var _a;
145
- if (!salesforceAccountId || loggedInUser.isFetching || !contactId)
131
+ if (location.pathname !== '/manage/preferences') {
146
132
  return;
147
- if (hasFetchedCaseGroups.current)
148
- return;
149
- hasFetchedCaseGroups.current = true;
150
- if ((_a = loggedInUsersAccount.data) === null || _a === void 0 ? void 0 : _a.isInternal) {
151
- fetchCaseGroupsForAccount(dispatchToGlobalMetadataReducer, apolloClient, salesforceAccountId, defaultCaseGroupId, loggedInContactId, loggedInIsOrgAdmin);
152
133
  }
153
- else {
154
- fetchCaseGroupsForSSO(dispatchToGlobalMetadataReducer, apolloClient, salesforceAccountId, defaultCaseGroupId, loggedInContactId, loggedInIsOrgAdmin);
134
+ grabDefaultGroupList(loggedInUserRights.data.getSSOUsername());
135
+ // eslint-disable-next-line react-hooks/exhaustive-deps
136
+ }, [location.pathname]);
137
+ useEffect(() => {
138
+ if (haventLoadedMetadata(caseLanguages)) {
139
+ fetchLanguageMetadata(dispatchToGlobalMetadataReducer);
155
140
  }
156
141
  // eslint-disable-next-line react-hooks/exhaustive-deps
157
- }, [salesforceAccountId, loggedInUser.isFetching, contactId, defaultCaseGroupId]);
142
+ }, [caseLanguages]);
158
143
  return (React.createElement(Card, { variant: "secondary", className: "preference-card" },
159
144
  React.createElement(CardHeader, null,
160
145
  React.createElement("h3", null,
@@ -166,5 +151,5 @@ export function PreferencesCaseCreate(props) {
166
151
  React.createElement("p", { className: "form-instructions" },
167
152
  React.createElement(Trans, null, "Preferred language will impact future cases, not existing ones."))),
168
153
  React.createElement("div", { className: "form-group" },
169
- React.createElement(PreferenceSelect, { label: "Default group", id: defaultGroupTitleId, onSelect: onDefaultGroupSelect, selections: originalDefaultGroup }, [UNGROUPED_CASE_LABEL, ...groupList.map((group) => group.name)].map((name, index) => (React.createElement(SelectOption, { key: index, value: name })))))))));
154
+ React.createElement(PreferenceSelect, { label: "Default group", id: defaultGroupTitleId, onSelect: onDefaultGroupSelect, selections: originalDefaultGroup }, (userDefaultGroupList ? userDefaultGroupList : []).map((option, index) => (React.createElement(SelectOption, { key: index, value: option.name })))))))));
170
155
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PreferencesCaseView.d.ts","sourceRoot":"","sources":["../../../../../src/components/ManagePreferences/sections/PreferencesCaseView.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAO/D,UAAU,MAAM;CAAG;AAEnB,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,qBA0OhD"}
1
+ {"version":3,"file":"PreferencesCaseView.d.ts","sourceRoot":"","sources":["../../../../../src/components/ManagePreferences/sections/PreferencesCaseView.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAO/D,UAAU,MAAM;CAAG;AAEnB,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,qBAqShD"}