@rh-support/manage 2.5.275 → 2.5.279

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.
@@ -1 +1 @@
1
- {"version":3,"file":"AddMembersModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/Groups/AddMembersModal/AddMembersModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;AAM3E,OAAO,KAAgC,MAAM,OAAO,CAAC;AAIrD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE9E,UAAU,MAAM;IACZ,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,uBAAuB,EAAE,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,MAAM,qBAuGrF"}
1
+ {"version":3,"file":"AddMembersModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/Groups/AddMembersModal/AddMembersModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;AAM3E,OAAO,KAAgC,MAAM,OAAO,CAAC;AAIrD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE9E,UAAU,MAAM;IACZ,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,uBAAuB,EAAE,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,MAAM,qBAyGrF"}
@@ -61,7 +61,7 @@ export function AddMembersModal({ group, existingMembers, onSuccess, onClose })
61
61
  ToastNotification.addDangerMessage(t('You do not have permission to add members to this group'));
62
62
  }
63
63
  else {
64
- ToastNotification.addDangerMessage(t('There was an error adding members to this group'));
64
+ ToastNotification.addDangerMessage(t('There was an error adding members to this group. Please try again or refresh'));
65
65
  }
66
66
  }
67
67
  onClose();
@@ -1 +1 @@
1
- {"version":3,"file":"GroupSelect.d.ts","sourceRoot":"","sources":["../../../../../src/components/Groups/GroupSelect/GroupSelect.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;AAwC3E,OAAO,KAAmD,MAAM,OAAO,CAAC;AAWxE,UAAU,MAAM;IACZ,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAKD,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,sBAgpBxC,CAAC"}
1
+ {"version":3,"file":"GroupSelect.d.ts","sourceRoot":"","sources":["../../../../../src/components/Groups/GroupSelect/GroupSelect.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;AAwC3E,OAAO,KAAmD,MAAM,OAAO,CAAC;AAWxE,UAAU,MAAM;IACZ,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAKD,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,sBAypBxC,CAAC"}
@@ -49,6 +49,12 @@ export const GroupSelect = (props) => {
49
49
  const { deleteGroup: deleteGroupMutation, loading: deleteLoading } = useDeleteCaseGroup();
50
50
  const hasFetchedFromGraphQL = useRef(false);
51
51
  const [groupsFetchCompleted, setGroupsFetchCompleted] = useState(false);
52
+ const previousCaseGroupsIsError = usePrevious(caseGroups.isError);
53
+ useEffect(() => {
54
+ if (caseGroups.isError && !previousCaseGroupsIsError) {
55
+ ToastNotification.addDangerMessage(t('Could not fetch groups. Please try again or refresh'));
56
+ }
57
+ }, [caseGroups.isError, previousCaseGroupsIsError, t]);
52
58
  // Always fetch groups from GraphQL — never rely on potentially stale Hydra data.
53
59
  // Auto-select only after this settles so members can load against real group data.
54
60
  useEffect(() => {
@@ -253,6 +259,9 @@ export const GroupSelect = (props) => {
253
259
  if (message.includes('insufficient access rights')) {
254
260
  ToastNotification.addDangerMessage(t('You do not have permission to delete this group'));
255
261
  }
262
+ else {
263
+ ToastNotification.addDangerMessage(t('There was an error deleting this group'));
264
+ }
256
265
  }
257
266
  finally {
258
267
  setAction('');
@@ -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,yBAwV5B,CAAC"}
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"}
@@ -38,7 +38,13 @@ export const ManageGroupUsers = () => {
38
38
  const dispatchToGlobalMetadataReducer = useGlobalDispatchContext();
39
39
  const disableGroupSelect = !loggedInUsersAccount || !loggedInUsersAccount.data || !loggedInUsersAccount.data.accountNumber;
40
40
  const [selectedGroup, setSelectedGroup] = useState();
41
- const { data: groupUsers, loading: isFetching, fetchMembers, refetch } = useCaseGroupMembers();
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]);
42
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;
43
49
  const membersWithOrgAdmin = useMemo(() => {
44
50
  var _a, _b, _c, _d;
@@ -1 +1 @@
1
- {"version":3,"file":"AddEditCaseLabelModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ManageCaseLabels/AddEditCaseLabelModal.tsx"],"names":[],"mappings":"AAeA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAGnD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,MAAM,MAAM,mBAAmB,GAAG;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,UAAU,MAAM;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAAC;CAClH;AAED,wBAAgB,qBAAqB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,qBA0H1G"}
1
+ {"version":3,"file":"AddEditCaseLabelModal.d.ts","sourceRoot":"","sources":["../../../../src/components/ManageCaseLabels/AddEditCaseLabelModal.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAGnD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,MAAM,MAAM,mBAAmB,GAAG;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,UAAU,MAAM;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAAC;CAClH;AAED,wBAAgB,qBAAqB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,qBAkJ1G"}
@@ -7,7 +7,8 @@ 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, ButtonVariant, FormGroup, FormHelperText, HelperText, HelperTextItem, Modal, ModalBody, ModalFooter, ModalHeader, ModalVariant, TextInput, } from '@patternfly/react-core';
10
+ import { Button, ButtonVariant, Flex, FlexItem, FormGroup, FormHelperText, HelperText, HelperTextItem, Modal, ModalBody, ModalFooter, ModalHeader, ModalVariant, TextInput, } from '@patternfly/react-core';
11
+ import { CASE_LABEL_NAME_MAX_LENGTH } from '@rh-support/utils';
11
12
  import isEmpty from 'lodash/isEmpty';
12
13
  import React, { useEffect, useState } from 'react';
13
14
  import { Trans, useTranslation } from 'react-i18next';
@@ -21,20 +22,19 @@ export function AddEditCaseLabelModal({ isOpen, addMode, label, isSaving = false
21
22
  setError('');
22
23
  }
23
24
  }, [isOpen, addMode, label]);
24
- const validate = (value) => {
25
- if (isEmpty(value.trim())) {
26
- return t('Case label name cannot be empty.');
27
- }
28
- return '';
29
- };
25
+ const isOverMaxLength = name.length > CASE_LABEL_NAME_MAX_LENGTH;
26
+ const isNameEmpty = isEmpty(name.trim());
27
+ const canSave = !isNameEmpty && !isOverMaxLength && !isSaving;
30
28
  const resetForm = () => {
31
29
  setName('');
32
30
  setError('');
33
31
  };
34
32
  const handleSave = () => __awaiter(this, void 0, void 0, function* () {
35
- const validationError = validate(name);
36
- if (!isEmpty(validationError)) {
37
- setError(validationError);
33
+ if (isNameEmpty) {
34
+ setError(t('Case label name cannot be empty.'));
35
+ return;
36
+ }
37
+ if (isOverMaxLength) {
38
38
  return;
39
39
  }
40
40
  const result = yield onSave(name.trim(), { keepOpen: false });
@@ -43,9 +43,11 @@ export function AddEditCaseLabelModal({ isOpen, addMode, label, isSaving = false
43
43
  }
44
44
  });
45
45
  const handleSaveAndNew = () => __awaiter(this, void 0, void 0, function* () {
46
- const validationError = validate(name);
47
- if (!isEmpty(validationError)) {
48
- setError(validationError);
46
+ if (isNameEmpty) {
47
+ setError(t('Case label name cannot be empty.'));
48
+ return;
49
+ }
50
+ if (isOverMaxLength) {
49
51
  return;
50
52
  }
51
53
  const result = yield onSave(name.trim(), { keepOpen: true });
@@ -68,15 +70,27 @@ export function AddEditCaseLabelModal({ isOpen, addMode, label, isSaving = false
68
70
  React.createElement(FormGroup, { label: t('Case label name'), isRequired: true },
69
71
  React.createElement(TextInput, { isRequired: true, type: "text", id: "case-label-name-input", value: name, onChange: (_, value) => {
70
72
  setName(value);
71
- setError('');
72
- }, placeholder: t('Enter a unique case label name'), validated: isEmpty(error) ? 'default' : 'error', isDisabled: isSaving }),
73
+ if (!isEmpty(error)) {
74
+ setError('');
75
+ }
76
+ }, placeholder: t('Enter a unique case label name'), validated: isOverMaxLength || !isEmpty(error) ? 'error' : 'default', isDisabled: isSaving }),
77
+ React.createElement(FormHelperText, null,
78
+ React.createElement(Flex, { justifyContent: { default: 'justifyContentFlexEnd' } },
79
+ React.createElement(FlexItem, null,
80
+ React.createElement(HelperText, null,
81
+ React.createElement(HelperTextItem, { variant: "default", className: `pf-v6-u-font-size-sm ${isOverMaxLength
82
+ ? 'pf-v6-u-text-color-status-danger'
83
+ : 'pf-v6-u-text-color-subtle'}` }, t('{{count}}/{{max}} characters', {
84
+ count: name.length,
85
+ max: CASE_LABEL_NAME_MAX_LENGTH,
86
+ })))))),
73
87
  !isEmpty(error) && (React.createElement(FormHelperText, null,
74
88
  React.createElement(HelperText, null,
75
89
  React.createElement(HelperTextItem, { variant: "error" }, error)))))),
76
90
  React.createElement(ModalFooter, null,
77
- React.createElement(Button, { key: "save", variant: ButtonVariant.primary, onClick: handleSave, isDisabled: isEmpty(name.trim()) || !isEmpty(error) || isSaving, isLoading: isSaving },
91
+ React.createElement(Button, { key: "save", variant: ButtonVariant.primary, onClick: handleSave, isDisabled: !canSave, isLoading: isSaving },
78
92
  React.createElement(Trans, null, "Save")),
79
- addMode && (React.createElement(Button, { key: "save-and-new", variant: ButtonVariant.secondary, onClick: handleSaveAndNew, isDisabled: isEmpty(name.trim()) || !isEmpty(error) || isSaving, isLoading: isSaving },
93
+ addMode && (React.createElement(Button, { key: "save-and-new", variant: ButtonVariant.secondary, onClick: handleSaveAndNew, isDisabled: !canSave, isLoading: isSaving },
80
94
  React.createElement(Trans, null, "Save & New"))),
81
95
  React.createElement(Button, { key: "cancel", variant: ButtonVariant.link, onClick: handleClose, isDisabled: isSaving },
82
96
  React.createElement(Trans, null, "Cancel")))));
@@ -1 +1 @@
1
- {"version":3,"file":"ManageCaseLabelsTab.d.ts","sourceRoot":"","sources":["../../../../src/components/ManageCaseLabels/ManageCaseLabelsTab.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAoC5D,wBAAgB,mBAAmB,sBAsTlC"}
1
+ {"version":3,"file":"ManageCaseLabelsTab.d.ts","sourceRoot":"","sources":["../../../../src/components/ManageCaseLabels/ManageCaseLabelsTab.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAoC5D,wBAAgB,mBAAmB,sBAwUlC"}
@@ -41,8 +41,9 @@ export function ManageCaseLabelsTab() {
41
41
  const { t } = useTranslation();
42
42
  const history = useHistory();
43
43
  const confirmation = useConfirmation();
44
- const { globalMetadataState: { loggedInUsersAccount }, } = useGlobalStateContext();
44
+ const { globalMetadataState: { loggedInUsersAccount, loggedInUserRights }, } = useGlobalStateContext();
45
45
  const accountId = (_a = loggedInUsersAccount === null || loggedInUsersAccount === void 0 ? void 0 : loggedInUsersAccount.data) === null || _a === void 0 ? void 0 : _a.salesforceAccountId;
46
+ const canManageCaseLabels = loggedInUserRights.data.isOrgAdmin();
46
47
  const { labels: fetchedLabels, loading: isFetchingLabels, error: labelsError, refetch } = useCaseLabels(accountId);
47
48
  const { createCaseLabel, loading: isCreatingLabel } = useCreateCaseLabel();
48
49
  const { updateCaseLabel, loading: isUpdatingLabel } = useUpdateCaseLabel();
@@ -157,7 +158,8 @@ export function ManageCaseLabelsTab() {
157
158
  }
158
159
  });
159
160
  const onViewAssignedCases = (label) => {
160
- const query = `caseLabel:("${label.id}") orderBy lastModifiedDate desc`;
161
+ // Match Case List URL format (SolrQueryBuilder): caseLabel: ("<id>") orderBy lastModifiedDate desc
162
+ const query = `caseLabel: ("${label.id}") orderBy lastModifiedDate desc`;
161
163
  history.push({
162
164
  pathname: '/case/list',
163
165
  search: getStringifiedParams({
@@ -180,11 +182,11 @@ export function ManageCaseLabelsTab() {
180
182
  React.createElement("div", { className: "case-label-row__actions" },
181
183
  label.assignedCaseCount > 0 && (React.createElement(Button, { variant: ButtonVariant.link, isInline: true, onClick: () => onViewAssignedCases(label), "data-tracking-id": "case-label-view-assigned-cases" },
182
184
  React.createElement(Trans, null, "View assigned cases"))),
183
- React.createElement(ActionList, { isIconList: true },
185
+ canManageCaseLabels && (React.createElement(ActionList, { isIconList: true },
184
186
  React.createElement(ActionListItem, null,
185
187
  React.createElement(Button, { icon: React.createElement(PencilAltIcon, null), "aria-label": t('Edit case label {{name}}', { name: label.name }), variant: "plain", onClick: () => onOpenEditModal(label), "data-tracking-id": "case-label-edit" })),
186
188
  React.createElement(ActionListItem, null,
187
- React.createElement(Button, { icon: React.createElement(TrashIcon, null), "aria-label": t('Delete case label {{name}}', { name: label.name }), variant: "plain", onClick: () => onDeleteLabel(label), "data-tracking-id": "case-label-delete" })))))),
189
+ React.createElement(Button, { icon: React.createElement(TrashIcon, null), "aria-label": t('Delete case label {{name}}', { name: label.name }), variant: "plain", onClick: () => onDeleteLabel(label), "data-tracking-id": "case-label-delete" }))))))),
188
190
  },
189
191
  ];
190
192
  return (React.createElement(React.Fragment, null,
@@ -199,19 +201,20 @@ export function ManageCaseLabelsTab() {
199
201
  React.createElement(Trans, null, "Case labels"))),
200
202
  !hasNoLabels && (React.createElement(React.Fragment, null,
201
203
  React.createElement(SearchInput, { className: "pf-v6-u-flex-grow-1 pf-v6-c-search-input pf-v6-u-background-color-100", value: searchString, id: "search-case-label-input", placeholder: t('Search case label by name.'), "aria-label": t('Search case label by name'), onChange: (_, val) => setSearchString(val), onClear: () => setSearchString('') }),
202
- React.createElement("span", { className: "pf-v6-u-ml-sm" },
204
+ canManageCaseLabels && (React.createElement("span", { className: "pf-v6-u-ml-sm" },
203
205
  React.createElement(Button, { variant: ButtonVariant.primary, isInline: true, onClick: onOpenAddModal, "data-tracking-id": "case-label-add-button" },
204
- React.createElement(Trans, null, "Add")))))),
206
+ React.createElement(Trans, null, "Add"))))))),
205
207
  !hasNoLabels && (React.createElement("div", { className: "toolbar-right case-labels-toolbar__loaded pf-v6-u-color-200" }, t('{{loaded}} of {{total}} loaded.', {
206
208
  loaded: filteredLabels.length,
207
209
  total: filteredLabels.length,
208
210
  })))),
209
211
  React.createElement(AddEditCaseLabelModal, { isOpen: isModalOpen, addMode: isInAddMode, label: selectedLabel, isSaving: isCreatingLabel || isUpdatingLabel, onClose: closeModal, onSave: onSaveLabel }),
210
212
  React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading case labels list') } }, hasNoLabels ? (React.createElement("div", { className: "table-wrapper case-labels-empty-state" },
211
- React.createElement(EmptyState, { headingLevel: "h2", icon: CubesIcon, titleText: t('Create your first case label'), variant: EmptyStateVariant.lg },
212
- React.createElement(EmptyStateBody, null,
213
- React.createElement(Trans, null, "Case labels help you organize and categorize cases with custom tags, making them easier to find, filter, and manage.")),
214
- React.createElement(EmptyStateFooter, null,
213
+ React.createElement(EmptyState, { headingLevel: "h2", icon: CubesIcon, titleText: canManageCaseLabels ? t('Create your first case label') : t('No case labels available'), variant: EmptyStateVariant.lg },
214
+ React.createElement(EmptyStateBody, null, canManageCaseLabels ? (React.createElement(Trans, null, "Case labels help you organize and categorize cases with custom tags, making them easier to find, filter, and manage.")) : (React.createElement(Trans, null, "Your organization admin hasn't created any labels yet. Contact them to add labels for organizing and categorizing cases."))),
215
+ canManageCaseLabels && (React.createElement(EmptyStateFooter, null,
215
216
  React.createElement(Button, { variant: ButtonVariant.link, onClick: onOpenAddModal, "data-tracking-id": "case-label-empty-create-button" },
216
- React.createElement(Trans, null, "Create label")))))) : (React.createElement(ManageTable, { ariaLabel: t('Table to manage case labels'), columns: columns, data: filteredLabels, errorVariant: AlertVariant.warning, isFetching: isFetchingLabels, isError: !!labelsError, errorTitle: t('Case labels error'), errorComponent: React.createElement(Trans, null, "Could not get case labels"), pagination: false, noResultText: t('There are no results to display. Try adding a case label or refining your search') })))));
217
+ React.createElement(Trans, null, "Create label"))))))) : (React.createElement(ManageTable, { ariaLabel: t('Table to manage case labels'), columns: columns, data: filteredLabels, errorVariant: AlertVariant.warning, isFetching: isFetchingLabels, isError: !!labelsError, errorTitle: t('Case labels error'), errorComponent: React.createElement(Trans, null, "Could not get case labels"), noResultText: canManageCaseLabels
218
+ ? t('There are no results to display. Try adding a case label or refining your search')
219
+ : t('There are no results to display. Try refining your search') })))));
217
220
  }
@@ -1 +1 @@
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
+ {"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,14 +1,10 @@
1
- import { useGlobalStateContext } from '@rh-support/react-context';
2
1
  import React from 'react';
3
- import { PreferencesACL } from './sections/PreferencesACL';
4
2
  import { PreferencesCaseCreate } from './sections/PreferencesCaseCreate';
5
3
  import { PreferencesCaseSearch } from './sections/PreferencesCaseSearch';
6
4
  import { PreferencesCaseView } from './sections/PreferencesCaseView';
7
5
  export function PreferencesBody(props) {
8
- const { globalMetadataState: { loggedInUserRights }, } = useGlobalStateContext();
9
6
  return (React.createElement("div", { className: "pfe-l-grid pfe-m-gutters pfe-m-all-4-col" },
10
7
  React.createElement(PreferencesCaseSearch, null),
11
8
  React.createElement(PreferencesCaseView, null),
12
- React.createElement(PreferencesCaseCreate, null),
13
- loggedInUserRights.data.isOrgAdmin() && !loggedInUserRights.data.isInternal() && React.createElement(PreferencesACL, null)));
9
+ React.createElement(PreferencesCaseCreate, null)));
14
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useCaseGroupGraphQL.d.ts","sourceRoot":"","sources":["../../../src/hooks/useCaseGroupGraphQL.ts"],"names":[],"mappings":"AACA,OAAO,EACH,KAAK,6BAA6B,EAClC,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,EAClC,KAAK,uBAAuB,EAE5B,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAQlC,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,KAAK,uBAAuB,EAAsC,MAAM,0BAA0B,CAAC;AAE5G,UAAU,yBAAyB;IAC/B,IAAI,EAAE,uBAAuB,EAAE,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED,wBAAgB,mBAAmB,IAAI,yBAAyB,CA6B/D;AAED,UAAU,wBAAwB;IAC9B,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACnF,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,IAAI,wBAAwB,CAW7D;AAED,UAAU,8BAA8B;IACpC,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,6BAA6B,CAAC,CAAC;IAC7F,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,wBAAwB,IAAI,8BAA8B,CAgBzE;AAED,UAAU,wBAAwB;IAC9B,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC/E,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,IAAI,wBAAwB,CAW7D;AAED,UAAU,wBAAwB;IAC9B,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC9D,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,IAAI,wBAAwB,CAW7D;AAED,UAAU,2BAA2B;IACjC,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAClG,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,qBAAqB,IAAI,2BAA2B,CAcnE;AAED,UAAU,8BAA8B;IACpC,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,6BAA6B,CAAC,CAAC;IAC3E,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,wBAAwB,IAAI,8BAA8B,CAWzE"}
1
+ {"version":3,"file":"useCaseGroupGraphQL.d.ts","sourceRoot":"","sources":["../../../src/hooks/useCaseGroupGraphQL.ts"],"names":[],"mappings":"AACA,OAAO,EACH,KAAK,6BAA6B,EAClC,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,EAClC,KAAK,uBAAuB,EAE5B,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAQlC,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,KAAK,uBAAuB,EAAsC,MAAM,0BAA0B,CAAC;AAE5G,UAAU,yBAAyB;IAC/B,IAAI,EAAE,uBAAuB,EAAE,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED,wBAAgB,mBAAmB,IAAI,yBAAyB,CAsC/D;AAED,UAAU,wBAAwB;IAC9B,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACnF,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,IAAI,wBAAwB,CAW7D;AAED,UAAU,8BAA8B;IACpC,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,6BAA6B,CAAC,CAAC;IAC7F,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,wBAAwB,IAAI,8BAA8B,CAgBzE;AAED,UAAU,wBAAwB;IAC9B,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC/E,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,IAAI,wBAAwB,CAW7D;AAED,UAAU,wBAAwB;IAC9B,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC9D,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,IAAI,wBAAwB,CAW7D;AAED,UAAU,2BAA2B;IACjC,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAClG,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,qBAAqB,IAAI,2BAA2B,CAcnE;AAED,UAAU,8BAA8B;IACpC,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,6BAA6B,CAAC,CAAC;IAC3E,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,wBAAwB,IAAI,8BAA8B,CAWzE"}
@@ -31,11 +31,19 @@ export function useCaseGroupMembers() {
31
31
  const fetchMembers = (id) => {
32
32
  setGroupId(id);
33
33
  };
34
+ const refetchMembers = () => {
35
+ if (!groupId)
36
+ return;
37
+ void refetch({
38
+ where: { Group__c: { eq: groupId } },
39
+ first: 2000,
40
+ });
41
+ };
34
42
  return {
35
43
  data: members,
36
44
  loading,
37
45
  error: error,
38
- refetch,
46
+ refetch: refetchMembers,
39
47
  fetchMembers,
40
48
  };
41
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useCaseLabelGraphQL.d.ts","sourceRoot":"","sources":["../../../src/hooks/useCaseLabelGraphQL.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,KAAK,uBAAuB,EAE5B,KAAK,uBAAuB,EAI5B,KAAK,uBAAuB,EAM/B,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAQlE,UAAU,mBAAmB;IACzB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAmCrE;AAED,UAAU,wBAAwB;IAC9B,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACvF,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,IAAI,wBAAwB,CAkB7D;AAED,UAAU,wBAAwB;IAC9B,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAChF,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,IAAI,wBAAwB,CAkB7D;AAED,UAAU,wBAAwB;IAC9B,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAClE,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,IAAI,wBAAwB,CAW7D"}
1
+ {"version":3,"file":"useCaseLabelGraphQL.d.ts","sourceRoot":"","sources":["../../../src/hooks/useCaseLabelGraphQL.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,KAAK,uBAAuB,EAE5B,KAAK,uBAAuB,EAE5B,KAAK,uBAAuB,EAQ/B,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAQlE,UAAU,mBAAmB;IACzB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,mBAAmB,CA8BrE;AAED,UAAU,wBAAwB;IAC9B,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACvF,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,IAAI,wBAAwB,CA4B7D;AAED,UAAU,wBAAwB;IAC9B,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAChF,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,IAAI,wBAAwB,CAkB7D;AAED,UAAU,wBAAwB;IAC9B,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAClE,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,IAAI,wBAAwB,CAW7D"}
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import { useApolloClient, useMutation } from '@apollo/client/react';
11
- import { CREATE_CASE_LABEL, DELETE_CASE_LABEL, GET_CASE_LABELS, UPDATE_CASE_LABEL, } from '@rh-support/utils';
11
+ import { CASE_LABEL_QUERY_LIMIT, CREATE_CASE_LABEL, DELETE_CASE_LABEL, fetchAllAccountCaseLabels, GET_CASE_LABELS, UPDATE_CASE_LABEL, } from '@rh-support/utils';
12
12
  import unescape from 'lodash/unescape';
13
13
  import { useCallback, useEffect, useState } from 'react';
14
14
  const mapCaseLabelNode = (node) => {
@@ -25,7 +25,6 @@ export function useCaseLabels(accountId) {
25
25
  const [loading, setLoading] = useState(false);
26
26
  const [error, setError] = useState(undefined);
27
27
  const fetchLabels = useCallback(() => __awaiter(this, void 0, void 0, function* () {
28
- var _a, _b, _c, _d;
29
28
  if (!accountId) {
30
29
  setLabels([]);
31
30
  return;
@@ -33,13 +32,8 @@ export function useCaseLabels(accountId) {
33
32
  setLoading(true);
34
33
  setError(undefined);
35
34
  try {
36
- const { data } = yield client.query({
37
- query: GET_CASE_LABELS,
38
- variables: { where: { Account__c: { eq: accountId } } },
39
- fetchPolicy: 'network-only',
40
- });
41
- const edges = (_d = (_c = (_b = (_a = data === null || data === void 0 ? void 0 : data.redhat_support_uiapi) === null || _a === void 0 ? void 0 : _a.query) === null || _b === void 0 ? void 0 : _b.RedHatSupportCaseLabel__c) === null || _c === void 0 ? void 0 : _c.edges) !== null && _d !== void 0 ? _d : [];
42
- setLabels(edges.map(({ node }) => mapCaseLabelNode(node)).filter((label) => label.id && label.name));
35
+ const labelNodes = yield fetchAllAccountCaseLabels(client, accountId);
36
+ setLabels(labelNodes.map((node) => mapCaseLabelNode(node)).filter((label) => label.id && label.name));
43
37
  }
44
38
  catch (e) {
45
39
  setError(e);
@@ -66,6 +60,16 @@ export function useCreateCaseLabel() {
66
60
  },
67
61
  },
68
62
  },
63
+ refetchQueries: [
64
+ {
65
+ query: GET_CASE_LABELS,
66
+ variables: {
67
+ where: { Account__c: { eq: accountId } },
68
+ first: CASE_LABEL_QUERY_LIMIT,
69
+ },
70
+ },
71
+ ],
72
+ awaitRefetchQueries: true,
69
73
  });
70
74
  return result.data;
71
75
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rh-support/manage",
3
- "version": "2.5.275",
3
+ "version": "2.5.279",
4
4
  "description": "Customer Support Manage App",
5
5
  "author": "Jordan Eudy <jeudy100@gmail.com>",
6
6
  "license": "ISC",
@@ -78,12 +78,12 @@
78
78
  "@patternfly/patternfly": "6.2.1",
79
79
  "@patternfly/react-core": "6.2.1",
80
80
  "@patternfly/react-table": "6.2.1",
81
- "@rh-support/components": "2.5.225",
81
+ "@rh-support/components": "2.5.230",
82
82
  "@rh-support/configs": "2.0.75",
83
- "@rh-support/react-context": "2.5.321",
83
+ "@rh-support/react-context": "2.5.325",
84
84
  "@rh-support/types": "2.0.26",
85
- "@rh-support/user-permissions": "2.5.173",
86
- "@rh-support/utils": "2.5.152",
85
+ "@rh-support/user-permissions": "2.5.178",
86
+ "@rh-support/utils": "2.5.157",
87
87
  "@types/react-beautiful-dnd": "^13.0.0",
88
88
  "i18next": "^23.15.0",
89
89
  "lodash": ">=4.17.15",
@@ -102,5 +102,5 @@
102
102
  "defaults and supports es6-module",
103
103
  "maintained node versions"
104
104
  ],
105
- "gitHead": "4cb198056cdf53141dcdf4d9b55d9cbb36940e05"
105
+ "gitHead": "78790ed8b35b8acbc7a3a4a182d212499a0cd181"
106
106
  }