@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.
- package/lib/esm/components/case-list/CaseList.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseList.js +85 -38
- package/lib/esm/components/case-list/CaseListFilterContext.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListFilterContext.js +2 -1
- package/lib/esm/components/case-list/CaseListFilterHelpers.d.ts +3 -2
- package/lib/esm/components/case-list/CaseListFilterHelpers.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListFilterHelpers.js +19 -6
- package/lib/esm/components/case-list/CaseListFilterReducer.d.ts +29 -0
- package/lib/esm/components/case-list/CaseListFilterReducer.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListFilterReducer.js +1 -0
- package/lib/esm/components/case-list/case-list-filters/AdditionalFilters.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/AdditionalFilters.js +5 -0
- package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.js +5 -1
- package/lib/esm/components/case-list/case-list-filters/CaseListFilters.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/CaseListFilters.js +1 -2
- package/lib/esm/components/case-list/case-list-filters/CreatorSsoNameFilterChip.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/CreatorSsoNameFilterChip.js +3 -0
- package/lib/esm/components/case-list/case-list-filters/GroupsFilter.d.ts +11 -1
- package/lib/esm/components/case-list/case-list-filters/GroupsFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/GroupsFilter.js +116 -71
- package/lib/esm/components/case-list/case-list-filters/VersionsFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/VersionsFilter.js +1 -29
- package/lib/esm/components/case-list/case-list-table/CaseListTable.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-table/CaseListTable.js +11 -5
- package/lib/esm/components/case-list/case-search/AdvanceSearch.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-search/AdvanceSearch.js +1 -1
- package/lib/esm/components/case-list/case-search/AdvanceSearchToggleButton.d.ts +8 -0
- package/lib/esm/components/case-list/case-search/AdvanceSearchToggleButton.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/AdvanceSearchToggleButton.js +8 -0
- package/lib/esm/components/case-list/case-search/CaseSearch.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-search/CaseSearch.js +51 -20
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAccountSection.d.ts +10 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAccountSection.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAccountSection.js +29 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAuditsSection.d.ts +10 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAuditsSection.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAuditsSection.js +16 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchCaseSection.d.ts +9 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchCaseSection.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchCaseSection.js +21 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchDateRangeField.d.ts +12 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchDateRangeField.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchDateRangeField.js +31 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchFieldBlock.d.ts +10 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchFieldBlock.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchFieldBlock.js +10 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchModal.d.ts +10 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchModal.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchModal.js +92 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchOwnerSection.d.ts +9 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchOwnerSection.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchOwnerSection.js +20 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchProductSection.d.ts +9 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchProductSection.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchProductSection.js +28 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/ProductVersionDrilldownSelect.d.ts +9 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/ProductVersionDrilldownSelect.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/ProductVersionDrilldownSelect.js +241 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/SelectableLabelFilter.d.ts +11 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/SelectableLabelFilter.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/SelectableLabelFilter.js +23 -0
- package/lib/esm/css/caseList.css +13 -1
- package/lib/esm/css/caseSearch.css +114 -0
- package/lib/esm/enums/caseSearch.d.ts +1 -0
- package/lib/esm/enums/caseSearch.d.ts.map +1 -1
- package/lib/esm/enums/caseSearch.js +1 -1
- package/lib/esm/hooks/useFilterStateOnLoad.d.ts +1 -1
- package/lib/esm/hooks/useFilterStateOnLoad.d.ts.map +1 -1
- package/lib/esm/utils/advanceSearchFormMapper.d.ts +11 -0
- package/lib/esm/utils/advanceSearchFormMapper.d.ts.map +1 -0
- package/lib/esm/utils/advanceSearchFormMapper.js +71 -0
- package/lib/esm/utils/advanceSearchUtils.d.ts +24 -0
- package/lib/esm/utils/advanceSearchUtils.d.ts.map +1 -0
- package/lib/esm/utils/advanceSearchUtils.js +149 -0
- package/lib/esm/utils/caseListGraphQLUtils.d.ts.map +1 -1
- package/lib/esm/utils/caseListGraphQLUtils.js +55 -19
- package/lib/esm/utils/caseListMapper.js +4 -4
- package/lib/esm/utils/caseListVariablesBuilder.d.ts +1 -0
- package/lib/esm/utils/caseListVariablesBuilder.d.ts.map +1 -1
- package/lib/esm/utils/caseListVariablesBuilder.js +240 -34
- package/lib/esm/utils/caseSearchUtils.d.ts.map +1 -1
- package/lib/esm/utils/caseSearchUtils.js +5 -2
- package/lib/esm/utils/constants.d.ts +2 -0
- package/lib/esm/utils/constants.d.ts.map +1 -1
- package/lib/esm/utils/constants.js +6 -0
- 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;
|
|
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
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
79
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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 =
|
|
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,
|
|
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),
|
|
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;
|
|
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
|
|
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,
|
|
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":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE9D,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,WAAW,CAYlD,CAAC;AAEF,aAAK,mBAAmB;IACpB,YAAY,kBAAkB;IAC9B,aAAa,mBAAmB;IAChC,UAAU,gBAAgB;IAC1B,iBAAiB,wBAAwB;IACzC,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,qBAAqB,6BAA6B;IAClD,WAAW,iBAAiB;CAC/B;AAED,MAAM,WAAW,SAAS;IACtB,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IAC/C,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IACxB,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IAClD,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3C,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;CAClD;AAED,eAAO,MAAM,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"CaseListFilterReducer.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListFilterReducer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdditionalFilters.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-filters/AdditionalFilters.tsx"],"names":[],"mappings":"
|
|
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":"
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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":"
|
|
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"}
|