@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.
- package/lib/esm/ManageTabs.d.ts.map +1 -1
- package/lib/esm/ManageTabs.js +18 -46
- package/lib/esm/Routes.d.ts +0 -1
- package/lib/esm/Routes.d.ts.map +1 -1
- package/lib/esm/Routes.js +0 -6
- package/lib/esm/components/Groups/DefualtGroupSwitch/DefaultGroupSwitch.d.ts +3 -5
- package/lib/esm/components/Groups/DefualtGroupSwitch/DefaultGroupSwitch.d.ts.map +1 -1
- package/lib/esm/components/Groups/DefualtGroupSwitch/DefaultGroupSwitch.js +14 -21
- package/lib/esm/components/Groups/GroupSelect/GroupSelect.d.ts +0 -1
- package/lib/esm/components/Groups/GroupSelect/GroupSelect.d.ts.map +1 -1
- package/lib/esm/components/Groups/GroupSelect/GroupSelect.js +85 -169
- package/lib/esm/components/Groups/ManageGroupUsers/ManageGroupUsers.d.ts.map +1 -1
- package/lib/esm/components/Groups/ManageGroupUsers/ManageGroupUsers.js +42 -169
- package/lib/esm/components/ManagePreferences/PreferencesBody.d.ts.map +1 -1
- package/lib/esm/components/ManagePreferences/PreferencesBody.js +5 -1
- package/lib/esm/components/ManagePreferences/sections/PreferencesACL.d.ts.map +1 -1
- package/lib/esm/components/ManagePreferences/sections/PreferencesACL.js +4 -3
- package/lib/esm/components/ManagePreferences/sections/PreferencesCaseCreate.d.ts.map +1 -1
- package/lib/esm/components/ManagePreferences/sections/PreferencesCaseCreate.js +58 -73
- package/lib/esm/components/ManagePreferences/sections/PreferencesCaseView.d.ts.map +1 -1
- package/lib/esm/components/ManagePreferences/sections/PreferencesCaseView.js +98 -43
- package/lib/esm/constants/GroupSelectActions.d.ts +1 -2
- package/lib/esm/constants/GroupSelectActions.d.ts.map +1 -1
- package/lib/esm/constants/GroupSelectActions.js +0 -1
- package/lib/esm/hooks/useVersionsDiffer.d.ts.map +1 -1
- package/lib/esm/index.js +0 -1
- package/lib/esm/scss/_main.scss +0 -77
- package/package.json +8 -11
- package/lib/esm/components/Groups/AddMembersModal/AddMembersModal.d.ts +0 -12
- package/lib/esm/components/Groups/AddMembersModal/AddMembersModal.d.ts.map +0 -1
- package/lib/esm/components/Groups/AddMembersModal/AddMembersModal.js +0 -80
- package/lib/esm/components/Groups/AddMembersModal/index.d.ts +0 -2
- package/lib/esm/components/Groups/AddMembersModal/index.d.ts.map +0 -1
- package/lib/esm/components/Groups/AddMembersModal/index.js +0 -1
- package/lib/esm/components/ManageCaseLabels/AddEditCaseLabelModal.d.ts +0 -19
- package/lib/esm/components/ManageCaseLabels/AddEditCaseLabelModal.d.ts.map +0 -1
- package/lib/esm/components/ManageCaseLabels/AddEditCaseLabelModal.js +0 -97
- package/lib/esm/components/ManageCaseLabels/ManageCaseLabelsTab.d.ts +0 -3
- package/lib/esm/components/ManageCaseLabels/ManageCaseLabelsTab.d.ts.map +0 -1
- package/lib/esm/components/ManageCaseLabels/ManageCaseLabelsTab.js +0 -220
- package/lib/esm/components/ManageCaseLabels/index.d.ts +0 -2
- package/lib/esm/components/ManageCaseLabels/index.d.ts.map +0 -1
- package/lib/esm/components/ManageCaseLabels/index.js +0 -1
- package/lib/esm/components/ManageCaseLabels/types.d.ts +0 -6
- package/lib/esm/components/ManageCaseLabels/types.d.ts.map +0 -1
- package/lib/esm/components/ManageCaseLabels/types.js +0 -1
- package/lib/esm/hooks/useCaseGroupGraphQL.d.ts +0 -42
- package/lib/esm/hooks/useCaseGroupGraphQL.d.ts.map +0 -1
- package/lib/esm/hooks/useCaseGroupGraphQL.js +0 -117
- package/lib/esm/hooks/useCaseLabelGraphQL.d.ts +0 -26
- package/lib/esm/hooks/useCaseLabelGraphQL.d.ts.map +0 -1
- package/lib/esm/hooks/useCaseLabelGraphQL.js +0 -104
- package/lib/esm/hooks/useCurrentUserContact.d.ts +0 -8
- package/lib/esm/hooks/useCurrentUserContact.d.ts.map +0 -1
- package/lib/esm/hooks/useCurrentUserContact.js +0 -74
- package/lib/esm/utils/caseGroupMapper.d.ts +0 -18
- package/lib/esm/utils/caseGroupMapper.d.ts.map +0 -1
- 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":"
|
|
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 {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
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
|
-
|
|
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: {
|
|
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 {
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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(
|
|
95
|
-
const [data, setData] = useState(
|
|
96
|
-
useEffect(() => setAllData(
|
|
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
|
-
|
|
64
|
+
request(loggedInUsersAccount.data.accountNumber, group.groupNum);
|
|
141
65
|
}
|
|
142
66
|
else {
|
|
143
|
-
|
|
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
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
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
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
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,
|
|
124
|
+
}, [initialData, userSearch, setData, previousUserSearch, groupUsers]);
|
|
243
125
|
useEffect(() => {
|
|
244
126
|
if (location.pathname !== '/manage/groups') {
|
|
245
127
|
return;
|
|
246
128
|
}
|
|
247
|
-
setAllData(
|
|
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
|
|
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
|
|
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":"
|
|
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":"
|
|
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
|
-
|
|
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":"
|
|
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 {
|
|
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 {
|
|
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,
|
|
17
|
+
import React, { useContext, useEffect, useState } from 'react';
|
|
18
18
|
import { Trans, useTranslation } from 'react-i18next';
|
|
19
|
-
import {
|
|
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
|
|
35
|
-
const { globalMetadataState: { caseGroups, caseLanguages,
|
|
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
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
|
53
|
-
const updatedGroups =
|
|
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
|
-
|
|
61
|
-
|
|
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
|
-
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
114
|
-
|
|
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
|
-
|
|
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
|
-
}, [
|
|
129
|
+
}, [loggedInUserRights, caseGroups]);
|
|
143
130
|
useEffect(() => {
|
|
144
|
-
|
|
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
|
-
|
|
154
|
-
|
|
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
|
-
}, [
|
|
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 },
|
|
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":"
|
|
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"}
|