@rh-support/cases 2.6.170 → 2.6.173
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 +7 -0
- package/lib/esm/components/case-list/CaseList.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseList.js +107 -106
- package/lib/esm/components/case-list/CaseListContext.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListContext.js +2 -0
- package/lib/esm/components/case-list/CaseListFilterReducer.d.ts +1 -5
- package/lib/esm/components/case-list/CaseListFilterReducer.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListFilterReducer.js +1 -2
- package/lib/esm/components/case-list/CaseListReducer.d.ts +8 -2
- package/lib/esm/components/case-list/CaseListReducer.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListReducer.js +13 -1
- 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 +11 -18
- 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 +2 -4
- package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.d.ts +7 -1
- 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 +15 -7
- package/lib/esm/components/case-list/case-list-filters/CaseListFilters.d.ts +5 -2
- 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 +3 -1
- 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 +4 -5
- 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 +54 -15
- package/lib/esm/components/case-list/case-list-filters/SeverityFilter.d.ts +3 -0
- 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 +44 -18
- package/lib/esm/components/case-list/case-list-filters/StatusFilter.d.ts +3 -0
- 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 +44 -14
- package/lib/esm/components/case-list/case-list-filters/VersionsFilter.d.ts +3 -1
- 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 +32 -61
- package/lib/esm/components/case-list/case-list-table/CaseListTable.d.ts +1 -0
- 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 +6 -5
- package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.d.ts +5 -0
- 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 +68 -38
- 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 +15 -5
- 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 +3 -2
- package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.js +0 -1
- 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 +1 -2
- package/lib/esm/enums/case.d.ts +1 -2
- package/lib/esm/enums/case.d.ts.map +1 -1
- package/lib/esm/enums/case.js +1 -14
- package/lib/esm/hooks/useExportCaseListCSV.d.ts.map +1 -1
- package/lib/esm/hooks/useExportCaseListCSV.js +9 -1
- package/lib/esm/test-utils/mockData.js +1 -1
- package/lib/esm/utils/caseSearchUtils.d.ts.map +1 -1
- package/lib/esm/utils/caseSearchUtils.js +1 -26
- package/lib/esm/utils/constants.d.ts +1 -2
- package/lib/esm/utils/constants.d.ts.map +1 -1
- package/lib/esm/utils/constants.js +3 -14
- package/lib/esm/utils/mockSolrResponse.js +1 -1
- package/package.json +6 -6
- package/lib/esm/utils/caseListGraphQLUtils.d.ts +0 -16
- package/lib/esm/utils/caseListGraphQLUtils.d.ts.map +0 -1
- package/lib/esm/utils/caseListGraphQLUtils.js +0 -193
- package/lib/esm/utils/caseListMapper.d.ts +0 -6
- package/lib/esm/utils/caseListMapper.d.ts.map +0 -1
- package/lib/esm/utils/caseListMapper.js +0 -36
- package/lib/esm/utils/caseListVariablesBuilder.d.ts +0 -13
- package/lib/esm/utils/caseListVariablesBuilder.d.ts.map +0 -1
- package/lib/esm/utils/caseListVariablesBuilder.js +0 -160
- package/lib/esm/utils/statusUtils.d.ts +0 -3
- package/lib/esm/utils/statusUtils.d.ts.map +0 -1
- package/lib/esm/utils/statusUtils.js +0 -22
|
@@ -1,11 +1,18 @@
|
|
|
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';
|
|
3
5
|
import React from 'react';
|
|
4
6
|
import { RouteComponentProps } from 'react-router-dom';
|
|
5
7
|
import { ICasesRouteURLParams } from '..';
|
|
8
|
+
import { IFacetPivot } from '../../models/caseList';
|
|
6
9
|
interface IProps {
|
|
7
10
|
routeProps: RouteComponentProps<ICasesRouteURLParams>;
|
|
8
11
|
}
|
|
12
|
+
export interface IProductVersionPivotMap extends IFacetResponse {
|
|
13
|
+
case_version: IFacetResponse[];
|
|
14
|
+
}
|
|
15
|
+
export type IPivotValues = ISolrResponseToPivotFields<IFacetPivot, IProductVersionPivotMap>;
|
|
9
16
|
export interface IChipsNameSsoMap {
|
|
10
17
|
[sso: string]: IChipsNameSso;
|
|
11
18
|
}
|
|
@@ -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;AA6BlC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAKH,0BAA0B,EAI7B,MAAM,mBAAmB,CAAC;AAK3B,OAAO,KAAkD,MAAM,OAAO,CAAC;AAEvE,OAAO,EAAE,mBAAmB,EAAe,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,IAAI,CAAC;AAK1C,OAAO,EAAgB,WAAW,EAA2B,MAAM,uBAAuB,CAAC;AAmC3F,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,uBAAwB,SAAQ,cAAc;IAC3D,YAAY,EAAE,cAAc,EAAE,CAAC;CAClC;AAED,MAAM,MAAM,YAAY,GAAG,0BAA0B,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;AAM5F,MAAM,WAAW,gBAAgB;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,qBAygBrC"}
|
|
@@ -9,21 +9,23 @@ 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';
|
|
13
12
|
import { Alert, AlertActionCloseButton, AlertVariant, Button } from '@patternfly/react-core';
|
|
14
13
|
import OpenDrawerRightIcon from '@patternfly/react-icons/dist/js/icons/open-drawer-right-icon';
|
|
15
|
-
import { ErrorBoundary, ToastNotification, useBreakpoint, useDocumentTitle, useForceUpdate, } from '@rh-support/components';
|
|
16
|
-
import { CSSUserModal, fetchAllStatuses, fetchCaseGroupsForAccount, fetchCaseGroupsForSSO,
|
|
17
|
-
import { getStringifiedParams, getUrlParsedParams, haventLoadedMetadata, haventLoadedProductsMetadata, pendoTrackEvent, } from '@rh-support/utils';
|
|
14
|
+
import { ErrorBoundary, ToastNotification, useBreakpoint, useDocumentTitle, useForceUpdate, usePrevious, } from '@rh-support/components';
|
|
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, solrResponseToFacetFields, solrResponseToPivotFields, } from '@rh-support/utils';
|
|
17
|
+
import get from 'lodash/get';
|
|
18
18
|
import isEmpty from 'lodash/isEmpty';
|
|
19
|
+
import mapValues from 'lodash/mapValues';
|
|
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 { useLocation } from 'react-router-dom';
|
|
23
24
|
import { CaseSearchQueryType } from '../../enums/caseSearch';
|
|
25
|
+
import { SolrPivotKeys } from '../../enums/filters';
|
|
24
26
|
import { PageTitle } from '../../enums/pageTitle';
|
|
25
27
|
import { useFilterStateOnLoad } from '../../hooks/useFilterStateOnLoad';
|
|
26
|
-
import {
|
|
28
|
+
import { getCaseList } from '../../utils/caseListUtils';
|
|
27
29
|
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';
|
|
28
30
|
import { UpdatedCaseDataEvent } from '../../utils/constants';
|
|
29
31
|
import { NewCaseButton } from '../case/NewCaseButton';
|
|
@@ -32,21 +34,20 @@ import { CaseListFilters } from './case-list-filters/CaseListFilters';
|
|
|
32
34
|
import { CaseListTable } from './case-list-table/CaseListTable';
|
|
33
35
|
import { CaseSearch } from './case-search/CaseSearch';
|
|
34
36
|
import { useCaseListDispatchContext, useCaseListStateContext } from './CaseListContext';
|
|
35
|
-
import { CaseListFilterDispatchContext, CaseListFilterStateContext } from './CaseListFilterContext';
|
|
36
|
-
import { isNoFilterApplied, isOnlyDefaultFilterApplied } from './CaseListFilterHelpers';
|
|
37
|
+
import { CaseListFilterDispatchContext, CaseListFilterStateContext, initialCaseFilterState, } from './CaseListFilterContext';
|
|
38
|
+
import { eligibleSFDCFiltersMultipleValues, isNoFilterApplied, isOnlyDefaultFilterApplied, } from './CaseListFilterHelpers';
|
|
37
39
|
import { updateFilterState } from './CaseListFilterReducer';
|
|
38
|
-
import { setCaseList, setCurrentQuery, setIsFetching } from './CaseListReducer';
|
|
40
|
+
import { setCaseList, setCurrentQuery, setFilterValuesFromFacetResponse, setIsFetching, setPivotValues, } from './CaseListReducer';
|
|
39
41
|
export function CaseList(props) {
|
|
40
42
|
var _a, _b;
|
|
41
43
|
const { t } = useTranslation();
|
|
42
44
|
useDocumentTitle(PageTitle.CASE_LIST);
|
|
43
45
|
const dispatchToGlobalMetadataReducer = useContext(GlobalMetadataDispatchContext);
|
|
44
|
-
const { caseList, isFetching, currentQuery } = useCaseListStateContext();
|
|
46
|
+
const { caseList, pivotValues, isFetching, filterValuesFromFacetResponse, currentQuery } = useCaseListStateContext();
|
|
45
47
|
const CaseListDispatch = useCaseListDispatchContext();
|
|
46
48
|
const breakPoint = useBreakpoint();
|
|
47
|
-
const { globalMetadataState, globalMetadataState: { caseGroups, loggedInUserJwtToken, loggedInUserRights, loggedInUsersAccount, userPreferences, managedAccounts, bookmarkedAccounts, allCaseTypes, allCaseSeverities, allCaseStatuses, allProducts,
|
|
49
|
+
const { globalMetadataState, globalMetadataState: { caseGroups, loggedInUserJwtToken, loggedInUserRights, loggedInUsersAccount, userPreferences, managedAccounts, bookmarkedAccounts, allCaseTypes, allCaseSeverities, allCaseStatuses, allProducts, caseListTraditionalSupportAgreed, }, } = useContext(GlobalMetadataStateContext);
|
|
48
50
|
const globalDispatchContext = useGlobalDispatchContext();
|
|
49
|
-
const apolloClient = useApolloClient();
|
|
50
51
|
const location = useLocation();
|
|
51
52
|
const searchParams = getUrlParsedParams(location.search);
|
|
52
53
|
const queryFromUrl = searchParams[FILTER_URL_QUERY_SEARCH_PARAM];
|
|
@@ -54,7 +55,6 @@ export function CaseList(props) {
|
|
|
54
55
|
const currentPageFromUrl = parseInt(searchParams[FILTER_URL_CURRENT_PAGE_SEARCH_PARAM]);
|
|
55
56
|
const searchType = searchParams[FILTER_URL_QUERY_TYPE];
|
|
56
57
|
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,39 +63,43 @@ 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;
|
|
66
70
|
const [hasError, setHasError] = useState(null);
|
|
71
|
+
const [isSolrSearchDown, setSolrSearchDown] = useState(false);
|
|
67
72
|
const [defaultSavedSearchName, setDefaultSavedSearchName] = useState('');
|
|
68
73
|
const [RHCDValue, setRHCDValue] = useState('');
|
|
69
74
|
const [isRHCDAlertShown, setIsRHCDAlertShown] = useState(true);
|
|
70
75
|
function getCases(currentFilterState) {
|
|
71
76
|
return __awaiter(this, void 0, void 0, function* () {
|
|
72
|
-
|
|
77
|
+
let showError;
|
|
73
78
|
try {
|
|
74
|
-
if (abortControllerRef.current) {
|
|
75
|
-
abortControllerRef.current.abort();
|
|
76
|
-
}
|
|
77
|
-
const controller = new AbortController();
|
|
78
|
-
abortControllerRef.current = controller;
|
|
79
79
|
setIsFetching(CaseListDispatch, true);
|
|
80
80
|
setHasError(false);
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
if (abortControllerRef.current !== undefined) {
|
|
82
|
+
// Cancel the previous request
|
|
83
|
+
abortControllerRef.current.abort();
|
|
84
84
|
}
|
|
85
|
+
// recreate a new AbortController for each call
|
|
86
|
+
let controller = new AbortController();
|
|
87
|
+
abortControllerRef.current = controller;
|
|
88
|
+
const { caseListResponse, isSolrSearchDownSFDCUp, showErrorMessage } = yield getCaseList(currentFilterState, loggedInUserRights.data, loggedInUsersAccount.data, controller.signal);
|
|
89
|
+
showError = showErrorMessage;
|
|
90
|
+
setSolrSearchDown(isSolrSearchDownSFDCUp);
|
|
91
|
+
setFilterValuesFromFacetResponse(CaseListDispatch, solrResponseToFacetFields(caseListResponse));
|
|
92
|
+
setPivotValues(CaseListDispatch, solrResponseToPivotFields(caseListResponse));
|
|
85
93
|
setCaseList(CaseListDispatch, caseListResponse.response);
|
|
86
94
|
setIsFetching(CaseListDispatch, false);
|
|
87
|
-
if (showErrorMessage) {
|
|
88
|
-
setHasError(true);
|
|
89
|
-
ToastNotification.addDangerMessage(t('There was an error loading case data. Please try again.'));
|
|
90
|
-
}
|
|
91
95
|
}
|
|
92
96
|
catch (err) {
|
|
93
|
-
|
|
94
|
-
|
|
97
|
+
const isAbortError = err.message && err.message.toLowerCase().indexOf('abort') > -1;
|
|
98
|
+
if (!isAbortError) {
|
|
99
|
+
setIsFetching(CaseListDispatch, false);
|
|
100
|
+
setHasError(true);
|
|
101
|
+
showError && ToastNotification.addXHRErrorMessage(err);
|
|
95
102
|
}
|
|
96
|
-
setIsFetching(CaseListDispatch, false);
|
|
97
|
-
setHasError(true);
|
|
98
|
-
ToastNotification.addXHRErrorMessage(err);
|
|
99
103
|
}
|
|
100
104
|
});
|
|
101
105
|
}
|
|
@@ -105,6 +109,25 @@ export function CaseList(props) {
|
|
|
105
109
|
filterSectionRef.current.expanded = isExpanded;
|
|
106
110
|
forceUpdate();
|
|
107
111
|
};
|
|
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
|
+
}
|
|
108
131
|
const onToggleFilterBtnClick = () => {
|
|
109
132
|
var _a, _b;
|
|
110
133
|
toggleFilterSection(!((_a = filterSectionRef.current) === null || _a === void 0 ? void 0 : _a.expanded));
|
|
@@ -114,7 +137,8 @@ export function CaseList(props) {
|
|
|
114
137
|
};
|
|
115
138
|
const checkNewCases = () => __awaiter(this, void 0, void 0, function* () {
|
|
116
139
|
try {
|
|
117
|
-
const { caseListResponse } = yield
|
|
140
|
+
const { caseListResponse, isSolrSearchDownSFDCUp } = yield getCaseList(filterState, loggedInUserRights.data, loggedInUsersAccount.data, null);
|
|
141
|
+
setSolrSearchDown(isSolrSearchDownSFDCUp);
|
|
118
142
|
let changed = false;
|
|
119
143
|
if (caseListResponse.response.numFound <= filterState.paginationInfo.pageSize &&
|
|
120
144
|
caseListResponse.response.numFound !== caseList.numFound) {
|
|
@@ -156,83 +180,67 @@ export function CaseList(props) {
|
|
|
156
180
|
}
|
|
157
181
|
}, [caseGroups, dispatchToGlobalMetadataReducer, loggedInUserJwtToken, loggedInUsersAccount.data]);
|
|
158
182
|
useEffect(() => {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
fetchCaseTypes(dispatchToGlobalMetadataReducer, apolloClient);
|
|
165
|
-
}
|
|
183
|
+
if (haventLoadedMetadata(allCaseTypes)) {
|
|
184
|
+
fetchCaseTypes(dispatchToGlobalMetadataReducer, loggedInUsersAccount.data.secureSupport);
|
|
185
|
+
}
|
|
186
|
+
// when solr is down, we use hydra metadata api to populated filter dropdowns
|
|
187
|
+
if (isSolrSearchDown) {
|
|
166
188
|
if (haventLoadedMetadata(allCaseSeverities)) {
|
|
167
|
-
fetchCaseSeverities(dispatchToGlobalMetadataReducer,
|
|
189
|
+
fetchCaseSeverities(dispatchToGlobalMetadataReducer, loggedInUsersAccount.data.secureSupport);
|
|
168
190
|
}
|
|
169
191
|
if (haventLoadedMetadata(allCaseStatuses)) {
|
|
170
|
-
fetchAllStatuses(dispatchToGlobalMetadataReducer,
|
|
192
|
+
fetchAllStatuses(dispatchToGlobalMetadataReducer, loggedInUsersAccount.data.secureSupport);
|
|
171
193
|
}
|
|
172
194
|
if (haventLoadedProductsMetadata(allProducts)) {
|
|
173
|
-
fetchProducts(dispatchToGlobalMetadataReducer
|
|
195
|
+
fetchProducts(dispatchToGlobalMetadataReducer);
|
|
174
196
|
}
|
|
175
|
-
|
|
176
|
-
|
|
197
|
+
// on sfdc fields that only one value is allowed, set filter to first item
|
|
198
|
+
const sfdcFilterState = mapValues(filterState.filterInfo, (value, key) => {
|
|
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
|
+
}
|
|
177
209
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
178
210
|
}, [
|
|
179
211
|
allCaseTypes,
|
|
180
212
|
allCaseSeverities,
|
|
181
213
|
allCaseStatuses,
|
|
182
214
|
allProducts,
|
|
183
|
-
caseRecordTypes,
|
|
184
215
|
dispatchToGlobalMetadataReducer,
|
|
185
|
-
|
|
216
|
+
loggedInUsersAccount.data.secureSupport,
|
|
217
|
+
isSolrSearchDown,
|
|
186
218
|
]);
|
|
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
|
-
}
|
|
206
219
|
// effect to update url query and call get case api whenever filter state changes
|
|
207
220
|
useEffect(() => {
|
|
208
|
-
var _a, _b, _c
|
|
221
|
+
var _a, _b, _c;
|
|
209
222
|
if (!isFirstMount.current) {
|
|
210
223
|
const urlQuery = (isNoFilterApplied(filterState) || isOnlyDefaultFilterApplied(filterState)) &&
|
|
211
224
|
!((_a = filterState.filterQueryInfo) === null || _a === void 0 ? void 0 : _a.queryString) &&
|
|
212
225
|
!filterState.sortInfo.column
|
|
213
226
|
? ''
|
|
214
227
|
: 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
|
-
}
|
|
226
228
|
setCurrentQuery(CaseListDispatch, urlQuery);
|
|
227
|
-
lastPushedQueryRef.current = fullQueryKey;
|
|
228
229
|
searchParams[FILTER_URL_QUERY_SEARCH_PARAM] = encodeURIComponent(urlQuery);
|
|
229
|
-
searchParams[FILTER_URL_CURRENT_PAGE_SEARCH_PARAM] = (
|
|
230
|
-
searchParams[FILTER_URL_PAGE_SIZE_SEARCH_PARAM] = (
|
|
230
|
+
searchParams[FILTER_URL_CURRENT_PAGE_SEARCH_PARAM] = (_b = filterState.paginationInfo) === null || _b === void 0 ? void 0 : _b.currentPage.toString();
|
|
231
|
+
searchParams[FILTER_URL_PAGE_SIZE_SEARCH_PARAM] = (_c = filterState.paginationInfo) === null || _c === void 0 ? void 0 : _c.pageSize.toString();
|
|
231
232
|
searchParams[FILTER_URL_QUERY_TYPE] = filterState.filterQueryInfo.type;
|
|
232
233
|
props.routeProps.history.push({
|
|
233
234
|
search: getStringifiedParams(searchParams),
|
|
234
235
|
});
|
|
235
236
|
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;
|
|
236
244
|
getCases(filterState);
|
|
237
245
|
}
|
|
238
246
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -242,13 +250,11 @@ export function CaseList(props) {
|
|
|
242
250
|
if (bookmarkedAccounts.isFetching ||
|
|
243
251
|
managedAccounts.isFetching ||
|
|
244
252
|
caseGroups.isFetching ||
|
|
245
|
-
caseGroups.data === undefined
|
|
246
|
-
caseRecordTypes.isFetching ||
|
|
247
|
-
isEmpty(caseRecordTypes.data))
|
|
253
|
+
caseGroups.data === undefined)
|
|
248
254
|
return;
|
|
249
255
|
// when user manually changes url and hit enter, new result is fetched without refreshing the page
|
|
250
256
|
if (!isFirstMount.current) {
|
|
251
|
-
if (queryFromUrl !== currentQuery
|
|
257
|
+
if (queryFromUrl !== currentQuery) {
|
|
252
258
|
const filterStateFromQueryUrl = createFilterStateFromUrlQuery(queryFromUrl, globalMetadataState, pageSizeFromUrl, currentPageFromUrl, searchType);
|
|
253
259
|
updateFilterState(filterDispatch, filterStateFromQueryUrl);
|
|
254
260
|
}
|
|
@@ -277,12 +283,7 @@ export function CaseList(props) {
|
|
|
277
283
|
setRHCDValue(searchParams.rhcd);
|
|
278
284
|
}
|
|
279
285
|
// set filter state based on url or default saved search
|
|
280
|
-
|
|
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);
|
|
286
|
+
const { initFilterState, defaultSearchName } = useFilterStateInit.set(decodeURIComponent(queryFromUrl), pageSizeFromUrl, currentPageFromUrl, searchType);
|
|
286
287
|
// to set default saved search name
|
|
287
288
|
setDefaultSavedSearchName(defaultSearchName);
|
|
288
289
|
// set default params when they are empty
|
|
@@ -295,20 +296,14 @@ export function CaseList(props) {
|
|
|
295
296
|
updateFilterState(filterDispatch, initFilterState);
|
|
296
297
|
}
|
|
297
298
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
298
|
-
}, [
|
|
299
|
-
|
|
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
|
|
299
|
+
}, [managedAccounts, bookmarkedAccounts, caseGroups, queryFromUrl, pageSizeFromUrl, currentPageFromUrl]);
|
|
300
|
+
// effect to initially set the filter state to expanded and when we switch from advanced to basic mode
|
|
308
301
|
useEffect(() => {
|
|
309
|
-
|
|
302
|
+
// currently there is no easy way to set the panel as expanded on initial load
|
|
303
|
+
// also we only use the standalone panel and manually change the panel state on toggle btn click
|
|
304
|
+
isCaseListFilterPanelExanded && isXLScreen && isBasicSearchMode && toggleFilterSection(true);
|
|
310
305
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
311
|
-
}, []);
|
|
306
|
+
}, [isBasicSearchMode]);
|
|
312
307
|
const onConfirmTraditionalSupportAgreement = () => {
|
|
313
308
|
updateCaseListTraditionalSupportAgreed(globalDispatchContext, true);
|
|
314
309
|
};
|
|
@@ -334,6 +329,12 @@ export function CaseList(props) {
|
|
|
334
329
|
return (React.createElement(React.Fragment, null,
|
|
335
330
|
React.createElement(CSSUserModal, { onConfirmTraditionalSupportAgreement: onConfirmTraditionalSupportAgreement, display: !caseListTraditionalSupportAgreed }),
|
|
336
331
|
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.") })),
|
|
337
338
|
React.createElement("section", { className: "case-search-top" },
|
|
338
339
|
!isEmpty(RHCDValue) && isRHCDAlertShown && React.createElement("div", { className: "push-bottom" }, displayRHCDAlert()),
|
|
339
340
|
React.createElement("div", { className: "search-wrapper" },
|
|
@@ -341,17 +342,17 @@ export function CaseList(props) {
|
|
|
341
342
|
React.createElement(NewCaseButton, { routeProps: props.routeProps })),
|
|
342
343
|
React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading case search input') } },
|
|
343
344
|
React.createElement(CaseSearch, { defaultSavedSearchName: defaultSavedSearchName }))),
|
|
344
|
-
React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading filter chips') } },
|
|
345
|
-
React.createElement(CaseListFilterChips,
|
|
345
|
+
isBasicSearchMode && (React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading filter chips') } },
|
|
346
|
+
React.createElement(CaseListFilterChips, { productVersionPivotValues: get(pivotValues, SolrPivotKeys.product_version, []), isSolrSearchDown: isSolrSearchDown })))),
|
|
346
347
|
React.createElement("section", { className: "case-search-bottom" },
|
|
347
|
-
React.createElement("aside", { className: `case-search-filters ${((_a = filterSectionRef.current) === null || _a === void 0 ? void 0 : _a.expanded) ? '' : 'collapsed'}` },
|
|
348
|
+
isBasicSearchMode && (React.createElement("aside", { className: `case-search-filters ${((_a = filterSectionRef.current) === null || _a === void 0 ? void 0 : _a.expanded) ? '' : 'collapsed'}` },
|
|
348
349
|
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,
|
|
349
350
|
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" }) },
|
|
350
351
|
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")))),
|
|
351
352
|
React.createElement("div", { className: "filter-wrapper" },
|
|
352
353
|
React.createElement("pfe-collapse-panel", { id: "case-filters-panel", "pfe-animation": "false", ref: filterSectionRef },
|
|
353
354
|
React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading filters') } },
|
|
354
|
-
React.createElement(CaseListFilters, { allCaseTypes: allCaseTypes, allCaseStatuses: allCaseStatuses, allCaseSeverities: allCaseSeverities, allProducts: allProducts }))))),
|
|
355
|
+
React.createElement(CaseListFilters, { filterValues: filterValuesFromFacetResponse, allCaseTypes: allCaseTypes, allCaseStatuses: allCaseStatuses, allCaseSeverities: allCaseSeverities, allProducts: allProducts, isSolrSearchDown: isSolrSearchDown })))))),
|
|
355
356
|
React.createElement("section", { className: "case-search-table pf-v6-u-display-flex pf-v6-u-flex-direction-column" },
|
|
356
|
-
React.createElement(CaseListTable, { caseList: caseList, caseGroups: caseGroups.data || [], loggedInUserRights: loggedInUserRights.data, sortInfo: filterState.sortInfo, paginationInfo: filterState.paginationInfo, isCaseListPageLoading: isFetching, hasError: hasError }))))));
|
|
357
|
+
React.createElement(CaseListTable, { caseList: caseList, caseGroups: caseGroups.data || [], loggedInUserRights: loggedInUserRights.data, sortInfo: filterState.sortInfo, paginationInfo: filterState.paginationInfo, isCaseListPageLoading: isFetching, hasError: hasError, isSolrDown: isSolrSearchDown }))))));
|
|
357
358
|
}
|
|
@@ -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,cAWlC,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,12 +26,8 @@ export interface IFilterQueryInfo {
|
|
|
26
26
|
type: CaseSearchQueryType;
|
|
27
27
|
parsedQuery?: string;
|
|
28
28
|
}
|
|
29
|
-
export interface IVersionFilterValue extends IFieldValue {
|
|
30
|
-
productId?: string;
|
|
31
|
-
}
|
|
32
29
|
export interface IProductFilter extends IFieldValue {
|
|
33
|
-
[SolrKeys.version]:
|
|
34
|
-
productId?: string;
|
|
30
|
+
[SolrKeys.version]: IFieldValue[];
|
|
35
31
|
}
|
|
36
32
|
export interface IFilterInfo {
|
|
37
33
|
[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,
|
|
1
|
+
{"version":3,"file":"CaseListFilterReducer.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListFilterReducer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -54,8 +54,7 @@ const caseListFilterReducer = (pState, action) => {
|
|
|
54
54
|
return Object.assign(Object.assign({}, pState), { filterInfo: newFilters, paginationInfo: newPaginationInfo });
|
|
55
55
|
}
|
|
56
56
|
case CaseListReducerEnum.updateSort: {
|
|
57
|
-
|
|
58
|
-
return Object.assign(Object.assign({}, pState), { sortInfo: action.payload.sortInfo, paginationInfo: newPaginationInfo });
|
|
57
|
+
return Object.assign(Object.assign({}, pState), { sortInfo: action.payload.sortInfo });
|
|
59
58
|
}
|
|
60
59
|
case CaseListReducerEnum.updatePagination: {
|
|
61
60
|
return Object.assign(Object.assign({}, pState), { paginationInfo: action.payload.paginationInfo });
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { IAction, ISolrResponse } from '@rh-support/types/shared';
|
|
2
|
-
import {
|
|
2
|
+
import { ISolrResponseToFacetFields, ISolrResponseToPivotFields } from '@rh-support/utils';
|
|
3
|
+
import { ICaseListResponse, IFacetFields, IFacetPivot } from '../../models/caseList';
|
|
4
|
+
import { IPivotValues, IProductVersionPivotMap } from './CaseList';
|
|
3
5
|
export interface ICaseListState {
|
|
4
6
|
caseList: ISolrResponse<ICaseListResponse>;
|
|
5
7
|
isFetching: boolean;
|
|
6
8
|
chipsNameSsoMap?: IChipsNameSsoMap;
|
|
9
|
+
filterValuesFromFacetResponse: ISolrResponseToFacetFields<IFacetFields>;
|
|
10
|
+
pivotValues: ISolrResponseToPivotFields<IFacetPivot, IProductVersionPivotMap>;
|
|
7
11
|
currentQuery: string;
|
|
8
12
|
}
|
|
9
13
|
export interface IChipsNameSso {
|
|
@@ -25,6 +29,8 @@ declare const caseListReducer: (state: ICaseListState, action: IActionType) => I
|
|
|
25
29
|
declare const setCaseList: (dispatch: CaseListDispatchType, caseList: ISolrResponse<ICaseListResponse>) => void;
|
|
26
30
|
declare const setChipsNameSsoMap: (dispatch: CaseListDispatchType, chipsNameSsoMap: IChipsNameSsoMap) => void;
|
|
27
31
|
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;
|
|
28
34
|
declare const setCurrentQuery: (dispatch: CaseListDispatchType, currentQuery: string) => void;
|
|
29
|
-
export { caseListReducer, setCaseList, setChipsNameSsoMap, setIsFetching, setCurrentQuery };
|
|
35
|
+
export { caseListReducer, setCaseList, setChipsNameSsoMap, setIsFetching, setFilterValuesFromFacetResponse, setPivotValues, setCurrentQuery, };
|
|
30
36
|
//# 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;AAClE,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAE3F,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAEnE,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAC3C,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,6BAA6B,EAAE,0BAA0B,CAAC,YAAY,CAAC,CAAC;IACxE,WAAW,EAAE,0BAA0B,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;IAC9E,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;AACF,QAAA,MAAM,aAAa,GAAI,UAAU,oBAAoB,EAAE,YAAY,OAAO,SAKzE,CAAC;AACF,QAAA,MAAM,gCAAgC,GAClC,UAAU,oBAAoB,EAC9B,+BAA+B,0BAA0B,CAAC,YAAY,CAAC,SAM1E,CAAC;AACF,QAAA,MAAM,cAAc,GAAI,UAAU,oBAAoB,EAAE,aAAa,YAAY,SAKhF,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,UAAU,oBAAoB,EAAE,cAAc,MAAM,SAK5E,CAAC;AAEF,OAAO,EACH,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,gCAAgC,EAChC,cAAc,EACd,eAAe,GAClB,CAAC"}
|
|
@@ -27,10 +27,22 @@ 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
|
+
};
|
|
30
42
|
const setCurrentQuery = (dispatch, currentQuery) => {
|
|
31
43
|
dispatch({
|
|
32
44
|
type: CaseListReducerEnum.updateState,
|
|
33
45
|
payload: { currentQuery },
|
|
34
46
|
});
|
|
35
47
|
};
|
|
36
|
-
export { caseListReducer, setCaseList, setChipsNameSsoMap, setIsFetching, setCurrentQuery };
|
|
48
|
+
export { caseListReducer, setCaseList, setChipsNameSsoMap, setIsFetching, setFilterValuesFromFacetResponse, setPivotValues, 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;AAQ1F,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,qBA+F3C"}
|
|
@@ -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 { accounts } from '@cee-eng/hydrajs';
|
|
11
11
|
import { AccountSelectorInternal } from '@rh-support/react-context';
|
|
12
|
-
import { getDropdownBtnPlaceholder
|
|
12
|
+
import { getDropdownBtnPlaceholder } 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,7 +35,6 @@ 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();
|
|
39
38
|
const selectedAccounts = useMemo(() => filterInfo[SolrKeys.accountNumber]
|
|
40
39
|
.filter((item) => !Array.isArray(item.key))
|
|
41
40
|
.map((item) => ({
|
|
@@ -68,26 +67,20 @@ export function AccountsFilter(props) {
|
|
|
68
67
|
return;
|
|
69
68
|
function getAccountsWithoutNames() {
|
|
70
69
|
return __awaiter(this, void 0, void 0, function* () {
|
|
71
|
-
var _a, _b, _c, _d;
|
|
72
70
|
const allSelected = [...filterInfo[SolrKeys.accountNumber]];
|
|
73
71
|
const accountsWithoutNames = remove(allSelected, (item) => item.key === item.value);
|
|
74
72
|
if (accountsWithoutNames.length < 1)
|
|
75
73
|
return;
|
|
76
|
-
const
|
|
74
|
+
const fields = ['accountNumber', 'accountId', 'name'].join(',');
|
|
75
|
+
const params = {
|
|
76
|
+
fields,
|
|
77
|
+
orderBy: 'name',
|
|
78
|
+
orderDirection: 'asc',
|
|
79
|
+
accountNumberIn: accountsWithoutNames.map((item) => item.key).join(','),
|
|
80
|
+
};
|
|
77
81
|
try {
|
|
78
|
-
const
|
|
79
|
-
|
|
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
|
-
}));
|
|
82
|
+
const accountsDetail = yield accounts.getAccounts(params);
|
|
83
|
+
const keyValueMap = accountsDetail.items.map((item) => ({ key: item.accountNumber, value: item.name }));
|
|
91
84
|
updateFilter(dispatch, {
|
|
92
85
|
filterKey: SolrKeys.accountNumber,
|
|
93
86
|
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,sBAwFhC"}
|
|
@@ -19,8 +19,6 @@ 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
|
|
24
22
|
const onisPrivateChange = (checked) => {
|
|
25
23
|
updateFilter(dispatch, {
|
|
26
24
|
filterKey: SolrKeys.isPrivate,
|
|
@@ -28,7 +26,6 @@ export function AdditionalFilters() {
|
|
|
28
26
|
});
|
|
29
27
|
setIsPrivate(checked);
|
|
30
28
|
};
|
|
31
|
-
void onisPrivateChange;
|
|
32
29
|
useEffect(() => {
|
|
33
30
|
var _a, _b;
|
|
34
31
|
updateFilter(dispatch, {
|
|
@@ -65,5 +62,6 @@ export function AdditionalFilters() {
|
|
|
65
62
|
React.createElement("div", { className: "additional-filters" },
|
|
66
63
|
React.createElement("h3", null,
|
|
67
64
|
React.createElement(Trans, null, "More")),
|
|
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" })
|
|
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" }))));
|
|
69
67
|
}
|