@rh-support/cases 2.6.235 → 2.7.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/lib/esm/components/case/NewCaseButton.js +1 -1
  2. package/lib/esm/components/case-list/CaseList.d.ts +0 -7
  3. package/lib/esm/components/case-list/CaseList.d.ts.map +1 -1
  4. package/lib/esm/components/case-list/CaseList.js +372 -137
  5. package/lib/esm/components/case-list/CaseListContext.d.ts.map +1 -1
  6. package/lib/esm/components/case-list/CaseListContext.js +5 -2
  7. package/lib/esm/components/case-list/CaseListFilterContext.d.ts.map +1 -1
  8. package/lib/esm/components/case-list/CaseListFilterContext.js +2 -1
  9. package/lib/esm/components/case-list/CaseListFilterHelpers.d.ts +3 -2
  10. package/lib/esm/components/case-list/CaseListFilterHelpers.d.ts.map +1 -1
  11. package/lib/esm/components/case-list/CaseListFilterHelpers.js +19 -6
  12. package/lib/esm/components/case-list/CaseListFilterReducer.d.ts +36 -4
  13. package/lib/esm/components/case-list/CaseListFilterReducer.d.ts.map +1 -1
  14. package/lib/esm/components/case-list/CaseListFilterReducer.js +6 -12
  15. package/lib/esm/components/case-list/CaseListReducer.d.ts +22 -10
  16. package/lib/esm/components/case-list/CaseListReducer.d.ts.map +1 -1
  17. package/lib/esm/components/case-list/CaseListReducer.js +25 -7
  18. package/lib/esm/components/case-list/case-list-filters/AccountsFilter.d.ts.map +1 -1
  19. package/lib/esm/components/case-list/case-list-filters/AccountsFilter.js +18 -11
  20. package/lib/esm/components/case-list/case-list-filters/AdditionalFilters.d.ts.map +1 -1
  21. package/lib/esm/components/case-list/case-list-filters/AdditionalFilters.js +20 -4
  22. package/lib/esm/components/case-list/case-list-filters/CaseLabelsFilter.d.ts +3 -0
  23. package/lib/esm/components/case-list/case-list-filters/CaseLabelsFilter.d.ts.map +1 -0
  24. package/lib/esm/components/case-list/case-list-filters/CaseLabelsFilter.js +178 -0
  25. package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.d.ts +1 -7
  26. package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.d.ts.map +1 -1
  27. package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.js +12 -16
  28. package/lib/esm/components/case-list/case-list-filters/CaseListFilters.d.ts +2 -5
  29. package/lib/esm/components/case-list/case-list-filters/CaseListFilters.d.ts.map +1 -1
  30. package/lib/esm/components/case-list/case-list-filters/CaseListFilters.js +14 -13
  31. package/lib/esm/components/case-list/case-list-filters/CreatorSsoNameFilter.d.ts.map +1 -1
  32. package/lib/esm/components/case-list/case-list-filters/CreatorSsoNameFilter.js +21 -14
  33. package/lib/esm/components/case-list/case-list-filters/CreatorSsoNameFilterChip.d.ts.map +1 -1
  34. package/lib/esm/components/case-list/case-list-filters/CreatorSsoNameFilterChip.js +3 -0
  35. package/lib/esm/components/case-list/case-list-filters/GroupsFilter.d.ts +11 -1
  36. package/lib/esm/components/case-list/case-list-filters/GroupsFilter.d.ts.map +1 -1
  37. package/lib/esm/components/case-list/case-list-filters/GroupsFilter.js +90 -70
  38. package/lib/esm/components/case-list/case-list-filters/ProductFilterChip.d.ts +1 -3
  39. package/lib/esm/components/case-list/case-list-filters/ProductFilterChip.d.ts.map +1 -1
  40. package/lib/esm/components/case-list/case-list-filters/ProductFilterChip.js +2 -2
  41. package/lib/esm/components/case-list/case-list-filters/ProductsFilter.d.ts +5 -4
  42. package/lib/esm/components/case-list/case-list-filters/ProductsFilter.d.ts.map +1 -1
  43. package/lib/esm/components/case-list/case-list-filters/ProductsFilter.js +15 -54
  44. package/lib/esm/components/case-list/case-list-filters/SeverityFilter.d.ts +0 -3
  45. package/lib/esm/components/case-list/case-list-filters/SeverityFilter.d.ts.map +1 -1
  46. package/lib/esm/components/case-list/case-list-filters/SeverityFilter.js +18 -44
  47. package/lib/esm/components/case-list/case-list-filters/StatusFilter.d.ts +0 -3
  48. package/lib/esm/components/case-list/case-list-filters/StatusFilter.d.ts.map +1 -1
  49. package/lib/esm/components/case-list/case-list-filters/StatusFilter.js +23 -49
  50. package/lib/esm/components/case-list/case-list-filters/VersionsFilter.d.ts +1 -3
  51. package/lib/esm/components/case-list/case-list-filters/VersionsFilter.d.ts.map +1 -1
  52. package/lib/esm/components/case-list/case-list-filters/VersionsFilter.js +60 -59
  53. package/lib/esm/components/case-list/case-list-table/ArchivedCaseLabel.d.ts +3 -0
  54. package/lib/esm/components/case-list/case-list-table/ArchivedCaseLabel.d.ts.map +1 -0
  55. package/lib/esm/components/case-list/case-list-table/ArchivedCaseLabel.js +8 -0
  56. package/lib/esm/components/case-list/case-list-table/CaseListLabelGroup.d.ts +9 -0
  57. package/lib/esm/components/case-list/case-list-table/CaseListLabelGroup.d.ts.map +1 -0
  58. package/lib/esm/components/case-list/case-list-table/CaseListLabelGroup.js +105 -0
  59. package/lib/esm/components/case-list/case-list-table/CaseListTable.d.ts +10 -3
  60. package/lib/esm/components/case-list/case-list-table/CaseListTable.d.ts.map +1 -1
  61. package/lib/esm/components/case-list/case-list-table/CaseListTable.js +98 -84
  62. package/lib/esm/components/case-list/case-list-table/CaseListTableRow.d.ts +33 -0
  63. package/lib/esm/components/case-list/case-list-table/CaseListTableRow.d.ts.map +1 -0
  64. package/lib/esm/components/case-list/case-list-table/CaseListTableRow.js +51 -0
  65. package/lib/esm/components/case-list/case-list-table/CaseListTableSkeletonRow.d.ts +9 -0
  66. package/lib/esm/components/case-list/case-list-table/CaseListTableSkeletonRow.d.ts.map +1 -0
  67. package/lib/esm/components/case-list/case-list-table/CaseListTableSkeletonRow.js +10 -0
  68. package/lib/esm/components/case-list/case-list-table/CloseCaseBtn.d.ts.map +1 -1
  69. package/lib/esm/components/case-list/case-list-table/CloseCaseBtn.js +27 -28
  70. package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.d.ts +0 -5
  71. package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.d.ts.map +1 -1
  72. package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.js +51 -70
  73. package/lib/esm/components/case-list/case-list-table/ExportCaseListCSV.d.ts.map +1 -1
  74. package/lib/esm/components/case-list/case-list-table/ExportCaseListCSV.js +5 -15
  75. package/lib/esm/components/case-list/case-list-table/SeverityLabel.js +1 -1
  76. package/lib/esm/components/case-list/case-list-table/TableActionsDropdown.d.ts.map +1 -1
  77. package/lib/esm/components/case-list/case-list-table/TableActionsDropdown.js +4 -5
  78. package/lib/esm/components/case-list/case-list-table/table-column-selector/TableColumnSelector.d.ts.map +1 -1
  79. package/lib/esm/components/case-list/case-list-table/table-column-selector/TableColumnSelector.js +1 -0
  80. package/lib/esm/components/case-list/case-search/AdvanceSearchToggleButton.d.ts +8 -0
  81. package/lib/esm/components/case-list/case-search/AdvanceSearchToggleButton.d.ts.map +1 -0
  82. package/lib/esm/components/case-list/case-search/AdvanceSearchToggleButton.js +8 -0
  83. package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.d.ts.map +1 -1
  84. package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.js +15 -2
  85. package/lib/esm/components/case-list/case-search/CaseSearch.d.ts.map +1 -1
  86. package/lib/esm/components/case-list/case-search/CaseSearch.js +55 -24
  87. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAccountSection.d.ts +10 -0
  88. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAccountSection.d.ts.map +1 -0
  89. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAccountSection.js +29 -0
  90. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAuditsSection.d.ts +10 -0
  91. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAuditsSection.d.ts.map +1 -0
  92. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAuditsSection.js +16 -0
  93. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchCaseSection.d.ts +9 -0
  94. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchCaseSection.d.ts.map +1 -0
  95. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchCaseSection.js +21 -0
  96. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchDateRangeField.d.ts +12 -0
  97. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchDateRangeField.d.ts.map +1 -0
  98. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchDateRangeField.js +31 -0
  99. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchFieldBlock.d.ts +10 -0
  100. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchFieldBlock.d.ts.map +1 -0
  101. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchFieldBlock.js +10 -0
  102. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchModal.d.ts +10 -0
  103. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchModal.d.ts.map +1 -0
  104. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchModal.js +92 -0
  105. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchOwnerSection.d.ts +9 -0
  106. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchOwnerSection.d.ts.map +1 -0
  107. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchOwnerSection.js +20 -0
  108. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchProductSection.d.ts +9 -0
  109. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchProductSection.d.ts.map +1 -0
  110. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchProductSection.js +28 -0
  111. package/lib/esm/components/case-list/case-search/advance-search-modal/ProductVersionDrilldownSelect.d.ts +9 -0
  112. package/lib/esm/components/case-list/case-search/advance-search-modal/ProductVersionDrilldownSelect.d.ts.map +1 -0
  113. package/lib/esm/components/case-list/case-search/advance-search-modal/ProductVersionDrilldownSelect.js +241 -0
  114. package/lib/esm/components/case-list/case-search/advance-search-modal/SelectableLabelFilter.d.ts +11 -0
  115. package/lib/esm/components/case-list/case-search/advance-search-modal/SelectableLabelFilter.d.ts.map +1 -0
  116. package/lib/esm/components/case-list/case-search/advance-search-modal/SelectableLabelFilter.js +23 -0
  117. package/lib/esm/components/case-list/case-search/useAdvanceSearchParser.d.ts.map +1 -1
  118. package/lib/esm/components/case-list/case-search/useAdvanceSearchParser.js +2 -1
  119. package/lib/esm/css/caseList.css +197 -28
  120. package/lib/esm/css/caseSearch.css +114 -0
  121. package/lib/esm/enums/case.d.ts +13 -5
  122. package/lib/esm/enums/case.d.ts.map +1 -1
  123. package/lib/esm/enums/case.js +23 -3
  124. package/lib/esm/enums/caseSearch.d.ts +3 -0
  125. package/lib/esm/enums/caseSearch.d.ts.map +1 -1
  126. package/lib/esm/enums/caseSearch.js +2 -1
  127. package/lib/esm/enums/filters.d.ts +5 -1
  128. package/lib/esm/enums/filters.d.ts.map +1 -1
  129. package/lib/esm/enums/filters.js +4 -0
  130. package/lib/esm/hooks/useCaseLabels.d.ts +14 -0
  131. package/lib/esm/hooks/useCaseLabels.d.ts.map +1 -0
  132. package/lib/esm/hooks/useCaseLabels.js +50 -0
  133. package/lib/esm/hooks/useCloseCase.d.ts +2 -2
  134. package/lib/esm/hooks/useCloseCase.d.ts.map +1 -1
  135. package/lib/esm/hooks/useCloseCase.js +54 -30
  136. package/lib/esm/hooks/useExportCaseListCSV.d.ts +1 -1
  137. package/lib/esm/hooks/useExportCaseListCSV.d.ts.map +1 -1
  138. package/lib/esm/hooks/useExportCaseListCSV.js +1 -9
  139. package/lib/esm/hooks/useFilterStateOnLoad.d.ts +1 -1
  140. package/lib/esm/hooks/useFilterStateOnLoad.d.ts.map +1 -1
  141. package/lib/esm/hooks/useFilterStateOnLoad.js +7 -5
  142. package/lib/esm/index.js +1 -0
  143. package/lib/esm/models/caseList.d.ts +1 -0
  144. package/lib/esm/models/caseList.d.ts.map +1 -1
  145. package/lib/esm/test-utils/mockData.d.ts +1 -0
  146. package/lib/esm/test-utils/mockData.d.ts.map +1 -1
  147. package/lib/esm/test-utils/mockData.js +2 -1
  148. package/lib/esm/utils/advanceSearchFormMapper.d.ts +11 -0
  149. package/lib/esm/utils/advanceSearchFormMapper.d.ts.map +1 -0
  150. package/lib/esm/utils/advanceSearchFormMapper.js +71 -0
  151. package/lib/esm/utils/advanceSearchUtils.d.ts +24 -0
  152. package/lib/esm/utils/advanceSearchUtils.d.ts.map +1 -0
  153. package/lib/esm/utils/advanceSearchUtils.js +150 -0
  154. package/lib/esm/utils/caseGroupDefaultFilterUtils.d.ts +12 -0
  155. package/lib/esm/utils/caseGroupDefaultFilterUtils.d.ts.map +1 -0
  156. package/lib/esm/utils/caseGroupDefaultFilterUtils.js +34 -0
  157. package/lib/esm/utils/caseGroupDefaultUtils.d.ts +10 -0
  158. package/lib/esm/utils/caseGroupDefaultUtils.d.ts.map +1 -0
  159. package/lib/esm/utils/caseGroupDefaultUtils.js +20 -0
  160. package/lib/esm/utils/caseListGraphQLUtils.d.ts +28 -0
  161. package/lib/esm/utils/caseListGraphQLUtils.d.ts.map +1 -0
  162. package/lib/esm/utils/caseListGraphQLUtils.js +304 -0
  163. package/lib/esm/utils/caseListMapper.d.ts +6 -0
  164. package/lib/esm/utils/caseListMapper.d.ts.map +1 -0
  165. package/lib/esm/utils/caseListMapper.js +47 -0
  166. package/lib/esm/utils/caseListVariablesBuilder.d.ts +17 -0
  167. package/lib/esm/utils/caseListVariablesBuilder.d.ts.map +1 -0
  168. package/lib/esm/utils/caseListVariablesBuilder.js +535 -0
  169. package/lib/esm/utils/caseSearchUtils.d.ts.map +1 -1
  170. package/lib/esm/utils/caseSearchUtils.js +39 -2
  171. package/lib/esm/utils/constants.d.ts +22 -19
  172. package/lib/esm/utils/constants.d.ts.map +1 -1
  173. package/lib/esm/utils/constants.js +9 -2
  174. package/lib/esm/utils/mockSolrResponse.js +1 -1
  175. package/package.json +9 -7
@@ -0,0 +1,178 @@
1
+ import { MenuFooter, MenuToggle, Select, SelectList, SelectOption, TextInputGroup, TextInputGroupMain, } from '@patternfly/react-core';
2
+ import { GlobalMetadataStateContext } from '@rh-support/react-context';
3
+ import { ability, resourceActions, resources } from '@rh-support/user-permissions';
4
+ import { getDropdownBtnPlaceholder } from '@rh-support/utils';
5
+ import isEmpty from 'lodash/isEmpty';
6
+ import isEqual from 'lodash/isEqual';
7
+ import isUndefined from 'lodash/isUndefined';
8
+ import React, { useContext, useEffect, useMemo, useRef, useState } from 'react';
9
+ import { Trans, useTranslation } from 'react-i18next';
10
+ import { Link } from 'react-router-dom';
11
+ import { SolrKeys } from '../../../enums/filters';
12
+ import { useCaseLabels } from '../../../hooks/useCaseLabels';
13
+ import { filterNamesMap } from '../../../utils/constants';
14
+ import { CaseListFilterDispatchContext, CaseListFilterStateContext } from '../CaseListFilterContext';
15
+ import { updateFilter } from '../CaseListFilterReducer';
16
+ const EMPTY_LABELS = [];
17
+ export function CaseLabelsFilter() {
18
+ var _a, _b;
19
+ const { t } = useTranslation();
20
+ const { filterInfo } = useContext(CaseListFilterStateContext);
21
+ const dispatch = useContext(CaseListFilterDispatchContext);
22
+ const { globalMetadataState: { loggedInUsersAccount }, } = useContext(GlobalMetadataStateContext);
23
+ const accountId = (_a = loggedInUsersAccount.data) === null || _a === void 0 ? void 0 : _a.salesforceAccountId;
24
+ const { labels, loading: isLoading } = useCaseLabels(accountId);
25
+ const selectedLabels = (_b = filterInfo === null || filterInfo === void 0 ? void 0 : filterInfo[SolrKeys.caseLabel]) !== null && _b !== void 0 ? _b : EMPTY_LABELS;
26
+ const [inputValue, setInputValue] = useState('');
27
+ const [focusedItemIndex, setFocusedItemIndex] = useState(null);
28
+ const [activeItem, setActiveItem] = useState(null);
29
+ const [isOpen, setIsOpen] = useState(false);
30
+ const [selectedItems, setSelectedItems] = useState({});
31
+ const textInputRef = useRef();
32
+ const list = useMemo(() => labels.map((label) => ({ value: label.name, key: label.id })), [labels]);
33
+ const [selectOptions, setSelectOptions] = useState(list);
34
+ const canViewManageTab = ability.can(resourceActions.READ, resources.MANAGE);
35
+ const applyLabelSelection = (updatedFilterValues) => {
36
+ updateFilter(dispatch, {
37
+ filterKey: SolrKeys.caseLabel,
38
+ values: updatedFilterValues,
39
+ });
40
+ };
41
+ const isOptionSelected = (option) => Boolean((option.value && selectedItems[String(option.value)]) || (option.key && selectedItems[String(option.key)]));
42
+ const onToggleClick = () => {
43
+ setIsOpen(!isOpen);
44
+ };
45
+ const onSelect = (option) => {
46
+ const selectedOption = typeof option === 'string' ? list.find((item) => item.value === option || item.key === option) : option;
47
+ const optionValue = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.value;
48
+ const optionKey = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.key;
49
+ if (!optionValue || optionValue === 'no results' || !optionKey) {
50
+ return;
51
+ }
52
+ const currentlySelected = selectedLabels.some((label) => label.key === optionKey);
53
+ const updatedFilterValues = currentlySelected
54
+ ? selectedLabels.filter((label) => label.key !== optionKey)
55
+ : [
56
+ ...selectedLabels.filter((label) => label.key !== optionKey),
57
+ { key: String(optionKey), value: String(optionValue) },
58
+ ];
59
+ applyLabelSelection(updatedFilterValues);
60
+ };
61
+ const handleMenuArrowKeys = (key) => {
62
+ if (!isOpen || !list.length) {
63
+ return;
64
+ }
65
+ let indexToFocus = 0;
66
+ if (key === 'ArrowUp') {
67
+ if (focusedItemIndex === null || focusedItemIndex === 0) {
68
+ indexToFocus = list.length - 1;
69
+ }
70
+ else {
71
+ indexToFocus = focusedItemIndex - 1;
72
+ }
73
+ }
74
+ if (key === 'ArrowDown') {
75
+ if (focusedItemIndex === null || focusedItemIndex === list.length - 1) {
76
+ indexToFocus = 0;
77
+ }
78
+ else {
79
+ indexToFocus = focusedItemIndex + 1;
80
+ }
81
+ }
82
+ setFocusedItemIndex(indexToFocus);
83
+ const focusedItem = list[indexToFocus];
84
+ if (focusedItem === null || focusedItem === void 0 ? void 0 : focusedItem.value) {
85
+ setActiveItem(`select-multi-typeahead-checkbox-${String(focusedItem.value).replace(' ', '-')}`);
86
+ }
87
+ };
88
+ const onInputKeyDown = (event) => {
89
+ const focusedItem = focusedItemIndex !== null ? list[focusedItemIndex] : list[0];
90
+ switch (event.key) {
91
+ case 'Enter':
92
+ if (!isOpen) {
93
+ setIsOpen((prevIsOpen) => !prevIsOpen);
94
+ }
95
+ else if (isOpen && (focusedItem === null || focusedItem === void 0 ? void 0 : focusedItem.value) !== 'no results') {
96
+ onSelect(focusedItem);
97
+ }
98
+ break;
99
+ case 'Tab':
100
+ case 'Escape':
101
+ setIsOpen(false);
102
+ setActiveItem(null);
103
+ break;
104
+ case 'ArrowUp':
105
+ case 'ArrowDown':
106
+ event.preventDefault();
107
+ handleMenuArrowKeys(event.key);
108
+ break;
109
+ }
110
+ };
111
+ const onTextInputChange = (_event, value) => {
112
+ setInputValue(value);
113
+ };
114
+ const placeholder = getDropdownBtnPlaceholder(isLoading ? t('Loading...') : t('Select a case label'), selectedLabels.map((label) => label.value), '', labels.length || 0, t('All selected'));
115
+ const toggle = (toggleRef) => (React.createElement(MenuToggle, { variant: "typeahead", onClick: onToggleClick, innerRef: toggleRef, isExpanded: isOpen, isFullWidth: true },
116
+ React.createElement(TextInputGroup, { isPlain: true },
117
+ React.createElement(TextInputGroupMain, Object.assign({ value: inputValue, onClick: onToggleClick, onChange: onTextInputChange, onKeyDown: onInputKeyDown, id: "case-list-case-label-filter-input", autoComplete: "off", innerRef: textInputRef, placeholder: placeholder }, (activeItem && { 'aria-activedescendant': activeItem }), { role: "combobox", isExpanded: isOpen, "aria-controls": "case-list-case-label-filter-listbox" })))));
118
+ const dropdownOptions = useMemo(() => {
119
+ return (!isEmpty(selectOptions) ? selectOptions : list).map((option, index) => !isUndefined(option.value) && (React.createElement(SelectOption, { key: option.key, value: option, hasCheckbox: true, isSelected: isOptionSelected(option), isFocused: focusedItemIndex !== null && focusedItemIndex === index, id: `select-multi-typeahead-${String(option.value).replace(' ', '-')}` }, option.value)));
120
+ // eslint-disable-next-line react-hooks/exhaustive-deps
121
+ }, [selectedItems, selectedLabels, labels, selectOptions, focusedItemIndex]);
122
+ useEffect(() => {
123
+ let newSelectOptions = list;
124
+ if (inputValue) {
125
+ const normalizedInput = inputValue.toLowerCase();
126
+ newSelectOptions = list.filter((option) => String(option === null || option === void 0 ? void 0 : option.value).toLowerCase().includes(normalizedInput));
127
+ if (!newSelectOptions.length) {
128
+ newSelectOptions = [{ isDisabled: false, children: `No results found` }];
129
+ }
130
+ if (!isOpen) {
131
+ setIsOpen(true);
132
+ }
133
+ }
134
+ setSelectOptions(newSelectOptions);
135
+ setFocusedItemIndex(null);
136
+ setActiveItem(null);
137
+ // eslint-disable-next-line react-hooks/exhaustive-deps
138
+ }, [inputValue, list]);
139
+ useEffect(() => {
140
+ if (isEmpty(selectedLabels)) {
141
+ setSelectedItems({});
142
+ return;
143
+ }
144
+ const nextSelectedItems = selectedLabels.reduce((selection, label) => {
145
+ if (label === null || label === void 0 ? void 0 : label.value) {
146
+ selection[label.value] = true;
147
+ }
148
+ if (label === null || label === void 0 ? void 0 : label.key) {
149
+ selection[label.key] = true;
150
+ }
151
+ return selection;
152
+ }, {});
153
+ setSelectedItems(nextSelectedItems);
154
+ }, [selectedLabels]);
155
+ // Resolve deep-linked label IDs to display names once account labels are loaded
156
+ useEffect(() => {
157
+ if (!labels.length || !selectedLabels.length) {
158
+ return;
159
+ }
160
+ const resolved = selectedLabels.map((selected) => {
161
+ const match = labels.find((label) => label.id === selected.key || label.name === selected.value);
162
+ return match ? { key: match.id, value: match.name } : selected;
163
+ });
164
+ if (!isEqual(resolved, selectedLabels)) {
165
+ applyLabelSelection(resolved);
166
+ }
167
+ // eslint-disable-next-line react-hooks/exhaustive-deps
168
+ }, [labels, selectedLabels]);
169
+ return (React.createElement("div", { className: "case-labels-filter group-filter", "data-testid": "case-labels-filter" },
170
+ React.createElement("label", { htmlFor: "case-list-case-label-filter", className: "pf-v6-u-mb-sm group-filter-label" }, t(filterNamesMap[SolrKeys.caseLabel])),
171
+ React.createElement("div", { className: "pf-v6-c-select" },
172
+ React.createElement(Select, { shouldFocusToggleOnSelect: true, shouldPreventScrollOnItemFocus: true, "data-tracking-id": "case-labels-filter", id: "case-list-case-label-filter", title: t(filterNamesMap[SolrKeys.caseLabel]), isOpen: isOpen, selected: selectedItems, onSelect: (_e, v) => onSelect(v), onOpenChange: (nextOpen) => setIsOpen(nextOpen), popperProps: { direction: 'down', enableFlip: false }, toggle: toggle, isScrollable: true },
173
+ React.createElement(SelectList, null,
174
+ dropdownOptions,
175
+ canViewManageTab && (React.createElement(MenuFooter, { className: "group-filter-manage-groups-footer" },
176
+ React.createElement(Link, { className: "cta cta-link", to: "/manage/case-labels" },
177
+ React.createElement(Trans, null, "Manage case labels")))))))));
178
+ }
@@ -1,9 +1,3 @@
1
1
  import React from 'react';
2
- import { IProductVersionPivotMap } from '../CaseList';
3
- interface IProps {
4
- productVersionPivotValues: IProductVersionPivotMap[];
5
- isSolrSearchDown: boolean;
6
- }
7
- export declare function CaseListFilterChips(props: IProps): React.JSX.Element;
8
- export {};
2
+ export declare function CaseListFilterChips(): React.JSX.Element;
9
3
  //# sourceMappingURL=CaseListFilterChips.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CaseListFilterChips.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-filters/CaseListFilterChips.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAK1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAMtD,UAAU,MAAM;IACZ,yBAAyB,EAAE,uBAAuB,EAAE,CAAC;IACrD,gBAAgB,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,qBAmIhD"}
1
+ {"version":3,"file":"CaseListFilterChips.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-filters/CaseListFilterChips.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAU1C,wBAAgB,mBAAmB,sBA+HlC"}
@@ -1,4 +1,5 @@
1
1
  import { Button, Label, LabelGroup } from '@patternfly/react-core';
2
+ import { AbilityContext, CaseListFields, resourceActions, resources } from '@rh-support/user-permissions';
2
3
  import { toNewCaseTypeMapper, toOldCaseTypeSwitcher } from '@rh-support/utils';
3
4
  import flatMap from 'lodash/flatMap';
4
5
  import remove from 'lodash/remove';
@@ -7,15 +8,17 @@ import { Trans } from 'react-i18next';
7
8
  import { ProductVersionKey, SolrKeys, SolrPivotKeys } from '../../../enums/filters';
8
9
  import { filterNamesMap } from '../../../utils/constants';
9
10
  import { CaseListFilterDispatchContext, CaseListFilterStateContext } from '../CaseListFilterContext';
10
- import { visibleFilterChipsWhenSolrDownSfdcUp } from '../CaseListFilterHelpers';
11
11
  import { clearFilters, removeFilterItem } from '../CaseListFilterReducer';
12
12
  import { CreatorSsoNameFilterChip } from './CreatorSsoNameFilterChip';
13
13
  import { ProductFilterChip } from './ProductFilterChip';
14
- export function CaseListFilterChips(props) {
14
+ export function CaseListFilterChips() {
15
+ const ability = useContext(AbilityContext);
15
16
  const { filterInfo } = useContext(CaseListFilterStateContext);
16
17
  const dispatch = useContext(CaseListFilterDispatchContext);
18
+ const canUseAdvancedSearch = ability.can(resourceActions.PATCH, resources.CASE_LIST, CaseListFields.ADVANCED_SEARCH);
17
19
  const currentFilterLength = flatMap(filterInfo).length;
18
20
  const isAnyFilterApplied = currentFilterLength > 0;
21
+ const shouldShowFilterChips = isAnyFilterApplied && !canUseAdvancedSearch;
19
22
  const deleteChip = (filterKey, value) => () => {
20
23
  removeFilterItem(dispatch, { filterKey, value });
21
24
  };
@@ -37,15 +40,10 @@ export function CaseListFilterChips(props) {
37
40
  };
38
41
  const getChipGroupForFilter = (filterKey, filterValues, groupName = '') => {
39
42
  const caseTypeFilter = filterKey === 'case_type' ? toNewCaseTypeMapper(filterValues) : filterValues;
40
- if (props.isSolrSearchDown && !visibleFilterChipsWhenSolrDownSfdcUp.includes(filterKey)) {
41
- return React.createElement(React.Fragment, null);
42
- }
43
- else {
44
- return (React.createElement("div", { className: "filter-chip", key: `${filterKey}-bookmarks-${groupName}` },
45
- React.createElement("span", { className: "filter-chip__heading" },
46
- React.createElement(Trans, null, groupName || filterNamesMap[filterKey] || filterKey)),
47
- React.createElement(LabelGroup, { numLabels: 7, className: "pf-v6-c-chip-group__simple" }, renderFilterValueChips(filterKey, caseTypeFilter, groupName))));
48
- }
43
+ return (React.createElement("div", { className: "filter-chip", key: `${filterKey}-bookmarks-${groupName}` },
44
+ React.createElement("span", { className: "filter-chip__heading" },
45
+ React.createElement(Trans, null, groupName || filterNamesMap[filterKey] || filterKey)),
46
+ React.createElement(LabelGroup, { numLabels: 7, className: "pf-v6-c-chip-group__simple" }, renderFilterValueChips(filterKey, caseTypeFilter, groupName))));
49
47
  };
50
48
  const renderAccountFilterChip = () => {
51
49
  const visibleChips = [];
@@ -83,13 +81,11 @@ export function CaseListFilterChips(props) {
83
81
  const showUsernameFilter = (Array.isArray(filterInfo[SolrKeys.createdBySsoUsername]) &&
84
82
  filterInfo[SolrKeys.createdBySsoUsername].length > 0) ||
85
83
  (Array.isArray(filterInfo[SolrKeys.caseContactSSO]) && filterInfo[SolrKeys.caseContactSSO].length > 0);
86
- return (React.createElement(React.Fragment, null, isAnyFilterApplied && (React.createElement("div", { className: "filter-chip-wrapper" },
84
+ return (React.createElement(React.Fragment, null, shouldShowFilterChips && (React.createElement("div", { className: "filter-chip-wrapper" },
87
85
  React.createElement("h2", null, "Filtering by"),
88
86
  React.createElement("div", { className: "filter-chips" },
89
- Array.isArray(filterInfo[ProductVersionKey]) && filterInfo[ProductVersionKey].length > 0 && (React.createElement(ProductFilterChip, { productList: props.isSolrSearchDown && filterInfo[ProductVersionKey].length > 1
90
- ? [filterInfo[ProductVersionKey][0]]
91
- : filterInfo[ProductVersionKey], productVersionPivot: props.productVersionPivotValues })),
92
- !props.isSolrSearchDown && showUsernameFilter && React.createElement(CreatorSsoNameFilterChip, null),
87
+ Array.isArray(filterInfo[ProductVersionKey]) && filterInfo[ProductVersionKey].length > 0 && (React.createElement(ProductFilterChip, { productList: filterInfo[ProductVersionKey] })),
88
+ showUsernameFilter && React.createElement(CreatorSsoNameFilterChip, null),
93
89
  renderChips(),
94
90
  currentFilterLength > 1 && (React.createElement(Button, { variant: "link", isInline: true, onClick: clearAllFilters, "data-tracking-id": "case-list-clear-filters", className: "clear-filters" },
95
91
  React.createElement(Trans, null, "Clear all filters"))))))));
@@ -1,15 +1,12 @@
1
1
  import { IApiResponseDetails } from '@rh-support/types/shared';
2
- import { ISolrResponseToFacetFields, ITroubleshootProductResponse } from '@rh-support/utils';
2
+ import { ITroubleshootProductResponse } from '@rh-support/utils';
3
3
  import React from 'react';
4
- import { IFacetFields } from '../../../models/caseList';
5
4
  interface IProps {
6
- filterValues: ISolrResponseToFacetFields<IFacetFields>;
7
- isSolrSearchDown: boolean;
8
5
  allCaseTypes: IApiResponseDetails<string[]>;
9
6
  allCaseStatuses: IApiResponseDetails<string[]>;
10
7
  allCaseSeverities: IApiResponseDetails<string[]>;
11
8
  allProducts: IApiResponseDetails<ITroubleshootProductResponse>;
12
9
  }
13
- export declare const CaseListFilters: ({ filterValues, allCaseTypes, allCaseSeverities, allCaseStatuses, allProducts, isSolrSearchDown, }: IProps) => React.JSX.Element;
10
+ export declare const CaseListFilters: ({ allCaseTypes, allCaseSeverities, allCaseStatuses, allProducts }: IProps) => React.JSX.Element;
14
11
  export {};
15
12
  //# sourceMappingURL=CaseListFilters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CaseListFilters.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-filters/CaseListFilters.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAE7F,OAAO,KAAqB,MAAM,OAAO,CAAC;AAG1C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAWxD,UAAU,MAAM;IACZ,YAAY,EAAE,0BAA0B,CAAC,YAAY,CAAC,CAAC;IACvD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,eAAe,EAAE,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,iBAAiB,EAAE,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,WAAW,EAAE,mBAAmB,CAAC,4BAA4B,CAAC,CAAC;CAClE;AAID,eAAO,MAAM,eAAe,GAAI,oGAO7B,MAAM,sBA2ER,CAAC"}
1
+ {"version":3,"file":"CaseListFilters.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-filters/CaseListFilters.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAqB,MAAM,OAAO,CAAC;AAa1C,UAAU,MAAM;IACZ,YAAY,EAAE,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,eAAe,EAAE,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,iBAAiB,EAAE,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,WAAW,EAAE,mBAAmB,CAAC,4BAA4B,CAAC,CAAC;CAClE;AAED,eAAO,MAAM,eAAe,GAAI,mEAAmE,MAAM,sBAiExG,CAAC"}
@@ -1,19 +1,16 @@
1
1
  import { AbilityContext, CaseListFields, resourceActions, resources } from '@rh-support/user-permissions';
2
- import get from 'lodash/get';
3
2
  import React, { useContext } from 'react';
4
- import { SolrKeys } from '../../../enums/filters';
5
3
  import { AccountsBookmarkedGroupFilter } from './AccountsBookmarkedGroupFilter';
6
4
  import { AccountsFilter } from './AccountsFilter';
7
5
  import { AdditionalFilters } from './AdditionalFilters';
6
+ import { CaseLabelsFilter } from './CaseLabelsFilter';
8
7
  import { CreatorSsoNameFilter } from './CreatorSsoNameFilter';
9
8
  import { GroupsFilter } from './GroupsFilter';
10
9
  import { ProductsFilter } from './ProductsFilter';
11
10
  import { SeverityFilter } from './SeverityFilter';
12
11
  import { StatusFilter } from './StatusFilter';
13
12
  import { TypeFilter } from './TypeFilter';
14
- // Adding a new filter here? Make sure you add in caseSearchUtils also so that
15
- // it get included in the solr search query fq parameter
16
- export const CaseListFilters = ({ filterValues, allCaseTypes, allCaseSeverities, allCaseStatuses, allProducts, isSolrSearchDown, }) => {
13
+ export const CaseListFilters = ({ allCaseTypes, allCaseSeverities, allCaseStatuses, allProducts }) => {
17
14
  var _a, _b;
18
15
  const ability = useContext(AbilityContext);
19
16
  const canReadAccountFilter = ability.can(resourceActions.READ, resources.ACCOUNTS_FILTER);
@@ -29,13 +26,17 @@ export const CaseListFilters = ({ filterValues, allCaseTypes, allCaseSeverities,
29
26
  const canAccessTypeFilter = ability.can(resourceActions.PATCH, resources.CASE_LIST, CaseListFields.TYPE_FILTER);
30
27
  return (React.createElement(React.Fragment, null,
31
28
  React.createElement("div", { className: "filter-group" },
32
- !isSolrSearchDown && canReadAccountFilter && (React.createElement(AccountsFilter, { canReadBookmarkAccounts: canReadAccountFilter })),
33
- !isSolrSearchDown && (canReadBookmarkAccounts || canAccessManagedAccounts) && (React.createElement(AccountsBookmarkedGroupFilter, { canManageBookmarkAccounts: canManageBookmarkAccounts, canReadBookmarkAccounts: canReadBookmarkAccounts, canAccessManagedAccounts: canAccessManagedAccounts })),
29
+ canReadAccountFilter && React.createElement(AccountsFilter, { canReadBookmarkAccounts: canReadAccountFilter }),
30
+ (canReadBookmarkAccounts || canAccessManagedAccounts) && (React.createElement(AccountsBookmarkedGroupFilter, { canManageBookmarkAccounts: canManageBookmarkAccounts, canReadBookmarkAccounts: canReadBookmarkAccounts, canAccessManagedAccounts: canAccessManagedAccounts })),
34
31
  canAccessGroupsFilter && React.createElement(GroupsFilter, null),
35
- canAccessProductsFilter && (React.createElement(ProductsFilter, { filterValues: get(filterValues, SolrKeys.product, []), isSolrSearchDown: isSolrSearchDown, allProducts: ((_b = (_a = allProducts.data) === null || _a === void 0 ? void 0 : _a.productsResult) === null || _b === void 0 ? void 0 : _b.map((p) => p.product)) || [] })),
36
- canAccessSeverityFilter && (React.createElement(SeverityFilter, { filterValues: get(filterValues, SolrKeys.severity, []), isSolrSearchDown: isSolrSearchDown, allCaseSeverities: allCaseSeverities.data })),
37
- canAccessStatusFilter && (React.createElement(StatusFilter, { filterValues: get(filterValues, SolrKeys.status, []), allCaseStatuses: allCaseStatuses.data, isSolrSearchDown: isSolrSearchDown })),
38
- !isSolrSearchDown && canAccessTypeFilter && React.createElement(TypeFilter, { allCaseTypes: allCaseTypes.data }),
39
- !isSolrSearchDown && canAccessCreatorFilter && React.createElement(CreatorSsoNameFilter, null),
40
- !isSolrSearchDown && canAccessAdditionalFilter && React.createElement(AdditionalFilters, null))));
32
+ React.createElement(CaseLabelsFilter, null),
33
+ canAccessProductsFilter && (React.createElement(ProductsFilter, { allProducts: ((_b = (_a = allProducts.data) === null || _a === void 0 ? void 0 : _a.productsResult) === null || _b === void 0 ? void 0 : _b.map((p) => ({
34
+ name: p.product,
35
+ productId: p.productId,
36
+ }))) || [] })),
37
+ canAccessSeverityFilter && React.createElement(SeverityFilter, { allCaseSeverities: allCaseSeverities.data }),
38
+ canAccessStatusFilter && React.createElement(StatusFilter, { allCaseStatuses: allCaseStatuses.data }),
39
+ canAccessTypeFilter && React.createElement(TypeFilter, { allCaseTypes: allCaseTypes.data }),
40
+ canAccessCreatorFilter && React.createElement(CreatorSsoNameFilter, null),
41
+ canAccessAdditionalFilter && React.createElement(AdditionalFilters, null))));
41
42
  };
@@ -1 +1 @@
1
- {"version":3,"file":"CreatorSsoNameFilter.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-filters/CreatorSsoNameFilter.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAYhF,eAAO,MAAM,WAAW,GAAI,YAAO,WAIlC,CAAC;AAYF,eAAO,MAAM,eAAe,GAAI,gBAAW,EAAE,QAAG;;;;;;;GAAyD,CAAC;AAE1G,eAAO,MAAM,kBAAkB,GAAI,iBAAY,EAAE,eAAU,EAAE,QAAG,EAAE,MAAC,UAyClE,CAAC;AAEF,wBAAgB,oBAAoB,sBA8PnC"}
1
+ {"version":3,"file":"CreatorSsoNameFilter.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-filters/CreatorSsoNameFilter.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAYhF,eAAO,MAAM,WAAW,GAAI,YAAO,WAIlC,CAAC;AAYF,eAAO,MAAM,eAAe,GAAI,gBAAW,EAAE,QAAG;;;;;;;GAAyD,CAAC;AAE1G,eAAO,MAAM,kBAAkB,GAAI,iBAAY,EAAE,eAAU,EAAE,QAAG,EAAE,MAAC,UAyClE,CAAC;AAEF,wBAAgB,oBAAoB,sBAiQnC"}
@@ -7,12 +7,12 @@ 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 { accounts } from '@cee-eng/hydrajs';
10
+ import { useApolloClient } from '@apollo/client/react';
11
11
  import { Button, MenuToggle, Select, SelectGroup, SelectList, SelectOption, TextInputGroup, TextInputGroupMain, TextInputGroupUtilities, Truncate, } from '@patternfly/react-core';
12
12
  import TimesCircleIcon from '@patternfly/react-icons/dist/js/icons/times-circle-icon';
13
- import { LoadingIndicator, useFetch, useSelectKeyboardNavigator } from '@rh-support/components';
13
+ import { LoadingIndicator, useSelectKeyboardNavigator } from '@rh-support/components';
14
14
  import { GlobalMetadataStateContext } from '@rh-support/react-context';
15
- import { getDropdownBtnPlaceholder } from '@rh-support/utils';
15
+ import { fetchLoggedInUserAccountContactsFromGraphQL, getDropdownBtnPlaceholder } from '@rh-support/utils';
16
16
  import isEmpty from 'lodash/isEmpty';
17
17
  import isNull from 'lodash/isNull';
18
18
  import isUndefined from 'lodash/isUndefined';
@@ -84,13 +84,14 @@ export const getSelectedListObj = (contactsList, filterInfo, own, t) => {
84
84
  };
85
85
  export function CreatorSsoNameFilter() {
86
86
  const { t } = useTranslation();
87
+ const apolloClient = useApolloClient();
87
88
  const { filterInfo } = useContext(CaseListFilterStateContext);
88
89
  const dispatch = useContext(CaseListFilterDispatchContext);
89
90
  const { globalMetadataState: { loggedInUserRights }, } = useContext(GlobalMetadataStateContext);
90
91
  const CaseListDispatch = useCaseListDispatchContext();
91
92
  const own = loggedInUserRights.data.getSSOUsername();
92
93
  const isExternalNonOrgAdmin = !loggedInUserRights.data.isInternal() && loggedInUserRights.data.isCustomerNonOrgAdmin();
93
- const { request: getExternalUserContactsList, isFetching: isFetchingExternalContacts } = useFetch(accounts.getAccountContacts, { propgateErrors: true });
94
+ const [isFetchingExternalContacts, setIsFetchingExternalContacts] = useState(false);
94
95
  const externalInputRef = useRef();
95
96
  const [externalContactList, setExternalContactList] = useState([]);
96
97
  const [isExternalOpen, setIsExternalOpen] = useState(false);
@@ -163,19 +164,25 @@ export function CreatorSsoNameFilter() {
163
164
  if (loggedInUserRights.data.isInternal())
164
165
  return;
165
166
  const fetchStrataAccountUsers = () => __awaiter(this, void 0, void 0, function* () {
166
- const externalContacts = isExternalNonOrgAdmin
167
- ? []
168
- : yield getExternalUserContactsList(loggedInUserRights.data.getAccountNumber());
169
- const chipsNameSsoPairs = externalContacts.reduce((result, item) => {
170
- result[item.ssoUsername] = { firstName: item.firstName || '', lastName: item.lastName || '' };
171
- return result;
172
- }, {});
173
- setChipsNameSsoMap(CaseListDispatch, chipsNameSsoPairs);
174
- setExternalContactList(externalContacts);
167
+ setIsFetchingExternalContacts(true);
168
+ try {
169
+ const externalContacts = isExternalNonOrgAdmin
170
+ ? []
171
+ : yield fetchLoggedInUserAccountContactsFromGraphQL(apolloClient);
172
+ const chipsNameSsoPairs = externalContacts.reduce((result, item) => {
173
+ result[item.ssoUsername] = { firstName: item.firstName || '', lastName: item.lastName || '' };
174
+ return result;
175
+ }, {});
176
+ setChipsNameSsoMap(CaseListDispatch, chipsNameSsoPairs);
177
+ setExternalContactList(externalContacts);
178
+ }
179
+ finally {
180
+ setIsFetchingExternalContacts(false);
181
+ }
175
182
  });
176
183
  fetchStrataAccountUsers();
177
184
  // eslint-disable-next-line react-hooks/exhaustive-deps
178
- }, [dispatch, isExternalNonOrgAdmin, loggedInUserRights.data]);
185
+ }, [dispatch, isExternalNonOrgAdmin, loggedInUserRights.data, apolloClient]);
179
186
  const filteredExternalList = useMemo(() => {
180
187
  return [
181
188
  ...(noResults && !isExternalNonOrgAdmin
@@ -1 +1 @@
1
- {"version":3,"file":"CreatorSsoNameFilterChip.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-filters/CreatorSsoNameFilterChip.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAU/D,wBAAgB,wBAAwB,sBAuIvC"}
1
+ {"version":3,"file":"CreatorSsoNameFilterChip.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-filters/CreatorSsoNameFilterChip.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAU/D,wBAAgB,wBAAwB,sBA0IvC"}
@@ -69,6 +69,9 @@ export function CreatorSsoNameFilterChip() {
69
69
  }, []);
70
70
  setChips(valueLabelArray);
71
71
  };
72
+ // Advance search stores raw name/SSO text in filterInfo. Resolution uses ssoUsernameIn, so a
73
+ // short first name can match another contact's SSO and show the wrong chip label; filtering still
74
+ // works — users should enter full name or SSO when the label matters.
72
75
  const getInternalContactNames = (contacts) => __awaiter(this, void 0, void 0, function* () {
73
76
  const res = yield getInternalUserContactsList({
74
77
  internal: false,
@@ -1,3 +1,13 @@
1
+ import { IKeyValue } from '@rh-support/types/shared';
1
2
  import React from 'react';
2
- export declare function GroupsFilter(): React.JSX.Element;
3
+ export interface GroupsFilterProps {
4
+ /** When set with onGroupsChange, the filter is controlled (e.g. advanced search). */
5
+ selectedGroups?: Array<IKeyValue<string>>;
6
+ onGroupsChange?: (groups: Array<IKeyValue<string>>) => void;
7
+ hideLabel?: boolean;
8
+ idPrefix?: string;
9
+ showSelectionCountBadge?: boolean;
10
+ placeholder?: string;
11
+ }
12
+ export declare function GroupsFilter({ selectedGroups: controlledSelectedGroups, onGroupsChange, hideLabel, idPrefix, showSelectionCountBadge, placeholder: placeholderProp, }?: GroupsFilterProps): React.JSX.Element;
3
13
  //# sourceMappingURL=GroupsFilter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GroupsFilter.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-filters/GroupsFilter.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAShF,wBAAgB,YAAY,sBA+P3B"}
1
+ {"version":3,"file":"GroupsFilter.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-filters/GroupsFilter.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAKrD,OAAO,KAA2D,MAAM,OAAO,CAAC;AAShF,MAAM,WAAW,iBAAiB;IAC9B,qFAAqF;IACrF,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAID,wBAAgB,YAAY,CAAC,EACzB,cAAc,EAAE,wBAAwB,EACxC,cAAc,EACd,SAAiB,EACjB,QAAmC,EACnC,uBAA+B,EAC/B,WAAW,EAAE,eAAe,GAC/B,GAAE,iBAAsB,qBA+RxB"}