@rh-support/cases 2.6.173 → 2.6.181
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/esm/components/case-list/CaseList.d.ts +0 -7
- package/lib/esm/components/case-list/CaseList.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseList.js +143 -108
- package/lib/esm/components/case-list/CaseListContext.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListContext.js +5 -2
- package/lib/esm/components/case-list/CaseListFilterReducer.d.ts +6 -4
- package/lib/esm/components/case-list/CaseListFilterReducer.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListFilterReducer.js +3 -12
- package/lib/esm/components/case-list/CaseListReducer.d.ts +22 -10
- package/lib/esm/components/case-list/CaseListReducer.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListReducer.js +25 -7
- package/lib/esm/components/case-list/case-list-filters/AccountsFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/AccountsFilter.js +18 -11
- package/lib/esm/components/case-list/case-list-filters/AdditionalFilters.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/AdditionalFilters.js +4 -2
- package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.d.ts +1 -7
- package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.js +7 -15
- package/lib/esm/components/case-list/case-list-filters/CaseListFilters.d.ts +2 -5
- package/lib/esm/components/case-list/case-list-filters/CaseListFilters.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/CaseListFilters.js +14 -14
- package/lib/esm/components/case-list/case-list-filters/ProductFilterChip.d.ts +1 -3
- package/lib/esm/components/case-list/case-list-filters/ProductFilterChip.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/ProductFilterChip.js +2 -2
- package/lib/esm/components/case-list/case-list-filters/ProductsFilter.d.ts +5 -4
- package/lib/esm/components/case-list/case-list-filters/ProductsFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/ProductsFilter.js +15 -54
- package/lib/esm/components/case-list/case-list-filters/SeverityFilter.d.ts +0 -3
- package/lib/esm/components/case-list/case-list-filters/SeverityFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/SeverityFilter.js +18 -44
- package/lib/esm/components/case-list/case-list-filters/StatusFilter.d.ts +0 -3
- package/lib/esm/components/case-list/case-list-filters/StatusFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/StatusFilter.js +14 -44
- package/lib/esm/components/case-list/case-list-filters/VersionsFilter.d.ts +1 -3
- package/lib/esm/components/case-list/case-list-filters/VersionsFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/VersionsFilter.js +61 -32
- package/lib/esm/components/case-list/case-list-table/CaseListTable.d.ts +7 -3
- 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 +69 -58
- package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.d.ts +0 -5
- package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.js +38 -68
- package/lib/esm/components/case-list/case-list-table/ExportCaseListCSV.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-table/ExportCaseListCSV.js +5 -15
- package/lib/esm/components/case-list/case-list-table/SeverityLabel.js +1 -1
- package/lib/esm/components/case-list/case-list-table/TableActionsDropdown.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-table/TableActionsDropdown.js +2 -3
- package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.js +1 -0
- package/lib/esm/components/case-list/case-search/CaseSearch.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-search/CaseSearch.js +6 -6
- package/lib/esm/components/case-list/case-search/useAdvanceSearchParser.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-search/useAdvanceSearchParser.js +2 -1
- package/lib/esm/css/caseList.css +99 -22
- package/lib/esm/enums/case.d.ts +2 -1
- package/lib/esm/enums/case.d.ts.map +1 -1
- package/lib/esm/enums/case.js +14 -1
- package/lib/esm/hooks/useExportCaseListCSV.d.ts.map +1 -1
- package/lib/esm/hooks/useExportCaseListCSV.js +1 -9
- package/lib/esm/test-utils/mockData.js +1 -1
- package/lib/esm/utils/caseListGraphQLUtils.d.ts +28 -0
- package/lib/esm/utils/caseListGraphQLUtils.d.ts.map +1 -0
- package/lib/esm/utils/caseListGraphQLUtils.js +244 -0
- package/lib/esm/utils/caseListMapper.d.ts +6 -0
- package/lib/esm/utils/caseListMapper.d.ts.map +1 -0
- package/lib/esm/utils/caseListMapper.js +36 -0
- package/lib/esm/utils/caseListVariablesBuilder.d.ts +14 -0
- package/lib/esm/utils/caseListVariablesBuilder.d.ts.map +1 -0
- package/lib/esm/utils/caseListVariablesBuilder.js +193 -0
- package/lib/esm/utils/caseSearchUtils.d.ts.map +1 -1
- package/lib/esm/utils/caseSearchUtils.js +26 -1
- package/lib/esm/utils/constants.d.ts +2 -1
- package/lib/esm/utils/constants.d.ts.map +1 -1
- package/lib/esm/utils/constants.js +14 -3
- package/lib/esm/utils/mockSolrResponse.js +1 -1
- package/lib/esm/utils/statusUtils.d.ts +3 -0
- package/lib/esm/utils/statusUtils.d.ts.map +1 -0
- package/lib/esm/utils/statusUtils.js +22 -0
- package/package.json +6 -5
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
import '../../css/caseList.css';
|
|
2
2
|
import '../../css/caseSearch.css';
|
|
3
|
-
import { IFacetResponse } from '@rh-support/types/shared';
|
|
4
|
-
import { ISolrResponseToPivotFields } from '@rh-support/utils';
|
|
5
3
|
import React from 'react';
|
|
6
4
|
import { RouteComponentProps } from 'react-router-dom';
|
|
7
5
|
import { ICasesRouteURLParams } from '..';
|
|
8
|
-
import { IFacetPivot } from '../../models/caseList';
|
|
9
6
|
interface IProps {
|
|
10
7
|
routeProps: RouteComponentProps<ICasesRouteURLParams>;
|
|
11
8
|
}
|
|
12
|
-
export interface IProductVersionPivotMap extends IFacetResponse {
|
|
13
|
-
case_version: IFacetResponse[];
|
|
14
|
-
}
|
|
15
|
-
export type IPivotValues = ISolrResponseToPivotFields<IFacetPivot, IProductVersionPivotMap>;
|
|
16
9
|
export interface IChipsNameSsoMap {
|
|
17
10
|
[sso: string]: IChipsNameSso;
|
|
18
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseList.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseList.tsx"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,CAAC;AAChC,OAAO,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"CaseList.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseList.tsx"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,CAAC;AAChC,OAAO,0BAA0B,CAAC;AAuClC,OAAO,KAAkD,MAAM,OAAO,CAAC;AAGvE,OAAO,EAAE,mBAAmB,EAAe,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,IAAI,CAAC;AAgC1C,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;CACzD;AAMD,MAAM,WAAW,gBAAgB;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,qBA0gBrC"}
|
|
@@ -9,23 +9,22 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import '../../css/caseList.css';
|
|
11
11
|
import '../../css/caseSearch.css';
|
|
12
|
+
import { useApolloClient } from '@apollo/client/react';
|
|
12
13
|
import { Alert, AlertActionCloseButton, AlertVariant, Button } from '@patternfly/react-core';
|
|
13
14
|
import OpenDrawerRightIcon from '@patternfly/react-icons/dist/js/icons/open-drawer-right-icon';
|
|
14
|
-
import { ErrorBoundary, ToastNotification, useBreakpoint, useDocumentTitle, useForceUpdate,
|
|
15
|
-
import { CSSUserModal, fetchAllStatuses, fetchCaseGroupsForAccount, fetchCaseGroupsForSSO, fetchCaseSeverities, fetchCaseTypes, fetchProducts, GlobalMetadataDispatchContext, GlobalMetadataStateContext, setUserPreferences, updateCaseListTraditionalSupportAgreed, updateUserPreferences, useGlobalDispatchContext, UserPreferencesKeys, } from '@rh-support/react-context';
|
|
16
|
-
import { getStringifiedParams, getUrlParsedParams, haventLoadedMetadata, haventLoadedProductsMetadata, pendoTrackEvent,
|
|
17
|
-
import get from 'lodash/get';
|
|
15
|
+
import { ErrorBoundary, ToastNotification, useBreakpoint, useDocumentTitle, useForceUpdate, } from '@rh-support/components';
|
|
16
|
+
import { CSSUserModal, fetchAllStatuses, fetchCaseGroupsForAccount, fetchCaseGroupsForSSO, fetchCaseRecordTypes, fetchCaseSeverities, fetchCaseTypes, fetchProducts, GlobalMetadataDispatchContext, GlobalMetadataStateContext, setUserPreferences, updateCaseListTraditionalSupportAgreed, updateUserPreferences, useGlobalDispatchContext, UserPreferencesKeys, } from '@rh-support/react-context';
|
|
17
|
+
import { getStringifiedParams, getUrlParsedParams, haventLoadedMetadata, haventLoadedProductsMetadata, pendoTrackEvent, } from '@rh-support/utils';
|
|
18
18
|
import isEmpty from 'lodash/isEmpty';
|
|
19
|
-
import mapValues from 'lodash/mapValues';
|
|
20
19
|
import some from 'lodash/some';
|
|
21
20
|
import React, { useContext, useEffect, useRef, useState } from 'react';
|
|
22
21
|
import { Trans, useTranslation } from 'react-i18next';
|
|
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';
|
|
26
25
|
import { PageTitle } from '../../enums/pageTitle';
|
|
27
26
|
import { useFilterStateOnLoad } from '../../hooks/useFilterStateOnLoad';
|
|
28
|
-
import {
|
|
27
|
+
import { clearPageCursors, getCaseListFromGraphQL, loadMoreCases } from '../../utils/caseListGraphQLUtils';
|
|
29
28
|
import { createFilterStateFromUrlQuery, createURLQueryFromFilterState, FILTER_URL_CURRENT_PAGE_SEARCH_PARAM, FILTER_URL_PAGE_SIZE_SEARCH_PARAM, FILTER_URL_QUERY_SEARCH_PARAM, FILTER_URL_QUERY_TYPE, } from '../../utils/caseSearchUtils';
|
|
30
29
|
import { UpdatedCaseDataEvent } from '../../utils/constants';
|
|
31
30
|
import { NewCaseButton } from '../case/NewCaseButton';
|
|
@@ -34,20 +33,21 @@ import { CaseListFilters } from './case-list-filters/CaseListFilters';
|
|
|
34
33
|
import { CaseListTable } from './case-list-table/CaseListTable';
|
|
35
34
|
import { CaseSearch } from './case-search/CaseSearch';
|
|
36
35
|
import { useCaseListDispatchContext, useCaseListStateContext } from './CaseListContext';
|
|
37
|
-
import { CaseListFilterDispatchContext, CaseListFilterStateContext
|
|
38
|
-
import {
|
|
36
|
+
import { CaseListFilterDispatchContext, CaseListFilterStateContext } from './CaseListFilterContext';
|
|
37
|
+
import { isNoFilterApplied, isOnlyDefaultFilterApplied } from './CaseListFilterHelpers';
|
|
39
38
|
import { updateFilterState } from './CaseListFilterReducer';
|
|
40
|
-
import { setCaseList, setCurrentQuery,
|
|
39
|
+
import { appendCaseList, setCaseList, setCurrentQuery, setCursorInfo, setIsFetching, setIsLoadingMore, setLoadMoreError, } from './CaseListReducer';
|
|
41
40
|
export function CaseList(props) {
|
|
42
41
|
var _a, _b;
|
|
43
42
|
const { t } = useTranslation();
|
|
44
43
|
useDocumentTitle(PageTitle.CASE_LIST);
|
|
45
44
|
const dispatchToGlobalMetadataReducer = useContext(GlobalMetadataDispatchContext);
|
|
46
|
-
const { caseList,
|
|
45
|
+
const { caseList, isFetching, isLoadingMore, hasNextPage, endCursor, currentQuery, loadMoreError, loadMoreRetryCount, } = useCaseListStateContext();
|
|
47
46
|
const CaseListDispatch = useCaseListDispatchContext();
|
|
48
47
|
const breakPoint = useBreakpoint();
|
|
49
|
-
const { globalMetadataState, globalMetadataState: { caseGroups, loggedInUserJwtToken, loggedInUserRights, loggedInUsersAccount, userPreferences, managedAccounts, bookmarkedAccounts, allCaseTypes, allCaseSeverities, allCaseStatuses, allProducts, caseListTraditionalSupportAgreed, }, } = useContext(GlobalMetadataStateContext);
|
|
48
|
+
const { globalMetadataState, globalMetadataState: { caseGroups, loggedInUserJwtToken, loggedInUserRights, loggedInUsersAccount, userPreferences, managedAccounts, bookmarkedAccounts, allCaseTypes, allCaseSeverities, allCaseStatuses, allProducts, caseRecordTypes, caseListTraditionalSupportAgreed, }, } = useContext(GlobalMetadataStateContext);
|
|
50
49
|
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,6 +55,7 @@ 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('');
|
|
58
59
|
const isXLScreen = breakPoint.xl;
|
|
59
60
|
const isFirstMount = useRef(true);
|
|
60
61
|
const filterSectionRef = useRef(null);
|
|
@@ -63,71 +64,83 @@ export function CaseList(props) {
|
|
|
63
64
|
const forceUpdate = useForceUpdate();
|
|
64
65
|
const isCaseListFilterPanelExanded = userPreferences.data.isCaseListFilterPanelExanded;
|
|
65
66
|
const useFilterStateInit = useFilterStateOnLoad();
|
|
66
|
-
const isBasicSearchMode = filterState.filterQueryInfo.type === CaseSearchQueryType.BASIC ||
|
|
67
|
-
(filterState.filterQueryInfo.type === CaseSearchQueryType.ADVANCED && loggedInUserRights.data.isExternal());
|
|
68
|
-
const prevSearchType = usePrevious(filterState.filterQueryInfo.type);
|
|
69
|
-
let isSearchTypeChanged = filterState.filterQueryInfo.type !== prevSearchType;
|
|
70
67
|
const [hasError, setHasError] = useState(null);
|
|
71
|
-
const [isSolrSearchDown, setSolrSearchDown] = useState(false);
|
|
72
68
|
const [defaultSavedSearchName, setDefaultSavedSearchName] = useState('');
|
|
73
69
|
const [RHCDValue, setRHCDValue] = useState('');
|
|
74
70
|
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]);
|
|
75
84
|
function getCases(currentFilterState) {
|
|
76
85
|
return __awaiter(this, void 0, void 0, function* () {
|
|
77
|
-
|
|
86
|
+
var _a;
|
|
78
87
|
try {
|
|
79
|
-
|
|
80
|
-
setHasError(false);
|
|
81
|
-
if (abortControllerRef.current !== undefined) {
|
|
82
|
-
// Cancel the previous request
|
|
88
|
+
if (abortControllerRef.current) {
|
|
83
89
|
abortControllerRef.current.abort();
|
|
84
90
|
}
|
|
85
|
-
|
|
86
|
-
let controller = new AbortController();
|
|
91
|
+
const controller = new AbortController();
|
|
87
92
|
abortControllerRef.current = controller;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
93
|
+
setIsFetching(CaseListDispatch, true);
|
|
94
|
+
setHasError(false);
|
|
95
|
+
const result = yield getCaseListFromGraphQL(currentFilterState, apolloClient, undefined, controller.signal);
|
|
96
|
+
if (controller.signal.aborted) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
setCaseList(CaseListDispatch, result.caseListResponse.response);
|
|
100
|
+
setCursorInfo(CaseListDispatch, result.hasNextPage, result.endCursor);
|
|
94
101
|
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
|
+
}
|
|
95
106
|
}
|
|
96
107
|
catch (err) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
setIsFetching(CaseListDispatch, false);
|
|
100
|
-
setHasError(true);
|
|
101
|
-
showError && ToastNotification.addXHRErrorMessage(err);
|
|
108
|
+
if ((err === null || err === void 0 ? void 0 : err.name) === 'AbortError' || ((_a = err === null || err === void 0 ? void 0 : err.message) === null || _a === void 0 ? void 0 : _a.includes('aborted'))) {
|
|
109
|
+
return;
|
|
102
110
|
}
|
|
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);
|
|
103
131
|
}
|
|
104
132
|
});
|
|
105
133
|
}
|
|
134
|
+
function retryLoadMore() {
|
|
135
|
+
loadMoreTriggeredRef.current = false;
|
|
136
|
+
setLoadMoreError(CaseListDispatch, false, loadMoreRetryCount);
|
|
137
|
+
}
|
|
106
138
|
const toggleFilterSection = (isExpanded) => {
|
|
107
139
|
if (!filterSectionRef.current)
|
|
108
140
|
return;
|
|
109
141
|
filterSectionRef.current.expanded = isExpanded;
|
|
110
142
|
forceUpdate();
|
|
111
143
|
};
|
|
112
|
-
function saveFilterQueryInUserPreferences() {
|
|
113
|
-
if (isNoFilterApplied(filterState))
|
|
114
|
-
return;
|
|
115
|
-
const type = filterState.filterQueryInfo.type;
|
|
116
|
-
const recentSerach = {
|
|
117
|
-
filterState: type === CaseSearchQueryType.BASIC ? filterState.filterInfo : {},
|
|
118
|
-
sortState: filterState.sortInfo,
|
|
119
|
-
queryString: type === CaseSearchQueryType.BASIC
|
|
120
|
-
? filterState.filterQueryInfo.queryString
|
|
121
|
-
: filterState.filterQueryInfo.parsedQuery,
|
|
122
|
-
type,
|
|
123
|
-
};
|
|
124
|
-
try {
|
|
125
|
-
updateUserPreferences(dispatchToGlobalMetadataReducer, loggedInUserRights.data.getSSOUsername(), [{ key: UserPreferencesKeys.mostRecentSearch, value: JSON.stringify(recentSerach) }], 'add');
|
|
126
|
-
}
|
|
127
|
-
catch (e) {
|
|
128
|
-
console.error('Could not save filter query in user preferences');
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
144
|
const onToggleFilterBtnClick = () => {
|
|
132
145
|
var _a, _b;
|
|
133
146
|
toggleFilterSection(!((_a = filterSectionRef.current) === null || _a === void 0 ? void 0 : _a.expanded));
|
|
@@ -137,8 +150,7 @@ export function CaseList(props) {
|
|
|
137
150
|
};
|
|
138
151
|
const checkNewCases = () => __awaiter(this, void 0, void 0, function* () {
|
|
139
152
|
try {
|
|
140
|
-
const { caseListResponse
|
|
141
|
-
setSolrSearchDown(isSolrSearchDownSFDCUp);
|
|
153
|
+
const { caseListResponse } = yield getCaseListFromGraphQL(filterState, apolloClient);
|
|
142
154
|
let changed = false;
|
|
143
155
|
if (caseListResponse.response.numFound <= filterState.paginationInfo.pageSize &&
|
|
144
156
|
caseListResponse.response.numFound !== caseList.numFound) {
|
|
@@ -180,67 +192,83 @@ export function CaseList(props) {
|
|
|
180
192
|
}
|
|
181
193
|
}, [caseGroups, dispatchToGlobalMetadataReducer, loggedInUserJwtToken, loggedInUsersAccount.data]);
|
|
182
194
|
useEffect(() => {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
195
|
+
const loadMetadata = () => __awaiter(this, void 0, void 0, function* () {
|
|
196
|
+
if (haventLoadedMetadata(caseRecordTypes)) {
|
|
197
|
+
yield fetchCaseRecordTypes(dispatchToGlobalMetadataReducer, apolloClient);
|
|
198
|
+
}
|
|
199
|
+
if (haventLoadedMetadata(allCaseTypes)) {
|
|
200
|
+
fetchCaseTypes(dispatchToGlobalMetadataReducer, apolloClient);
|
|
201
|
+
}
|
|
188
202
|
if (haventLoadedMetadata(allCaseSeverities)) {
|
|
189
|
-
fetchCaseSeverities(dispatchToGlobalMetadataReducer,
|
|
203
|
+
fetchCaseSeverities(dispatchToGlobalMetadataReducer, apolloClient);
|
|
190
204
|
}
|
|
191
205
|
if (haventLoadedMetadata(allCaseStatuses)) {
|
|
192
|
-
fetchAllStatuses(dispatchToGlobalMetadataReducer,
|
|
206
|
+
fetchAllStatuses(dispatchToGlobalMetadataReducer, apolloClient);
|
|
193
207
|
}
|
|
194
208
|
if (haventLoadedProductsMetadata(allProducts)) {
|
|
195
|
-
fetchProducts(dispatchToGlobalMetadataReducer);
|
|
209
|
+
fetchProducts(dispatchToGlobalMetadataReducer, apolloClient);
|
|
196
210
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
//@ts-ignore
|
|
200
|
-
if (eligibleSFDCFiltersMultipleValues.includes(key))
|
|
201
|
-
return value;
|
|
202
|
-
return value[0] ? [value[0]] : [];
|
|
203
|
-
});
|
|
204
|
-
updateFilterState(filterDispatch, {
|
|
205
|
-
//@ts-ignore
|
|
206
|
-
filterInfo: Object.assign(Object.assign({}, initialCaseFilterState.filterInfo), sfdcFilterState),
|
|
207
|
-
});
|
|
208
|
-
}
|
|
211
|
+
});
|
|
212
|
+
loadMetadata();
|
|
209
213
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
210
214
|
}, [
|
|
211
215
|
allCaseTypes,
|
|
212
216
|
allCaseSeverities,
|
|
213
217
|
allCaseStatuses,
|
|
214
218
|
allProducts,
|
|
219
|
+
caseRecordTypes,
|
|
215
220
|
dispatchToGlobalMetadataReducer,
|
|
216
|
-
|
|
217
|
-
isSolrSearchDown,
|
|
221
|
+
apolloClient,
|
|
218
222
|
]);
|
|
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
|
+
}
|
|
219
242
|
// effect to update url query and call get case api whenever filter state changes
|
|
220
243
|
useEffect(() => {
|
|
221
|
-
var _a, _b, _c;
|
|
244
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
222
245
|
if (!isFirstMount.current) {
|
|
223
246
|
const urlQuery = (isNoFilterApplied(filterState) || isOnlyDefaultFilterApplied(filterState)) &&
|
|
224
247
|
!((_a = filterState.filterQueryInfo) === null || _a === void 0 ? void 0 : _a.queryString) &&
|
|
225
248
|
!filterState.sortInfo.column
|
|
226
249
|
? ''
|
|
227
250
|
: 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
|
+
}
|
|
228
262
|
setCurrentQuery(CaseListDispatch, urlQuery);
|
|
263
|
+
lastPushedQueryRef.current = fullQueryKey;
|
|
229
264
|
searchParams[FILTER_URL_QUERY_SEARCH_PARAM] = encodeURIComponent(urlQuery);
|
|
230
|
-
searchParams[FILTER_URL_CURRENT_PAGE_SEARCH_PARAM] = (
|
|
231
|
-
searchParams[FILTER_URL_PAGE_SIZE_SEARCH_PARAM] = (
|
|
265
|
+
searchParams[FILTER_URL_CURRENT_PAGE_SEARCH_PARAM] = (_f = filterState.paginationInfo) === null || _f === void 0 ? void 0 : _f.currentPage.toString();
|
|
266
|
+
searchParams[FILTER_URL_PAGE_SIZE_SEARCH_PARAM] = (_g = filterState.paginationInfo) === null || _g === void 0 ? void 0 : _g.pageSize.toString();
|
|
232
267
|
searchParams[FILTER_URL_QUERY_TYPE] = filterState.filterQueryInfo.type;
|
|
233
268
|
props.routeProps.history.push({
|
|
234
269
|
search: getStringifiedParams(searchParams),
|
|
235
270
|
});
|
|
236
271
|
saveFilterQueryInUserPreferences();
|
|
237
|
-
// so that we don't call get cases every time user switches between basic and advanced without any filters applied
|
|
238
|
-
if (isSearchTypeChanged &&
|
|
239
|
-
!filterState.filterQueryInfo.queryString &&
|
|
240
|
-
isNoFilterApplied(filterState) &&
|
|
241
|
-
filterValuesFromFacetResponse // if this is null, it means it is the first page load so get cases anyway
|
|
242
|
-
)
|
|
243
|
-
return;
|
|
244
272
|
getCases(filterState);
|
|
245
273
|
}
|
|
246
274
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -250,11 +278,13 @@ export function CaseList(props) {
|
|
|
250
278
|
if (bookmarkedAccounts.isFetching ||
|
|
251
279
|
managedAccounts.isFetching ||
|
|
252
280
|
caseGroups.isFetching ||
|
|
253
|
-
caseGroups.data === undefined
|
|
281
|
+
caseGroups.data === undefined ||
|
|
282
|
+
caseRecordTypes.isFetching ||
|
|
283
|
+
isEmpty(caseRecordTypes.data))
|
|
254
284
|
return;
|
|
255
285
|
// when user manually changes url and hit enter, new result is fetched without refreshing the page
|
|
256
286
|
if (!isFirstMount.current) {
|
|
257
|
-
if (queryFromUrl !== currentQuery) {
|
|
287
|
+
if (queryFromUrl !== currentQuery && queryFromUrl !== lastPushedQueryRef.current) {
|
|
258
288
|
const filterStateFromQueryUrl = createFilterStateFromUrlQuery(queryFromUrl, globalMetadataState, pageSizeFromUrl, currentPageFromUrl, searchType);
|
|
259
289
|
updateFilterState(filterDispatch, filterStateFromQueryUrl);
|
|
260
290
|
}
|
|
@@ -283,7 +313,12 @@ export function CaseList(props) {
|
|
|
283
313
|
setRHCDValue(searchParams.rhcd);
|
|
284
314
|
}
|
|
285
315
|
// set filter state based on url or default saved search
|
|
286
|
-
|
|
316
|
+
// Remove when we get OFFSET field from SCT
|
|
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);
|
|
287
322
|
// to set default saved search name
|
|
288
323
|
setDefaultSavedSearchName(defaultSearchName);
|
|
289
324
|
// set default params when they are empty
|
|
@@ -296,14 +331,20 @@ export function CaseList(props) {
|
|
|
296
331
|
updateFilterState(filterDispatch, initFilterState);
|
|
297
332
|
}
|
|
298
333
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
299
|
-
}, [
|
|
300
|
-
|
|
334
|
+
}, [
|
|
335
|
+
managedAccounts,
|
|
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
|
|
301
344
|
useEffect(() => {
|
|
302
|
-
|
|
303
|
-
// also we only use the standalone panel and manually change the panel state on toggle btn click
|
|
304
|
-
isCaseListFilterPanelExanded && isXLScreen && isBasicSearchMode && toggleFilterSection(true);
|
|
345
|
+
isCaseListFilterPanelExanded && isXLScreen && toggleFilterSection(true);
|
|
305
346
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
306
|
-
}, [
|
|
347
|
+
}, []);
|
|
307
348
|
const onConfirmTraditionalSupportAgreement = () => {
|
|
308
349
|
updateCaseListTraditionalSupportAgreed(globalDispatchContext, true);
|
|
309
350
|
};
|
|
@@ -329,12 +370,6 @@ export function CaseList(props) {
|
|
|
329
370
|
return (React.createElement(React.Fragment, null,
|
|
330
371
|
React.createElement(CSSUserModal, { onConfirmTraditionalSupportAgreement: onConfirmTraditionalSupportAgreement, display: !caseListTraditionalSupportAgreed }),
|
|
331
372
|
React.createElement("article", { id: "rh-support-cases", className: "cases-main" },
|
|
332
|
-
isSolrSearchDown && (React.createElement(Alert, { isInline: true, variant: AlertVariant.warning, component: "p", title: React.createElement(Trans, null,
|
|
333
|
-
"Case search is working with limited functionality. Please check",
|
|
334
|
-
' ',
|
|
335
|
-
React.createElement("a", { href: "https://status.redhat.com", target: "_blank", rel: "noreferrer", "data-tracking-id": "caselist-redirect-status-page" }, "status page"),
|
|
336
|
-
' ',
|
|
337
|
-
"for details.") })),
|
|
338
373
|
React.createElement("section", { className: "case-search-top" },
|
|
339
374
|
!isEmpty(RHCDValue) && isRHCDAlertShown && React.createElement("div", { className: "push-bottom" }, displayRHCDAlert()),
|
|
340
375
|
React.createElement("div", { className: "search-wrapper" },
|
|
@@ -342,17 +377,17 @@ export function CaseList(props) {
|
|
|
342
377
|
React.createElement(NewCaseButton, { routeProps: props.routeProps })),
|
|
343
378
|
React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading case search input') } },
|
|
344
379
|
React.createElement(CaseSearch, { defaultSavedSearchName: defaultSavedSearchName }))),
|
|
345
|
-
|
|
346
|
-
React.createElement(CaseListFilterChips,
|
|
380
|
+
React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading filter chips') } },
|
|
381
|
+
React.createElement(CaseListFilterChips, null))),
|
|
347
382
|
React.createElement("section", { className: "case-search-bottom" },
|
|
348
|
-
|
|
383
|
+
React.createElement("aside", { className: `case-search-filters ${((_a = filterSectionRef.current) === null || _a === void 0 ? void 0 : _a.expanded) ? '' : 'collapsed'}` },
|
|
349
384
|
React.createElement("h2", { className: "filter-header pf-v6-u-display-flex" }, ((_b = filterSectionRef.current) === null || _b === void 0 ? void 0 : _b.expanded) ? (React.createElement(React.Fragment, null,
|
|
350
385
|
React.createElement(Button, { isInline: true, className: "pf-v6-u-flex-shrink-0 pf-v6-u-flex-none case-search-filter-text-button", variant: "link", title: t('Collapse filter section'), "data-tracking-id": "collapse-case-list-filter", onClick: onToggleFilterBtnClick, iconPosition: "right", icon: React.createElement(OpenDrawerRightIcon, { className: "mirrored" }) },
|
|
351
386
|
React.createElement(Trans, null, "Filters")))) : (React.createElement(Button, { isInline: true, className: "pf-v6-c-button pf-m-link pf-m-inline pf-v6-u-flex-shrink-0 pf-v6-u-flex-none pf-v6-u-display-flex pf-v6-u-align-items-center pf-v6-u-justify-content-center pf-v6-u-px-lg", variant: "link", title: t('Expand filter section'), "data-tracking-id": "expand-case-list-filter", onClick: onToggleFilterBtnClick, iconPosition: "right", icon: React.createElement(OpenDrawerRightIcon, null) }, isXLScreen ? null : React.createElement(Trans, null, "Filters")))),
|
|
352
387
|
React.createElement("div", { className: "filter-wrapper" },
|
|
353
388
|
React.createElement("pfe-collapse-panel", { id: "case-filters-panel", "pfe-animation": "false", ref: filterSectionRef },
|
|
354
389
|
React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading filters') } },
|
|
355
|
-
React.createElement(CaseListFilters, {
|
|
390
|
+
React.createElement(CaseListFilters, { allCaseTypes: allCaseTypes, allCaseStatuses: allCaseStatuses, allCaseSeverities: allCaseSeverities, allProducts: allProducts }))))),
|
|
356
391
|
React.createElement("section", { className: "case-search-table pf-v6-u-display-flex pf-v6-u-flex-direction-column" },
|
|
357
|
-
React.createElement(CaseListTable, { caseList: caseList, caseGroups: caseGroups.data || [], loggedInUserRights: loggedInUserRights.data, sortInfo: filterState.sortInfo,
|
|
392
|
+
React.createElement(CaseListTable, { caseList: caseList, caseGroups: caseGroups.data || [], loggedInUserRights: loggedInUserRights.data, sortInfo: filterState.sortInfo, isCaseListPageLoading: isFetching, hasError: hasError, hasNextPage: hasNextPage, isLoadingMore: isLoadingMore, loadMoreError: loadMoreError, loadMoreRetryCount: loadMoreRetryCount, onRetryLoadMore: retryLoadMore, sentinelRef: sentinelRef }))))));
|
|
358
393
|
}
|
|
@@ -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,cAclC,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,9 +7,12 @@ 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,
|
|
10
15
|
chipsNameSsoMap: {},
|
|
11
|
-
filterValuesFromFacetResponse: null,
|
|
12
|
-
pivotValues: null,
|
|
13
16
|
currentQuery: undefined,
|
|
14
17
|
};
|
|
15
18
|
const initalDispatchContext = null;
|
|
@@ -6,7 +6,6 @@ declare enum CaseListReducerEnum {
|
|
|
6
6
|
updateFilter = "UPDATE_FILTER",
|
|
7
7
|
updateFilters = "UPDATE_FILTERS",
|
|
8
8
|
updateSort = "UPDATE_SORT",
|
|
9
|
-
updatePagination = "UPDATE_PAGINATION",
|
|
10
9
|
updateFilterQuery = "UPDATE_FILTER_QUERY",
|
|
11
10
|
removeFilter = "REMOVE_FILTER",
|
|
12
11
|
clearFilters = "CLEAR_FILTERS",
|
|
@@ -26,8 +25,12 @@ export interface IFilterQueryInfo {
|
|
|
26
25
|
type: CaseSearchQueryType;
|
|
27
26
|
parsedQuery?: string;
|
|
28
27
|
}
|
|
28
|
+
export interface IVersionFilterValue extends IFieldValue {
|
|
29
|
+
productId?: string;
|
|
30
|
+
}
|
|
29
31
|
export interface IProductFilter extends IFieldValue {
|
|
30
|
-
[SolrKeys.version]:
|
|
32
|
+
[SolrKeys.version]: IVersionFilterValue[];
|
|
33
|
+
productId?: string;
|
|
31
34
|
}
|
|
32
35
|
export interface IFilterInfo {
|
|
33
36
|
[SolrPivotKeys.product_version]: IProductFilter[];
|
|
@@ -57,7 +60,6 @@ type IActionType = IAction<CaseListReducerEnum, ICaseListFilterState>;
|
|
|
57
60
|
export type CaseListFilterDispatchType = (value: IActionType) => void;
|
|
58
61
|
declare const caseListFilterReducer: (pState: ICaseListFilterState, action: any) => ICaseListFilterState;
|
|
59
62
|
declare function updateSort(dispatch: CaseListFilterDispatchType, sortInfo: ISortInfo): void;
|
|
60
|
-
declare function updatePagination(dispatch: CaseListFilterDispatchType, paginationInfo: IPaginationInfo): void;
|
|
61
63
|
declare function updateFilter(dispatch: CaseListFilterDispatchType, { filterKey, values }: {
|
|
62
64
|
filterKey: any;
|
|
63
65
|
values: any;
|
|
@@ -71,5 +73,5 @@ declare const clearFilters: (dispatch: any, clearQueryString?: boolean) => void;
|
|
|
71
73
|
declare function resetFilterToDefaultState(dispatch: any): void;
|
|
72
74
|
declare function updateFilterQuery(dispatch: CaseListFilterDispatchType, filterQueryInfo: IFilterQueryInfo): void;
|
|
73
75
|
declare function updateFilterState(dispatch: CaseListFilterDispatchType, newState: Partial<ICaseListFilterState>): void;
|
|
74
|
-
export { updateSort,
|
|
76
|
+
export { updateSort, updateFilter, updateFilters, updateFilterQuery, removeFilterItem, clearFilters, updateFilterState, caseListFilterReducer, resetFilterToDefaultState, };
|
|
75
77
|
//# 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,
|
|
1
|
+
{"version":3,"file":"CaseListFilterReducer.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListFilterReducer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE9D,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,WAAW,CAYlD,CAAC;AAEF,aAAK,mBAAmB;IACpB,YAAY,kBAAkB;IAC9B,aAAa,mBAAmB;IAChC,UAAU,gBAAgB;IAC1B,iBAAiB,wBAAwB;IACzC,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,qBAAqB,6BAA6B;IAClD,WAAW,iBAAiB;CAC/B;AAED,MAAM,WAAW,SAAS;IACtB,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IAC/C,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IACxB,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IAClD,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3C,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;CAClD;AAED,eAAO,MAAM,YAAY,EAAE,WAe1B,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;CACrC;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC;AAC5C,KAAK,WAAW,GAAG,OAAO,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CAAC;AACtE,MAAM,MAAM,0BAA0B,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAEtE,QAAA,MAAM,qBAAqB,GAAI,QAAQ,oBAAoB,EAAE,WAAM,KAAG,oBAuCrE,CAAC;AAEF,iBAAS,UAAU,CAAC,QAAQ,EAAE,0BAA0B,EAAE,QAAQ,EAAE,SAAS,QAK5E;AAED,iBAAS,YAAY,CAAC,QAAQ,EAAE,0BAA0B,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;;;CAAA,QAKhF;AAED,iBAAS,aAAa,CAAC,QAAQ,EAAE,0BAA0B,EAAE,OAAO,KAAA,QAUnE;AAED,iBAAS,gBAAgB,CAAC,QAAQ,KAAA,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;;;CAAA,QAKvD;AAED,QAAA,MAAM,YAAY,GAAI,aAAQ,EAAE,mBAAkB,OAAe,SAOhE,CAAC;AAEF,iBAAS,yBAAyB,CAAC,QAAQ,KAAA,QAI1C;AAED,iBAAS,iBAAiB,CAAC,QAAQ,EAAE,0BAA0B,EAAE,eAAe,EAAE,gBAAgB,QAKjG;AAED,iBAAS,iBAAiB,CAAC,QAAQ,EAAE,0BAA0B,EAAE,QAAQ,EAAE,OAAO,CAAC,oBAAoB,CAAC,QAKvG;AAED,OAAO,EACH,UAAU,EACV,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,GAC5B,CAAC"}
|
|
@@ -18,7 +18,6 @@ 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";
|
|
22
21
|
CaseListReducerEnum["updateFilterQuery"] = "UPDATE_FILTER_QUERY";
|
|
23
22
|
CaseListReducerEnum["removeFilter"] = "REMOVE_FILTER";
|
|
24
23
|
CaseListReducerEnum["clearFilters"] = "CLEAR_FILTERS";
|
|
@@ -54,10 +53,8 @@ const caseListFilterReducer = (pState, action) => {
|
|
|
54
53
|
return Object.assign(Object.assign({}, pState), { filterInfo: newFilters, paginationInfo: newPaginationInfo });
|
|
55
54
|
}
|
|
56
55
|
case CaseListReducerEnum.updateSort: {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
case CaseListReducerEnum.updatePagination: {
|
|
60
|
-
return Object.assign(Object.assign({}, pState), { paginationInfo: action.payload.paginationInfo });
|
|
56
|
+
const newPaginationInfo = Object.assign(Object.assign({}, pState.paginationInfo), { currentPage: 1 });
|
|
57
|
+
return Object.assign(Object.assign({}, pState), { sortInfo: action.payload.sortInfo, paginationInfo: newPaginationInfo });
|
|
61
58
|
}
|
|
62
59
|
case CaseListReducerEnum.removeFilter: {
|
|
63
60
|
const newValues = pState.filterInfo[action.payload.filterKey].filter((item) => {
|
|
@@ -89,12 +86,6 @@ function updateSort(dispatch, sortInfo) {
|
|
|
89
86
|
payload: { sortInfo },
|
|
90
87
|
});
|
|
91
88
|
}
|
|
92
|
-
function updatePagination(dispatch, paginationInfo) {
|
|
93
|
-
dispatch({
|
|
94
|
-
type: CaseListReducerEnum.updatePagination,
|
|
95
|
-
payload: { paginationInfo },
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
89
|
function updateFilter(dispatch, { filterKey, values }) {
|
|
99
90
|
dispatch({
|
|
100
91
|
type: CaseListReducerEnum.updateFilter,
|
|
@@ -141,4 +132,4 @@ function updateFilterState(dispatch, newState) {
|
|
|
141
132
|
payload: newState,
|
|
142
133
|
});
|
|
143
134
|
}
|
|
144
|
-
export { updateSort,
|
|
135
|
+
export { updateSort, updateFilter, updateFilters, updateFilterQuery, removeFilterItem, clearFilters, updateFilterState, caseListFilterReducer, resetFilterToDefaultState, };
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { IAction, ISolrResponse } from '@rh-support/types/shared';
|
|
2
|
-
import {
|
|
3
|
-
import { ICaseListResponse, IFacetFields, IFacetPivot } from '../../models/caseList';
|
|
4
|
-
import { IPivotValues, IProductVersionPivotMap } from './CaseList';
|
|
2
|
+
import { ICaseListResponse } from '../../models/caseList';
|
|
5
3
|
export interface ICaseListState {
|
|
6
4
|
caseList: ISolrResponse<ICaseListResponse>;
|
|
7
5
|
isFetching: boolean;
|
|
6
|
+
isLoadingMore: boolean;
|
|
7
|
+
hasNextPage: boolean;
|
|
8
|
+
endCursor: string | undefined;
|
|
9
|
+
loadMoreError: boolean;
|
|
10
|
+
loadMoreRetryCount: number;
|
|
8
11
|
chipsNameSsoMap?: IChipsNameSsoMap;
|
|
9
|
-
filterValuesFromFacetResponse: ISolrResponseToFacetFields<IFacetFields>;
|
|
10
|
-
pivotValues: ISolrResponseToPivotFields<IFacetPivot, IProductVersionPivotMap>;
|
|
11
12
|
currentQuery: string;
|
|
12
13
|
}
|
|
13
14
|
export interface IChipsNameSso {
|
|
@@ -21,16 +22,27 @@ export interface IChipsNameSsoMap {
|
|
|
21
22
|
[sso: string]: IChipsNameSso;
|
|
22
23
|
}
|
|
23
24
|
declare enum CaseListReducerEnum {
|
|
24
|
-
updateState = "SET_STATE"
|
|
25
|
+
updateState = "SET_STATE",
|
|
26
|
+
appendDocs = "APPEND_DOCS"
|
|
25
27
|
}
|
|
26
|
-
|
|
28
|
+
interface IAppendDocsPayload {
|
|
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
|
+
};
|
|
27
37
|
export type CaseListDispatchType = (value: IActionType) => void;
|
|
28
38
|
declare const caseListReducer: (state: ICaseListState, action: IActionType) => ICaseListState;
|
|
29
39
|
declare const setCaseList: (dispatch: CaseListDispatchType, caseList: ISolrResponse<ICaseListResponse>) => void;
|
|
30
40
|
declare const setChipsNameSsoMap: (dispatch: CaseListDispatchType, chipsNameSsoMap: IChipsNameSsoMap) => void;
|
|
31
41
|
declare const setIsFetching: (dispatch: CaseListDispatchType, isFetching: boolean) => void;
|
|
32
|
-
declare const setFilterValuesFromFacetResponse: (dispatch: CaseListDispatchType, filterValuesFromFacetResponse: ISolrResponseToFacetFields<IFacetFields>) => void;
|
|
33
|
-
declare const setPivotValues: (dispatch: CaseListDispatchType, pivotValues: IPivotValues) => void;
|
|
34
42
|
declare const setCurrentQuery: (dispatch: CaseListDispatchType, currentQuery: string) => void;
|
|
35
|
-
|
|
43
|
+
declare const setIsLoadingMore: (dispatch: CaseListDispatchType, isLoadingMore: boolean) => void;
|
|
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, };
|
|
36
48
|
//# sourceMappingURL=CaseListReducer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseListReducer.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListReducer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"CaseListReducer.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListReducer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAC3C,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;CAChC;AAED,aAAK,mBAAmB;IACpB,WAAW,cAAc;IACzB,UAAU,gBAAgB;CAC7B;AAED,UAAU,kBAAkB;IACxB,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,KAAK,WAAW,GACV,OAAO,CAAC,mBAAmB,EAAE,cAAc,CAAC,GAC5C;IAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC;IAAC,OAAO,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAC5E,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAEhE,QAAA,MAAM,eAAe,GAAI,OAAO,cAAc,EAAE,QAAQ,WAAW,KAAG,cAmBrE,CAAC;AAEF,QAAA,MAAM,WAAW,GAAI,UAAU,oBAAoB,EAAE,UAAU,aAAa,CAAC,iBAAiB,CAAC,SAK9F,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,UAAU,oBAAoB,EAAE,iBAAiB,gBAAgB,SAK5F,CAAC;AAEF,QAAA,MAAM,aAAa,GAAI,UAAU,oBAAoB,EAAE,YAAY,OAAO,SAKzE,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,UAAU,oBAAoB,EAAE,cAAc,MAAM,SAK5E,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAAI,UAAU,oBAAoB,EAAE,eAAe,OAAO,SAK/E,CAAC;AAEF,QAAA,MAAM,cAAc,GAChB,UAAU,oBAAoB,EAC9B,MAAM,iBAAiB,EAAE,EACzB,aAAa,OAAO,EACpB,WAAW,MAAM,GAAG,SAAS,SAMhC,CAAC;AAEF,QAAA,MAAM,aAAa,GAAI,UAAU,oBAAoB,EAAE,aAAa,OAAO,EAAE,WAAW,MAAM,GAAG,SAAS,SAKzG,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAAI,UAAU,oBAAoB,EAAE,eAAe,OAAO,EAAE,oBAAoB,MAAM,SAK3G,CAAC;AAEF,OAAO,EACH,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,gBAAgB,GACnB,CAAC"}
|