@rh-support/cases 2.6.182 → 2.6.186
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 +108 -143
- package/lib/esm/components/case-list/CaseListContext.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListContext.js +2 -5
- package/lib/esm/components/case-list/CaseListFilterReducer.d.ts +4 -6
- package/lib/esm/components/case-list/CaseListFilterReducer.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListFilterReducer.js +12 -3
- package/lib/esm/components/case-list/CaseListReducer.d.ts +10 -22
- package/lib/esm/components/case-list/CaseListReducer.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListReducer.js +7 -25
- 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 +5 -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 +3 -7
- 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 +58 -69
- 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/AdvanceSearch.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-search/AdvanceSearch.js +1 -1
- package/lib/esm/components/case-list/case-search/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/css/caseList.css +22 -99
- 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 +6 -28
- 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 -7
- package/lib/esm/utils/caseListGraphQLUtils.d.ts +0 -28
- package/lib/esm/utils/caseListGraphQLUtils.d.ts.map +0 -1
- package/lib/esm/utils/caseListGraphQLUtils.js +0 -244
- 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 -14
- package/lib/esm/utils/caseListVariablesBuilder.d.ts.map +0 -1
- package/lib/esm/utils/caseListVariablesBuilder.js +0 -193
- 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,22 +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
|
-
import { useInView } from 'react-intersection-observer';
|
|
23
23
|
import { useLocation } from 'react-router-dom';
|
|
24
24
|
import { CaseSearchQueryType } from '../../enums/caseSearch';
|
|
25
|
+
import { SolrPivotKeys } from '../../enums/filters';
|
|
25
26
|
import { PageTitle } from '../../enums/pageTitle';
|
|
26
27
|
import { useFilterStateOnLoad } from '../../hooks/useFilterStateOnLoad';
|
|
27
|
-
import {
|
|
28
|
+
import { getCaseList } from '../../utils/caseListUtils';
|
|
28
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';
|
|
29
30
|
import { UpdatedCaseDataEvent } from '../../utils/constants';
|
|
30
31
|
import { NewCaseButton } from '../case/NewCaseButton';
|
|
@@ -33,21 +34,20 @@ import { CaseListFilters } from './case-list-filters/CaseListFilters';
|
|
|
33
34
|
import { CaseListTable } from './case-list-table/CaseListTable';
|
|
34
35
|
import { CaseSearch } from './case-search/CaseSearch';
|
|
35
36
|
import { useCaseListDispatchContext, useCaseListStateContext } from './CaseListContext';
|
|
36
|
-
import { CaseListFilterDispatchContext, CaseListFilterStateContext } from './CaseListFilterContext';
|
|
37
|
-
import { isNoFilterApplied, isOnlyDefaultFilterApplied } from './CaseListFilterHelpers';
|
|
37
|
+
import { CaseListFilterDispatchContext, CaseListFilterStateContext, initialCaseFilterState, } from './CaseListFilterContext';
|
|
38
|
+
import { eligibleSFDCFiltersMultipleValues, isNoFilterApplied, isOnlyDefaultFilterApplied, } from './CaseListFilterHelpers';
|
|
38
39
|
import { updateFilterState } from './CaseListFilterReducer';
|
|
39
|
-
import {
|
|
40
|
+
import { setCaseList, setCurrentQuery, setFilterValuesFromFacetResponse, setIsFetching, setPivotValues, } from './CaseListReducer';
|
|
40
41
|
export function CaseList(props) {
|
|
41
42
|
var _a, _b;
|
|
42
43
|
const { t } = useTranslation();
|
|
43
44
|
useDocumentTitle(PageTitle.CASE_LIST);
|
|
44
45
|
const dispatchToGlobalMetadataReducer = useContext(GlobalMetadataDispatchContext);
|
|
45
|
-
const { caseList,
|
|
46
|
+
const { caseList, pivotValues, isFetching, filterValuesFromFacetResponse, currentQuery } = useCaseListStateContext();
|
|
46
47
|
const CaseListDispatch = useCaseListDispatchContext();
|
|
47
48
|
const breakPoint = useBreakpoint();
|
|
48
|
-
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);
|
|
49
50
|
const globalDispatchContext = useGlobalDispatchContext();
|
|
50
|
-
const apolloClient = useApolloClient();
|
|
51
51
|
const location = useLocation();
|
|
52
52
|
const searchParams = getUrlParsedParams(location.search);
|
|
53
53
|
const queryFromUrl = searchParams[FILTER_URL_QUERY_SEARCH_PARAM];
|
|
@@ -55,7 +55,6 @@ export function CaseList(props) {
|
|
|
55
55
|
const currentPageFromUrl = parseInt(searchParams[FILTER_URL_CURRENT_PAGE_SEARCH_PARAM]);
|
|
56
56
|
const searchType = searchParams[FILTER_URL_QUERY_TYPE];
|
|
57
57
|
const abortControllerRef = useRef(undefined);
|
|
58
|
-
const lastPushedQueryRef = useRef('');
|
|
59
58
|
const isXLScreen = breakPoint.xl;
|
|
60
59
|
const isFirstMount = useRef(true);
|
|
61
60
|
const filterSectionRef = useRef(null);
|
|
@@ -64,83 +63,71 @@ export function CaseList(props) {
|
|
|
64
63
|
const forceUpdate = useForceUpdate();
|
|
65
64
|
const isCaseListFilterPanelExanded = userPreferences.data.isCaseListFilterPanelExanded;
|
|
66
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;
|
|
67
70
|
const [hasError, setHasError] = useState(null);
|
|
71
|
+
const [isSolrSearchDown, setSolrSearchDown] = useState(false);
|
|
68
72
|
const [defaultSavedSearchName, setDefaultSavedSearchName] = useState('');
|
|
69
73
|
const [RHCDValue, setRHCDValue] = useState('');
|
|
70
74
|
const [isRHCDAlertShown, setIsRHCDAlertShown] = useState(true);
|
|
71
|
-
const loadMoreTriggeredRef = useRef(false);
|
|
72
|
-
const { ref: sentinelRef, inView } = useInView({ rootMargin: '100px' });
|
|
73
|
-
useEffect(() => {
|
|
74
|
-
if (!inView) {
|
|
75
|
-
loadMoreTriggeredRef.current = false;
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
if (inView && hasNextPage && !isLoadingMore && !loadMoreError && !loadMoreTriggeredRef.current) {
|
|
79
|
-
loadMoreTriggeredRef.current = true;
|
|
80
|
-
loadMore();
|
|
81
|
-
}
|
|
82
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
83
|
-
}, [inView, hasNextPage, isLoadingMore, loadMoreError]);
|
|
84
75
|
function getCases(currentFilterState) {
|
|
85
76
|
return __awaiter(this, void 0, void 0, function* () {
|
|
86
|
-
|
|
77
|
+
let showError;
|
|
87
78
|
try {
|
|
88
|
-
if (abortControllerRef.current) {
|
|
89
|
-
abortControllerRef.current.abort();
|
|
90
|
-
}
|
|
91
|
-
const controller = new AbortController();
|
|
92
|
-
abortControllerRef.current = controller;
|
|
93
79
|
setIsFetching(CaseListDispatch, true);
|
|
94
80
|
setHasError(false);
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
81
|
+
if (abortControllerRef.current !== undefined) {
|
|
82
|
+
// Cancel the previous request
|
|
83
|
+
abortControllerRef.current.abort();
|
|
98
84
|
}
|
|
99
|
-
|
|
100
|
-
|
|
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));
|
|
93
|
+
setCaseList(CaseListDispatch, caseListResponse.response);
|
|
101
94
|
setIsFetching(CaseListDispatch, false);
|
|
102
|
-
if (result.showErrorMessage) {
|
|
103
|
-
setHasError(true);
|
|
104
|
-
ToastNotification.addDangerMessage(t('There was an error loading case data. Please try again.'));
|
|
105
|
-
}
|
|
106
95
|
}
|
|
107
96
|
catch (err) {
|
|
108
|
-
|
|
109
|
-
|
|
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);
|
|
110
102
|
}
|
|
111
|
-
setIsFetching(CaseListDispatch, false);
|
|
112
|
-
setHasError(true);
|
|
113
|
-
ToastNotification.addXHRErrorMessage(err);
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
function loadMore() {
|
|
118
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
119
|
-
if (isLoadingMore || !hasNextPage || !endCursor || loadMoreError)
|
|
120
|
-
return;
|
|
121
|
-
setIsLoadingMore(CaseListDispatch, true);
|
|
122
|
-
try {
|
|
123
|
-
const result = yield loadMoreCases(filterState, apolloClient, endCursor);
|
|
124
|
-
setLoadMoreError(CaseListDispatch, false, 0);
|
|
125
|
-
appendCaseList(CaseListDispatch, result.docs, result.hasNextPage, result.endCursor);
|
|
126
|
-
}
|
|
127
|
-
catch (err) {
|
|
128
|
-
const nextRetryCount = loadMoreRetryCount + 1;
|
|
129
|
-
setLoadMoreError(CaseListDispatch, true, nextRetryCount);
|
|
130
|
-
console.error('[CaseList] loadMore error:', err);
|
|
131
103
|
}
|
|
132
104
|
});
|
|
133
105
|
}
|
|
134
|
-
function retryLoadMore() {
|
|
135
|
-
loadMoreTriggeredRef.current = false;
|
|
136
|
-
setLoadMoreError(CaseListDispatch, false, loadMoreRetryCount);
|
|
137
|
-
}
|
|
138
106
|
const toggleFilterSection = (isExpanded) => {
|
|
139
107
|
if (!filterSectionRef.current)
|
|
140
108
|
return;
|
|
141
109
|
filterSectionRef.current.expanded = isExpanded;
|
|
142
110
|
forceUpdate();
|
|
143
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
|
+
}
|
|
144
131
|
const onToggleFilterBtnClick = () => {
|
|
145
132
|
var _a, _b;
|
|
146
133
|
toggleFilterSection(!((_a = filterSectionRef.current) === null || _a === void 0 ? void 0 : _a.expanded));
|
|
@@ -150,7 +137,8 @@ export function CaseList(props) {
|
|
|
150
137
|
};
|
|
151
138
|
const checkNewCases = () => __awaiter(this, void 0, void 0, function* () {
|
|
152
139
|
try {
|
|
153
|
-
const { caseListResponse } = yield
|
|
140
|
+
const { caseListResponse, isSolrSearchDownSFDCUp } = yield getCaseList(filterState, loggedInUserRights.data, loggedInUsersAccount.data, null);
|
|
141
|
+
setSolrSearchDown(isSolrSearchDownSFDCUp);
|
|
154
142
|
let changed = false;
|
|
155
143
|
if (caseListResponse.response.numFound <= filterState.paginationInfo.pageSize &&
|
|
156
144
|
caseListResponse.response.numFound !== caseList.numFound) {
|
|
@@ -192,83 +180,67 @@ export function CaseList(props) {
|
|
|
192
180
|
}
|
|
193
181
|
}, [caseGroups, dispatchToGlobalMetadataReducer, loggedInUserJwtToken, loggedInUsersAccount.data]);
|
|
194
182
|
useEffect(() => {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
fetchCaseTypes(dispatchToGlobalMetadataReducer, apolloClient);
|
|
201
|
-
}
|
|
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) {
|
|
202
188
|
if (haventLoadedMetadata(allCaseSeverities)) {
|
|
203
|
-
fetchCaseSeverities(dispatchToGlobalMetadataReducer,
|
|
189
|
+
fetchCaseSeverities(dispatchToGlobalMetadataReducer, loggedInUsersAccount.data.secureSupport);
|
|
204
190
|
}
|
|
205
191
|
if (haventLoadedMetadata(allCaseStatuses)) {
|
|
206
|
-
fetchAllStatuses(dispatchToGlobalMetadataReducer,
|
|
192
|
+
fetchAllStatuses(dispatchToGlobalMetadataReducer, loggedInUsersAccount.data.secureSupport);
|
|
207
193
|
}
|
|
208
194
|
if (haventLoadedProductsMetadata(allProducts)) {
|
|
209
|
-
fetchProducts(dispatchToGlobalMetadataReducer
|
|
195
|
+
fetchProducts(dispatchToGlobalMetadataReducer);
|
|
210
196
|
}
|
|
211
|
-
|
|
212
|
-
|
|
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
|
+
}
|
|
213
209
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
214
210
|
}, [
|
|
215
211
|
allCaseTypes,
|
|
216
212
|
allCaseSeverities,
|
|
217
213
|
allCaseStatuses,
|
|
218
214
|
allProducts,
|
|
219
|
-
caseRecordTypes,
|
|
220
215
|
dispatchToGlobalMetadataReducer,
|
|
221
|
-
|
|
216
|
+
loggedInUsersAccount.data.secureSupport,
|
|
217
|
+
isSolrSearchDown,
|
|
222
218
|
]);
|
|
223
|
-
function saveFilterQueryInUserPreferences() {
|
|
224
|
-
if (isNoFilterApplied(filterState))
|
|
225
|
-
return;
|
|
226
|
-
const type = filterState.filterQueryInfo.type;
|
|
227
|
-
const recentSearch = {
|
|
228
|
-
filterState: type === CaseSearchQueryType.BASIC ? filterState.filterInfo : {},
|
|
229
|
-
sortState: filterState.sortInfo,
|
|
230
|
-
queryString: type === CaseSearchQueryType.BASIC
|
|
231
|
-
? filterState.filterQueryInfo.queryString
|
|
232
|
-
: filterState.filterQueryInfo.parsedQuery,
|
|
233
|
-
type,
|
|
234
|
-
};
|
|
235
|
-
try {
|
|
236
|
-
updateUserPreferences(dispatchToGlobalMetadataReducer, loggedInUserRights.data.getSSOUsername(), [{ key: UserPreferencesKeys.mostRecentSearch, value: JSON.stringify(recentSearch) }], 'add');
|
|
237
|
-
}
|
|
238
|
-
catch (e) {
|
|
239
|
-
console.error('Could not save filter query in user preferences');
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
219
|
// effect to update url query and call get case api whenever filter state changes
|
|
243
220
|
useEffect(() => {
|
|
244
|
-
var _a, _b, _c
|
|
221
|
+
var _a, _b, _c;
|
|
245
222
|
if (!isFirstMount.current) {
|
|
246
223
|
const urlQuery = (isNoFilterApplied(filterState) || isOnlyDefaultFilterApplied(filterState)) &&
|
|
247
224
|
!((_a = filterState.filterQueryInfo) === null || _a === void 0 ? void 0 : _a.queryString) &&
|
|
248
225
|
!filterState.sortInfo.column
|
|
249
226
|
? ''
|
|
250
227
|
: createURLQueryFromFilterState(filterState);
|
|
251
|
-
const paginationKey = `p${(_b = filterState.paginationInfo) === null || _b === void 0 ? void 0 : _b.currentPage}_s${(_c = filterState.paginationInfo) === null || _c === void 0 ? void 0 : _c.pageSize}`;
|
|
252
|
-
const fullQueryKey = `${urlQuery}_${paginationKey}`;
|
|
253
|
-
if (fullQueryKey === lastPushedQueryRef.current) {
|
|
254
|
-
return;
|
|
255
|
-
}
|
|
256
|
-
const prevQueryKey = lastPushedQueryRef.current;
|
|
257
|
-
const prevBaseQuery = prevQueryKey.substring(0, prevQueryKey.lastIndexOf('_p'));
|
|
258
|
-
const prevPageSize = (_d = prevQueryKey.match(/_s(\d+)$/)) === null || _d === void 0 ? void 0 : _d[1];
|
|
259
|
-
if (urlQuery !== prevBaseQuery || String((_e = filterState.paginationInfo) === null || _e === void 0 ? void 0 : _e.pageSize) !== prevPageSize) {
|
|
260
|
-
clearPageCursors();
|
|
261
|
-
}
|
|
262
228
|
setCurrentQuery(CaseListDispatch, urlQuery);
|
|
263
|
-
lastPushedQueryRef.current = fullQueryKey;
|
|
264
229
|
searchParams[FILTER_URL_QUERY_SEARCH_PARAM] = encodeURIComponent(urlQuery);
|
|
265
|
-
searchParams[FILTER_URL_CURRENT_PAGE_SEARCH_PARAM] = (
|
|
266
|
-
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();
|
|
267
232
|
searchParams[FILTER_URL_QUERY_TYPE] = filterState.filterQueryInfo.type;
|
|
268
233
|
props.routeProps.history.push({
|
|
269
234
|
search: getStringifiedParams(searchParams),
|
|
270
235
|
});
|
|
271
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;
|
|
272
244
|
getCases(filterState);
|
|
273
245
|
}
|
|
274
246
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -278,13 +250,11 @@ export function CaseList(props) {
|
|
|
278
250
|
if (bookmarkedAccounts.isFetching ||
|
|
279
251
|
managedAccounts.isFetching ||
|
|
280
252
|
caseGroups.isFetching ||
|
|
281
|
-
caseGroups.data === undefined
|
|
282
|
-
caseRecordTypes.isFetching ||
|
|
283
|
-
isEmpty(caseRecordTypes.data))
|
|
253
|
+
caseGroups.data === undefined)
|
|
284
254
|
return;
|
|
285
255
|
// when user manually changes url and hit enter, new result is fetched without refreshing the page
|
|
286
256
|
if (!isFirstMount.current) {
|
|
287
|
-
if (queryFromUrl !== currentQuery
|
|
257
|
+
if (queryFromUrl !== currentQuery) {
|
|
288
258
|
const filterStateFromQueryUrl = createFilterStateFromUrlQuery(queryFromUrl, globalMetadataState, pageSizeFromUrl, currentPageFromUrl, searchType);
|
|
289
259
|
updateFilterState(filterDispatch, filterStateFromQueryUrl);
|
|
290
260
|
}
|
|
@@ -313,12 +283,7 @@ export function CaseList(props) {
|
|
|
313
283
|
setRHCDValue(searchParams.rhcd);
|
|
314
284
|
}
|
|
315
285
|
// set filter state based on url or default saved search
|
|
316
|
-
|
|
317
|
-
// Always reset to page 1 on fresh load — cursor-based pagination
|
|
318
|
-
// has no stored cursors after refresh, so page > 1 would cause a mismatch
|
|
319
|
-
const { initFilterState, defaultSearchName } = useFilterStateInit.set(decodeURIComponent(queryFromUrl), pageSizeFromUrl,
|
|
320
|
-
// currentPageFromUrl,
|
|
321
|
-
1, searchType);
|
|
286
|
+
const { initFilterState, defaultSearchName } = useFilterStateInit.set(decodeURIComponent(queryFromUrl), pageSizeFromUrl, currentPageFromUrl, searchType);
|
|
322
287
|
// to set default saved search name
|
|
323
288
|
setDefaultSavedSearchName(defaultSearchName);
|
|
324
289
|
// set default params when they are empty
|
|
@@ -331,20 +296,14 @@ export function CaseList(props) {
|
|
|
331
296
|
updateFilterState(filterDispatch, initFilterState);
|
|
332
297
|
}
|
|
333
298
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
334
|
-
}, [
|
|
335
|
-
|
|
336
|
-
bookmarkedAccounts,
|
|
337
|
-
caseGroups,
|
|
338
|
-
caseRecordTypes,
|
|
339
|
-
queryFromUrl,
|
|
340
|
-
pageSizeFromUrl,
|
|
341
|
-
currentPageFromUrl,
|
|
342
|
-
]);
|
|
343
|
-
// 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
|
|
344
301
|
useEffect(() => {
|
|
345
|
-
|
|
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);
|
|
346
305
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
347
|
-
}, []);
|
|
306
|
+
}, [isBasicSearchMode]);
|
|
348
307
|
const onConfirmTraditionalSupportAgreement = () => {
|
|
349
308
|
updateCaseListTraditionalSupportAgreed(globalDispatchContext, true);
|
|
350
309
|
};
|
|
@@ -370,6 +329,12 @@ export function CaseList(props) {
|
|
|
370
329
|
return (React.createElement(React.Fragment, null,
|
|
371
330
|
React.createElement(CSSUserModal, { onConfirmTraditionalSupportAgreement: onConfirmTraditionalSupportAgreement, display: !caseListTraditionalSupportAgreed }),
|
|
372
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.") })),
|
|
373
338
|
React.createElement("section", { className: "case-search-top" },
|
|
374
339
|
!isEmpty(RHCDValue) && isRHCDAlertShown && React.createElement("div", { className: "push-bottom" }, displayRHCDAlert()),
|
|
375
340
|
React.createElement("div", { className: "search-wrapper" },
|
|
@@ -377,17 +342,17 @@ export function CaseList(props) {
|
|
|
377
342
|
React.createElement(NewCaseButton, { routeProps: props.routeProps })),
|
|
378
343
|
React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading case search input') } },
|
|
379
344
|
React.createElement(CaseSearch, { defaultSavedSearchName: defaultSavedSearchName }))),
|
|
380
|
-
React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading filter chips') } },
|
|
381
|
-
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 })))),
|
|
382
347
|
React.createElement("section", { className: "case-search-bottom" },
|
|
383
|
-
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'}` },
|
|
384
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,
|
|
385
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" }) },
|
|
386
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")))),
|
|
387
352
|
React.createElement("div", { className: "filter-wrapper" },
|
|
388
353
|
React.createElement("pfe-collapse-panel", { id: "case-filters-panel", "pfe-animation": "false", ref: filterSectionRef },
|
|
389
354
|
React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading filters') } },
|
|
390
|
-
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 })))))),
|
|
391
356
|
React.createElement("section", { className: "case-search-table pf-v6-u-display-flex pf-v6-u-flex-direction-column" },
|
|
392
|
-
React.createElement(CaseListTable, { caseList: caseList, caseGroups: caseGroups.data || [], loggedInUserRights: loggedInUserRights.data, sortInfo: filterState.sortInfo, 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 }))))));
|
|
393
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"}
|
|
@@ -7,12 +7,9 @@ export const initialCaseListState = {
|
|
|
7
7
|
start: 0,
|
|
8
8
|
},
|
|
9
9
|
isFetching: false,
|
|
10
|
-
isLoadingMore: false,
|
|
11
|
-
hasNextPage: false,
|
|
12
|
-
endCursor: undefined,
|
|
13
|
-
loadMoreError: false,
|
|
14
|
-
loadMoreRetryCount: 0,
|
|
15
10
|
chipsNameSsoMap: {},
|
|
11
|
+
filterValuesFromFacetResponse: null,
|
|
12
|
+
pivotValues: null,
|
|
16
13
|
currentQuery: undefined,
|
|
17
14
|
};
|
|
18
15
|
const initalDispatchContext = null;
|
|
@@ -6,6 +6,7 @@ declare enum CaseListReducerEnum {
|
|
|
6
6
|
updateFilter = "UPDATE_FILTER",
|
|
7
7
|
updateFilters = "UPDATE_FILTERS",
|
|
8
8
|
updateSort = "UPDATE_SORT",
|
|
9
|
+
updatePagination = "UPDATE_PAGINATION",
|
|
9
10
|
updateFilterQuery = "UPDATE_FILTER_QUERY",
|
|
10
11
|
removeFilter = "REMOVE_FILTER",
|
|
11
12
|
clearFilters = "CLEAR_FILTERS",
|
|
@@ -25,12 +26,8 @@ export interface IFilterQueryInfo {
|
|
|
25
26
|
type: CaseSearchQueryType;
|
|
26
27
|
parsedQuery?: string;
|
|
27
28
|
}
|
|
28
|
-
export interface IVersionFilterValue extends IFieldValue {
|
|
29
|
-
productId?: string;
|
|
30
|
-
}
|
|
31
29
|
export interface IProductFilter extends IFieldValue {
|
|
32
|
-
[SolrKeys.version]:
|
|
33
|
-
productId?: string;
|
|
30
|
+
[SolrKeys.version]: IFieldValue[];
|
|
34
31
|
}
|
|
35
32
|
export interface IFilterInfo {
|
|
36
33
|
[SolrPivotKeys.product_version]: IProductFilter[];
|
|
@@ -60,6 +57,7 @@ type IActionType = IAction<CaseListReducerEnum, ICaseListFilterState>;
|
|
|
60
57
|
export type CaseListFilterDispatchType = (value: IActionType) => void;
|
|
61
58
|
declare const caseListFilterReducer: (pState: ICaseListFilterState, action: any) => ICaseListFilterState;
|
|
62
59
|
declare function updateSort(dispatch: CaseListFilterDispatchType, sortInfo: ISortInfo): void;
|
|
60
|
+
declare function updatePagination(dispatch: CaseListFilterDispatchType, paginationInfo: IPaginationInfo): void;
|
|
63
61
|
declare function updateFilter(dispatch: CaseListFilterDispatchType, { filterKey, values }: {
|
|
64
62
|
filterKey: any;
|
|
65
63
|
values: any;
|
|
@@ -73,5 +71,5 @@ declare const clearFilters: (dispatch: any, clearQueryString?: boolean) => void;
|
|
|
73
71
|
declare function resetFilterToDefaultState(dispatch: any): void;
|
|
74
72
|
declare function updateFilterQuery(dispatch: CaseListFilterDispatchType, filterQueryInfo: IFilterQueryInfo): void;
|
|
75
73
|
declare function updateFilterState(dispatch: CaseListFilterDispatchType, newState: Partial<ICaseListFilterState>): void;
|
|
76
|
-
export { updateSort, updateFilter, updateFilters, updateFilterQuery, removeFilterItem, clearFilters, updateFilterState, caseListFilterReducer, resetFilterToDefaultState, };
|
|
74
|
+
export { updateSort, updatePagination, updateFilter, updateFilters, updateFilterQuery, removeFilterItem, clearFilters, updateFilterState, caseListFilterReducer, resetFilterToDefaultState, };
|
|
77
75
|
//# sourceMappingURL=CaseListFilterReducer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseListFilterReducer.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListFilterReducer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE9D,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,WAAW,CAYlD,CAAC;AAEF,aAAK,mBAAmB;IACpB,YAAY,kBAAkB;IAC9B,aAAa,mBAAmB;IAChC,UAAU,gBAAgB;IAC1B,iBAAiB,wBAAwB;IACzC,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,qBAAqB,6BAA6B;IAClD,WAAW,iBAAiB;CAC/B;AAED,MAAM,WAAW,SAAS;IACtB,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"CaseListFilterReducer.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListFilterReducer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@ var CaseListReducerEnum;
|
|
|
18
18
|
CaseListReducerEnum["updateFilter"] = "UPDATE_FILTER";
|
|
19
19
|
CaseListReducerEnum["updateFilters"] = "UPDATE_FILTERS";
|
|
20
20
|
CaseListReducerEnum["updateSort"] = "UPDATE_SORT";
|
|
21
|
+
CaseListReducerEnum["updatePagination"] = "UPDATE_PAGINATION";
|
|
21
22
|
CaseListReducerEnum["updateFilterQuery"] = "UPDATE_FILTER_QUERY";
|
|
22
23
|
CaseListReducerEnum["removeFilter"] = "REMOVE_FILTER";
|
|
23
24
|
CaseListReducerEnum["clearFilters"] = "CLEAR_FILTERS";
|
|
@@ -53,8 +54,10 @@ const caseListFilterReducer = (pState, action) => {
|
|
|
53
54
|
return Object.assign(Object.assign({}, pState), { filterInfo: newFilters, paginationInfo: newPaginationInfo });
|
|
54
55
|
}
|
|
55
56
|
case CaseListReducerEnum.updateSort: {
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
return Object.assign(Object.assign({}, pState), { sortInfo: action.payload.sortInfo });
|
|
58
|
+
}
|
|
59
|
+
case CaseListReducerEnum.updatePagination: {
|
|
60
|
+
return Object.assign(Object.assign({}, pState), { paginationInfo: action.payload.paginationInfo });
|
|
58
61
|
}
|
|
59
62
|
case CaseListReducerEnum.removeFilter: {
|
|
60
63
|
const newValues = pState.filterInfo[action.payload.filterKey].filter((item) => {
|
|
@@ -86,6 +89,12 @@ function updateSort(dispatch, sortInfo) {
|
|
|
86
89
|
payload: { sortInfo },
|
|
87
90
|
});
|
|
88
91
|
}
|
|
92
|
+
function updatePagination(dispatch, paginationInfo) {
|
|
93
|
+
dispatch({
|
|
94
|
+
type: CaseListReducerEnum.updatePagination,
|
|
95
|
+
payload: { paginationInfo },
|
|
96
|
+
});
|
|
97
|
+
}
|
|
89
98
|
function updateFilter(dispatch, { filterKey, values }) {
|
|
90
99
|
dispatch({
|
|
91
100
|
type: CaseListReducerEnum.updateFilter,
|
|
@@ -132,4 +141,4 @@ function updateFilterState(dispatch, newState) {
|
|
|
132
141
|
payload: newState,
|
|
133
142
|
});
|
|
134
143
|
}
|
|
135
|
-
export { updateSort, updateFilter, updateFilters, updateFilterQuery, removeFilterItem, clearFilters, updateFilterState, caseListFilterReducer, resetFilterToDefaultState, };
|
|
144
|
+
export { updateSort, updatePagination, updateFilter, updateFilters, updateFilterQuery, removeFilterItem, clearFilters, updateFilterState, caseListFilterReducer, resetFilterToDefaultState, };
|
|
@@ -1,14 +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
|
-
isLoadingMore: boolean;
|
|
7
|
-
hasNextPage: boolean;
|
|
8
|
-
endCursor: string | undefined;
|
|
9
|
-
loadMoreError: boolean;
|
|
10
|
-
loadMoreRetryCount: number;
|
|
11
8
|
chipsNameSsoMap?: IChipsNameSsoMap;
|
|
9
|
+
filterValuesFromFacetResponse: ISolrResponseToFacetFields<IFacetFields>;
|
|
10
|
+
pivotValues: ISolrResponseToPivotFields<IFacetPivot, IProductVersionPivotMap>;
|
|
12
11
|
currentQuery: string;
|
|
13
12
|
}
|
|
14
13
|
export interface IChipsNameSso {
|
|
@@ -22,27 +21,16 @@ export interface IChipsNameSsoMap {
|
|
|
22
21
|
[sso: string]: IChipsNameSso;
|
|
23
22
|
}
|
|
24
23
|
declare enum CaseListReducerEnum {
|
|
25
|
-
updateState = "SET_STATE"
|
|
26
|
-
appendDocs = "APPEND_DOCS"
|
|
24
|
+
updateState = "SET_STATE"
|
|
27
25
|
}
|
|
28
|
-
|
|
29
|
-
docs: ICaseListResponse[];
|
|
30
|
-
hasNextPage: boolean;
|
|
31
|
-
endCursor: string | undefined;
|
|
32
|
-
}
|
|
33
|
-
type IActionType = IAction<CaseListReducerEnum, ICaseListState> | {
|
|
34
|
-
type: CaseListReducerEnum.appendDocs;
|
|
35
|
-
payload: IAppendDocsPayload;
|
|
36
|
-
};
|
|
26
|
+
type IActionType = IAction<CaseListReducerEnum, ICaseListState>;
|
|
37
27
|
export type CaseListDispatchType = (value: IActionType) => void;
|
|
38
28
|
declare const caseListReducer: (state: ICaseListState, action: IActionType) => ICaseListState;
|
|
39
29
|
declare const setCaseList: (dispatch: CaseListDispatchType, caseList: ISolrResponse<ICaseListResponse>) => void;
|
|
40
30
|
declare const setChipsNameSsoMap: (dispatch: CaseListDispatchType, chipsNameSsoMap: IChipsNameSsoMap) => void;
|
|
41
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;
|
|
42
34
|
declare const setCurrentQuery: (dispatch: CaseListDispatchType, currentQuery: string) => void;
|
|
43
|
-
|
|
44
|
-
declare const appendCaseList: (dispatch: CaseListDispatchType, docs: ICaseListResponse[], hasNextPage: boolean, endCursor: string | undefined) => void;
|
|
45
|
-
declare const setCursorInfo: (dispatch: CaseListDispatchType, hasNextPage: boolean, endCursor: string | undefined) => void;
|
|
46
|
-
declare const setLoadMoreError: (dispatch: CaseListDispatchType, loadMoreError: boolean, loadMoreRetryCount: number) => void;
|
|
47
|
-
export { caseListReducer, setCaseList, setChipsNameSsoMap, setIsFetching, setCurrentQuery, setIsLoadingMore, appendCaseList, setCursorInfo, setLoadMoreError, };
|
|
35
|
+
export { caseListReducer, setCaseList, setChipsNameSsoMap, setIsFetching, setFilterValuesFromFacetResponse, setPivotValues, setCurrentQuery, };
|
|
48
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"}
|