@rh-support/cases 2.6.165 → 2.6.167
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 +0 -7
- package/lib/esm/components/case-list/CaseList.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseList.js +106 -107
- package/lib/esm/components/case-list/CaseListContext.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListContext.js +0 -2
- package/lib/esm/components/case-list/CaseListFilterReducer.d.ts +5 -1
- package/lib/esm/components/case-list/CaseListFilterReducer.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListFilterReducer.js +2 -1
- package/lib/esm/components/case-list/CaseListReducer.d.ts +2 -8
- package/lib/esm/components/case-list/CaseListReducer.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListReducer.js +1 -13
- package/lib/esm/components/case-list/case-list-filters/AccountsFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/AccountsFilter.js +18 -11
- 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 +4 -2
- package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.d.ts +1 -7
- 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 +7 -15
- package/lib/esm/components/case-list/case-list-filters/CaseListFilters.d.ts +2 -5
- 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 +14 -14
- package/lib/esm/components/case-list/case-list-filters/ProductFilterChip.d.ts +1 -3
- package/lib/esm/components/case-list/case-list-filters/ProductFilterChip.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/ProductFilterChip.js +2 -2
- package/lib/esm/components/case-list/case-list-filters/ProductsFilter.d.ts +5 -4
- package/lib/esm/components/case-list/case-list-filters/ProductsFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/ProductsFilter.js +15 -54
- package/lib/esm/components/case-list/case-list-filters/SeverityFilter.d.ts +0 -3
- package/lib/esm/components/case-list/case-list-filters/SeverityFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/SeverityFilter.js +18 -44
- package/lib/esm/components/case-list/case-list-filters/StatusFilter.d.ts +0 -3
- package/lib/esm/components/case-list/case-list-filters/StatusFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/StatusFilter.js +14 -44
- package/lib/esm/components/case-list/case-list-filters/VersionsFilter.d.ts +1 -3
- 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 +61 -32
- package/lib/esm/components/case-list/case-list-table/CaseListTable.d.ts +0 -1
- 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 +5 -6
- package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.d.ts +0 -5
- 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 +38 -68
- package/lib/esm/components/case-list/case-list-table/ExportCaseListCSV.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-table/ExportCaseListCSV.js +5 -15
- package/lib/esm/components/case-list/case-list-table/SeverityLabel.js +1 -1
- package/lib/esm/components/case-list/case-list-table/TableActionsDropdown.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-table/TableActionsDropdown.js +2 -3
- package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.js +1 -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 +6 -6
- package/lib/esm/components/case-list/case-search/useAdvanceSearchParser.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-search/useAdvanceSearchParser.js +2 -1
- package/lib/esm/enums/case.d.ts +2 -1
- package/lib/esm/enums/case.d.ts.map +1 -1
- package/lib/esm/enums/case.js +14 -1
- package/lib/esm/hooks/useExportCaseListCSV.d.ts.map +1 -1
- package/lib/esm/hooks/useExportCaseListCSV.js +1 -9
- package/lib/esm/test-utils/mockData.js +1 -1
- package/lib/esm/utils/caseListGraphQLUtils.d.ts +16 -0
- package/lib/esm/utils/caseListGraphQLUtils.d.ts.map +1 -0
- package/lib/esm/utils/caseListGraphQLUtils.js +193 -0
- package/lib/esm/utils/caseListMapper.d.ts +6 -0
- package/lib/esm/utils/caseListMapper.d.ts.map +1 -0
- package/lib/esm/utils/caseListMapper.js +36 -0
- package/lib/esm/utils/caseListVariablesBuilder.d.ts +13 -0
- package/lib/esm/utils/caseListVariablesBuilder.d.ts.map +1 -0
- package/lib/esm/utils/caseListVariablesBuilder.js +160 -0
- package/lib/esm/utils/caseSearchUtils.d.ts.map +1 -1
- package/lib/esm/utils/caseSearchUtils.js +26 -1
- package/lib/esm/utils/constants.d.ts +2 -1
- package/lib/esm/utils/constants.d.ts.map +1 -1
- package/lib/esm/utils/constants.js +14 -3
- package/lib/esm/utils/mockSolrResponse.js +1 -1
- package/lib/esm/utils/statusUtils.d.ts +3 -0
- package/lib/esm/utils/statusUtils.d.ts.map +1 -0
- package/lib/esm/utils/statusUtils.js +22 -0
- package/package.json +6 -6
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
import '../../css/caseList.css';
|
|
2
2
|
import '../../css/caseSearch.css';
|
|
3
|
-
import { IFacetResponse } from '@rh-support/types/shared';
|
|
4
|
-
import { ISolrResponseToPivotFields } from '@rh-support/utils';
|
|
5
3
|
import React from 'react';
|
|
6
4
|
import { RouteComponentProps } from 'react-router-dom';
|
|
7
5
|
import { ICasesRouteURLParams } from '..';
|
|
8
|
-
import { IFacetPivot } from '../../models/caseList';
|
|
9
6
|
interface IProps {
|
|
10
7
|
routeProps: RouteComponentProps<ICasesRouteURLParams>;
|
|
11
8
|
}
|
|
12
|
-
export interface IProductVersionPivotMap extends IFacetResponse {
|
|
13
|
-
case_version: IFacetResponse[];
|
|
14
|
-
}
|
|
15
|
-
export type IPivotValues = ISolrResponseToPivotFields<IFacetPivot, IProductVersionPivotMap>;
|
|
16
9
|
export interface IChipsNameSsoMap {
|
|
17
10
|
[sso: string]: IChipsNameSso;
|
|
18
11
|
}
|
|
@@ -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;AAuClC,OAAO,KAAkD,MAAM,OAAO,CAAC;AAEvE,OAAO,EAAE,mBAAmB,EAAe,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,IAAI,CAAC;AAwB1C,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,qBA6drC"}
|
|
@@ -9,23 +9,21 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import '../../css/caseList.css';
|
|
11
11
|
import '../../css/caseSearch.css';
|
|
12
|
+
import { useApolloClient } from '@apollo/client/react';
|
|
12
13
|
import { Alert, AlertActionCloseButton, AlertVariant, Button } from '@patternfly/react-core';
|
|
13
14
|
import OpenDrawerRightIcon from '@patternfly/react-icons/dist/js/icons/open-drawer-right-icon';
|
|
14
|
-
import { ErrorBoundary, ToastNotification, useBreakpoint, useDocumentTitle, useForceUpdate,
|
|
15
|
-
import { CSSUserModal, fetchAllStatuses, fetchCaseGroupsForAccount, fetchCaseGroupsForSSO, fetchCaseSeverities, fetchCaseTypes, fetchProducts, GlobalMetadataDispatchContext, GlobalMetadataStateContext, setUserPreferences, updateCaseListTraditionalSupportAgreed, updateUserPreferences, useGlobalDispatchContext, UserPreferencesKeys, } from '@rh-support/react-context';
|
|
16
|
-
import { getStringifiedParams, getUrlParsedParams, haventLoadedMetadata, haventLoadedProductsMetadata, pendoTrackEvent,
|
|
17
|
-
import get from 'lodash/get';
|
|
15
|
+
import { ErrorBoundary, ToastNotification, useBreakpoint, useDocumentTitle, useForceUpdate, } from '@rh-support/components';
|
|
16
|
+
import { CSSUserModal, fetchAllStatuses, fetchCaseGroupsForAccount, fetchCaseGroupsForSSO, fetchCaseRecordTypes, fetchCaseSeverities, fetchCaseTypes, fetchProducts, GlobalMetadataDispatchContext, GlobalMetadataStateContext, setUserPreferences, updateCaseListTraditionalSupportAgreed, updateUserPreferences, useGlobalDispatchContext, UserPreferencesKeys, } from '@rh-support/react-context';
|
|
17
|
+
import { getStringifiedParams, getUrlParsedParams, haventLoadedMetadata, haventLoadedProductsMetadata, pendoTrackEvent, } from '@rh-support/utils';
|
|
18
18
|
import isEmpty from 'lodash/isEmpty';
|
|
19
|
-
import mapValues from 'lodash/mapValues';
|
|
20
19
|
import some from 'lodash/some';
|
|
21
20
|
import React, { useContext, useEffect, useRef, useState } from 'react';
|
|
22
21
|
import { Trans, useTranslation } from 'react-i18next';
|
|
23
22
|
import { useLocation } from 'react-router-dom';
|
|
24
23
|
import { CaseSearchQueryType } from '../../enums/caseSearch';
|
|
25
|
-
import { SolrPivotKeys } from '../../enums/filters';
|
|
26
24
|
import { PageTitle } from '../../enums/pageTitle';
|
|
27
25
|
import { useFilterStateOnLoad } from '../../hooks/useFilterStateOnLoad';
|
|
28
|
-
import {
|
|
26
|
+
import { clearPageCursors, getCaseListFromGraphQL } from '../../utils/caseListGraphQLUtils';
|
|
29
27
|
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';
|
|
30
28
|
import { UpdatedCaseDataEvent } from '../../utils/constants';
|
|
31
29
|
import { NewCaseButton } from '../case/NewCaseButton';
|
|
@@ -34,20 +32,21 @@ import { CaseListFilters } from './case-list-filters/CaseListFilters';
|
|
|
34
32
|
import { CaseListTable } from './case-list-table/CaseListTable';
|
|
35
33
|
import { CaseSearch } from './case-search/CaseSearch';
|
|
36
34
|
import { useCaseListDispatchContext, useCaseListStateContext } from './CaseListContext';
|
|
37
|
-
import { CaseListFilterDispatchContext, CaseListFilterStateContext
|
|
38
|
-
import {
|
|
35
|
+
import { CaseListFilterDispatchContext, CaseListFilterStateContext } from './CaseListFilterContext';
|
|
36
|
+
import { isNoFilterApplied, isOnlyDefaultFilterApplied } from './CaseListFilterHelpers';
|
|
39
37
|
import { updateFilterState } from './CaseListFilterReducer';
|
|
40
|
-
import { setCaseList, setCurrentQuery,
|
|
38
|
+
import { setCaseList, setCurrentQuery, setIsFetching } from './CaseListReducer';
|
|
41
39
|
export function CaseList(props) {
|
|
42
40
|
var _a, _b;
|
|
43
41
|
const { t } = useTranslation();
|
|
44
42
|
useDocumentTitle(PageTitle.CASE_LIST);
|
|
45
43
|
const dispatchToGlobalMetadataReducer = useContext(GlobalMetadataDispatchContext);
|
|
46
|
-
const { caseList,
|
|
44
|
+
const { caseList, isFetching, currentQuery } = useCaseListStateContext();
|
|
47
45
|
const CaseListDispatch = useCaseListDispatchContext();
|
|
48
46
|
const breakPoint = useBreakpoint();
|
|
49
|
-
const { globalMetadataState, globalMetadataState: { caseGroups, loggedInUserJwtToken, loggedInUserRights, loggedInUsersAccount, userPreferences, managedAccounts, bookmarkedAccounts, allCaseTypes, allCaseSeverities, allCaseStatuses, allProducts, caseListTraditionalSupportAgreed, }, } = useContext(GlobalMetadataStateContext);
|
|
47
|
+
const { globalMetadataState, globalMetadataState: { caseGroups, loggedInUserJwtToken, loggedInUserRights, loggedInUsersAccount, userPreferences, managedAccounts, bookmarkedAccounts, allCaseTypes, allCaseSeverities, allCaseStatuses, allProducts, caseRecordTypes, caseListTraditionalSupportAgreed, }, } = useContext(GlobalMetadataStateContext);
|
|
50
48
|
const globalDispatchContext = useGlobalDispatchContext();
|
|
49
|
+
const apolloClient = useApolloClient();
|
|
51
50
|
const location = useLocation();
|
|
52
51
|
const searchParams = getUrlParsedParams(location.search);
|
|
53
52
|
const queryFromUrl = searchParams[FILTER_URL_QUERY_SEARCH_PARAM];
|
|
@@ -55,6 +54,7 @@ export function CaseList(props) {
|
|
|
55
54
|
const currentPageFromUrl = parseInt(searchParams[FILTER_URL_CURRENT_PAGE_SEARCH_PARAM]);
|
|
56
55
|
const searchType = searchParams[FILTER_URL_QUERY_TYPE];
|
|
57
56
|
const abortControllerRef = useRef(undefined);
|
|
57
|
+
const lastPushedQueryRef = useRef('');
|
|
58
58
|
const isXLScreen = breakPoint.xl;
|
|
59
59
|
const isFirstMount = useRef(true);
|
|
60
60
|
const filterSectionRef = useRef(null);
|
|
@@ -63,43 +63,39 @@ export function CaseList(props) {
|
|
|
63
63
|
const forceUpdate = useForceUpdate();
|
|
64
64
|
const isCaseListFilterPanelExanded = userPreferences.data.isCaseListFilterPanelExanded;
|
|
65
65
|
const useFilterStateInit = useFilterStateOnLoad();
|
|
66
|
-
const isBasicSearchMode = filterState.filterQueryInfo.type === CaseSearchQueryType.BASIC ||
|
|
67
|
-
(filterState.filterQueryInfo.type === CaseSearchQueryType.ADVANCED && loggedInUserRights.data.isExternal());
|
|
68
|
-
const prevSearchType = usePrevious(filterState.filterQueryInfo.type);
|
|
69
|
-
let isSearchTypeChanged = filterState.filterQueryInfo.type !== prevSearchType;
|
|
70
66
|
const [hasError, setHasError] = useState(null);
|
|
71
|
-
const [isSolrSearchDown, setSolrSearchDown] = useState(false);
|
|
72
67
|
const [defaultSavedSearchName, setDefaultSavedSearchName] = useState('');
|
|
73
68
|
const [RHCDValue, setRHCDValue] = useState('');
|
|
74
69
|
const [isRHCDAlertShown, setIsRHCDAlertShown] = useState(true);
|
|
75
70
|
function getCases(currentFilterState) {
|
|
76
71
|
return __awaiter(this, void 0, void 0, function* () {
|
|
77
|
-
|
|
72
|
+
var _a;
|
|
78
73
|
try {
|
|
79
|
-
|
|
80
|
-
setHasError(false);
|
|
81
|
-
if (abortControllerRef.current !== undefined) {
|
|
82
|
-
// Cancel the previous request
|
|
74
|
+
if (abortControllerRef.current) {
|
|
83
75
|
abortControllerRef.current.abort();
|
|
84
76
|
}
|
|
85
|
-
|
|
86
|
-
let controller = new AbortController();
|
|
77
|
+
const controller = new AbortController();
|
|
87
78
|
abortControllerRef.current = controller;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
79
|
+
setIsFetching(CaseListDispatch, true);
|
|
80
|
+
setHasError(false);
|
|
81
|
+
const { caseListResponse, showErrorMessage } = yield getCaseListFromGraphQL(currentFilterState, apolloClient, undefined, controller.signal);
|
|
82
|
+
if (controller.signal.aborted) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
93
85
|
setCaseList(CaseListDispatch, caseListResponse.response);
|
|
94
86
|
setIsFetching(CaseListDispatch, false);
|
|
87
|
+
if (showErrorMessage) {
|
|
88
|
+
setHasError(true);
|
|
89
|
+
ToastNotification.addDangerMessage(t('There was an error loading case data. Please try again.'));
|
|
90
|
+
}
|
|
95
91
|
}
|
|
96
92
|
catch (err) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
setIsFetching(CaseListDispatch, false);
|
|
100
|
-
setHasError(true);
|
|
101
|
-
showError && ToastNotification.addXHRErrorMessage(err);
|
|
93
|
+
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'))) {
|
|
94
|
+
return;
|
|
102
95
|
}
|
|
96
|
+
setIsFetching(CaseListDispatch, false);
|
|
97
|
+
setHasError(true);
|
|
98
|
+
ToastNotification.addXHRErrorMessage(err);
|
|
103
99
|
}
|
|
104
100
|
});
|
|
105
101
|
}
|
|
@@ -109,25 +105,6 @@ export function CaseList(props) {
|
|
|
109
105
|
filterSectionRef.current.expanded = isExpanded;
|
|
110
106
|
forceUpdate();
|
|
111
107
|
};
|
|
112
|
-
function saveFilterQueryInUserPreferences() {
|
|
113
|
-
if (isNoFilterApplied(filterState))
|
|
114
|
-
return;
|
|
115
|
-
const type = filterState.filterQueryInfo.type;
|
|
116
|
-
const recentSerach = {
|
|
117
|
-
filterState: type === CaseSearchQueryType.BASIC ? filterState.filterInfo : {},
|
|
118
|
-
sortState: filterState.sortInfo,
|
|
119
|
-
queryString: type === CaseSearchQueryType.BASIC
|
|
120
|
-
? filterState.filterQueryInfo.queryString
|
|
121
|
-
: filterState.filterQueryInfo.parsedQuery,
|
|
122
|
-
type,
|
|
123
|
-
};
|
|
124
|
-
try {
|
|
125
|
-
updateUserPreferences(dispatchToGlobalMetadataReducer, loggedInUserRights.data.getSSOUsername(), [{ key: UserPreferencesKeys.mostRecentSearch, value: JSON.stringify(recentSerach) }], 'add');
|
|
126
|
-
}
|
|
127
|
-
catch (e) {
|
|
128
|
-
console.error('Could not save filter query in user preferences');
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
108
|
const onToggleFilterBtnClick = () => {
|
|
132
109
|
var _a, _b;
|
|
133
110
|
toggleFilterSection(!((_a = filterSectionRef.current) === null || _a === void 0 ? void 0 : _a.expanded));
|
|
@@ -137,8 +114,7 @@ export function CaseList(props) {
|
|
|
137
114
|
};
|
|
138
115
|
const checkNewCases = () => __awaiter(this, void 0, void 0, function* () {
|
|
139
116
|
try {
|
|
140
|
-
const { caseListResponse
|
|
141
|
-
setSolrSearchDown(isSolrSearchDownSFDCUp);
|
|
117
|
+
const { caseListResponse } = yield getCaseListFromGraphQL(filterState, apolloClient);
|
|
142
118
|
let changed = false;
|
|
143
119
|
if (caseListResponse.response.numFound <= filterState.paginationInfo.pageSize &&
|
|
144
120
|
caseListResponse.response.numFound !== caseList.numFound) {
|
|
@@ -180,67 +156,83 @@ export function CaseList(props) {
|
|
|
180
156
|
}
|
|
181
157
|
}, [caseGroups, dispatchToGlobalMetadataReducer, loggedInUserJwtToken, loggedInUsersAccount.data]);
|
|
182
158
|
useEffect(() => {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
159
|
+
const loadMetadata = () => __awaiter(this, void 0, void 0, function* () {
|
|
160
|
+
if (haventLoadedMetadata(caseRecordTypes)) {
|
|
161
|
+
yield fetchCaseRecordTypes(dispatchToGlobalMetadataReducer, apolloClient);
|
|
162
|
+
}
|
|
163
|
+
if (haventLoadedMetadata(allCaseTypes)) {
|
|
164
|
+
fetchCaseTypes(dispatchToGlobalMetadataReducer, apolloClient);
|
|
165
|
+
}
|
|
188
166
|
if (haventLoadedMetadata(allCaseSeverities)) {
|
|
189
|
-
fetchCaseSeverities(dispatchToGlobalMetadataReducer,
|
|
167
|
+
fetchCaseSeverities(dispatchToGlobalMetadataReducer, apolloClient);
|
|
190
168
|
}
|
|
191
169
|
if (haventLoadedMetadata(allCaseStatuses)) {
|
|
192
|
-
fetchAllStatuses(dispatchToGlobalMetadataReducer,
|
|
170
|
+
fetchAllStatuses(dispatchToGlobalMetadataReducer, apolloClient);
|
|
193
171
|
}
|
|
194
172
|
if (haventLoadedProductsMetadata(allProducts)) {
|
|
195
|
-
fetchProducts(dispatchToGlobalMetadataReducer);
|
|
173
|
+
fetchProducts(dispatchToGlobalMetadataReducer, apolloClient);
|
|
196
174
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
//@ts-ignore
|
|
200
|
-
if (eligibleSFDCFiltersMultipleValues.includes(key))
|
|
201
|
-
return value;
|
|
202
|
-
return value[0] ? [value[0]] : [];
|
|
203
|
-
});
|
|
204
|
-
updateFilterState(filterDispatch, {
|
|
205
|
-
//@ts-ignore
|
|
206
|
-
filterInfo: Object.assign(Object.assign({}, initialCaseFilterState.filterInfo), sfdcFilterState),
|
|
207
|
-
});
|
|
208
|
-
}
|
|
175
|
+
});
|
|
176
|
+
loadMetadata();
|
|
209
177
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
210
178
|
}, [
|
|
211
179
|
allCaseTypes,
|
|
212
180
|
allCaseSeverities,
|
|
213
181
|
allCaseStatuses,
|
|
214
182
|
allProducts,
|
|
183
|
+
caseRecordTypes,
|
|
215
184
|
dispatchToGlobalMetadataReducer,
|
|
216
|
-
|
|
217
|
-
isSolrSearchDown,
|
|
185
|
+
apolloClient,
|
|
218
186
|
]);
|
|
187
|
+
function saveFilterQueryInUserPreferences() {
|
|
188
|
+
if (isNoFilterApplied(filterState))
|
|
189
|
+
return;
|
|
190
|
+
const type = filterState.filterQueryInfo.type;
|
|
191
|
+
const recentSearch = {
|
|
192
|
+
filterState: type === CaseSearchQueryType.BASIC ? filterState.filterInfo : {},
|
|
193
|
+
sortState: filterState.sortInfo,
|
|
194
|
+
queryString: type === CaseSearchQueryType.BASIC
|
|
195
|
+
? filterState.filterQueryInfo.queryString
|
|
196
|
+
: filterState.filterQueryInfo.parsedQuery,
|
|
197
|
+
type,
|
|
198
|
+
};
|
|
199
|
+
try {
|
|
200
|
+
updateUserPreferences(dispatchToGlobalMetadataReducer, loggedInUserRights.data.getSSOUsername(), [{ key: UserPreferencesKeys.mostRecentSearch, value: JSON.stringify(recentSearch) }], 'add');
|
|
201
|
+
}
|
|
202
|
+
catch (e) {
|
|
203
|
+
console.error('Could not save filter query in user preferences');
|
|
204
|
+
}
|
|
205
|
+
}
|
|
219
206
|
// effect to update url query and call get case api whenever filter state changes
|
|
220
207
|
useEffect(() => {
|
|
221
|
-
var _a, _b, _c;
|
|
208
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
222
209
|
if (!isFirstMount.current) {
|
|
223
210
|
const urlQuery = (isNoFilterApplied(filterState) || isOnlyDefaultFilterApplied(filterState)) &&
|
|
224
211
|
!((_a = filterState.filterQueryInfo) === null || _a === void 0 ? void 0 : _a.queryString) &&
|
|
225
212
|
!filterState.sortInfo.column
|
|
226
213
|
? ''
|
|
227
214
|
: createURLQueryFromFilterState(filterState);
|
|
215
|
+
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}`;
|
|
216
|
+
const fullQueryKey = `${urlQuery}_${paginationKey}`;
|
|
217
|
+
if (fullQueryKey === lastPushedQueryRef.current) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
const prevQueryKey = lastPushedQueryRef.current;
|
|
221
|
+
const prevBaseQuery = prevQueryKey.substring(0, prevQueryKey.lastIndexOf('_p'));
|
|
222
|
+
const prevPageSize = (_d = prevQueryKey.match(/_s(\d+)$/)) === null || _d === void 0 ? void 0 : _d[1];
|
|
223
|
+
if (urlQuery !== prevBaseQuery || String((_e = filterState.paginationInfo) === null || _e === void 0 ? void 0 : _e.pageSize) !== prevPageSize) {
|
|
224
|
+
clearPageCursors();
|
|
225
|
+
}
|
|
228
226
|
setCurrentQuery(CaseListDispatch, urlQuery);
|
|
227
|
+
lastPushedQueryRef.current = fullQueryKey;
|
|
229
228
|
searchParams[FILTER_URL_QUERY_SEARCH_PARAM] = encodeURIComponent(urlQuery);
|
|
230
|
-
searchParams[FILTER_URL_CURRENT_PAGE_SEARCH_PARAM] = (
|
|
231
|
-
searchParams[FILTER_URL_PAGE_SIZE_SEARCH_PARAM] = (
|
|
229
|
+
searchParams[FILTER_URL_CURRENT_PAGE_SEARCH_PARAM] = (_f = filterState.paginationInfo) === null || _f === void 0 ? void 0 : _f.currentPage.toString();
|
|
230
|
+
searchParams[FILTER_URL_PAGE_SIZE_SEARCH_PARAM] = (_g = filterState.paginationInfo) === null || _g === void 0 ? void 0 : _g.pageSize.toString();
|
|
232
231
|
searchParams[FILTER_URL_QUERY_TYPE] = filterState.filterQueryInfo.type;
|
|
233
232
|
props.routeProps.history.push({
|
|
234
233
|
search: getStringifiedParams(searchParams),
|
|
235
234
|
});
|
|
236
235
|
saveFilterQueryInUserPreferences();
|
|
237
|
-
// so that we don't call get cases every time user switches between basic and advanced without any filters applied
|
|
238
|
-
if (isSearchTypeChanged &&
|
|
239
|
-
!filterState.filterQueryInfo.queryString &&
|
|
240
|
-
isNoFilterApplied(filterState) &&
|
|
241
|
-
filterValuesFromFacetResponse // if this is null, it means it is the first page load so get cases anyway
|
|
242
|
-
)
|
|
243
|
-
return;
|
|
244
236
|
getCases(filterState);
|
|
245
237
|
}
|
|
246
238
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -250,11 +242,13 @@ export function CaseList(props) {
|
|
|
250
242
|
if (bookmarkedAccounts.isFetching ||
|
|
251
243
|
managedAccounts.isFetching ||
|
|
252
244
|
caseGroups.isFetching ||
|
|
253
|
-
caseGroups.data === undefined
|
|
245
|
+
caseGroups.data === undefined ||
|
|
246
|
+
caseRecordTypes.isFetching ||
|
|
247
|
+
isEmpty(caseRecordTypes.data))
|
|
254
248
|
return;
|
|
255
249
|
// when user manually changes url and hit enter, new result is fetched without refreshing the page
|
|
256
250
|
if (!isFirstMount.current) {
|
|
257
|
-
if (queryFromUrl !== currentQuery) {
|
|
251
|
+
if (queryFromUrl !== currentQuery && queryFromUrl !== lastPushedQueryRef.current) {
|
|
258
252
|
const filterStateFromQueryUrl = createFilterStateFromUrlQuery(queryFromUrl, globalMetadataState, pageSizeFromUrl, currentPageFromUrl, searchType);
|
|
259
253
|
updateFilterState(filterDispatch, filterStateFromQueryUrl);
|
|
260
254
|
}
|
|
@@ -283,7 +277,12 @@ export function CaseList(props) {
|
|
|
283
277
|
setRHCDValue(searchParams.rhcd);
|
|
284
278
|
}
|
|
285
279
|
// set filter state based on url or default saved search
|
|
286
|
-
|
|
280
|
+
// Remove when we get OFFSET field from SCT
|
|
281
|
+
// Always reset to page 1 on fresh load — cursor-based pagination
|
|
282
|
+
// has no stored cursors after refresh, so page > 1 would cause a mismatch
|
|
283
|
+
const { initFilterState, defaultSearchName } = useFilterStateInit.set(decodeURIComponent(queryFromUrl), pageSizeFromUrl,
|
|
284
|
+
// currentPageFromUrl,
|
|
285
|
+
1, searchType);
|
|
287
286
|
// to set default saved search name
|
|
288
287
|
setDefaultSavedSearchName(defaultSearchName);
|
|
289
288
|
// set default params when they are empty
|
|
@@ -296,14 +295,20 @@ export function CaseList(props) {
|
|
|
296
295
|
updateFilterState(filterDispatch, initFilterState);
|
|
297
296
|
}
|
|
298
297
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
299
|
-
}, [
|
|
300
|
-
|
|
298
|
+
}, [
|
|
299
|
+
managedAccounts,
|
|
300
|
+
bookmarkedAccounts,
|
|
301
|
+
caseGroups,
|
|
302
|
+
caseRecordTypes,
|
|
303
|
+
queryFromUrl,
|
|
304
|
+
pageSizeFromUrl,
|
|
305
|
+
currentPageFromUrl,
|
|
306
|
+
]);
|
|
307
|
+
// effect to initially set the filter state to expanded on load
|
|
301
308
|
useEffect(() => {
|
|
302
|
-
|
|
303
|
-
// also we only use the standalone panel and manually change the panel state on toggle btn click
|
|
304
|
-
isCaseListFilterPanelExanded && isXLScreen && isBasicSearchMode && toggleFilterSection(true);
|
|
309
|
+
isCaseListFilterPanelExanded && isXLScreen && toggleFilterSection(true);
|
|
305
310
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
306
|
-
}, [
|
|
311
|
+
}, []);
|
|
307
312
|
const onConfirmTraditionalSupportAgreement = () => {
|
|
308
313
|
updateCaseListTraditionalSupportAgreed(globalDispatchContext, true);
|
|
309
314
|
};
|
|
@@ -329,12 +334,6 @@ export function CaseList(props) {
|
|
|
329
334
|
return (React.createElement(React.Fragment, null,
|
|
330
335
|
React.createElement(CSSUserModal, { onConfirmTraditionalSupportAgreement: onConfirmTraditionalSupportAgreement, display: !caseListTraditionalSupportAgreed }),
|
|
331
336
|
React.createElement("article", { id: "rh-support-cases", className: "cases-main" },
|
|
332
|
-
isSolrSearchDown && (React.createElement(Alert, { isInline: true, variant: AlertVariant.warning, component: "p", title: React.createElement(Trans, null,
|
|
333
|
-
"Case search is working with limited functionality. Please check",
|
|
334
|
-
' ',
|
|
335
|
-
React.createElement("a", { href: "https://status.redhat.com", target: "_blank", rel: "noreferrer", "data-tracking-id": "caselist-redirect-status-page" }, "status page"),
|
|
336
|
-
' ',
|
|
337
|
-
"for details.") })),
|
|
338
337
|
React.createElement("section", { className: "case-search-top" },
|
|
339
338
|
!isEmpty(RHCDValue) && isRHCDAlertShown && React.createElement("div", { className: "push-bottom" }, displayRHCDAlert()),
|
|
340
339
|
React.createElement("div", { className: "search-wrapper" },
|
|
@@ -342,17 +341,17 @@ export function CaseList(props) {
|
|
|
342
341
|
React.createElement(NewCaseButton, { routeProps: props.routeProps })),
|
|
343
342
|
React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading case search input') } },
|
|
344
343
|
React.createElement(CaseSearch, { defaultSavedSearchName: defaultSavedSearchName }))),
|
|
345
|
-
|
|
346
|
-
React.createElement(CaseListFilterChips,
|
|
344
|
+
React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading filter chips') } },
|
|
345
|
+
React.createElement(CaseListFilterChips, null))),
|
|
347
346
|
React.createElement("section", { className: "case-search-bottom" },
|
|
348
|
-
|
|
347
|
+
React.createElement("aside", { className: `case-search-filters ${((_a = filterSectionRef.current) === null || _a === void 0 ? void 0 : _a.expanded) ? '' : 'collapsed'}` },
|
|
349
348
|
React.createElement("h2", { className: "filter-header pf-v6-u-display-flex" }, ((_b = filterSectionRef.current) === null || _b === void 0 ? void 0 : _b.expanded) ? (React.createElement(React.Fragment, null,
|
|
350
349
|
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" }) },
|
|
351
350
|
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")))),
|
|
352
351
|
React.createElement("div", { className: "filter-wrapper" },
|
|
353
352
|
React.createElement("pfe-collapse-panel", { id: "case-filters-panel", "pfe-animation": "false", ref: filterSectionRef },
|
|
354
353
|
React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading filters') } },
|
|
355
|
-
React.createElement(CaseListFilters, {
|
|
354
|
+
React.createElement(CaseListFilters, { allCaseTypes: allCaseTypes, allCaseStatuses: allCaseStatuses, allCaseSeverities: allCaseSeverities, allProducts: allProducts }))))),
|
|
356
355
|
React.createElement("section", { className: "case-search-table pf-v6-u-display-flex pf-v6-u-flex-direction-column" },
|
|
357
|
-
React.createElement(CaseListTable, { caseList: caseList, caseGroups: caseGroups.data || [], loggedInUserRights: loggedInUserRights.data, sortInfo: filterState.sortInfo, paginationInfo: filterState.paginationInfo, isCaseListPageLoading: isFetching, hasError: hasError
|
|
356
|
+
React.createElement(CaseListTable, { caseList: caseList, caseGroups: caseGroups.data || [], loggedInUserRights: loggedInUserRights.data, sortInfo: filterState.sortInfo, paginationInfo: filterState.paginationInfo, isCaseListPageLoading: isFetching, hasError: hasError }))))));
|
|
358
357
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseListContext.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,oBAAoB,EAAmB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE1F,eAAO,MAAM,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"CaseListContext.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,oBAAoB,EAAmB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE1F,eAAO,MAAM,oBAAoB,EAAE,cASlC,CAAC;AAIF,QAAA,MAAM,oBAAoB,+BAA4C,CAAC;AAEvE,QAAA,MAAM,uBAAuB,qCAAmE,CAAC;AAEjG,QAAA,MAAM,uBAAuB,sBAAyC,CAAC;AACvE,QAAA,MAAM,0BAA0B,4BAA4C,CAAC;AAE7E,iBAAS,gBAAgB,CAAC,EAAE,QAAQ,EAAE;;CAAA,qBAOrC;AAED,OAAO,EACH,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,0BAA0B,GAC7B,CAAC"}
|
|
@@ -26,8 +26,12 @@ export interface IFilterQueryInfo {
|
|
|
26
26
|
type: CaseSearchQueryType;
|
|
27
27
|
parsedQuery?: string;
|
|
28
28
|
}
|
|
29
|
+
export interface IVersionFilterValue extends IFieldValue {
|
|
30
|
+
productId?: string;
|
|
31
|
+
}
|
|
29
32
|
export interface IProductFilter extends IFieldValue {
|
|
30
|
-
[SolrKeys.version]:
|
|
33
|
+
[SolrKeys.version]: IVersionFilterValue[];
|
|
34
|
+
productId?: string;
|
|
31
35
|
}
|
|
32
36
|
export interface IFilterInfo {
|
|
33
37
|
[SolrPivotKeys.product_version]: IProductFilter[];
|
|
@@ -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,gBAAgB,sBAAsB;IACtC,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,cAAe,SAAQ,WAAW;IAC/C,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"CaseListFilterReducer.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListFilterReducer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -54,7 +54,8 @@ const caseListFilterReducer = (pState, action) => {
|
|
|
54
54
|
return Object.assign(Object.assign({}, pState), { filterInfo: newFilters, paginationInfo: newPaginationInfo });
|
|
55
55
|
}
|
|
56
56
|
case CaseListReducerEnum.updateSort: {
|
|
57
|
-
|
|
57
|
+
const newPaginationInfo = Object.assign(Object.assign({}, pState.paginationInfo), { currentPage: 1 });
|
|
58
|
+
return Object.assign(Object.assign({}, pState), { sortInfo: action.payload.sortInfo, paginationInfo: newPaginationInfo });
|
|
58
59
|
}
|
|
59
60
|
case CaseListReducerEnum.updatePagination: {
|
|
60
61
|
return Object.assign(Object.assign({}, pState), { paginationInfo: action.payload.paginationInfo });
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import { IAction, ISolrResponse } from '@rh-support/types/shared';
|
|
2
|
-
import {
|
|
3
|
-
import { ICaseListResponse, IFacetFields, IFacetPivot } from '../../models/caseList';
|
|
4
|
-
import { IPivotValues, IProductVersionPivotMap } from './CaseList';
|
|
2
|
+
import { ICaseListResponse } from '../../models/caseList';
|
|
5
3
|
export interface ICaseListState {
|
|
6
4
|
caseList: ISolrResponse<ICaseListResponse>;
|
|
7
5
|
isFetching: boolean;
|
|
8
6
|
chipsNameSsoMap?: IChipsNameSsoMap;
|
|
9
|
-
filterValuesFromFacetResponse: ISolrResponseToFacetFields<IFacetFields>;
|
|
10
|
-
pivotValues: ISolrResponseToPivotFields<IFacetPivot, IProductVersionPivotMap>;
|
|
11
7
|
currentQuery: string;
|
|
12
8
|
}
|
|
13
9
|
export interface IChipsNameSso {
|
|
@@ -29,8 +25,6 @@ declare const caseListReducer: (state: ICaseListState, action: IActionType) => I
|
|
|
29
25
|
declare const setCaseList: (dispatch: CaseListDispatchType, caseList: ISolrResponse<ICaseListResponse>) => void;
|
|
30
26
|
declare const setChipsNameSsoMap: (dispatch: CaseListDispatchType, chipsNameSsoMap: IChipsNameSsoMap) => void;
|
|
31
27
|
declare const setIsFetching: (dispatch: CaseListDispatchType, isFetching: boolean) => void;
|
|
32
|
-
declare const setFilterValuesFromFacetResponse: (dispatch: CaseListDispatchType, filterValuesFromFacetResponse: ISolrResponseToFacetFields<IFacetFields>) => void;
|
|
33
|
-
declare const setPivotValues: (dispatch: CaseListDispatchType, pivotValues: IPivotValues) => void;
|
|
34
28
|
declare const setCurrentQuery: (dispatch: CaseListDispatchType, currentQuery: string) => void;
|
|
35
|
-
export { caseListReducer, setCaseList, setChipsNameSsoMap, setIsFetching,
|
|
29
|
+
export { caseListReducer, setCaseList, setChipsNameSsoMap, setIsFetching, setCurrentQuery };
|
|
36
30
|
//# sourceMappingURL=CaseListReducer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseListReducer.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListReducer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"CaseListReducer.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListReducer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAC3C,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;CACxB;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,MAAM,WAAW,gBAAgB;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;CAChC;AAED,aAAK,mBAAmB;IACpB,WAAW,cAAc;CAC5B;AAED,KAAK,WAAW,GAAG,OAAO,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;AAChE,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAEhE,QAAA,MAAM,eAAe,GAAI,OAAO,cAAc,EAAE,QAAQ,WAAW,KAAG,cAMrE,CAAC;AAEF,QAAA,MAAM,WAAW,GAAI,UAAU,oBAAoB,EAAE,UAAU,aAAa,CAAC,iBAAiB,CAAC,SAK9F,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,UAAU,oBAAoB,EAAE,iBAAiB,gBAAgB,SAK5F,CAAC;AAEF,QAAA,MAAM,aAAa,GAAI,UAAU,oBAAoB,EAAE,YAAY,OAAO,SAKzE,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,UAAU,oBAAoB,EAAE,cAAc,MAAM,SAK5E,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -27,22 +27,10 @@ const setIsFetching = (dispatch, isFetching) => {
|
|
|
27
27
|
payload: { isFetching },
|
|
28
28
|
});
|
|
29
29
|
};
|
|
30
|
-
const setFilterValuesFromFacetResponse = (dispatch, filterValuesFromFacetResponse) => {
|
|
31
|
-
dispatch({
|
|
32
|
-
type: CaseListReducerEnum.updateState,
|
|
33
|
-
payload: { filterValuesFromFacetResponse },
|
|
34
|
-
});
|
|
35
|
-
};
|
|
36
|
-
const setPivotValues = (dispatch, pivotValues) => {
|
|
37
|
-
dispatch({
|
|
38
|
-
type: CaseListReducerEnum.updateState,
|
|
39
|
-
payload: { pivotValues },
|
|
40
|
-
});
|
|
41
|
-
};
|
|
42
30
|
const setCurrentQuery = (dispatch, currentQuery) => {
|
|
43
31
|
dispatch({
|
|
44
32
|
type: CaseListReducerEnum.updateState,
|
|
45
33
|
payload: { currentQuery },
|
|
46
34
|
});
|
|
47
35
|
};
|
|
48
|
-
export { caseListReducer, setCaseList, setChipsNameSsoMap, setIsFetching,
|
|
36
|
+
export { caseListReducer, setCaseList, setChipsNameSsoMap, setIsFetching, setCurrentQuery };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountsFilter.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-filters/AccountsFilter.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"AccountsFilter.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-filters/AccountsFilter.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAO1F,OAAO,KAAyC,MAAM,OAAO,CAAC;AAO9D,UAAU,MAAM;IACZ,uBAAuB,EAAE,OAAO,CAAC;CACpC;AAED,eAAO,MAAM,gCAAgC,GAAI,SAAS,QAAQ,WAMjE,CAAC;AACF,eAAO,MAAM,+BAA+B,GAAI,SAAS,OAAO,CAAC,sBAAsB,CAAC,WAEvF,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,cAAS,EAAE,eAAU,QACgC,CAAC;AAE/E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,qBAqG3C"}
|
|
@@ -7,9 +7,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import {
|
|
10
|
+
import { useApolloClient } from '@apollo/client/react';
|
|
11
11
|
import { AccountSelectorInternal } from '@rh-support/react-context';
|
|
12
|
-
import { getDropdownBtnPlaceholder } from '@rh-support/utils';
|
|
12
|
+
import { getDropdownBtnPlaceholder, SEARCH_ACCOUNTS } from '@rh-support/utils';
|
|
13
13
|
import differenceBy from 'lodash/differenceBy';
|
|
14
14
|
import filter from 'lodash/filter';
|
|
15
15
|
import remove from 'lodash/remove';
|
|
@@ -35,6 +35,7 @@ export function AccountsFilter(props) {
|
|
|
35
35
|
const { canReadBookmarkAccounts } = props;
|
|
36
36
|
const { filterInfo } = useContext(CaseListFilterStateContext);
|
|
37
37
|
const dispatch = useContext(CaseListFilterDispatchContext);
|
|
38
|
+
const apolloClient = useApolloClient();
|
|
38
39
|
const selectedAccounts = useMemo(() => filterInfo[SolrKeys.accountNumber]
|
|
39
40
|
.filter((item) => !Array.isArray(item.key))
|
|
40
41
|
.map((item) => ({
|
|
@@ -67,20 +68,26 @@ export function AccountsFilter(props) {
|
|
|
67
68
|
return;
|
|
68
69
|
function getAccountsWithoutNames() {
|
|
69
70
|
return __awaiter(this, void 0, void 0, function* () {
|
|
71
|
+
var _a, _b, _c, _d;
|
|
70
72
|
const allSelected = [...filterInfo[SolrKeys.accountNumber]];
|
|
71
73
|
const accountsWithoutNames = remove(allSelected, (item) => item.key === item.value);
|
|
72
74
|
if (accountsWithoutNames.length < 1)
|
|
73
75
|
return;
|
|
74
|
-
const
|
|
75
|
-
const params = {
|
|
76
|
-
fields,
|
|
77
|
-
orderBy: 'name',
|
|
78
|
-
orderDirection: 'asc',
|
|
79
|
-
accountNumberIn: accountsWithoutNames.map((item) => item.key).join(','),
|
|
80
|
-
};
|
|
76
|
+
const accountNumbers = accountsWithoutNames.map((item) => item.key);
|
|
81
77
|
try {
|
|
82
|
-
const
|
|
83
|
-
|
|
78
|
+
const { data } = yield apolloClient.query({
|
|
79
|
+
query: SEARCH_ACCOUNTS,
|
|
80
|
+
variables: {
|
|
81
|
+
where: { AccountNumber: { in: accountNumbers } },
|
|
82
|
+
first: accountNumbers.length,
|
|
83
|
+
},
|
|
84
|
+
fetchPolicy: 'network-only',
|
|
85
|
+
});
|
|
86
|
+
const edges = (_d = (_c = (_b = (_a = data === null || data === void 0 ? void 0 : data.salesforce_support_uiapi) === null || _a === void 0 ? void 0 : _a.query) === null || _b === void 0 ? void 0 : _b.SalesforceSupportAccount) === null || _c === void 0 ? void 0 : _c.edges) !== null && _d !== void 0 ? _d : [];
|
|
87
|
+
const keyValueMap = edges.map((edge) => ({
|
|
88
|
+
key: edge.node.AccountNumber.value,
|
|
89
|
+
value: edge.node.Name.value,
|
|
90
|
+
}));
|
|
84
91
|
updateFilter(dispatch, {
|
|
85
92
|
filterKey: SolrKeys.accountNumber,
|
|
86
93
|
values: [...keyValueMap, ...allSelected],
|
|
@@ -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,
|
|
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"}
|
|
@@ -19,6 +19,8 @@ export function AdditionalFilters() {
|
|
|
19
19
|
});
|
|
20
20
|
setIsEscalated(checked);
|
|
21
21
|
};
|
|
22
|
+
// @ts-ignore - kept for future use when GraphQL supports private cases filter
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
22
24
|
const onisPrivateChange = (checked) => {
|
|
23
25
|
updateFilter(dispatch, {
|
|
24
26
|
filterKey: SolrKeys.isPrivate,
|
|
@@ -26,6 +28,7 @@ export function AdditionalFilters() {
|
|
|
26
28
|
});
|
|
27
29
|
setIsPrivate(checked);
|
|
28
30
|
};
|
|
31
|
+
void onisPrivateChange;
|
|
29
32
|
useEffect(() => {
|
|
30
33
|
var _a, _b;
|
|
31
34
|
updateFilter(dispatch, {
|
|
@@ -62,6 +65,5 @@ export function AdditionalFilters() {
|
|
|
62
65
|
React.createElement("div", { className: "additional-filters" },
|
|
63
66
|
React.createElement("h3", null,
|
|
64
67
|
React.createElement(Trans, null, "More")),
|
|
65
|
-
React.createElement(Checkbox, { label: t(AdditionalFilterLabels[SolrKeys.escalation]), isChecked: escalated, onChange: (_event, checked) => onEscalatedChange(checked), "aria-label": t(AdditionalFilterLabels[SolrKeys.escalation]), id: "escalated", name: "escalated", "data-tracking-id": "escalated-filter-selector" })
|
|
66
|
-
React.createElement(Checkbox, { label: t(AdditionalFilterLabels[SolrKeys.isPrivate]), isChecked: isPrivate, onChange: (_event, checked) => onisPrivateChange(checked), "aria-label": t(AdditionalFilterLabels[SolrKeys.isPrivate]), id: "private", name: "private", "data-tracking-id": "private-filter-selector" }))));
|
|
68
|
+
React.createElement(Checkbox, { label: t(AdditionalFilterLabels[SolrKeys.escalation]), isChecked: escalated, onChange: (_event, checked) => onEscalatedChange(checked), "aria-label": t(AdditionalFilterLabels[SolrKeys.escalation]), id: "escalated", name: "escalated", "data-tracking-id": "escalated-filter-selector" }))));
|
|
67
69
|
}
|