@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.
Files changed (81) hide show
  1. package/lib/esm/components/case-list/CaseList.d.ts +7 -0
  2. package/lib/esm/components/case-list/CaseList.d.ts.map +1 -1
  3. package/lib/esm/components/case-list/CaseList.js +108 -143
  4. package/lib/esm/components/case-list/CaseListContext.d.ts.map +1 -1
  5. package/lib/esm/components/case-list/CaseListContext.js +2 -5
  6. package/lib/esm/components/case-list/CaseListFilterReducer.d.ts +4 -6
  7. package/lib/esm/components/case-list/CaseListFilterReducer.d.ts.map +1 -1
  8. package/lib/esm/components/case-list/CaseListFilterReducer.js +12 -3
  9. package/lib/esm/components/case-list/CaseListReducer.d.ts +10 -22
  10. package/lib/esm/components/case-list/CaseListReducer.d.ts.map +1 -1
  11. package/lib/esm/components/case-list/CaseListReducer.js +7 -25
  12. package/lib/esm/components/case-list/case-list-filters/AccountsFilter.d.ts.map +1 -1
  13. package/lib/esm/components/case-list/case-list-filters/AccountsFilter.js +11 -18
  14. package/lib/esm/components/case-list/case-list-filters/AdditionalFilters.d.ts.map +1 -1
  15. package/lib/esm/components/case-list/case-list-filters/AdditionalFilters.js +5 -4
  16. package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.d.ts +7 -1
  17. package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.d.ts.map +1 -1
  18. package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.js +15 -7
  19. package/lib/esm/components/case-list/case-list-filters/CaseListFilters.d.ts +5 -2
  20. package/lib/esm/components/case-list/case-list-filters/CaseListFilters.d.ts.map +1 -1
  21. package/lib/esm/components/case-list/case-list-filters/CaseListFilters.js +14 -14
  22. package/lib/esm/components/case-list/case-list-filters/ProductFilterChip.d.ts +3 -1
  23. package/lib/esm/components/case-list/case-list-filters/ProductFilterChip.d.ts.map +1 -1
  24. package/lib/esm/components/case-list/case-list-filters/ProductFilterChip.js +2 -2
  25. package/lib/esm/components/case-list/case-list-filters/ProductsFilter.d.ts +4 -5
  26. package/lib/esm/components/case-list/case-list-filters/ProductsFilter.d.ts.map +1 -1
  27. package/lib/esm/components/case-list/case-list-filters/ProductsFilter.js +54 -15
  28. package/lib/esm/components/case-list/case-list-filters/SeverityFilter.d.ts +3 -0
  29. package/lib/esm/components/case-list/case-list-filters/SeverityFilter.d.ts.map +1 -1
  30. package/lib/esm/components/case-list/case-list-filters/SeverityFilter.js +44 -18
  31. package/lib/esm/components/case-list/case-list-filters/StatusFilter.d.ts +3 -0
  32. package/lib/esm/components/case-list/case-list-filters/StatusFilter.d.ts.map +1 -1
  33. package/lib/esm/components/case-list/case-list-filters/StatusFilter.js +44 -14
  34. package/lib/esm/components/case-list/case-list-filters/VersionsFilter.d.ts +3 -1
  35. package/lib/esm/components/case-list/case-list-filters/VersionsFilter.d.ts.map +1 -1
  36. package/lib/esm/components/case-list/case-list-filters/VersionsFilter.js +32 -61
  37. package/lib/esm/components/case-list/case-list-table/CaseListTable.d.ts +3 -7
  38. package/lib/esm/components/case-list/case-list-table/CaseListTable.d.ts.map +1 -1
  39. package/lib/esm/components/case-list/case-list-table/CaseListTable.js +58 -69
  40. package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.d.ts +5 -0
  41. package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.d.ts.map +1 -1
  42. package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.js +68 -38
  43. package/lib/esm/components/case-list/case-list-table/ExportCaseListCSV.d.ts.map +1 -1
  44. package/lib/esm/components/case-list/case-list-table/ExportCaseListCSV.js +15 -5
  45. package/lib/esm/components/case-list/case-list-table/SeverityLabel.js +1 -1
  46. package/lib/esm/components/case-list/case-list-table/TableActionsDropdown.d.ts.map +1 -1
  47. package/lib/esm/components/case-list/case-list-table/TableActionsDropdown.js +3 -2
  48. package/lib/esm/components/case-list/case-search/AdvanceSearch.d.ts.map +1 -1
  49. package/lib/esm/components/case-list/case-search/AdvanceSearch.js +1 -1
  50. package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.d.ts.map +1 -1
  51. package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.js +0 -1
  52. package/lib/esm/components/case-list/case-search/CaseSearch.d.ts.map +1 -1
  53. package/lib/esm/components/case-list/case-search/CaseSearch.js +6 -6
  54. package/lib/esm/components/case-list/case-search/useAdvanceSearchParser.d.ts.map +1 -1
  55. package/lib/esm/components/case-list/case-search/useAdvanceSearchParser.js +1 -2
  56. package/lib/esm/css/caseList.css +22 -99
  57. package/lib/esm/enums/case.d.ts +1 -2
  58. package/lib/esm/enums/case.d.ts.map +1 -1
  59. package/lib/esm/enums/case.js +1 -14
  60. package/lib/esm/hooks/useExportCaseListCSV.d.ts.map +1 -1
  61. package/lib/esm/hooks/useExportCaseListCSV.js +9 -1
  62. package/lib/esm/test-utils/mockData.js +1 -1
  63. package/lib/esm/utils/caseSearchUtils.d.ts.map +1 -1
  64. package/lib/esm/utils/caseSearchUtils.js +6 -28
  65. package/lib/esm/utils/constants.d.ts +1 -2
  66. package/lib/esm/utils/constants.d.ts.map +1 -1
  67. package/lib/esm/utils/constants.js +3 -14
  68. package/lib/esm/utils/mockSolrResponse.js +1 -1
  69. package/package.json +6 -7
  70. package/lib/esm/utils/caseListGraphQLUtils.d.ts +0 -28
  71. package/lib/esm/utils/caseListGraphQLUtils.d.ts.map +0 -1
  72. package/lib/esm/utils/caseListGraphQLUtils.js +0 -244
  73. package/lib/esm/utils/caseListMapper.d.ts +0 -6
  74. package/lib/esm/utils/caseListMapper.d.ts.map +0 -1
  75. package/lib/esm/utils/caseListMapper.js +0 -36
  76. package/lib/esm/utils/caseListVariablesBuilder.d.ts +0 -14
  77. package/lib/esm/utils/caseListVariablesBuilder.d.ts.map +0 -1
  78. package/lib/esm/utils/caseListVariablesBuilder.js +0 -193
  79. package/lib/esm/utils/statusUtils.d.ts +0 -3
  80. package/lib/esm/utils/statusUtils.d.ts.map +0 -1
  81. 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;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,qBAygBrC"}
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, 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';
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 { clearPageCursors, getCaseListFromGraphQL, loadMoreCases } from '../../utils/caseListGraphQLUtils';
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 { appendCaseList, setCaseList, setCurrentQuery, setCursorInfo, setIsFetching, setIsLoadingMore, setLoadMoreError, } from './CaseListReducer';
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, isFetching, isLoadingMore, hasNextPage, endCursor, currentQuery, loadMoreError, loadMoreRetryCount, } = useCaseListStateContext();
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, caseRecordTypes, caseListTraditionalSupportAgreed, }, } = useContext(GlobalMetadataStateContext);
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
- var _a;
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
- const result = yield getCaseListFromGraphQL(currentFilterState, apolloClient, undefined, controller.signal);
96
- if (controller.signal.aborted) {
97
- return;
81
+ if (abortControllerRef.current !== undefined) {
82
+ // Cancel the previous request
83
+ abortControllerRef.current.abort();
98
84
  }
99
- setCaseList(CaseListDispatch, result.caseListResponse.response);
100
- setCursorInfo(CaseListDispatch, result.hasNextPage, result.endCursor);
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
- 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;
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 getCaseListFromGraphQL(filterState, apolloClient);
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
- 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
- }
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, apolloClient);
189
+ fetchCaseSeverities(dispatchToGlobalMetadataReducer, loggedInUsersAccount.data.secureSupport);
204
190
  }
205
191
  if (haventLoadedMetadata(allCaseStatuses)) {
206
- fetchAllStatuses(dispatchToGlobalMetadataReducer, apolloClient);
192
+ fetchAllStatuses(dispatchToGlobalMetadataReducer, loggedInUsersAccount.data.secureSupport);
207
193
  }
208
194
  if (haventLoadedProductsMetadata(allProducts)) {
209
- fetchProducts(dispatchToGlobalMetadataReducer, apolloClient);
195
+ fetchProducts(dispatchToGlobalMetadataReducer);
210
196
  }
211
- });
212
- loadMetadata();
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
- apolloClient,
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, _d, _e, _f, _g;
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] = (_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();
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 && queryFromUrl !== lastPushedQueryRef.current) {
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
- // 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);
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
- 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
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
- isCaseListFilterPanelExanded && isXLScreen && toggleFilterSection(true);
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, null))),
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, hasNextPage: hasNextPage, isLoadingMore: isLoadingMore, loadMoreError: loadMoreError, loadMoreRetryCount: loadMoreRetryCount, onRetryLoadMore: retryLoadMore, sentinelRef: sentinelRef }))))));
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,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"}
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]: IVersionFilterValue[];
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":"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"}
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
- const newPaginationInfo = Object.assign(Object.assign({}, pState.paginationInfo), { currentPage: 1 });
57
- return Object.assign(Object.assign({}, pState), { sortInfo: action.payload.sortInfo, paginationInfo: newPaginationInfo });
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 { ICaseListResponse } from '../../models/caseList';
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
- 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
- };
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
- 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, };
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;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"}
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"}