@rh-support/cases 2.6.185 → 2.6.187

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 (87) hide show
  1. package/lib/esm/components/case-list/CaseList.d.ts.map +1 -1
  2. package/lib/esm/components/case-list/CaseList.js +85 -38
  3. package/lib/esm/components/case-list/CaseListFilterContext.d.ts.map +1 -1
  4. package/lib/esm/components/case-list/CaseListFilterContext.js +2 -1
  5. package/lib/esm/components/case-list/CaseListFilterHelpers.d.ts +3 -2
  6. package/lib/esm/components/case-list/CaseListFilterHelpers.d.ts.map +1 -1
  7. package/lib/esm/components/case-list/CaseListFilterHelpers.js +19 -6
  8. package/lib/esm/components/case-list/CaseListFilterReducer.d.ts +29 -0
  9. package/lib/esm/components/case-list/CaseListFilterReducer.d.ts.map +1 -1
  10. package/lib/esm/components/case-list/CaseListFilterReducer.js +1 -0
  11. package/lib/esm/components/case-list/case-list-filters/AdditionalFilters.d.ts.map +1 -1
  12. package/lib/esm/components/case-list/case-list-filters/AdditionalFilters.js +5 -0
  13. package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.d.ts.map +1 -1
  14. package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.js +5 -1
  15. package/lib/esm/components/case-list/case-list-filters/CaseListFilters.d.ts.map +1 -1
  16. package/lib/esm/components/case-list/case-list-filters/CaseListFilters.js +1 -2
  17. package/lib/esm/components/case-list/case-list-filters/CreatorSsoNameFilterChip.d.ts.map +1 -1
  18. package/lib/esm/components/case-list/case-list-filters/CreatorSsoNameFilterChip.js +3 -0
  19. package/lib/esm/components/case-list/case-list-filters/GroupsFilter.d.ts +11 -1
  20. package/lib/esm/components/case-list/case-list-filters/GroupsFilter.d.ts.map +1 -1
  21. package/lib/esm/components/case-list/case-list-filters/GroupsFilter.js +116 -71
  22. package/lib/esm/components/case-list/case-list-filters/VersionsFilter.d.ts.map +1 -1
  23. package/lib/esm/components/case-list/case-list-filters/VersionsFilter.js +1 -29
  24. package/lib/esm/components/case-list/case-list-table/CaseListTable.d.ts.map +1 -1
  25. package/lib/esm/components/case-list/case-list-table/CaseListTable.js +11 -5
  26. package/lib/esm/components/case-list/case-search/AdvanceSearch.d.ts.map +1 -1
  27. package/lib/esm/components/case-list/case-search/AdvanceSearch.js +1 -1
  28. package/lib/esm/components/case-list/case-search/AdvanceSearchToggleButton.d.ts +8 -0
  29. package/lib/esm/components/case-list/case-search/AdvanceSearchToggleButton.d.ts.map +1 -0
  30. package/lib/esm/components/case-list/case-search/AdvanceSearchToggleButton.js +8 -0
  31. package/lib/esm/components/case-list/case-search/CaseSearch.d.ts.map +1 -1
  32. package/lib/esm/components/case-list/case-search/CaseSearch.js +51 -20
  33. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAccountSection.d.ts +10 -0
  34. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAccountSection.d.ts.map +1 -0
  35. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAccountSection.js +29 -0
  36. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAuditsSection.d.ts +10 -0
  37. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAuditsSection.d.ts.map +1 -0
  38. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAuditsSection.js +16 -0
  39. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchCaseSection.d.ts +9 -0
  40. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchCaseSection.d.ts.map +1 -0
  41. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchCaseSection.js +21 -0
  42. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchDateRangeField.d.ts +12 -0
  43. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchDateRangeField.d.ts.map +1 -0
  44. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchDateRangeField.js +31 -0
  45. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchFieldBlock.d.ts +10 -0
  46. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchFieldBlock.d.ts.map +1 -0
  47. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchFieldBlock.js +10 -0
  48. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchModal.d.ts +10 -0
  49. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchModal.d.ts.map +1 -0
  50. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchModal.js +92 -0
  51. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchOwnerSection.d.ts +9 -0
  52. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchOwnerSection.d.ts.map +1 -0
  53. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchOwnerSection.js +20 -0
  54. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchProductSection.d.ts +9 -0
  55. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchProductSection.d.ts.map +1 -0
  56. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchProductSection.js +28 -0
  57. package/lib/esm/components/case-list/case-search/advance-search-modal/ProductVersionDrilldownSelect.d.ts +9 -0
  58. package/lib/esm/components/case-list/case-search/advance-search-modal/ProductVersionDrilldownSelect.d.ts.map +1 -0
  59. package/lib/esm/components/case-list/case-search/advance-search-modal/ProductVersionDrilldownSelect.js +241 -0
  60. package/lib/esm/components/case-list/case-search/advance-search-modal/SelectableLabelFilter.d.ts +11 -0
  61. package/lib/esm/components/case-list/case-search/advance-search-modal/SelectableLabelFilter.d.ts.map +1 -0
  62. package/lib/esm/components/case-list/case-search/advance-search-modal/SelectableLabelFilter.js +23 -0
  63. package/lib/esm/css/caseList.css +13 -1
  64. package/lib/esm/css/caseSearch.css +114 -0
  65. package/lib/esm/enums/caseSearch.d.ts +1 -0
  66. package/lib/esm/enums/caseSearch.d.ts.map +1 -1
  67. package/lib/esm/enums/caseSearch.js +1 -1
  68. package/lib/esm/hooks/useFilterStateOnLoad.d.ts +1 -1
  69. package/lib/esm/hooks/useFilterStateOnLoad.d.ts.map +1 -1
  70. package/lib/esm/utils/advanceSearchFormMapper.d.ts +11 -0
  71. package/lib/esm/utils/advanceSearchFormMapper.d.ts.map +1 -0
  72. package/lib/esm/utils/advanceSearchFormMapper.js +71 -0
  73. package/lib/esm/utils/advanceSearchUtils.d.ts +24 -0
  74. package/lib/esm/utils/advanceSearchUtils.d.ts.map +1 -0
  75. package/lib/esm/utils/advanceSearchUtils.js +149 -0
  76. package/lib/esm/utils/caseListGraphQLUtils.d.ts.map +1 -1
  77. package/lib/esm/utils/caseListGraphQLUtils.js +55 -19
  78. package/lib/esm/utils/caseListMapper.js +4 -4
  79. package/lib/esm/utils/caseListVariablesBuilder.d.ts +1 -0
  80. package/lib/esm/utils/caseListVariablesBuilder.d.ts.map +1 -1
  81. package/lib/esm/utils/caseListVariablesBuilder.js +240 -34
  82. package/lib/esm/utils/caseSearchUtils.d.ts.map +1 -1
  83. package/lib/esm/utils/caseSearchUtils.js +5 -2
  84. package/lib/esm/utils/constants.d.ts +2 -0
  85. package/lib/esm/utils/constants.d.ts.map +1 -1
  86. package/lib/esm/utils/constants.js +6 -0
  87. package/package.json +7 -8
@@ -1 +1 @@
1
- {"version":3,"file":"CaseList.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseList.tsx"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,CAAC;AAChC,OAAO,0BAA0B,CAAC;AAuClC,OAAO,KAAkD,MAAM,OAAO,CAAC;AAGvE,OAAO,EAAE,mBAAmB,EAAe,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,IAAI,CAAC;AAgC1C,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;CACzD;AAMD,MAAM,WAAW,gBAAgB;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,qBAygBrC"}
1
+ {"version":3,"file":"CaseList.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseList.tsx"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,CAAC;AAChC,OAAO,0BAA0B,CAAC;AAuClC,OAAO,KAAkD,MAAM,OAAO,CAAC;AAGvE,OAAO,EAAE,mBAAmB,EAAe,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,IAAI,CAAC;AAqC1C,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;CACzD;AAMD,MAAM,WAAW,gBAAgB;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,qBA8jBrC"}
@@ -24,7 +24,7 @@ import { useLocation } from 'react-router-dom';
24
24
  import { CaseSearchQueryType } from '../../enums/caseSearch';
25
25
  import { PageTitle } from '../../enums/pageTitle';
26
26
  import { useFilterStateOnLoad } from '../../hooks/useFilterStateOnLoad';
27
- import { clearPageCursors, getCaseListFromGraphQL, loadMoreCases } from '../../utils/caseListGraphQLUtils';
27
+ import { clearPageCursors, getCaseListFromGraphQL, loadMoreCases, } from '../../utils/caseListGraphQLUtils';
28
28
  import { createFilterStateFromUrlQuery, createURLQueryFromFilterState, FILTER_URL_CURRENT_PAGE_SEARCH_PARAM, FILTER_URL_PAGE_SIZE_SEARCH_PARAM, FILTER_URL_QUERY_SEARCH_PARAM, FILTER_URL_QUERY_TYPE, } from '../../utils/caseSearchUtils';
29
29
  import { UpdatedCaseDataEvent } from '../../utils/constants';
30
30
  import { NewCaseButton } from '../case/NewCaseButton';
@@ -51,8 +51,6 @@ export function CaseList(props) {
51
51
  const location = useLocation();
52
52
  const searchParams = getUrlParsedParams(location.search);
53
53
  const queryFromUrl = searchParams[FILTER_URL_QUERY_SEARCH_PARAM];
54
- const pageSizeFromUrl = parseInt(searchParams[FILTER_URL_PAGE_SIZE_SEARCH_PARAM]);
55
- const currentPageFromUrl = parseInt(searchParams[FILTER_URL_CURRENT_PAGE_SEARCH_PARAM]);
56
54
  const searchType = searchParams[FILTER_URL_QUERY_TYPE];
57
55
  const abortControllerRef = useRef(undefined);
58
56
  const lastPushedQueryRef = useRef('');
@@ -68,15 +66,56 @@ export function CaseList(props) {
68
66
  const [defaultSavedSearchName, setDefaultSavedSearchName] = useState('');
69
67
  const [RHCDValue, setRHCDValue] = useState('');
70
68
  const [isRHCDAlertShown, setIsRHCDAlertShown] = useState(true);
71
- const loadMoreTriggeredRef = useRef(false);
72
- const { ref: sentinelRef, inView } = useInView({ rootMargin: '100px' });
73
- useEffect(() => {
74
- if (!inView) {
75
- loadMoreTriggeredRef.current = false;
69
+ const loadMoreLockRef = useRef(false);
70
+ const sentinelElRef = useRef(null);
71
+ const prefetchRef = useRef({
72
+ cursor: '',
73
+ data: null,
74
+ loading: false,
75
+ });
76
+ const { ref: inViewRef, inView } = useInView();
77
+ const sentinelRef = React.useCallback((node) => {
78
+ sentinelElRef.current = node || null;
79
+ inViewRef(node);
80
+ }, [inViewRef]);
81
+ function startPrefetch(cursor) {
82
+ if (!cursor || prefetchRef.current.cursor === cursor)
76
83
  return;
77
- }
78
- if (inView && hasNextPage && !isLoadingMore && !loadMoreError && !loadMoreTriggeredRef.current) {
79
- loadMoreTriggeredRef.current = true;
84
+ prefetchRef.current = { cursor, data: null, loading: true };
85
+ loadMoreCases(filterState, apolloClient, cursor)
86
+ .then((result) => {
87
+ if (prefetchRef.current.cursor === cursor) {
88
+ prefetchRef.current = { cursor, data: result, loading: false };
89
+ }
90
+ })
91
+ .catch(() => {
92
+ if (prefetchRef.current.cursor === cursor) {
93
+ prefetchRef.current = { cursor: '', data: null, loading: false };
94
+ }
95
+ });
96
+ }
97
+ useEffect(() => {
98
+ let ticking = false;
99
+ const onScroll = () => {
100
+ if (ticking)
101
+ return;
102
+ ticking = true;
103
+ requestAnimationFrame(() => {
104
+ ticking = false;
105
+ if (!sentinelElRef.current)
106
+ return;
107
+ const rect = sentinelElRef.current.getBoundingClientRect();
108
+ if (rect.top <= window.innerHeight + 600) {
109
+ loadMore();
110
+ }
111
+ });
112
+ };
113
+ window.addEventListener('scroll', onScroll, true);
114
+ return () => window.removeEventListener('scroll', onScroll, true);
115
+ // eslint-disable-next-line react-hooks/exhaustive-deps
116
+ }, [hasNextPage, isLoadingMore, loadMoreError, endCursor]);
117
+ useEffect(() => {
118
+ if (inView && hasNextPage && !isLoadingMore && !loadMoreError) {
80
119
  loadMore();
81
120
  }
82
121
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -92,6 +131,7 @@ export function CaseList(props) {
92
131
  abortControllerRef.current = controller;
93
132
  setIsFetching(CaseListDispatch, true);
94
133
  setHasError(false);
134
+ prefetchRef.current = { cursor: '', data: null, loading: false };
95
135
  const result = yield getCaseListFromGraphQL(currentFilterState, apolloClient, undefined, controller.signal);
96
136
  if (controller.signal.aborted) {
97
137
  return;
@@ -99,6 +139,9 @@ export function CaseList(props) {
99
139
  setCaseList(CaseListDispatch, result.caseListResponse.response);
100
140
  setCursorInfo(CaseListDispatch, result.hasNextPage, result.endCursor);
101
141
  setIsFetching(CaseListDispatch, false);
142
+ if (result.hasNextPage && result.endCursor) {
143
+ startPrefetch(result.endCursor);
144
+ }
102
145
  if (result.showErrorMessage) {
103
146
  setHasError(true);
104
147
  ToastNotification.addDangerMessage(t('There was an error loading case data. Please try again.'));
@@ -116,23 +159,38 @@ export function CaseList(props) {
116
159
  }
117
160
  function loadMore() {
118
161
  return __awaiter(this, void 0, void 0, function* () {
119
- if (isLoadingMore || !hasNextPage || !endCursor || loadMoreError)
162
+ if (loadMoreLockRef.current || isLoadingMore || !hasNextPage || !endCursor || loadMoreError)
120
163
  return;
164
+ loadMoreLockRef.current = true;
121
165
  setIsLoadingMore(CaseListDispatch, true);
122
166
  try {
123
- const result = yield loadMoreCases(filterState, apolloClient, endCursor);
167
+ let result;
168
+ const pf = prefetchRef.current;
169
+ if (pf.cursor === endCursor && pf.data) {
170
+ result = pf.data;
171
+ prefetchRef.current = { cursor: '', data: null, loading: false };
172
+ }
173
+ else {
174
+ prefetchRef.current = { cursor: '', data: null, loading: false };
175
+ result = yield loadMoreCases(filterState, apolloClient, endCursor);
176
+ }
124
177
  setLoadMoreError(CaseListDispatch, false, 0);
125
178
  appendCaseList(CaseListDispatch, result.docs, result.hasNextPage, result.endCursor);
179
+ if (result.hasNextPage && result.endCursor) {
180
+ startPrefetch(result.endCursor);
181
+ }
126
182
  }
127
183
  catch (err) {
128
184
  const nextRetryCount = loadMoreRetryCount + 1;
129
185
  setLoadMoreError(CaseListDispatch, true, nextRetryCount);
130
186
  console.error('[CaseList] loadMore error:', err);
131
187
  }
188
+ finally {
189
+ loadMoreLockRef.current = false;
190
+ }
132
191
  });
133
192
  }
134
193
  function retryLoadMore() {
135
- loadMoreTriggeredRef.current = false;
136
194
  setLoadMoreError(CaseListDispatch, false, loadMoreRetryCount);
137
195
  }
138
196
  const toggleFilterSection = (isExpanded) => {
@@ -241,7 +299,7 @@ export function CaseList(props) {
241
299
  }
242
300
  // effect to update url query and call get case api whenever filter state changes
243
301
  useEffect(() => {
244
- var _a, _b, _c, _d, _e, _f, _g;
302
+ var _a, _b, _c, _d;
245
303
  if (!isFirstMount.current) {
246
304
  const urlQuery = (isNoFilterApplied(filterState) || isOnlyDefaultFilterApplied(filterState)) &&
247
305
  !((_a = filterState.filterQueryInfo) === null || _a === void 0 ? void 0 : _a.queryString) &&
@@ -249,22 +307,23 @@ export function CaseList(props) {
249
307
  ? ''
250
308
  : createURLQueryFromFilterState(filterState);
251
309
  const paginationKey = `p${(_b = filterState.paginationInfo) === null || _b === void 0 ? void 0 : _b.currentPage}_s${(_c = filterState.paginationInfo) === null || _c === void 0 ? void 0 : _c.pageSize}`;
252
- const fullQueryKey = `${urlQuery}_${paginationKey}`;
310
+ const advanceSearchKey = [
311
+ ((_d = filterState.filterQueryInfo) === null || _d === void 0 ? void 0 : _d.parsedQuery) || '',
312
+ JSON.stringify(filterState.advanceSearchDateRanges || null),
313
+ ].join('|');
314
+ const fullQueryKey = `${urlQuery}_${paginationKey}_${advanceSearchKey}`;
253
315
  if (fullQueryKey === lastPushedQueryRef.current) {
254
316
  return;
255
317
  }
256
- const prevQueryKey = lastPushedQueryRef.current;
257
- const prevBaseQuery = prevQueryKey.substring(0, prevQueryKey.lastIndexOf('_p'));
258
- const prevPageSize = (_d = prevQueryKey.match(/_s(\d+)$/)) === null || _d === void 0 ? void 0 : _d[1];
259
- if (urlQuery !== prevBaseQuery || String((_e = filterState.paginationInfo) === null || _e === void 0 ? void 0 : _e.pageSize) !== prevPageSize) {
318
+ if (urlQuery !== lastPushedQueryRef.current) {
260
319
  clearPageCursors();
261
320
  }
262
321
  setCurrentQuery(CaseListDispatch, urlQuery);
263
- lastPushedQueryRef.current = fullQueryKey;
322
+ lastPushedQueryRef.current = urlQuery;
264
323
  searchParams[FILTER_URL_QUERY_SEARCH_PARAM] = encodeURIComponent(urlQuery);
265
- searchParams[FILTER_URL_CURRENT_PAGE_SEARCH_PARAM] = (_f = filterState.paginationInfo) === null || _f === void 0 ? void 0 : _f.currentPage.toString();
266
- searchParams[FILTER_URL_PAGE_SIZE_SEARCH_PARAM] = (_g = filterState.paginationInfo) === null || _g === void 0 ? void 0 : _g.pageSize.toString();
267
324
  searchParams[FILTER_URL_QUERY_TYPE] = filterState.filterQueryInfo.type;
325
+ delete searchParams[FILTER_URL_CURRENT_PAGE_SEARCH_PARAM];
326
+ delete searchParams[FILTER_URL_PAGE_SIZE_SEARCH_PARAM];
268
327
  props.routeProps.history.push({
269
328
  search: getStringifiedParams(searchParams),
270
329
  });
@@ -285,7 +344,7 @@ export function CaseList(props) {
285
344
  // when user manually changes url and hit enter, new result is fetched without refreshing the page
286
345
  if (!isFirstMount.current) {
287
346
  if (queryFromUrl !== currentQuery && queryFromUrl !== lastPushedQueryRef.current) {
288
- const filterStateFromQueryUrl = createFilterStateFromUrlQuery(queryFromUrl, globalMetadataState, pageSizeFromUrl, currentPageFromUrl, searchType);
347
+ const filterStateFromQueryUrl = createFilterStateFromUrlQuery(queryFromUrl, globalMetadataState, undefined, 1, searchType);
289
348
  updateFilterState(filterDispatch, filterStateFromQueryUrl);
290
349
  }
291
350
  return;
@@ -298,8 +357,6 @@ export function CaseList(props) {
298
357
  if (currentQuery) {
299
358
  const navObj = {
300
359
  [FILTER_URL_QUERY_SEARCH_PARAM]: encodeURIComponent(currentQuery),
301
- [FILTER_URL_PAGE_SIZE_SEARCH_PARAM]: filterState.paginationInfo.pageSize,
302
- [FILTER_URL_CURRENT_PAGE_SEARCH_PARAM]: filterState.paginationInfo.currentPage,
303
360
  [FILTER_URL_QUERY_TYPE]: filterState.filterQueryInfo.type,
304
361
  };
305
362
  props.routeProps.history.replace({ search: getStringifiedParams(navObj) });
@@ -316,9 +373,7 @@ export function CaseList(props) {
316
373
  // Remove when we get OFFSET field from SCT
317
374
  // Always reset to page 1 on fresh load — cursor-based pagination
318
375
  // has no stored cursors after refresh, so page > 1 would cause a mismatch
319
- const { initFilterState, defaultSearchName } = useFilterStateInit.set(decodeURIComponent(queryFromUrl), pageSizeFromUrl,
320
- // currentPageFromUrl,
321
- 1, searchType);
376
+ const { initFilterState, defaultSearchName } = useFilterStateInit.set(decodeURIComponent(queryFromUrl), undefined, 1, searchType);
322
377
  // to set default saved search name
323
378
  setDefaultSavedSearchName(defaultSearchName);
324
379
  // set default params when they are empty
@@ -331,15 +386,7 @@ export function CaseList(props) {
331
386
  updateFilterState(filterDispatch, initFilterState);
332
387
  }
333
388
  // eslint-disable-next-line react-hooks/exhaustive-deps
334
- }, [
335
- managedAccounts,
336
- bookmarkedAccounts,
337
- caseGroups,
338
- caseRecordTypes,
339
- queryFromUrl,
340
- pageSizeFromUrl,
341
- currentPageFromUrl,
342
- ]);
389
+ }, [managedAccounts, bookmarkedAccounts, caseGroups, caseRecordTypes, queryFromUrl]);
343
390
  // effect to initially set the filter state to expanded on load
344
391
  useEffect(() => {
345
392
  isCaseListFilterPanelExanded && isXLScreen && toggleFilterSection(true);
@@ -1 +1 @@
1
- {"version":3,"file":"CaseListFilterContext.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListFilterContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EACH,0BAA0B,EAE1B,oBAAoB,EAGpB,eAAe,EACf,SAAS,EACZ,MAAM,yBAAyB,CAAC;AAEjC,QAAA,MAAM,qBAAqB,EAAE,eAG5B,CAAC;AAEF,QAAA,MAAM,eAAe,EAAE,SAGtB,CAAC;AAQF,eAAO,MAAM,sBAAsB,EAAE,oBAKpC,CAAC;AAIF,QAAA,MAAM,0BAA0B,qCAA8C,CAAC;AAC/E,QAAA,MAAM,6BAA6B,2CAAyE,CAAC;AAE7G,iBAAS,sBAAsB,CAAC,EAAE,QAAQ,EAAE;;CAAA,qBAO3C;AAED,OAAO,EACH,0BAA0B,EAC1B,6BAA6B,EAC7B,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,GAClB,CAAC"}
1
+ {"version":3,"file":"CaseListFilterContext.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListFilterContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EACH,0BAA0B,EAE1B,oBAAoB,EAGpB,eAAe,EACf,SAAS,EACZ,MAAM,yBAAyB,CAAC;AAIjC,QAAA,MAAM,qBAAqB,EAAE,eAG5B,CAAC;AAEF,QAAA,MAAM,eAAe,EAAE,SAGtB,CAAC;AAQF,eAAO,MAAM,sBAAsB,EAAE,oBAKpC,CAAC;AAIF,QAAA,MAAM,0BAA0B,qCAA8C,CAAC;AAC/E,QAAA,MAAM,6BAA6B,2CAAyE,CAAC;AAE7G,iBAAS,sBAAsB,CAAC,EAAE,QAAQ,EAAE;;CAAA,qBAO3C;AAED,OAAO,EACH,0BAA0B,EAC1B,6BAA6B,EAC7B,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,GAClB,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import React from 'react';
2
2
  import { CaseSearchQueryType } from '../../enums/caseSearch';
3
3
  import { caseListFilterReducer, initialFilterInfo, } from './CaseListFilterReducer';
4
+ const SMALL_SCREEN_THRESHOLD = 900;
4
5
  const initialPaginationInfo = {
5
- pageSize: 10,
6
+ pageSize: typeof window !== 'undefined' && window.innerHeight < SMALL_SCREEN_THRESHOLD ? 10 : 20,
6
7
  currentPage: 1,
7
8
  };
8
9
  const initialSortInfo = {
@@ -1,7 +1,8 @@
1
1
  import { SolrKeys, SolrPivotKeys } from '../../enums/filters';
2
2
  import { ICaseListFilterState, IFilterInfo } from './CaseListFilterReducer';
3
- declare function isArrayHashMapEmpty(hashMap?: {}): boolean;
3
+ declare const hasAdvanceSearchDateRanges: (filterState: ICaseListFilterState) => boolean;
4
4
  declare const isNoFilterApplied: (filterState: ICaseListFilterState) => boolean;
5
+ declare function isArrayHashMapEmpty(hashMap?: {}): boolean;
5
6
  declare const isOnlyDefaultFilterApplied: (filterState: ICaseListFilterState) => boolean;
6
7
  declare const isStatusFilterWithSFDCSupportedValues: ({ case_status }: Partial<IFilterInfo>) => boolean;
7
8
  declare const isOnlyGroupFilterApplied: (filterInfo: Partial<IFilterInfo>) => boolean;
@@ -11,5 +12,5 @@ declare const eligibleSFDCFiltersWithLengthOne: (SolrKeys | SolrPivotKeys)[];
11
12
  declare const eligibleSFDCFiltersMultipleValues: SolrKeys[];
12
13
  declare const visibleFilterChipsWhenSolrDownSfdcUp: (SolrKeys | SolrPivotKeys)[];
13
14
  declare function canDoSfdcSearch(filterState: ICaseListFilterState): boolean;
14
- export { isNoFilterApplied, isOnlyDefaultFilterApplied, isOnlyGroupFilterApplied, isSearchSupportedBySFDC, isOnlyStatusFilter, isStatusFilterWithSFDCSupportedValues, canDoSfdcSearch, visibleFilterChipsWhenSolrDownSfdcUp, eligibleSFDCFiltersWithLengthOne, eligibleSFDCFiltersMultipleValues, isArrayHashMapEmpty, };
15
+ export { hasAdvanceSearchDateRanges, isNoFilterApplied, isOnlyDefaultFilterApplied, isOnlyGroupFilterApplied, isSearchSupportedBySFDC, isOnlyStatusFilter, isStatusFilterWithSFDCSupportedValues, canDoSfdcSearch, visibleFilterChipsWhenSolrDownSfdcUp, eligibleSFDCFiltersWithLengthOne, eligibleSFDCFiltersMultipleValues, isArrayHashMapEmpty, };
15
16
  //# sourceMappingURL=CaseListFilterHelpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CaseListFilterHelpers.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListFilterHelpers.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAgB,oBAAoB,EAAE,WAAW,EAAqB,MAAM,yBAAyB,CAAC;AAW7G,iBAAS,mBAAmB,CAAC,OAAO,KAAK,WAExC;AAED,QAAA,MAAM,iBAAiB,GAAI,aAAa,oBAAoB,YAE3D,CAAC;AAEF,QAAA,MAAM,0BAA0B,GAAI,aAAa,oBAAoB,YAEpE,CAAC;AAEF,QAAA,MAAM,qCAAqC,GAAI,iBAAsB,OAAO,CAAC,WAAW,CAAC,YAGxF,CAAC;AAaF,QAAA,MAAM,wBAAwB,GAAI,YAAY,OAAO,CAAC,WAAW,CAAC,YAMjE,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,YAAY,OAAO,CAAC,WAAW,CAAC,YAG3D,CAAC;AAEF,QAAA,MAAM,uBAAuB,GAAI,aAAa,oBAAoB,YAOjE,CAAC;AAEF,QAAA,MAAM,gCAAgC,8BAAsE,CAAC;AAC7G,QAAA,MAAM,iCAAiC,YAAmB,CAAC;AAE3D,QAAA,MAAM,oCAAoC,8BAGzC,CAAC;AAIF,iBAAS,eAAe,CAAC,WAAW,EAAE,oBAAoB,WAiBzD;AAED,OAAO,EACH,iBAAiB,EACjB,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAClB,qCAAqC,EACrC,eAAe,EACf,oCAAoC,EACpC,gCAAgC,EAChC,iCAAiC,EACjC,mBAAmB,GACtB,CAAC"}
1
+ {"version":3,"file":"CaseListFilterHelpers.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListFilterHelpers.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAGH,oBAAoB,EACpB,WAAW,EAEd,MAAM,yBAAyB,CAAC;AAMjC,QAAA,MAAM,0BAA0B,GAAI,aAAa,oBAAoB,KAAG,OAWvE,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,aAAa,oBAAoB,YAE3D,CAAC;AAWF,iBAAS,mBAAmB,CAAC,OAAO,KAAK,WAExC;AAED,QAAA,MAAM,0BAA0B,GAAI,aAAa,oBAAoB,YAKpE,CAAC;AAEF,QAAA,MAAM,qCAAqC,GAAI,iBAAsB,OAAO,CAAC,WAAW,CAAC,YAGxF,CAAC;AAaF,QAAA,MAAM,wBAAwB,GAAI,YAAY,OAAO,CAAC,WAAW,CAAC,YAMjE,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,YAAY,OAAO,CAAC,WAAW,CAAC,YAG3D,CAAC;AAEF,QAAA,MAAM,uBAAuB,GAAI,aAAa,oBAAoB,YAOjE,CAAC;AAEF,QAAA,MAAM,gCAAgC,8BAAsE,CAAC;AAC7G,QAAA,MAAM,iCAAiC,YAAmB,CAAC;AAE3D,QAAA,MAAM,oCAAoC,8BAGzC,CAAC;AAIF,iBAAS,eAAe,CAAC,WAAW,EAAE,oBAAoB,WAiBzD;AAED,OAAO,EACH,0BAA0B,EAC1B,iBAAiB,EACjB,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAClB,qCAAqC,EACrC,eAAe,EACf,oCAAoC,EACpC,gCAAgC,EAChC,iCAAiC,EACjC,mBAAmB,GACtB,CAAC"}
@@ -14,7 +14,22 @@ import isEqual from 'lodash/isEqual';
14
14
  import sortBy from 'lodash/sortBy';
15
15
  import { CaseStatus } from '../../enums/case';
16
16
  import { SolrKeys, SolrPivotKeys } from '../../enums/filters';
17
- import { emptyFilters, initialFilterInfo } from './CaseListFilterReducer';
17
+ import { emptyFilters, initialFilterInfo, } from './CaseListFilterReducer';
18
+ function isDateRangeActive(range) {
19
+ return Boolean((range === null || range === void 0 ? void 0 : range.startDate) || (range === null || range === void 0 ? void 0 : range.endDate));
20
+ }
21
+ const hasAdvanceSearchDateRanges = (filterState) => {
22
+ const ranges = filterState.advanceSearchDateRanges;
23
+ if (!ranges) {
24
+ return false;
25
+ }
26
+ return (isDateRangeActive(ranges.createdDateRange) ||
27
+ isDateRangeActive(ranges.lastModifiedDateRange) ||
28
+ isDateRangeActive(ranges.closedDateRange));
29
+ };
30
+ const isNoFilterApplied = (filterState) => {
31
+ return isEqual(filterState.filterInfo, emptyFilters) && !hasAdvanceSearchDateRanges(filterState);
32
+ };
18
33
  function sortArrayHashMap(hashMap = {}) {
19
34
  const sortedHashMap = Object.keys(hashMap).reduce((acc, currKey) => {
20
35
  const rawVal = hashMap[currKey];
@@ -26,11 +41,9 @@ function sortArrayHashMap(hashMap = {}) {
26
41
  function isArrayHashMapEmpty(hashMap = {}) {
27
42
  return Object.entries(hashMap).every(([, val]) => (val || []).length < 1);
28
43
  }
29
- const isNoFilterApplied = (filterState) => {
30
- return isEqual(filterState.filterInfo, emptyFilters);
31
- };
32
44
  const isOnlyDefaultFilterApplied = (filterState) => {
33
- return isEqual(sortArrayHashMap(filterState.filterInfo), sortArrayHashMap(initialFilterInfo));
45
+ return (isEqual(sortArrayHashMap(filterState.filterInfo), sortArrayHashMap(initialFilterInfo)) &&
46
+ !hasAdvanceSearchDateRanges(filterState));
34
47
  };
35
48
  const isStatusFilterWithSFDCSupportedValues = ({ case_status = [] }) => {
36
49
  const statusLength = case_status.length;
@@ -86,4 +99,4 @@ function canDoSfdcSearch(filterState) {
86
99
  }
87
100
  });
88
101
  }
89
- export { isNoFilterApplied, isOnlyDefaultFilterApplied, isOnlyGroupFilterApplied, isSearchSupportedBySFDC, isOnlyStatusFilter, isStatusFilterWithSFDCSupportedValues, canDoSfdcSearch, visibleFilterChipsWhenSolrDownSfdcUp, eligibleSFDCFiltersWithLengthOne, eligibleSFDCFiltersMultipleValues, isArrayHashMapEmpty, };
102
+ export { hasAdvanceSearchDateRanges, isNoFilterApplied, isOnlyDefaultFilterApplied, isOnlyGroupFilterApplied, isSearchSupportedBySFDC, isOnlyStatusFilter, isStatusFilterWithSFDCSupportedValues, canDoSfdcSearch, visibleFilterChipsWhenSolrDownSfdcUp, eligibleSFDCFiltersWithLengthOne, eligibleSFDCFiltersMultipleValues, isArrayHashMapEmpty, };
@@ -46,14 +46,43 @@ export interface IFilterInfo {
46
46
  [SolrKeys.caseSummary]: Array<string>;
47
47
  [SolrKeys.modifiedBy]: Array<string>;
48
48
  [SolrKeys.alternateId]: Array<string>;
49
+ [SolrKeys.openshiftClusterId]: Array<string>;
49
50
  [SolrKeys.isPrivate]: Array<IKeyValue<string>>;
50
51
  }
51
52
  export declare const emptyFilters: IFilterInfo;
53
+ export interface IAdvanceSearchDateRange {
54
+ startDate: string;
55
+ endDate: string;
56
+ }
57
+ export interface IAdvanceSearchDateRanges {
58
+ createdDateRange: IAdvanceSearchDateRange;
59
+ lastModifiedDateRange: IAdvanceSearchDateRange;
60
+ closedDateRange: IAdvanceSearchDateRange;
61
+ }
62
+ export interface IAdvanceSearchFormState {
63
+ statuses: string[];
64
+ severities: string[];
65
+ supportTypes: string[];
66
+ showEscalatedOnly: boolean;
67
+ accountNumbers: Array<IKeyValue<string>>;
68
+ personalReferenceNumber: string;
69
+ openshiftClusterId: string;
70
+ ownerNameAndSso: string;
71
+ assignedToNameAndSso: string;
72
+ groups: Array<IKeyValue<string>>;
73
+ createdByNameAndSso: string;
74
+ lastModifiedByNameAndSso: string;
75
+ createdDateRange: IAdvanceSearchDateRange;
76
+ lastModifiedDateRange: IAdvanceSearchDateRange;
77
+ closedDateRange: IAdvanceSearchDateRange;
78
+ products: IProductFilter[];
79
+ }
52
80
  export interface ICaseListFilterState {
53
81
  sortInfo?: ISortInfo;
54
82
  paginationInfo?: IPaginationInfo;
55
83
  filterQueryInfo?: IFilterQueryInfo;
56
84
  filterInfo?: Partial<IFilterInfo>;
85
+ advanceSearchDateRanges?: IAdvanceSearchDateRanges;
57
86
  }
58
87
  export type IFilterKeys = keyof IFilterInfo;
59
88
  type IActionType = IAction<CaseListReducerEnum, ICaseListFilterState>;
@@ -1 +1 @@
1
- {"version":3,"file":"CaseListFilterReducer.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListFilterReducer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CaseListFilterReducer.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListFilterReducer.tsx"],"names":[],"mappings":"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"}
@@ -38,6 +38,7 @@ export const emptyFilters = {
38
38
  [SolrKeys.caseSummary]: [],
39
39
  [SolrKeys.modifiedBy]: [],
40
40
  [SolrKeys.alternateId]: [],
41
+ [SolrKeys.openshiftClusterId]: [],
41
42
  [SolrKeys.isPrivate]: [],
42
43
  };
43
44
  const caseListFilterReducer = (pState, action) => {
@@ -1 +1 @@
1
- {"version":3,"file":"AdditionalFilters.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-filters/AdditionalFilters.tsx"],"names":[],"mappings":"AAGA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAO/D,wBAAgB,iBAAiB,sBA6FhC"}
1
+ {"version":3,"file":"AdditionalFilters.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-filters/AdditionalFilters.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAO/D,wBAAgB,iBAAiB,sBAqGhC"}
@@ -1,4 +1,5 @@
1
1
  import { Checkbox } from '@patternfly/react-core';
2
+ import { AbilityContext, CaseListFields, resourceActions, resources } from '@rh-support/user-permissions';
2
3
  import isEmpty from 'lodash/isEmpty';
3
4
  import isEqual from 'lodash/isEqual';
4
5
  import React, { useContext, useEffect, useState } from 'react';
@@ -11,6 +12,10 @@ export function AdditionalFilters() {
11
12
  const [isPrivate, setIsPrivate] = useState(false);
12
13
  const { t } = useTranslation();
13
14
  const dispatch = useContext(CaseListFilterDispatchContext);
15
+ const ability = useContext(AbilityContext);
16
+ const canAccessPrivateCaseFilter = ability.can(resourceActions.PATCH, resources.CASE_LIST, CaseListFields.PRIVATE_CASE_FILTER);
17
+ //canAccessPrivateCaseFilter is not used anywhere, so we need to void it to avoid linting error
18
+ void canAccessPrivateCaseFilter;
14
19
  const { filterInfo: { case_customer_escalation, case_private }, } = useContext(CaseListFilterStateContext);
15
20
  const onEscalatedChange = (checked) => {
16
21
  updateFilter(dispatch, {
@@ -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;AAU1C,wBAAgB,mBAAmB,sBAwHlC"}
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';
@@ -11,10 +12,13 @@ import { clearFilters, removeFilterItem } from '../CaseListFilterReducer';
11
12
  import { CreatorSsoNameFilterChip } from './CreatorSsoNameFilterChip';
12
13
  import { ProductFilterChip } from './ProductFilterChip';
13
14
  export function CaseListFilterChips() {
15
+ const ability = useContext(AbilityContext);
14
16
  const { filterInfo } = useContext(CaseListFilterStateContext);
15
17
  const dispatch = useContext(CaseListFilterDispatchContext);
18
+ const canUseAdvancedSearch = ability.can(resourceActions.PATCH, resources.CASE_LIST, CaseListFields.ADVANCED_SEARCH);
16
19
  const currentFilterLength = flatMap(filterInfo).length;
17
20
  const isAnyFilterApplied = currentFilterLength > 0;
21
+ const shouldShowFilterChips = isAnyFilterApplied && !canUseAdvancedSearch;
18
22
  const deleteChip = (filterKey, value) => () => {
19
23
  removeFilterItem(dispatch, { filterKey, value });
20
24
  };
@@ -77,7 +81,7 @@ export function CaseListFilterChips() {
77
81
  const showUsernameFilter = (Array.isArray(filterInfo[SolrKeys.createdBySsoUsername]) &&
78
82
  filterInfo[SolrKeys.createdBySsoUsername].length > 0) ||
79
83
  (Array.isArray(filterInfo[SolrKeys.caseContactSSO]) && filterInfo[SolrKeys.caseContactSSO].length > 0);
80
- 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" },
81
85
  React.createElement("h2", null, "Filtering by"),
82
86
  React.createElement("div", { className: "filter-chips" },
83
87
  Array.isArray(filterInfo[ProductVersionKey]) && filterInfo[ProductVersionKey].length > 0 && (React.createElement(ProductFilterChip, { productList: filterInfo[ProductVersionKey] })),
@@ -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,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAqB,MAAM,OAAO,CAAC;AAY1C,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,sBAmExG,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;AAY1C,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,sBAgExG,CAAC"}
@@ -21,14 +21,13 @@ export const CaseListFilters = ({ allCaseTypes, allCaseSeverities, allCaseStatus
21
21
  const canAccessSeverityFilter = ability.can(resourceActions.PATCH, resources.CASE_LIST, CaseListFields.SEVERITY_FILTER);
22
22
  const canAccessAdditionalFilter = ability.can(resourceActions.PATCH, resources.CASE_LIST, CaseListFields.ADDITIONAL_FILTER);
23
23
  const canAccessGroupsFilter = ability.can(resourceActions.PATCH, resources.CASE_LIST, CaseListFields.GROUPS_FILTER);
24
- void canAccessGroupsFilter;
25
- void GroupsFilter;
26
24
  const canAccessCreatorFilter = ability.can(resourceActions.PATCH, resources.CASE_LIST, CaseListFields.CREATOR_FILTER);
27
25
  const canAccessTypeFilter = ability.can(resourceActions.PATCH, resources.CASE_LIST, CaseListFields.TYPE_FILTER);
28
26
  return (React.createElement(React.Fragment, null,
29
27
  React.createElement("div", { className: "filter-group" },
30
28
  canReadAccountFilter && React.createElement(AccountsFilter, { canReadBookmarkAccounts: canReadAccountFilter }),
31
29
  (canReadBookmarkAccounts || canAccessManagedAccounts) && (React.createElement(AccountsBookmarkedGroupFilter, { canManageBookmarkAccounts: canManageBookmarkAccounts, canReadBookmarkAccounts: canReadBookmarkAccounts, canAccessManagedAccounts: canAccessManagedAccounts })),
30
+ canAccessGroupsFilter && React.createElement(GroupsFilter, null),
32
31
  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) => ({
33
32
  name: p.product,
34
33
  productId: p.productId,
@@ -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;AAUrD,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,qBAuTxB"}