@rh-support/cases 2.6.214 → 2.6.216
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 +88 -20
- package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.js +5 -2
- package/lib/esm/hooks/useFilterStateOnLoad.d.ts.map +1 -1
- package/lib/esm/hooks/useFilterStateOnLoad.js +7 -5
- package/lib/esm/utils/caseGroupDefaultFilterUtils.d.ts +12 -0
- package/lib/esm/utils/caseGroupDefaultFilterUtils.d.ts.map +1 -0
- package/lib/esm/utils/caseGroupDefaultFilterUtils.js +34 -0
- package/lib/esm/utils/caseGroupDefaultUtils.d.ts +10 -0
- package/lib/esm/utils/caseGroupDefaultUtils.d.ts.map +1 -0
- package/lib/esm/utils/caseGroupDefaultUtils.js +20 -0
- package/lib/esm/utils/caseListGraphQLUtils.d.ts +2 -2
- package/lib/esm/utils/caseListGraphQLUtils.d.ts.map +1 -1
- package/lib/esm/utils/caseListGraphQLUtils.js +11 -11
- package/lib/esm/utils/caseListVariablesBuilder.d.ts +1 -1
- package/lib/esm/utils/caseListVariablesBuilder.d.ts.map +1 -1
- package/lib/esm/utils/caseListVariablesBuilder.js +3 -3
- package/package.json +6 -6
|
@@ -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;
|
|
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;AAwClC,OAAO,KAAkD,MAAM,OAAO,CAAC;AAGvE,OAAO,EAAE,mBAAmB,EAAe,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,IAAI,CAAC;AAuC1C,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,qBA2vBrC"}
|
|
@@ -16,14 +16,17 @@ import { ErrorBoundary, ToastNotification, useBreakpoint, useDocumentTitle, useF
|
|
|
16
16
|
import { CSSUserModal, fetchAllStatuses, fetchCaseGroupsForAccount, fetchCaseGroupsForSSO, fetchCaseSeverities, fetchCaseTypes, fetchProducts, GlobalMetadataDispatchContext, GlobalMetadataStateContext, setUserPreferences, updateCaseListTraditionalSupportAgreed, updateUserPreferences, useGlobalDispatchContext, UserPreferencesKeys, } from '@rh-support/react-context';
|
|
17
17
|
import { getStringifiedParams, getUrlParsedParams, haventLoadedMetadata, haventLoadedProductsMetadata, pendoTrackEvent, } from '@rh-support/utils';
|
|
18
18
|
import isEmpty from 'lodash/isEmpty';
|
|
19
|
+
import isEqual from 'lodash/isEqual';
|
|
19
20
|
import some from 'lodash/some';
|
|
20
21
|
import React, { useContext, useEffect, useRef, useState } from 'react';
|
|
21
22
|
import { Trans, useTranslation } from 'react-i18next';
|
|
22
23
|
import { useInView } from 'react-intersection-observer';
|
|
23
24
|
import { useLocation } from 'react-router-dom';
|
|
24
25
|
import { CaseSearchQueryType } from '../../enums/caseSearch';
|
|
26
|
+
import { SolrKeys } from '../../enums/filters';
|
|
25
27
|
import { PageTitle } from '../../enums/pageTitle';
|
|
26
28
|
import { useFilterStateOnLoad } from '../../hooks/useFilterStateOnLoad';
|
|
29
|
+
import { getDefaultGroupFilterSelection, shouldApplyDefaultGroupFilter } from '../../utils/caseGroupDefaultFilterUtils';
|
|
27
30
|
import { clearPageCursors, getCaseListFromGraphQL, loadMoreCases, } from '../../utils/caseListGraphQLUtils';
|
|
28
31
|
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
32
|
import { UpdatedCaseDataEvent } from '../../utils/constants';
|
|
@@ -34,20 +37,21 @@ import { CaseListTable } from './case-list-table/CaseListTable';
|
|
|
34
37
|
import { CaseSearch } from './case-search/CaseSearch';
|
|
35
38
|
import { useCaseListDispatchContext, useCaseListStateContext } from './CaseListContext';
|
|
36
39
|
import { CaseListFilterDispatchContext, CaseListFilterStateContext } from './CaseListFilterContext';
|
|
37
|
-
import { isNoFilterApplied, isOnlyDefaultFilterApplied } from './CaseListFilterHelpers';
|
|
40
|
+
import { isNoFilterApplied, isOnlyDefaultFilterApplied, isOnlyGroupFilterApplied } from './CaseListFilterHelpers';
|
|
38
41
|
import { updateFilterState } from './CaseListFilterReducer';
|
|
39
42
|
import { appendCaseList, setCaseList, setCurrentQuery, setCursorInfo, setIsFetching, setIsLoadingMore, setLoadMoreError, } from './CaseListReducer';
|
|
40
43
|
export function CaseList(props) {
|
|
41
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
44
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
42
45
|
const { t } = useTranslation();
|
|
43
46
|
useDocumentTitle(PageTitle.CASE_LIST);
|
|
44
47
|
const dispatchToGlobalMetadataReducer = useContext(GlobalMetadataDispatchContext);
|
|
45
48
|
const { caseList, isFetching, isLoadingMore, hasNextPage, endCursor, currentQuery, loadMoreError, loadMoreRetryCount, } = useCaseListStateContext();
|
|
46
49
|
const CaseListDispatch = useCaseListDispatchContext();
|
|
47
50
|
const breakPoint = useBreakpoint();
|
|
48
|
-
const { globalMetadataState, globalMetadataState: { caseGroups, loggedInUser, loggedInUserRights, loggedInUsersAccount, userPreferences, managedAccounts, bookmarkedAccounts, allCaseTypes, allCaseSeverities, allCaseStatuses, allProducts, caseRecordTypes, caseListTraditionalSupportAgreed, }, } = useContext(GlobalMetadataStateContext);
|
|
51
|
+
const { globalMetadataState, globalMetadataState: { caseGroups, loggedInUser, loggedInUserRights, loggedInUsersAccount, userPreferences, managedAccounts, bookmarkedAccounts, allCaseTypes, allCaseSeverities, allCaseStatuses, allProducts, caseRecordTypes, caseListTraditionalSupportAgreed, hydraUserPreferences, }, } = useContext(GlobalMetadataStateContext);
|
|
49
52
|
const globalDispatchContext = useGlobalDispatchContext();
|
|
50
53
|
const apolloClient = useApolloClient();
|
|
54
|
+
const includeSecureSupportCases = Boolean(loggedInUsersAccount.data.secureSupport);
|
|
51
55
|
const location = useLocation();
|
|
52
56
|
const searchParams = getUrlParsedParams(location.search);
|
|
53
57
|
const queryFromUrl = searchParams[FILTER_URL_QUERY_SEARCH_PARAM];
|
|
@@ -69,6 +73,7 @@ export function CaseList(props) {
|
|
|
69
73
|
const loadMoreLockRef = useRef(false);
|
|
70
74
|
const loadMoreFnRef = useRef(() => { });
|
|
71
75
|
const loadMoreCooldownRef = useRef(false);
|
|
76
|
+
const loadMoreAbortRef = useRef(null);
|
|
72
77
|
const activeFilterStateRef = useRef(filterState);
|
|
73
78
|
const sentinelElRef = useRef(null);
|
|
74
79
|
const prefetchRef = useRef({
|
|
@@ -85,7 +90,7 @@ export function CaseList(props) {
|
|
|
85
90
|
if (!cursor || prefetchRef.current.cursor === cursor)
|
|
86
91
|
return;
|
|
87
92
|
prefetchRef.current = { cursor, data: null, loading: true };
|
|
88
|
-
loadMoreCases(activeFilterStateRef.current, apolloClient, cursor)
|
|
93
|
+
loadMoreCases(activeFilterStateRef.current, apolloClient, cursor, undefined, includeSecureSupportCases)
|
|
89
94
|
.then((result) => {
|
|
90
95
|
if (prefetchRef.current.cursor === cursor) {
|
|
91
96
|
prefetchRef.current = { cursor, data: result, loading: false };
|
|
@@ -129,6 +134,25 @@ export function CaseList(props) {
|
|
|
129
134
|
}
|
|
130
135
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
131
136
|
}, [inView]);
|
|
137
|
+
useEffect(() => {
|
|
138
|
+
if (!isLoadingMore)
|
|
139
|
+
return;
|
|
140
|
+
const handleOffline = () => {
|
|
141
|
+
if (loadMoreAbortRef.current) {
|
|
142
|
+
loadMoreAbortRef.current.abort();
|
|
143
|
+
loadMoreAbortRef.current = null;
|
|
144
|
+
}
|
|
145
|
+
loadMoreLockRef.current = false;
|
|
146
|
+
setLoadMoreError(CaseListDispatch, true, loadMoreRetryCount + 1);
|
|
147
|
+
};
|
|
148
|
+
if (!navigator.onLine) {
|
|
149
|
+
handleOffline();
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
window.addEventListener('offline', handleOffline);
|
|
153
|
+
return () => window.removeEventListener('offline', handleOffline);
|
|
154
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
155
|
+
}, [isLoadingMore]);
|
|
132
156
|
useEffect(() => {
|
|
133
157
|
const onClick = (e) => {
|
|
134
158
|
const anchor = e.target.closest('a.btn_slideto[href="#masthead"]');
|
|
@@ -154,7 +178,7 @@ export function CaseList(props) {
|
|
|
154
178
|
prefetchRef.current = { cursor: '', data: null, loading: false };
|
|
155
179
|
loadMoreCooldownRef.current = true;
|
|
156
180
|
activeFilterStateRef.current = currentFilterState;
|
|
157
|
-
const result = yield getCaseListFromGraphQL(currentFilterState, apolloClient, undefined, controller.signal);
|
|
181
|
+
const result = yield getCaseListFromGraphQL(currentFilterState, apolloClient, undefined, controller.signal, undefined, includeSecureSupportCases);
|
|
158
182
|
if (controller.signal.aborted) {
|
|
159
183
|
return;
|
|
160
184
|
}
|
|
@@ -184,6 +208,7 @@ export function CaseList(props) {
|
|
|
184
208
|
}
|
|
185
209
|
function loadMore() {
|
|
186
210
|
return __awaiter(this, void 0, void 0, function* () {
|
|
211
|
+
var _a;
|
|
187
212
|
if (loadMoreCooldownRef.current ||
|
|
188
213
|
loadMoreLockRef.current ||
|
|
189
214
|
isLoadingMore ||
|
|
@@ -192,6 +217,11 @@ export function CaseList(props) {
|
|
|
192
217
|
loadMoreError)
|
|
193
218
|
return;
|
|
194
219
|
loadMoreLockRef.current = true;
|
|
220
|
+
if (loadMoreAbortRef.current) {
|
|
221
|
+
loadMoreAbortRef.current.abort();
|
|
222
|
+
}
|
|
223
|
+
const controller = new AbortController();
|
|
224
|
+
loadMoreAbortRef.current = controller;
|
|
195
225
|
setIsLoadingMore(CaseListDispatch, true);
|
|
196
226
|
try {
|
|
197
227
|
let result;
|
|
@@ -202,8 +232,10 @@ export function CaseList(props) {
|
|
|
202
232
|
}
|
|
203
233
|
else {
|
|
204
234
|
prefetchRef.current = { cursor: '', data: null, loading: false };
|
|
205
|
-
result = yield loadMoreCases(activeFilterStateRef.current, apolloClient, endCursor);
|
|
235
|
+
result = yield loadMoreCases(activeFilterStateRef.current, apolloClient, endCursor, controller.signal, includeSecureSupportCases);
|
|
206
236
|
}
|
|
237
|
+
if (controller.signal.aborted)
|
|
238
|
+
return;
|
|
207
239
|
setLoadMoreError(CaseListDispatch, false, 0);
|
|
208
240
|
appendCaseList(CaseListDispatch, result.docs, result.hasNextPage, result.endCursor);
|
|
209
241
|
if (result.hasNextPage && result.endCursor) {
|
|
@@ -211,17 +243,27 @@ export function CaseList(props) {
|
|
|
211
243
|
}
|
|
212
244
|
}
|
|
213
245
|
catch (err) {
|
|
246
|
+
if ((err === null || err === void 0 ? void 0 : err.name) === 'AbortError' || ((_a = err === null || err === void 0 ? void 0 : err.message) === null || _a === void 0 ? void 0 : _a.includes('aborted')) || controller.signal.aborted) {
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
214
249
|
const nextRetryCount = loadMoreRetryCount + 1;
|
|
215
250
|
setLoadMoreError(CaseListDispatch, true, nextRetryCount);
|
|
216
251
|
console.error('[CaseList] loadMore error:', err);
|
|
217
252
|
}
|
|
218
253
|
finally {
|
|
219
|
-
|
|
254
|
+
if (!controller.signal.aborted) {
|
|
255
|
+
loadMoreLockRef.current = false;
|
|
256
|
+
}
|
|
220
257
|
}
|
|
221
258
|
});
|
|
222
259
|
}
|
|
223
260
|
loadMoreFnRef.current = loadMore;
|
|
224
261
|
function retryLoadMore() {
|
|
262
|
+
if (loadMoreAbortRef.current) {
|
|
263
|
+
loadMoreAbortRef.current.abort();
|
|
264
|
+
loadMoreAbortRef.current = null;
|
|
265
|
+
}
|
|
266
|
+
loadMoreLockRef.current = false;
|
|
225
267
|
setLoadMoreError(CaseListDispatch, false, loadMoreRetryCount);
|
|
226
268
|
setTimeout(() => loadMoreFnRef.current(), 0);
|
|
227
269
|
}
|
|
@@ -240,7 +282,7 @@ export function CaseList(props) {
|
|
|
240
282
|
};
|
|
241
283
|
const checkNewCases = () => __awaiter(this, void 0, void 0, function* () {
|
|
242
284
|
try {
|
|
243
|
-
const { caseListResponse } = yield getCaseListFromGraphQL(filterState, apolloClient);
|
|
285
|
+
const { caseListResponse } = yield getCaseListFromGraphQL(filterState, apolloClient, undefined, undefined, undefined, includeSecureSupportCases);
|
|
244
286
|
let changed = false;
|
|
245
287
|
if (caseListResponse.response.numFound <= filterState.paginationInfo.pageSize &&
|
|
246
288
|
caseListResponse.response.numFound !== caseList.numFound) {
|
|
@@ -278,24 +320,50 @@ export function CaseList(props) {
|
|
|
278
320
|
var _a;
|
|
279
321
|
if (!salesforceAccountId || loggedInUser.isFetching)
|
|
280
322
|
return;
|
|
281
|
-
if (haventLoadedMetadata(caseGroups, (data) => data === undefined))
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
323
|
+
if (!haventLoadedMetadata(caseGroups, (data) => data === undefined))
|
|
324
|
+
return;
|
|
325
|
+
if ((_a = loggedInUsersAccount.data) === null || _a === void 0 ? void 0 : _a.isInternal) {
|
|
326
|
+
fetchCaseGroupsForAccount(dispatchToGlobalMetadataReducer, apolloClient, salesforceAccountId, defaultCaseGroupId, loggedInContactId, loggedInIsOrgAdmin);
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
fetchCaseGroupsForSSO(dispatchToGlobalMetadataReducer, apolloClient, salesforceAccountId, defaultCaseGroupId, loggedInContactId, loggedInIsOrgAdmin);
|
|
288
330
|
}
|
|
289
331
|
}, [
|
|
332
|
+
apolloClient,
|
|
290
333
|
caseGroups,
|
|
291
334
|
dispatchToGlobalMetadataReducer,
|
|
292
|
-
|
|
293
|
-
salesforceAccountId,
|
|
294
|
-
loggedInUsersAccount.data,
|
|
335
|
+
defaultCaseGroupId,
|
|
295
336
|
loggedInContactId,
|
|
296
337
|
loggedInIsOrgAdmin,
|
|
297
338
|
loggedInUser.isFetching,
|
|
339
|
+
(_f = loggedInUsersAccount.data) === null || _f === void 0 ? void 0 : _f.isInternal,
|
|
340
|
+
salesforceAccountId,
|
|
341
|
+
]);
|
|
342
|
+
useEffect(() => {
|
|
343
|
+
if (location.pathname !== '/case/list')
|
|
344
|
+
return;
|
|
345
|
+
if (loggedInUser.isFetching || caseGroups.isFetching || caseGroups.data === undefined)
|
|
346
|
+
return;
|
|
347
|
+
if (!shouldApplyDefaultGroupFilter(queryFromUrl, hydraUserPreferences.data))
|
|
348
|
+
return;
|
|
349
|
+
const canAutoSync = isNoFilterApplied(filterState) ||
|
|
350
|
+
isOnlyDefaultFilterApplied(filterState) ||
|
|
351
|
+
isOnlyGroupFilterApplied(filterState.filterInfo);
|
|
352
|
+
if (!canAutoSync)
|
|
353
|
+
return;
|
|
354
|
+
const nextGroupFilter = getDefaultGroupFilterSelection(caseGroups.data, loggedInUser === null || loggedInUser === void 0 ? void 0 : loggedInUser.data);
|
|
355
|
+
const currentGroupFilter = filterState.filterInfo[SolrKeys.group] || [];
|
|
356
|
+
if (isEqual(currentGroupFilter, nextGroupFilter))
|
|
357
|
+
return;
|
|
358
|
+
updateFilterState(filterDispatch, Object.assign(Object.assign({}, filterState), { filterInfo: Object.assign(Object.assign({}, filterState.filterInfo), { [SolrKeys.group]: nextGroupFilter }) }));
|
|
359
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
360
|
+
}, [
|
|
298
361
|
defaultCaseGroupId,
|
|
362
|
+
caseGroups.data,
|
|
363
|
+
caseGroups.isFetching,
|
|
364
|
+
loggedInUser.isFetching,
|
|
365
|
+
location.pathname,
|
|
366
|
+
queryFromUrl,
|
|
299
367
|
]);
|
|
300
368
|
useEffect(() => {
|
|
301
369
|
const loadMetadata = () => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -486,8 +554,8 @@ export function CaseList(props) {
|
|
|
486
554
|
React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading filter chips') } },
|
|
487
555
|
React.createElement(CaseListFilterChips, null))),
|
|
488
556
|
React.createElement("section", { className: "case-search-bottom" },
|
|
489
|
-
React.createElement("aside", { className: `case-search-filters ${((
|
|
490
|
-
React.createElement("h2", { className: "filter-header pf-v6-u-display-flex" }, ((
|
|
557
|
+
React.createElement("aside", { className: `case-search-filters ${((_g = filterSectionRef.current) === null || _g === void 0 ? void 0 : _g.expanded) ? '' : 'collapsed'}` },
|
|
558
|
+
React.createElement("h2", { className: "filter-header pf-v6-u-display-flex" }, ((_h = filterSectionRef.current) === null || _h === void 0 ? void 0 : _h.expanded) ? (React.createElement(React.Fragment, null,
|
|
491
559
|
React.createElement(Button, { isInline: true, className: "pf-v6-u-flex-shrink-0 pf-v6-u-flex-none case-search-filter-text-button", variant: "link", title: t('Collapse filter section'), "data-tracking-id": "collapse-case-list-filter", onClick: onToggleFilterBtnClick, iconPosition: "right", icon: React.createElement(OpenDrawerRightIcon, { className: "mirrored" }) },
|
|
492
560
|
React.createElement(Trans, null, "Filters")))) : (React.createElement(Button, { isInline: true, className: "pf-v6-c-button pf-m-link pf-m-inline pf-v6-u-flex-shrink-0 pf-v6-u-flex-none pf-v6-u-display-flex pf-v6-u-align-items-center pf-v6-u-justify-content-center pf-v6-u-px-lg", variant: "link", title: t('Expand filter section'), "data-tracking-id": "expand-case-list-filter", onClick: onToggleFilterBtnClick, iconPosition: "right", icon: React.createElement(OpenDrawerRightIcon, null) }, isXLScreen ? null : React.createElement(Trans, null, "Filters")))),
|
|
493
561
|
React.createElement("div", { className: "filter-wrapper" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DownloadCSVFileModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-table/DownloadCSVFileModal.tsx"],"names":[],"mappings":"AAAA,OAAO,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"DownloadCSVFileModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-table/DownloadCSVFileModal.tsx"],"names":[],"mappings":"AAAA,OAAO,6BAA6B,CAAC;AAgCrC,OAAO,KAAmD,MAAM,OAAO,CAAC;AAKxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,UAAU,MAAM;IACZ,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,EAAE,oBAAoB,CAAC;IAClC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC7B;AAWD,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,KAAK,EAAE,MAAM,qBAmXzD"}
|
|
@@ -13,9 +13,10 @@ import { Button, Checkbox, Form, FormGroup, Grid, GridItem, InputGroup, Modal, M
|
|
|
13
13
|
import DownloadIcon from '@patternfly/react-icons/dist/js/icons/download-icon';
|
|
14
14
|
import TimesCircleIcon from '@patternfly/react-icons/dist/js/icons/times-circle-icon';
|
|
15
15
|
import { ToastNotification } from '@rh-support/components';
|
|
16
|
+
import { GlobalMetadataStateContext } from '@rh-support/react-context';
|
|
16
17
|
import { downloadCSV, formatDateTime, mapSfdcStatusToPortalStatus, toNewCaseTypeSwitcher, } from '@rh-support/utils';
|
|
17
18
|
import { isEmpty } from 'lodash';
|
|
18
|
-
import React, { useEffect, useMemo, useState } from 'react';
|
|
19
|
+
import React, { useContext, useEffect, useMemo, useState } from 'react';
|
|
19
20
|
import { useTranslation } from 'react-i18next';
|
|
20
21
|
import { SolrKeys } from '../../../enums/filters';
|
|
21
22
|
import { getCaseListFromGraphQL } from '../../../utils/caseListGraphQLUtils';
|
|
@@ -31,6 +32,8 @@ export default function DownloadCSVFileModal(props) {
|
|
|
31
32
|
const { onClose, onModalshow, isDisabled, filterState, selectedCases, filteredCaseCount } = props;
|
|
32
33
|
const { t } = useTranslation();
|
|
33
34
|
const apolloClient = useApolloClient();
|
|
35
|
+
const { globalMetadataState: { loggedInUsersAccount }, } = useContext(GlobalMetadataStateContext);
|
|
36
|
+
const includeSecureSupportCases = Boolean(loggedInUsersAccount.data.secureSupport);
|
|
34
37
|
const [isFetching, setIsFetching] = useState(false);
|
|
35
38
|
const [downloadCSVFileName, setDownloadCSVFileName] = useState('CaseList.csv');
|
|
36
39
|
const [checkboxes, setCheckboxes] = useState({
|
|
@@ -170,7 +173,7 @@ export default function DownloadCSVFileModal(props) {
|
|
|
170
173
|
setIsFetching(true);
|
|
171
174
|
const hasSelectedCases = selectedCases.length > 0;
|
|
172
175
|
const csvLimit = hasSelectedCases ? selectedCases.length : 1000;
|
|
173
|
-
const result = yield getCaseListFromGraphQL(filterState, apolloClient, csvLimit, undefined, hasSelectedCases ? selectedCases : undefined);
|
|
176
|
+
const result = yield getCaseListFromGraphQL(filterState, apolloClient, csvLimit, undefined, hasSelectedCases ? selectedCases : undefined, includeSecureSupportCases);
|
|
174
177
|
setIsFetching(false);
|
|
175
178
|
const updatedCsvData = result.caseListResponse.response.docs.map((row) => (Object.assign(Object.assign({}, row), { case_type: toNewCaseTypeSwitcher(row.case_type), case_link: `https://${window.location.host}${window.location.pathname}/#/case/${row.case_number}` })));
|
|
176
179
|
downloadCSV(updatedCsvData, getHeaders(), splitExtensionName ? `${splitExtensionName}.csv` : 'CaseList.csv');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFilterStateOnLoad.d.ts","sourceRoot":"","sources":["../../../src/hooks/useFilterStateOnLoad.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"useFilterStateOnLoad.d.ts","sourceRoot":"","sources":["../../../src/hooks/useFilterStateOnLoad.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAU1D,wBAAgB,oBAAoB;wBAkBd,MAAM,mBACH,MAAM,GAAG,SAAS,sBACf,MAAM,cACd,mBAAmB;;;;EAiEtC"}
|
|
@@ -4,6 +4,7 @@ import findKey from 'lodash/findKey';
|
|
|
4
4
|
import { useContext, useMemo } from 'react';
|
|
5
5
|
import { CaseListFilterStateContext, initialCaseFilterState } from '../components/case-list/CaseListFilterContext';
|
|
6
6
|
import { SolrKeys } from '../enums/filters';
|
|
7
|
+
import { decodeCaseListUrlFilterQuery, getDefaultGroupFilterSelection, shouldApplyDefaultGroupFilter, } from '../utils/caseGroupDefaultFilterUtils';
|
|
7
8
|
import { createFilterStateFromUrlQuery } from '../utils/caseSearchUtils';
|
|
8
9
|
// TODO Comment
|
|
9
10
|
export function useFilterStateOnLoad() {
|
|
@@ -12,14 +13,15 @@ export function useFilterStateOnLoad() {
|
|
|
12
13
|
const savesSearches = find(hydraUserPreferences.data, (pref) => pref.key === UserPreferencesKeys.caseSavedSearchFilters);
|
|
13
14
|
const savedSearchesObj = useMemo(() => ((savesSearches === null || savesSearches === void 0 ? void 0 : savesSearches.value) ? JSON.parse(savesSearches.value) : {}), [savesSearches]);
|
|
14
15
|
const set = (queryFromUrl, pageSizeFromUrl, currentPageFromUrl, searchType) => {
|
|
16
|
+
var _a;
|
|
15
17
|
let savedSearchFilterState = null;
|
|
16
18
|
const defaultSavedSearchKey = findKey(savedSearchesObj, { defaultChecked: true });
|
|
17
19
|
if (defaultSavedSearchKey) {
|
|
18
20
|
const { filterState: filterStateSaved, queryString, type, sortState, } = savedSearchesObj[defaultSavedSearchKey];
|
|
19
21
|
savedSearchFilterState = Object.assign(Object.assign({}, filterState), { sortInfo: sortState, filterQueryInfo: Object.assign(Object.assign({}, filterState.filterQueryInfo), { queryString, type }), filterInfo: Object.assign(Object.assign({}, initialCaseFilterState.filterInfo), filterStateSaved) });
|
|
20
22
|
}
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
+
const defaultGroupFilter = getDefaultGroupFilterSelection(caseGroups.data, (_a = globalMetadataState.loggedInUser) === null || _a === void 0 ? void 0 : _a.data);
|
|
24
|
+
const applyDefaultGroup = shouldApplyDefaultGroupFilter(queryFromUrl, hydraUserPreferences.data);
|
|
23
25
|
/**
|
|
24
26
|
When user lands on page for the first time:
|
|
25
27
|
If we have any query in url(for example redirect from dashboard), we apply the query, if not
|
|
@@ -27,12 +29,12 @@ export function useFilterStateOnLoad() {
|
|
|
27
29
|
check if user has default group the apply group filter,
|
|
28
30
|
non of the above, we apply default search values
|
|
29
31
|
*/
|
|
30
|
-
let defaultFilterState =
|
|
32
|
+
let defaultFilterState = decodeCaseListUrlFilterQuery(queryFromUrl)
|
|
31
33
|
? createFilterStateFromUrlQuery(queryFromUrl, globalMetadataState, pageSizeFromUrl, currentPageFromUrl, searchType)
|
|
32
34
|
: defaultSavedSearchKey
|
|
33
35
|
? savedSearchFilterState
|
|
34
|
-
:
|
|
35
|
-
? Object.assign(Object.assign({}, filterState), { filterInfo: Object.assign(Object.assign({}, filterState.filterInfo), { [SolrKeys.group]:
|
|
36
|
+
: applyDefaultGroup && defaultGroupFilter.length > 0
|
|
37
|
+
? Object.assign(Object.assign({}, filterState), { filterInfo: Object.assign(Object.assign({}, filterState.filterInfo), { [SolrKeys.group]: defaultGroupFilter }) }) : filterState;
|
|
36
38
|
return {
|
|
37
39
|
initFilterState: defaultFilterState,
|
|
38
40
|
defaultSearchName: defaultSavedSearchKey && !queryFromUrl ? defaultSavedSearchKey : '',
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ICaseGroup } from '@cee-eng/hydrajs/@types/api/public/caseGroups';
|
|
2
|
+
import { IPreference } from '@cee-eng/hydrajs/@types/models/general';
|
|
3
|
+
import type { ILoggedInSsoContact } from '@rh-support/utils';
|
|
4
|
+
export declare function decodeCaseListUrlFilterQuery(queryFromUrl?: string): string;
|
|
5
|
+
export declare function hasDefaultSavedSearch(hydraUserPreferences?: IPreference[]): boolean;
|
|
6
|
+
/** Default group filter applies only when URL and saved-search do not own the filter state. */
|
|
7
|
+
export declare function shouldApplyDefaultGroupFilter(queryFromUrl?: string, hydraUserPreferences?: IPreference[]): boolean;
|
|
8
|
+
export declare function getDefaultGroupFilterSelection(caseGroups: ICaseGroup[] | undefined, loggedInUser?: ILoggedInSsoContact): Array<{
|
|
9
|
+
key: string;
|
|
10
|
+
value: string;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=caseGroupDefaultFilterUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caseGroupDefaultFilterUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/caseGroupDefaultFilterUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAErE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAM7D,wBAAgB,4BAA4B,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAa1E;AAED,wBAAgB,qBAAqB,CAAC,oBAAoB,GAAE,WAAW,EAAO,GAAG,OAAO,CAOvF;AAED,+FAA+F;AAC/F,wBAAgB,6BAA6B,CACzC,YAAY,CAAC,EAAE,MAAM,EACrB,oBAAoB,GAAE,WAAW,EAAO,GACzC,OAAO,CAMT;AAED,wBAAgB,8BAA8B,CAC1C,UAAU,EAAE,UAAU,EAAE,GAAG,SAAS,EACpC,YAAY,CAAC,EAAE,mBAAmB,GACnC,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAGvC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { UserPreferencesKeys } from '@rh-support/react-context';
|
|
2
|
+
import find from 'lodash/find';
|
|
3
|
+
import findKey from 'lodash/findKey';
|
|
4
|
+
import { buildDefaultGroupFilterSelection, getDefaultCaseGroupForFilter } from './caseGroupDefaultUtils';
|
|
5
|
+
export function decodeCaseListUrlFilterQuery(queryFromUrl) {
|
|
6
|
+
if (!queryFromUrl || queryFromUrl === 'undefined') {
|
|
7
|
+
return '';
|
|
8
|
+
}
|
|
9
|
+
try {
|
|
10
|
+
const decoded = decodeURIComponent(queryFromUrl);
|
|
11
|
+
const [urlQuery] = decoded.split(/ orderBy /i);
|
|
12
|
+
return urlQuery && urlQuery !== 'undefined' ? urlQuery.trim() : '';
|
|
13
|
+
}
|
|
14
|
+
catch (_a) {
|
|
15
|
+
const [urlQuery] = queryFromUrl.split(/ orderBy /i);
|
|
16
|
+
return urlQuery && urlQuery !== 'undefined' ? urlQuery.trim() : '';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export function hasDefaultSavedSearch(hydraUserPreferences = []) {
|
|
20
|
+
const savedSearchPreference = find(hydraUserPreferences, (pref) => pref.key === UserPreferencesKeys.caseSavedSearchFilters);
|
|
21
|
+
const savedSearchesObj = (savedSearchPreference === null || savedSearchPreference === void 0 ? void 0 : savedSearchPreference.value) ? JSON.parse(savedSearchPreference.value) : {};
|
|
22
|
+
return Boolean(findKey(savedSearchesObj, { defaultChecked: true }));
|
|
23
|
+
}
|
|
24
|
+
/** Default group filter applies only when URL and saved-search do not own the filter state. */
|
|
25
|
+
export function shouldApplyDefaultGroupFilter(queryFromUrl, hydraUserPreferences = []) {
|
|
26
|
+
if (decodeCaseListUrlFilterQuery(queryFromUrl)) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
return !hasDefaultSavedSearch(hydraUserPreferences);
|
|
30
|
+
}
|
|
31
|
+
export function getDefaultGroupFilterSelection(caseGroups, loggedInUser) {
|
|
32
|
+
const defaultGroup = getDefaultCaseGroupForFilter(caseGroups, loggedInUser);
|
|
33
|
+
return buildDefaultGroupFilterSelection(defaultGroup);
|
|
34
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ICaseGroup } from '@cee-eng/hydrajs/@types/api/public/caseGroups';
|
|
2
|
+
import type { ILoggedInSsoContact } from '@rh-support/utils';
|
|
3
|
+
/** Resolves the user's default case group from contact preference, falling back to isDefault flags. */
|
|
4
|
+
export declare function getDefaultCaseGroupForFilter(caseGroups: ICaseGroup[] | undefined, loggedInUser?: ILoggedInSsoContact): ICaseGroup | undefined;
|
|
5
|
+
/** Builds the group filter chip/select values for a default case group. */
|
|
6
|
+
export declare function buildDefaultGroupFilterSelection(defaultGroup?: ICaseGroup): Array<{
|
|
7
|
+
key: string;
|
|
8
|
+
value: string;
|
|
9
|
+
}>;
|
|
10
|
+
//# sourceMappingURL=caseGroupDefaultUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caseGroupDefaultUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/caseGroupDefaultUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,uGAAuG;AACvG,wBAAgB,4BAA4B,CACxC,UAAU,EAAE,UAAU,EAAE,GAAG,SAAS,EACpC,YAAY,CAAC,EAAE,mBAAmB,GACnC,UAAU,GAAG,SAAS,CAYxB;AAED,2EAA2E;AAC3E,wBAAgB,gCAAgC,CAAC,YAAY,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAMjH"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Resolves the user's default case group from contact preference, falling back to isDefault flags. */
|
|
2
|
+
export function getDefaultCaseGroupForFilter(caseGroups, loggedInUser) {
|
|
3
|
+
var _a;
|
|
4
|
+
const groups = caseGroups || [];
|
|
5
|
+
const defaultCaseGroupId = (_a = loggedInUser === null || loggedInUser === void 0 ? void 0 : loggedInUser.defaultCaseGroup) !== null && _a !== void 0 ? _a : null;
|
|
6
|
+
if (defaultCaseGroupId && defaultCaseGroupId !== '-1') {
|
|
7
|
+
const match = groups.find((group) => group.groupNum === defaultCaseGroupId);
|
|
8
|
+
if (match) {
|
|
9
|
+
return match;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return groups.find((group) => group.isDefault);
|
|
13
|
+
}
|
|
14
|
+
/** Builds the group filter chip/select values for a default case group. */
|
|
15
|
+
export function buildDefaultGroupFilterSelection(defaultGroup) {
|
|
16
|
+
if (!(defaultGroup === null || defaultGroup === void 0 ? void 0 : defaultGroup.name)) {
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
return [{ key: defaultGroup.groupNum, value: defaultGroup.name }];
|
|
20
|
+
}
|
|
@@ -14,7 +14,7 @@ export interface IGraphQLCaseListResponse {
|
|
|
14
14
|
endCursor: string | undefined;
|
|
15
15
|
}
|
|
16
16
|
export declare function clearPageCursors(): void;
|
|
17
|
-
export declare function getCaseListFromGraphQL(filterState: ICaseListFilterState, apolloClient: ApolloClient, limitOverride?: number, signal?: AbortSignal, selectedCaseNumbers?: string[]): Promise<IGraphQLCaseListResponse>;
|
|
17
|
+
export declare function getCaseListFromGraphQL(filterState: ICaseListFilterState, apolloClient: ApolloClient, limitOverride?: number, signal?: AbortSignal, selectedCaseNumbers?: string[], includeSecureSupportCases?: boolean): Promise<IGraphQLCaseListResponse>;
|
|
18
18
|
export interface ILoadMoreResult {
|
|
19
19
|
docs: ICaseListItem[];
|
|
20
20
|
hasNextPage: boolean;
|
|
@@ -24,5 +24,5 @@ export interface ILoadMoreResult {
|
|
|
24
24
|
* Fetches the next page of cases for infinite scroll.
|
|
25
25
|
* Uses the provided `afterCursor` instead of the page-based cursor store.
|
|
26
26
|
*/
|
|
27
|
-
export declare function loadMoreCases(filterState: ICaseListFilterState, apolloClient: ApolloClient, afterCursor: string, signal?: AbortSignal): Promise<ILoadMoreResult>;
|
|
27
|
+
export declare function loadMoreCases(filterState: ICaseListFilterState, apolloClient: ApolloClient, afterCursor: string, signal?: AbortSignal, includeSecureSupportCases?: boolean): Promise<ILoadMoreResult>;
|
|
28
28
|
//# sourceMappingURL=caseListGraphQLUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caseListGraphQLUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/caseListGraphQLUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAKH,aAAa,EAEhB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,oBAAoB,EAAkB,MAAM,+CAA+C,CAAC;AASrG,MAAM,WAAW,wBAAwB;IACrC,gBAAgB,EAAE;QACd,QAAQ,EAAE;YACN,IAAI,EAAE,aAAa,EAAE,CAAC;YACtB,QAAQ,EAAE,MAAM,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;SACjB,CAAC;KACL,CAAC;IACF,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAwDD,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAkFD,wBAAsB,sBAAsB,CACxC,WAAW,EAAE,oBAAoB,EACjC,YAAY,EAAE,YAAY,EAC1B,aAAa,CAAC,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,WAAW,EACpB,mBAAmB,CAAC,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"caseListGraphQLUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/caseListGraphQLUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAKH,aAAa,EAEhB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,oBAAoB,EAAkB,MAAM,+CAA+C,CAAC;AASrG,MAAM,WAAW,wBAAwB;IACrC,gBAAgB,EAAE;QACd,QAAQ,EAAE;YACN,IAAI,EAAE,aAAa,EAAE,CAAC;YACtB,QAAQ,EAAE,MAAM,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;SACjB,CAAC;KACL,CAAC;IACF,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAwDD,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAkFD,wBAAsB,sBAAsB,CACxC,WAAW,EAAE,oBAAoB,EACjC,YAAY,EAAE,YAAY,EAC1B,aAAa,CAAC,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,WAAW,EACpB,mBAAmB,CAAC,EAAE,MAAM,EAAE,EAC9B,yBAAyB,UAAQ,GAClC,OAAO,CAAC,wBAAwB,CAAC,CA6FnC;AAED,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAC/B,WAAW,EAAE,oBAAoB,EACjC,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,WAAW,EACpB,yBAAyB,UAAQ,GAClC,OAAO,CAAC,eAAe,CAAC,CAoD1B"}
|
|
@@ -32,14 +32,14 @@ function resolveOwnerIds(searchTerms, apolloClient) {
|
|
|
32
32
|
searchTerm,
|
|
33
33
|
namePattern: `%${searchTerm}%`,
|
|
34
34
|
},
|
|
35
|
-
fetchPolicy: '
|
|
35
|
+
fetchPolicy: 'cache-first',
|
|
36
36
|
}),
|
|
37
37
|
apolloClient.query({
|
|
38
38
|
query: GET_GROUP_IDS_BY_NAME,
|
|
39
39
|
variables: {
|
|
40
40
|
namePattern: `%${searchTerm}%`,
|
|
41
41
|
},
|
|
42
|
-
fetchPolicy: '
|
|
42
|
+
fetchPolicy: 'cache-first',
|
|
43
43
|
}),
|
|
44
44
|
]);
|
|
45
45
|
const userEdges = ((_d = (_c = (_b = (_a = userResult.data) === null || _a === void 0 ? void 0 : _a.redhat_support_uiapi) === null || _b === void 0 ? void 0 : _b.query) === null || _c === void 0 ? void 0 : _c.RedHatSupportUser) === null || _d === void 0 ? void 0 : _d.edges) || [];
|
|
@@ -148,8 +148,8 @@ function resolveVersionProductIds(filterState, apolloClient) {
|
|
|
148
148
|
}
|
|
149
149
|
});
|
|
150
150
|
}
|
|
151
|
-
export function getCaseListFromGraphQL(
|
|
152
|
-
return __awaiter(this,
|
|
151
|
+
export function getCaseListFromGraphQL(filterState_1, apolloClient_1, limitOverride_1, signal_1, selectedCaseNumbers_1) {
|
|
152
|
+
return __awaiter(this, arguments, void 0, function* (filterState, apolloClient, limitOverride, signal, selectedCaseNumbers, includeSecureSupportCases = false) {
|
|
153
153
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
154
154
|
try {
|
|
155
155
|
yield resolveVersionProductIds(filterState, apolloClient);
|
|
@@ -160,7 +160,7 @@ export function getCaseListFromGraphQL(filterState, apolloClient, limitOverride,
|
|
|
160
160
|
const ownerUserIds = yield resolveOwnerIds(federationIdsToResolve, apolloClient);
|
|
161
161
|
resolvedUserIds = { ownerUserIds };
|
|
162
162
|
}
|
|
163
|
-
const variables = yield createGraphQLVariablesFromFilterState(filterState, apolloClient, resolvedUserIds);
|
|
163
|
+
const variables = yield createGraphQLVariablesFromFilterState(filterState, apolloClient, resolvedUserIds, includeSecureSupportCases);
|
|
164
164
|
if (limitOverride) {
|
|
165
165
|
variables.first = limitOverride;
|
|
166
166
|
}
|
|
@@ -237,8 +237,8 @@ export function getCaseListFromGraphQL(filterState, apolloClient, limitOverride,
|
|
|
237
237
|
* Fetches the next page of cases for infinite scroll.
|
|
238
238
|
* Uses the provided `afterCursor` instead of the page-based cursor store.
|
|
239
239
|
*/
|
|
240
|
-
export function loadMoreCases(
|
|
241
|
-
return __awaiter(this,
|
|
240
|
+
export function loadMoreCases(filterState_1, apolloClient_1, afterCursor_1, signal_1) {
|
|
241
|
+
return __awaiter(this, arguments, void 0, function* (filterState, apolloClient, afterCursor, signal, includeSecureSupportCases = false) {
|
|
242
242
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
243
243
|
try {
|
|
244
244
|
yield resolveVersionProductIds(filterState, apolloClient);
|
|
@@ -249,14 +249,14 @@ export function loadMoreCases(filterState, apolloClient, afterCursor, signal) {
|
|
|
249
249
|
const ownerUserIds = yield resolveOwnerIds(federationIdsToResolve, apolloClient);
|
|
250
250
|
resolvedUserIds = { ownerUserIds };
|
|
251
251
|
}
|
|
252
|
-
const variables = yield createGraphQLVariablesFromFilterState(filterState, apolloClient, resolvedUserIds);
|
|
252
|
+
const variables = yield createGraphQLVariablesFromFilterState(filterState, apolloClient, resolvedUserIds, includeSecureSupportCases);
|
|
253
253
|
variables.first = 20;
|
|
254
254
|
variables.after = afterCursor;
|
|
255
255
|
const { data } = yield apolloClient.query({
|
|
256
256
|
query: GET_CASES_BY_FILTERS,
|
|
257
257
|
variables,
|
|
258
|
-
fetchPolicy: '
|
|
259
|
-
context: signal ? { fetchOptions: { signal } } : undefined,
|
|
258
|
+
fetchPolicy: 'no-cache',
|
|
259
|
+
context: Object.assign({ queryDeduplication: false }, (signal ? { fetchOptions: { signal } } : undefined)),
|
|
260
260
|
});
|
|
261
261
|
const connection = (_b = (_a = data === null || data === void 0 ? void 0 : data.redhat_support_uiapi) === null || _a === void 0 ? void 0 : _a.query) === null || _b === void 0 ? void 0 : _b.RedHatSupportCase;
|
|
262
262
|
if (!connection) {
|
|
@@ -271,7 +271,7 @@ export function loadMoreCases(filterState, apolloClient, afterCursor, signal) {
|
|
|
271
271
|
}
|
|
272
272
|
catch (error) {
|
|
273
273
|
if ((error === null || error === void 0 ? void 0 : error.name) === 'AbortError' || ((_g = error === null || error === void 0 ? void 0 : error.message) === null || _g === void 0 ? void 0 : _g.includes('aborted')) || (signal === null || signal === void 0 ? void 0 : signal.aborted)) {
|
|
274
|
-
|
|
274
|
+
throw error;
|
|
275
275
|
}
|
|
276
276
|
console.error('[GraphQL] loadMoreCases error:', error);
|
|
277
277
|
throw error;
|
|
@@ -11,5 +11,5 @@ export interface IResolvedUserIds {
|
|
|
11
11
|
/** Pre-resolved OwnerId values (RedHatSupportUser or RedHatSupportGroup). */
|
|
12
12
|
ownerUserIds?: string[];
|
|
13
13
|
}
|
|
14
|
-
export declare function createGraphQLVariablesFromFilterState(filterState: ICaseListFilterState, apolloClient: ApolloClient, resolvedUserIds?: IResolvedUserIds): Promise<IGraphQLCaseListVariables>;
|
|
14
|
+
export declare function createGraphQLVariablesFromFilterState(filterState: ICaseListFilterState, apolloClient: ApolloClient, resolvedUserIds?: IResolvedUserIds, includeSecureSupportCases?: boolean): Promise<IGraphQLCaseListVariables>;
|
|
15
15
|
//# sourceMappingURL=caseListVariablesBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caseListVariablesBuilder.d.ts","sourceRoot":"","sources":["../../../src/utils/caseListVariablesBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAcnD,OAAO,EAEH,oBAAoB,EAEvB,MAAM,+CAA+C,CAAC;AAMvD,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAM1F;AAED,MAAM,WAAW,yBAAyB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC7B,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAqaD,wBAAsB,qCAAqC,CACvD,WAAW,EAAE,oBAAoB,EACjC,YAAY,EAAE,YAAY,EAC1B,eAAe,CAAC,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"caseListVariablesBuilder.d.ts","sourceRoot":"","sources":["../../../src/utils/caseListVariablesBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAcnD,OAAO,EAEH,oBAAoB,EAEvB,MAAM,+CAA+C,CAAC;AAMvD,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAM1F;AAED,MAAM,WAAW,yBAAyB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC7B,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAqaD,wBAAsB,qCAAqC,CACvD,WAAW,EAAE,oBAAoB,EACjC,YAAY,EAAE,YAAY,EAC1B,eAAe,CAAC,EAAE,gBAAgB,EAClC,yBAAyB,UAAQ,GAClC,OAAO,CAAC,yBAAyB,CAAC,CAuIpC"}
|
|
@@ -393,14 +393,14 @@ function resolveOwnerIdsBySearchTerms(searchTerms, apolloClient) {
|
|
|
393
393
|
return [...new Set([...userIds, ...groupIds])];
|
|
394
394
|
});
|
|
395
395
|
}
|
|
396
|
-
export function createGraphQLVariablesFromFilterState(
|
|
397
|
-
return __awaiter(this,
|
|
396
|
+
export function createGraphQLVariablesFromFilterState(filterState_1, apolloClient_1, resolvedUserIds_1) {
|
|
397
|
+
return __awaiter(this, arguments, void 0, function* (filterState, apolloClient, resolvedUserIds, includeSecureSupportCases = false) {
|
|
398
398
|
var _a;
|
|
399
399
|
const { paginationInfo, sortInfo, filterInfo, filterQueryInfo } = filterState;
|
|
400
400
|
const first = (paginationInfo === null || paginationInfo === void 0 ? void 0 : paginationInfo.pageSize) || 10;
|
|
401
401
|
const orderBy = buildOrderByFromSortInfo(sortInfo);
|
|
402
402
|
const andConditions = [];
|
|
403
|
-
andConditions.push(buildAccessRestrictionExclusionFilter());
|
|
403
|
+
andConditions.push(buildAccessRestrictionExclusionFilter(includeSecureSupportCases));
|
|
404
404
|
if (filterInfo) {
|
|
405
405
|
const statusFilter = buildStatusFilter(filterInfo[SolrKeys.status]);
|
|
406
406
|
if (statusFilter)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rh-support/cases",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.216",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"registry": "https://registry.npmjs.org"
|
|
@@ -38,11 +38,11 @@
|
|
|
38
38
|
"@patternfly/patternfly": "6.2.1",
|
|
39
39
|
"@patternfly/react-core": "6.2.1",
|
|
40
40
|
"@patternfly/react-table": "6.2.1",
|
|
41
|
-
"@rh-support/components": "2.5.
|
|
42
|
-
"@rh-support/react-context": "2.5.
|
|
41
|
+
"@rh-support/components": "2.5.211",
|
|
42
|
+
"@rh-support/react-context": "2.5.306",
|
|
43
43
|
"@rh-support/types": "2.0.26",
|
|
44
|
-
"@rh-support/user-permissions": "2.5.
|
|
45
|
-
"@rh-support/utils": "2.5.
|
|
44
|
+
"@rh-support/user-permissions": "2.5.158",
|
|
45
|
+
"@rh-support/utils": "2.5.139",
|
|
46
46
|
"localforage": "^1.10.0",
|
|
47
47
|
"lodash": "^4.17.21",
|
|
48
48
|
"pegjs": "^0.10.0",
|
|
@@ -94,5 +94,5 @@
|
|
|
94
94
|
"defaults and supports es6-module",
|
|
95
95
|
"maintained node versions"
|
|
96
96
|
],
|
|
97
|
-
"gitHead": "
|
|
97
|
+
"gitHead": "8932407838770cc8548f647dddcc44d39a34dcfd"
|
|
98
98
|
}
|