@rh-support/manage 2.5.263 → 2.5.272
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 -156
- package/lib/esm/components/Groups/ManageGroupUsers/ManageGroupUsers.d.ts.map +1 -1
- package/lib/esm/components/Groups/ManageGroupUsers/ManageGroupUsers.js +42 -163
- 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 -83
- 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 -217
- 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 -109
- 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 -99
- 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 -49
|
@@ -7,87 +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
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
};
|
|
53
|
-
const members = syncLoggedInUserDefault(groupUsers || []);
|
|
54
|
-
const user = loggedInContact;
|
|
55
|
-
if (!(user === null || user === void 0 ? void 0 : user.isOrgAdmin) || !user.ssoUsername || !selectedGroup)
|
|
56
|
-
return members;
|
|
57
|
-
const alreadyPresent = members.some((m) => m.ssoUsername === user.ssoUsername);
|
|
58
|
-
if (alreadyPresent)
|
|
59
|
-
return members;
|
|
60
|
-
const syntheticEntry = {
|
|
61
|
-
firstName: (_a = user.firstName) !== null && _a !== void 0 ? _a : '',
|
|
62
|
-
lastName: (_b = user.lastName) !== null && _b !== void 0 ? _b : '',
|
|
63
|
-
isOrgAdmin: true,
|
|
64
|
-
access: true,
|
|
65
|
-
write: false,
|
|
66
|
-
isDefault: defaultCaseGroupId === selectedGroup.groupNum,
|
|
67
|
-
ssoUsername: user.ssoUsername,
|
|
68
|
-
email: (_c = user.email) !== null && _c !== void 0 ? _c : '',
|
|
69
|
-
contactSfId: (_d = user.id) !== null && _d !== void 0 ? _d : '',
|
|
70
|
-
memberRecordId: '',
|
|
71
|
-
};
|
|
72
|
-
return [...members, syntheticEntry];
|
|
73
|
-
}, [groupUsers, loggedInUser === null || loggedInUser === void 0 ? void 0 : loggedInUser.data, selectedGroup, defaultCaseGroupId]);
|
|
74
|
-
const canManageCaseGroups = ability.can(resourceActions.CREATE, resources.CASE_GROUPS);
|
|
75
|
-
const [isAddMembersModalOpen, setIsAddMembersModalOpen] = useState(false);
|
|
76
|
-
const [memberToRemove, setMemberToRemove] = useState(null);
|
|
77
|
-
const { deleteMember, loading: isDeleting } = useDeleteCaseGroupMember();
|
|
78
|
-
// TODO: Uncomment when updateUsers is migrated to GraphQL
|
|
79
|
-
// function onPermissionError(error: Error, user: IGroupUser) {
|
|
80
|
-
// setData([...data]);
|
|
81
|
-
// const message = t(`Could not change permission for {{user}}: {{error}}`, {
|
|
82
|
-
// user: `${user.firstName} ${user.lastName}`,
|
|
83
|
-
// error: error.message,
|
|
84
|
-
// });
|
|
85
|
-
// ToastNotification.addDangerMessage(message);
|
|
86
|
-
// }
|
|
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
|
+
}
|
|
87
39
|
// set and sort fetched data.
|
|
88
|
-
const [initialData, setInitialData] = useState(
|
|
89
|
-
const [data, setData] = useState(
|
|
90
|
-
useEffect(() => setAllData(
|
|
40
|
+
const [initialData, setInitialData] = useState(groupUsers);
|
|
41
|
+
const [data, setData] = useState(groupUsers);
|
|
42
|
+
useEffect(() => setAllData(response || []), [response]);
|
|
91
43
|
function setAllData(users) {
|
|
92
44
|
setInitialData(users);
|
|
93
45
|
setData(users);
|
|
@@ -106,63 +58,21 @@ export const ManageGroupUsers = () => {
|
|
|
106
58
|
return tempUser;
|
|
107
59
|
}));
|
|
108
60
|
};
|
|
109
|
-
const onDefaultToggleSuccess = (user, isChecked) => {
|
|
110
|
-
var _a;
|
|
111
|
-
if (user.ssoUsername !== ((_a = loggedInUser === null || loggedInUser === void 0 ? void 0 : loggedInUser.data) === null || _a === void 0 ? void 0 : _a.ssoUsername) || !selectedGroup)
|
|
112
|
-
return;
|
|
113
|
-
const groupId = isChecked ? selectedGroup.groupNum : null;
|
|
114
|
-
const updatedLoggedInUserData = Object.assign(Object.assign({}, loggedInUser.data), { defaultCaseGroup: groupId });
|
|
115
|
-
dispatchToGlobalMetadataReducer({
|
|
116
|
-
type: GlobalMetadataReducerConstants.setLoggedInUser,
|
|
117
|
-
payload: {
|
|
118
|
-
loggedInUser: Object.assign(Object.assign({}, loggedInUser), { data: updatedLoggedInUserData }),
|
|
119
|
-
},
|
|
120
|
-
});
|
|
121
|
-
if (caseGroups === null || caseGroups === void 0 ? void 0 : caseGroups.data) {
|
|
122
|
-
const updatedGroups = caseGroups.data.map((group) => (Object.assign(Object.assign({}, group), { isDefault: groupId !== null && group.groupNum === groupId })));
|
|
123
|
-
dispatchToGlobalMetadataReducer({
|
|
124
|
-
type: GlobalMetadataReducerConstants.setCaseGroups,
|
|
125
|
-
payload: {
|
|
126
|
-
caseGroups: Object.assign(Object.assign({}, caseGroups), { data: updatedGroups }),
|
|
127
|
-
},
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
};
|
|
131
61
|
const onGroupSelect = (group) => __awaiter(void 0, void 0, void 0, function* () {
|
|
132
62
|
setSelectedGroup(group);
|
|
133
63
|
if (group) {
|
|
134
|
-
|
|
64
|
+
request(loggedInUsersAccount.data.accountNumber, group.groupNum);
|
|
135
65
|
}
|
|
136
66
|
else {
|
|
137
|
-
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
const handleRemoveMember = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
141
|
-
if (!(memberToRemove === null || memberToRemove === void 0 ? void 0 : memberToRemove.memberRecordId))
|
|
142
|
-
return;
|
|
143
|
-
try {
|
|
144
|
-
yield deleteMember(memberToRemove.memberRecordId);
|
|
145
|
-
ToastNotification.addSuccessMessage(t('{{name}} has been removed from the group', {
|
|
146
|
-
name: `${memberToRemove.firstName} ${memberToRemove.lastName}`,
|
|
147
|
-
}));
|
|
148
|
-
refetch();
|
|
149
|
-
}
|
|
150
|
-
catch (error) {
|
|
151
|
-
ToastNotification.addDangerMessage(t('Could not remove member from group: {{message}}', {
|
|
152
|
-
message: error instanceof Error ? error.message : String(error),
|
|
153
|
-
}));
|
|
154
|
-
}
|
|
155
|
-
finally {
|
|
156
|
-
setMemberToRemove(null);
|
|
67
|
+
clearResponse();
|
|
157
68
|
}
|
|
158
69
|
});
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
// }
|
|
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
|
+
}
|
|
166
76
|
const columns = [
|
|
167
77
|
{
|
|
168
78
|
accessor: (user) => user.firstName,
|
|
@@ -182,38 +92,16 @@ export const ManageGroupUsers = () => {
|
|
|
182
92
|
id: 'sso-username',
|
|
183
93
|
title: t('Login'),
|
|
184
94
|
},
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
// account={loggedInUsersAccount.data}
|
|
196
|
-
// group={selectedGroup}
|
|
197
|
-
// users={data}
|
|
198
|
-
// user={user}
|
|
199
|
-
// onError={onPermissionError}
|
|
200
|
-
// />
|
|
201
|
-
// ),
|
|
202
|
-
// },
|
|
203
|
-
...(canManageCaseGroups
|
|
204
|
-
? [
|
|
205
|
-
{
|
|
206
|
-
id: 'default',
|
|
207
|
-
title: t('Default group'),
|
|
208
|
-
cell: (user, index) => (React.createElement(DefaultGroupSwitch, { id: `${index}`, onToggle: onDefaultToggle, onToggleSuccess: onDefaultToggleSuccess, group: selectedGroup, user: user })),
|
|
209
|
-
},
|
|
210
|
-
{
|
|
211
|
-
id: 'remove',
|
|
212
|
-
title: '',
|
|
213
|
-
cell: (user) => (React.createElement(RemoveMemberButton, { user: user, onRemove: setMemberToRemove, isDisabled: isDeleting })),
|
|
214
|
-
},
|
|
215
|
-
]
|
|
216
|
-
: []),
|
|
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
|
+
},
|
|
217
105
|
];
|
|
218
106
|
// filter out search query.
|
|
219
107
|
const [userSearch, setUserSearch] = useState('');
|
|
@@ -233,12 +121,12 @@ export const ManageGroupUsers = () => {
|
|
|
233
121
|
else {
|
|
234
122
|
setData(initialData);
|
|
235
123
|
}
|
|
236
|
-
}, [initialData, userSearch, setData, previousUserSearch,
|
|
124
|
+
}, [initialData, userSearch, setData, previousUserSearch, groupUsers]);
|
|
237
125
|
useEffect(() => {
|
|
238
126
|
if (location.pathname !== '/manage/groups') {
|
|
239
127
|
return;
|
|
240
128
|
}
|
|
241
|
-
setAllData(
|
|
129
|
+
setAllData(response || []);
|
|
242
130
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
243
131
|
}, [location.pathname, loggedInUsersAccount.data]);
|
|
244
132
|
return (React.createElement(React.Fragment, null,
|
|
@@ -246,20 +134,11 @@ export const ManageGroupUsers = () => {
|
|
|
246
134
|
React.createElement("h2", { className: "pf-v6-u-pb-sm" }, t('Groups')),
|
|
247
135
|
React.createElement("p", null, t('To filter cases while searching, add or edit groups.'))),
|
|
248
136
|
React.createElement("div", { className: "toolbar pf-v6-u-justify-content-space-between" },
|
|
249
|
-
React.createElement(GroupSelect, { isDisabled: isFetching || disableGroupSelect, onSelect: onGroupSelect
|
|
137
|
+
React.createElement(GroupSelect, { isDisabled: isFetching || disableGroupSelect, onSelect: onGroupSelect }),
|
|
250
138
|
React.createElement("span", { className: "toolbar-right" },
|
|
251
139
|
React.createElement("label", { htmlFor: "account-group-filter" },
|
|
252
140
|
React.createElement(Trans, null, "Filter by")),
|
|
253
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('') }))),
|
|
254
142
|
React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading group users list') } },
|
|
255
|
-
React.createElement(ManageTable, { ariaLabel: t('Table to manage groups'), columns: columns, data: data, sortInfo: { column: 'first-name', direction: 'asc' }, isFetching: isFetching, isError: false
|
|
256
|
-
memberToRemove && (React.createElement(Modal, { variant: ModalVariant.small, isOpen: true, onClose: () => setMemberToRemove(null), "aria-label": t('Confirm removal') },
|
|
257
|
-
React.createElement(ModalHeader, { title: t('Remove member') }),
|
|
258
|
-
React.createElement(ModalBody, null, t('Are you sure you want to remove {{name}} from this group?', {
|
|
259
|
-
name: `${memberToRemove.firstName} ${memberToRemove.lastName}`,
|
|
260
|
-
})),
|
|
261
|
-
React.createElement(ModalFooter, null,
|
|
262
|
-
React.createElement(Button, { variant: "danger", onClick: handleRemoveMember, isLoading: isDeleting, isDisabled: isDeleting }, t('Remove')),
|
|
263
|
-
React.createElement(Button, { variant: "link", onClick: () => setMemberToRemove(null), isDisabled: isDeleting }, t('Cancel'))))),
|
|
264
|
-
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 }))));
|
|
265
144
|
};
|
|
@@ -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"}
|