@rh-support/cases 0.2.34 → 0.2.38

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.
@@ -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;AA4BlC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAKH,0BAA0B,EAI7B,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EAAE,mBAAmB,EAAe,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,IAAI,CAAC;AAK1C,OAAO,EAAgB,WAAW,EAA2B,MAAM,uBAAuB,CAAC;AA4B3F,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,oBAAY,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,eAycrC"}
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;AA4BlC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAKH,0BAA0B,EAI7B,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EAAE,mBAAmB,EAAe,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,IAAI,CAAC;AAM1C,OAAO,EAAgB,WAAW,EAA2B,MAAM,uBAAuB,CAAC;AA2B3F,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,oBAAY,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,eAubrC"}
@@ -23,8 +23,9 @@ import React, { useContext, useEffect, useRef, useState } from 'react';
23
23
  import { Trans, useTranslation } from 'react-i18next';
24
24
  import { useLocation } from 'react-router';
25
25
  import { CaseSearchQueryType } from '../../enums/caseSearch';
26
- import { SolrKeys, SolrPivotKeys } from '../../enums/filters';
26
+ import { SolrPivotKeys } from '../../enums/filters';
27
27
  import { PageTitle } from '../../enums/pageTitle';
28
+ import { useFilterStateOnLoad } from '../../hooks/useFilterStateOnLoad';
28
29
  import { useMoveCacheToUserPref } from '../../hooks/useMoveCacheToUserPref';
29
30
  import { getCaseList } from '../../utils/caseListUtils';
30
31
  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';
@@ -63,6 +64,7 @@ export function CaseList(props) {
63
64
  const forceUpdate = useForceUpdate();
64
65
  const isCaseListFilterPanelExanded = userPreferences.data.isCaseListFilterPanelExanded;
65
66
  const useMoveCache = useMoveCacheToUserPref();
67
+ const useFilterStateInit = useFilterStateOnLoad();
66
68
  const isBasicSearchMode = filterState.filterQueryInfo.type === CaseSearchQueryType.BASIC;
67
69
  const prevSearchType = usePrevious(filterState.filterQueryInfo.type);
68
70
  let isSearchTypeChanged = filterState.filterQueryInfo.type !== prevSearchType;
@@ -255,6 +257,8 @@ export function CaseList(props) {
255
257
  /*** user comes to this point on first time app load landing on case list ***/
256
258
  // move saved user data in localstorage to user preferences db - needs to be removed after a while
257
259
  useMoveCache.save();
260
+ // set filter state based on url or default saved search
261
+ useFilterStateInit.set(queryFromUrl, pageSizeFromUrl, currentPageFromUrl, searchType);
258
262
  // set default params when they are empty
259
263
  if (!queryFromUrl) {
260
264
  searchParams[FILTER_URL_QUERY_SEARCH_PARAM] = ' orderBy lastModifiedDate desc';
@@ -262,19 +266,8 @@ export function CaseList(props) {
262
266
  props.routeProps.history.replace({
263
267
  search: getStringifiedParams(searchParams),
264
268
  });
265
- // set state from url
266
- let defaultFilterState = filterState;
267
- const filterStateFromQuery = createFilterStateFromUrlQuery(queryFromUrl, globalMetadataState, pageSizeFromUrl, currentPageFromUrl, searchType);
268
- defaultFilterState = filterStateFromQuery ? filterStateFromQuery : defaultFilterState;
269
- const defaultGroup = (caseGroups.data || []).find((group) => group.isDefault);
270
- if (defaultGroup) {
271
- const updatedFilterInfo = Object.assign(Object.assign({}, filterState.filterInfo), { [SolrKeys.group]: [{ key: defaultGroup.groupNum, value: defaultGroup.name }] });
272
- defaultFilterState = Object.assign(Object.assign({}, filterState), { filterInfo: updatedFilterInfo });
273
- }
274
269
  setCurrentQuery(CaseListDispatch, queryFromUrl);
275
270
  isFirstMount.current = false;
276
- // we only update the state without api call as we fetch result in another useEffect that observes the state
277
- updateFilterState(filterDispatch, defaultFilterState);
278
271
  }
279
272
  // eslint-disable-next-line react-hooks/exhaustive-deps
280
273
  }, [
@@ -1,5 +1,6 @@
1
1
  import { SolrKeys, SolrPivotKeys } from '../../enums/filters';
2
2
  import { ICaseListFilterState, IFilterInfo } from './CaseListFilterReducer';
3
+ declare function isArrayHashMapEmpty(hashMap?: {}): boolean;
3
4
  declare const isNoFilterApplied: (filterState: ICaseListFilterState) => boolean;
4
5
  declare const isOnlyDefaultFilterApplied: (filterState: ICaseListFilterState) => boolean;
5
6
  declare const isStatusFilterWithSFDCSupportedValues: ({ case_status }: Partial<IFilterInfo>) => boolean;
@@ -10,5 +11,5 @@ declare const eligibleSFDCFiltersWithLengthOne: (SolrKeys | SolrPivotKeys)[];
10
11
  declare const eligibleSFDCFiltersMultipleValues: SolrKeys[];
11
12
  declare const visibleFilterChipsWhenSolrDownSfdcUp: (SolrKeys | SolrPivotKeys)[];
12
13
  declare function canDoSfdcSearch(filterState: ICaseListFilterState): boolean;
13
- export { isNoFilterApplied, isOnlyDefaultFilterApplied, isOnlyGroupFilterApplied, isSearchSupportedBySFDC, isOnlyStatusFilter, isStatusFilterWithSFDCSupportedValues, canDoSfdcSearch, visibleFilterChipsWhenSolrDownSfdcUp, eligibleSFDCFiltersWithLengthOne, eligibleSFDCFiltersMultipleValues, };
14
+ export { isNoFilterApplied, isOnlyDefaultFilterApplied, isOnlyGroupFilterApplied, isSearchSupportedBySFDC, isOnlyStatusFilter, isStatusFilterWithSFDCSupportedValues, canDoSfdcSearch, visibleFilterChipsWhenSolrDownSfdcUp, eligibleSFDCFiltersWithLengthOne, eligibleSFDCFiltersMultipleValues, isArrayHashMapEmpty, };
14
15
  //# sourceMappingURL=CaseListFilterHelpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CaseListFilterHelpers.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListFilterHelpers.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAgB,oBAAoB,EAAE,WAAW,EAAqB,MAAM,yBAAyB,CAAC;AAe7G,QAAA,MAAM,iBAAiB,gBAAiB,oBAAoB,YAE3D,CAAC;AAEF,QAAA,MAAM,0BAA0B,gBAAiB,oBAAoB,YAEpE,CAAC;AAEF,QAAA,MAAM,qCAAqC,oBAA0B,QAAQ,WAAW,CAAC,YAGxF,CAAC;AAaF,QAAA,MAAM,wBAAwB,eAAgB,QAAQ,WAAW,CAAC,YAMjE,CAAC;AAEF,QAAA,MAAM,kBAAkB,eAAgB,QAAQ,WAAW,CAAC,YAG3D,CAAC;AAEF,QAAA,MAAM,uBAAuB,gBAAiB,oBAAoB,YAOjE,CAAC;AAEF,QAAA,MAAM,gCAAgC,8BAAsE,CAAC;AAC7G,QAAA,MAAM,iCAAiC,YAAmB,CAAC;AAE3D,QAAA,MAAM,oCAAoC,8BAGzC,CAAC;AAIF,iBAAS,eAAe,CAAC,WAAW,EAAE,oBAAoB,WAiBzD;AAED,OAAO,EACH,iBAAiB,EACjB,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAClB,qCAAqC,EACrC,eAAe,EACf,oCAAoC,EACpC,gCAAgC,EAChC,iCAAiC,GACpC,CAAC"}
1
+ {"version":3,"file":"CaseListFilterHelpers.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseListFilterHelpers.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAgB,oBAAoB,EAAE,WAAW,EAAqB,MAAM,yBAAyB,CAAC;AAW7G,iBAAS,mBAAmB,CAAC,OAAO,KAAK,WAExC;AAED,QAAA,MAAM,iBAAiB,gBAAiB,oBAAoB,YAE3D,CAAC;AAEF,QAAA,MAAM,0BAA0B,gBAAiB,oBAAoB,YAEpE,CAAC;AAEF,QAAA,MAAM,qCAAqC,oBAA0B,QAAQ,WAAW,CAAC,YAGxF,CAAC;AAaF,QAAA,MAAM,wBAAwB,eAAgB,QAAQ,WAAW,CAAC,YAMjE,CAAC;AAEF,QAAA,MAAM,kBAAkB,eAAgB,QAAQ,WAAW,CAAC,YAG3D,CAAC;AAEF,QAAA,MAAM,uBAAuB,gBAAiB,oBAAoB,YAOjE,CAAC;AAEF,QAAA,MAAM,gCAAgC,8BAAsE,CAAC;AAC7G,QAAA,MAAM,iCAAiC,YAAmB,CAAC;AAE3D,QAAA,MAAM,oCAAoC,8BAGzC,CAAC;AAIF,iBAAS,eAAe,CAAC,WAAW,EAAE,oBAAoB,WAiBzD;AAED,OAAO,EACH,iBAAiB,EACjB,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAClB,qCAAqC,EACrC,eAAe,EACf,oCAAoC,EACpC,gCAAgC,EAChC,iCAAiC,EACjC,mBAAmB,GACtB,CAAC"}
@@ -86,4 +86,4 @@ function canDoSfdcSearch(filterState) {
86
86
  }
87
87
  });
88
88
  }
89
- export { isNoFilterApplied, isOnlyDefaultFilterApplied, isOnlyGroupFilterApplied, isSearchSupportedBySFDC, isOnlyStatusFilter, isStatusFilterWithSFDCSupportedValues, canDoSfdcSearch, visibleFilterChipsWhenSolrDownSfdcUp, eligibleSFDCFiltersWithLengthOne, eligibleSFDCFiltersMultipleValues, };
89
+ export { isNoFilterApplied, isOnlyDefaultFilterApplied, isOnlyGroupFilterApplied, isSearchSupportedBySFDC, isOnlyStatusFilter, isStatusFilterWithSFDCSupportedValues, canDoSfdcSearch, visibleFilterChipsWhenSolrDownSfdcUp, eligibleSFDCFiltersWithLengthOne, eligibleSFDCFiltersMultipleValues, isArrayHashMapEmpty, };
@@ -1 +1 @@
1
- {"version":3,"file":"BookmarkedSearchesSelector.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-search/BookmarkedSearchesSelector.tsx"],"names":[],"mappings":"AAkBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAOhE,UAAU,MAAM;IACZ,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,mBAAmB,CAAC;CAC1C;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,eA8JvD"}
1
+ {"version":3,"file":"BookmarkedSearchesSelector.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-search/BookmarkedSearchesSelector.tsx"],"names":[],"mappings":"AAuBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAOhE,UAAU,MAAM;IACZ,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,mBAAmB,CAAC;CAC1C;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,eAyMvD"}
@@ -1,14 +1,7 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { Button, Dropdown, DropdownItem, DropdownSeparator, DropdownToggle, DropdownToggleAction, } from '@patternfly/react-core';
11
- import { ToastNotification } from '@rh-support/components';
1
+ import { Button, ButtonVariant, Dropdown, DropdownItem, DropdownSeparator, DropdownToggle, DropdownToggleAction, Split, SplitItem, } from '@patternfly/react-core';
2
+ import PencilAltIcon from '@patternfly/react-icons/dist/js/icons/pencil-alt-icon';
3
+ import StarIcon from '@patternfly/react-icons/dist/js/icons/star-icon';
4
+ import { ConfirmationServiceProvider } from '@rh-support/components';
12
5
  import { GlobalMetadataStateContext, UserPreferencesKeys } from '@rh-support/react-context';
13
6
  import find from 'lodash/find';
14
7
  import flatMap from 'lodash/flatMap';
@@ -32,6 +25,8 @@ export function BookmarkedSearchesSelector(props) {
32
25
  const [isSaveSearchModalOpen, setIsSaveSearchModalOpen] = useState(false);
33
26
  const [isMenuOpen, toggleMenu] = useState(false);
34
27
  const isUpdatingFilters = useRef(false);
28
+ const [isAddingBookmarkSearch, setIsAddingBookmarkSearch] = useState(false);
29
+ const [selectedSearchNameToEdit, setSelectedSearchNameToEdit] = useState('');
35
30
  useEffect(() => {
36
31
  // get saved searches from user preferences
37
32
  const savedFiltrerKey = UserPreferencesKeys.caseSavedSearchFilters;
@@ -77,14 +72,36 @@ export function BookmarkedSearchesSelector(props) {
77
72
  doToggle && toggleMenu(!isMenuOpen);
78
73
  isUpdatingFilters.current = false;
79
74
  };
80
- const handleModalToggle = () => {
75
+ const modalToggle = () => {
81
76
  setIsSaveSearchModalOpen((isOpen) => !isOpen);
77
+ toggleMenu(false);
78
+ };
79
+ const onEditSavedSearchClick = (searchName) => (e) => {
80
+ e.stopPropagation();
81
+ setSelectedSearchNameToEdit(searchName);
82
+ setIsAddingBookmarkSearch(false);
83
+ modalToggle();
82
84
  };
83
- const onCaseSearchSaveSuccess = () => __awaiter(this, void 0, void 0, function* () {
84
- setIsSaveSearchModalOpen(false);
85
- ToastNotification.addSuccessMessage(t('Saved for later'));
85
+ const onSaveForLaterClick = () => {
86
+ setSelectedSearchNameToEdit('');
87
+ setIsAddingBookmarkSearch(true);
88
+ modalToggle();
89
+ };
90
+ const renderSavedSearchItems = Object.keys(bookmarkedSearches)
91
+ .sort()
92
+ .map((bookmarkedSearch) => {
93
+ var _a;
94
+ return (React.createElement("li", { className: "pf-c-dropdown__menu-item pf-u-p-xs" },
95
+ React.createElement(Split, { key: `split-parent-${bookmarkedSearch}` },
96
+ React.createElement(SplitItem, { isFilled: true, key: `split-left-${bookmarkedSearch}` },
97
+ React.createElement(Button, { variant: ButtonVariant.plain, isBlock: true, className: "pf-u-text-align-left", onClick: onBookmarkSelectorChange(bookmarkedSearch, bookmarkedSearches[bookmarkedSearch], true) },
98
+ ((_a = bookmarkedSearches[bookmarkedSearch]) === null || _a === void 0 ? void 0 : _a.defaultChecked) && (React.createElement(StarIcon, { title: "{t('Default search')}", color: "#F0AB00", className: "pf-u-mr-sm", "aria-label": t('Default search') })),
99
+ ' ',
100
+ bookmarkedSearch)),
101
+ React.createElement(SplitItem, { key: `split-right-${bookmarkedSearch}` },
102
+ ' ',
103
+ React.createElement(Button, { "aria-label": t('Edit or delete saved search'), className: "pf-u-pr-sm", onClick: onEditSavedSearchClick(bookmarkedSearch), variant: ButtonVariant.link, icon: React.createElement(PencilAltIcon, null) })))));
86
104
  });
87
- const renderSavedSearchItems = Object.keys(bookmarkedSearches).map((bookmarkedSearch) => (React.createElement(DropdownItem, { key: bookmarkedSearch, component: "button", onClick: onBookmarkSelectorChange(bookmarkedSearch, bookmarkedSearches[bookmarkedSearch], true) }, bookmarkedSearch)));
88
105
  const renderMostRecentSearch = [
89
106
  React.createElement(DropdownItem, { key: "most-recent-search", component: "button", onClick: onBookmarkSelectorChange('', mostRecentSearch, true) },
90
107
  React.createElement(Trans, null, "Restore latest")),
@@ -97,11 +114,12 @@ export function BookmarkedSearchesSelector(props) {
97
114
  return (React.createElement(React.Fragment, null,
98
115
  React.createElement("div", { className: "bookmark-search-dropdown-wrapper" },
99
116
  React.createElement(Dropdown, { className: "bookmark-search-dropdown", isOpen: isMenuOpen, dropdownItems: renderListItems, toggle: React.createElement(DropdownToggle, { splitButtonItems: [
100
- React.createElement(DropdownToggleAction, { onClick: handleModalToggle, key: "action", isDisabled: !!selectedSearch ||
117
+ React.createElement(DropdownToggleAction, { onClick: onSaveForLaterClick, key: "action", isDisabled: !!selectedSearch ||
101
118
  (!props.currentCaseSearchString &&
102
119
  (isOnlyDefaultFilterApplied(filterState) || isNoFilterApplied(filterState))), "data-tracking-id": "case-list-bookmark-search-trigger" }, selectedSearch ? selectedSearch : React.createElement(Trans, null, "Save for later")),
103
120
  ], splitButtonVariant: "action", onToggle: onMenuToggle, "aria-label": t(`${isMenuOpen ? 'Close' : 'Open'} bookmarked searches selector'`), isDisabled: !bookmarkedSearches }), disabled: hydraUserPreferences.isFetching || hydraUserPreferences.isError }),
104
121
  flatMap(filterInfo).length === 0 && (React.createElement(Button, { variant: "link", onClick: onBookmarkSelectorChange('', mostRecentSearch, false), "data-tracking-id": "case-most-recent-search-button", className: "most-recent-search-button" },
105
122
  React.createElement(Trans, null, "Restore most recent filters")))),
106
- isSaveSearchModalOpen && (React.createElement(SaveCaseSearchModal, { currentFilterQuery: { type: props.currentSearchType, queryString: props.currentCaseSearchString }, isModalOpen: isSaveSearchModalOpen, handleModalToggle: handleModalToggle, onCaseSearchSaveSuccess: onCaseSearchSaveSuccess }))));
123
+ React.createElement(ConfirmationServiceProvider, null,
124
+ React.createElement(SaveCaseSearchModal, { isModalOpen: isSaveSearchModalOpen, modalToggle: modalToggle, isAdding: isAddingBookmarkSearch, selectedSearchNameToEdit: selectedSearchNameToEdit }))));
107
125
  }
@@ -95,5 +95,5 @@ export function CaseSearch() {
95
95
  return (React.createElement(React.Fragment, null,
96
96
  React.createElement("form", { onSubmit: handleSubmit, onKeyDown: handleSearchInputKeyDown },
97
97
  React.createElement("div", { className: "form-group case-search-form-group" }, CaseSearchQueryType.BASIC === searchType ? renderBasicSearch() : renderAdvanceSearch())),
98
- React.createElement(BookmarkedSearchesSelector, { currentCaseSearchString: searchVal, currentSearchType: searchType })));
98
+ React.createElement(BookmarkedSearchesSelector, { currentCaseSearchString: searchVal.trim(), currentSearchType: searchType })));
99
99
  }
@@ -1,10 +1,9 @@
1
- import { IFilterQueryInfo } from '../CaseListFilterReducer';
2
1
  interface IProps {
3
2
  isModalOpen: boolean;
4
- handleModalToggle: () => void;
5
- onCaseSearchSaveSuccess?: (searchName: string, filterQueryInfo: IFilterQueryInfo) => void;
6
- currentFilterQuery: IFilterQueryInfo;
3
+ modalToggle: () => void;
4
+ isAdding: boolean;
5
+ selectedSearchNameToEdit: string;
7
6
  }
8
- export declare function SaveCaseSearchModal({ isModalOpen, handleModalToggle, onCaseSearchSaveSuccess, currentFilterQuery, }: IProps): JSX.Element;
7
+ export declare function SaveCaseSearchModal({ isModalOpen, modalToggle, isAdding, selectedSearchNameToEdit }: IProps): JSX.Element;
9
8
  export {};
10
9
  //# sourceMappingURL=SaveCaseSearchModal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SaveCaseSearchModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-search/SaveCaseSearchModal.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,UAAU,MAAM;IACZ,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,uBAAuB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC1F,kBAAkB,EAAE,gBAAgB,CAAC;CACxC;AACD,wBAAgB,mBAAmB,CAAC,EAChC,WAAW,EACX,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,GACrB,EAAE,MAAM,eAgIR"}
1
+ {"version":3,"file":"SaveCaseSearchModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-search/SaveCaseSearchModal.tsx"],"names":[],"mappings":"AA2BA,UAAU,MAAM;IACZ,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,wBAAwB,EAAE,MAAM,CAAC;CACpC;AAED,wBAAgB,mBAAmB,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,wBAAwB,EAAE,EAAE,MAAM,eAuP3G"}
@@ -7,30 +7,28 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import { Button, Form, FormGroup, Modal, ModalVariant, TextInput } from '@patternfly/react-core';
10
+ import { Button, ButtonVariant, Checkbox, Form, FormGroup, Modal, ModalVariant, TextArea, TextInput, } from '@patternfly/react-core';
11
+ import { ToastNotification, useConfirmation } from '@rh-support/components';
11
12
  import { GlobalMetadataDispatchContext, GlobalMetadataStateContext, updateUserPreferences, UserPreferencesKeys, } from '@rh-support/react-context';
12
13
  import find from 'lodash/find';
13
- import React, { useContext, useState } from 'react';
14
+ import findKey from 'lodash/findKey';
15
+ import isEmpty from 'lodash/isEmpty';
16
+ import React, { useContext, useEffect, useState } from 'react';
14
17
  import { Trans, useTranslation } from 'react-i18next';
15
18
  import { createUserFriendlyQueryFromFilterState } from '../../../utils/caseSearchUtils';
16
19
  import { CaseListFilterStateContext } from '../CaseListFilterContext';
17
- export function SaveCaseSearchModal({ isModalOpen, handleModalToggle, onCaseSearchSaveSuccess, currentFilterQuery, }) {
20
+ export function SaveCaseSearchModal({ isModalOpen, modalToggle, isAdding, selectedSearchNameToEdit }) {
18
21
  const { t } = useTranslation();
19
- const isFilterQueryChangeDisabled = true;
20
- const [savedSearchName, setSavedSearchName] = useState('');
22
+ const [localSavedSearchName, setLocalSavedSearchName] = useState('');
23
+ const [localDefaultChecked, setLocalDefaultChecked] = useState(false);
24
+ const [isUpdating, setIsUpdating] = useState(false);
25
+ const confirmRemove = useConfirmation();
21
26
  const [isDuplicateNameError, setIsDuplicateNameError] = useState(false);
22
27
  const { globalMetadataState: { loggedInUserRights, hydraUserPreferences }, } = useContext(GlobalMetadataStateContext);
23
28
  const dispatchToGlobalMetadataReducer = useContext(GlobalMetadataDispatchContext);
24
- const { filterInfo, sortInfo } = useContext(CaseListFilterStateContext);
25
- const getFilterQuery = () => {
26
- return createUserFriendlyQueryFromFilterState(filterInfo, currentFilterQuery.queryString);
27
- };
28
- const [filterQuery, setFilterQuery] = useState(getFilterQuery());
29
- const handleFilterQueryChange = (value) => {
30
- !isFilterQueryChangeDisabled && setFilterQuery(value);
31
- };
29
+ const { filterInfo, sortInfo, filterQueryInfo } = useContext(CaseListFilterStateContext);
32
30
  const handleSaveSearchNameChange = (value) => {
33
- setSavedSearchName(value);
31
+ setLocalSavedSearchName(value);
34
32
  if (previousBookmarkedSearchesObj[value]) {
35
33
  setIsDuplicateNameError(true);
36
34
  }
@@ -43,25 +41,111 @@ export function SaveCaseSearchModal({ isModalOpen, handleModalToggle, onCaseSear
43
41
  const previousBookmarkedSearchesObj = previousBookmarkedSearches
44
42
  ? JSON.parse(previousBookmarkedSearches.value)
45
43
  : {};
46
- const onSearchSave = () => __awaiter(this, void 0, void 0, function* () {
47
- previousBookmarkedSearchesObj[savedSearchName] = Object.assign({ filterState: filterInfo, sortState: sortInfo }, currentFilterQuery);
44
+ const preferencesApiCall = (BookmarkedSearchesObj) => __awaiter(this, void 0, void 0, function* () {
48
45
  yield updateUserPreferences(dispatchToGlobalMetadataReducer, loggedInUserRights.data.getSSOUsername(), [
49
46
  {
50
47
  key: UserPreferencesKeys.caseSavedSearchFilters,
51
- value: JSON.stringify(previousBookmarkedSearchesObj),
48
+ value: JSON.stringify(BookmarkedSearchesObj),
52
49
  },
53
50
  ], 'add');
54
- onCaseSearchSaveSuccess && onCaseSearchSaveSuccess(savedSearchName, currentFilterQuery);
55
51
  });
56
- return (React.createElement(Modal, { variant: ModalVariant.small, title: t('Bookmark this search'), isOpen: isModalOpen, onClose: handleModalToggle, actions: [
57
- React.createElement(Button, { key: "save", variant: "primary", isLoading: hydraUserPreferences.isFetching, spinnerAriaValueText: hydraUserPreferences.isFetching ? 'Saving' : undefined, isDisabled: !savedSearchName || !filterQuery || isDuplicateNameError || hydraUserPreferences.isFetching, "data-tracking-id": "case-list-bookmark-search-saved", onClick: onSearchSave },
52
+ const setDefaultSearchToFalse = () => {
53
+ const defaultSavedSearchKey = findKey(previousBookmarkedSearchesObj, { defaultChecked: true });
54
+ if (defaultSavedSearchKey) {
55
+ previousBookmarkedSearchesObj[defaultSavedSearchKey].defaultChecked = false;
56
+ }
57
+ };
58
+ const addSavedSearch = () => __awaiter(this, void 0, void 0, function* () {
59
+ try {
60
+ setIsUpdating(true);
61
+ previousBookmarkedSearchesObj[localSavedSearchName] = Object.assign({ filterState: filterInfo, sortState: sortInfo, defaultChecked: localDefaultChecked }, filterQueryInfo);
62
+ // if new added search has 'set default' true,
63
+ // need to remove old default search if there is any
64
+ localDefaultChecked && setDefaultSearchToFalse();
65
+ yield preferencesApiCall(previousBookmarkedSearchesObj);
66
+ setIsUpdating(false);
67
+ ToastNotification.addSuccessMessage(t('Saved search has been updated successfully'));
68
+ modalToggle();
69
+ }
70
+ catch (e) {
71
+ setIsUpdating(false);
72
+ ToastNotification.addDangerMessage(t('Saved search failed to update'));
73
+ modalToggle();
74
+ }
75
+ });
76
+ const onSearchEdit = () => __awaiter(this, void 0, void 0, function* () {
77
+ try {
78
+ setIsUpdating(true);
79
+ // if editted search has 'set default' true,
80
+ // need to remove old default search if there is any
81
+ localDefaultChecked && setDefaultSearchToFalse();
82
+ // add new member to obj
83
+ previousBookmarkedSearchesObj[localSavedSearchName] = Object.assign(Object.assign({}, previousBookmarkedSearchesObj[selectedSearchNameToEdit]), { defaultChecked: localDefaultChecked });
84
+ // name changed, need to deleted old obj member
85
+ if (localSavedSearchName !== selectedSearchNameToEdit) {
86
+ delete previousBookmarkedSearchesObj[selectedSearchNameToEdit];
87
+ }
88
+ yield preferencesApiCall(previousBookmarkedSearchesObj);
89
+ setIsUpdating(false);
90
+ ToastNotification.addSuccessMessage(t('Saved search has been updated successfully'));
91
+ modalToggle();
92
+ }
93
+ catch (e) {
94
+ setIsUpdating(false);
95
+ ToastNotification.addDangerMessage(t('Saved search failed to update'));
96
+ modalToggle();
97
+ }
98
+ });
99
+ const deleteSavedSearch = () => __awaiter(this, void 0, void 0, function* () {
100
+ try {
101
+ modalToggle();
102
+ yield confirmRemove({
103
+ catchOnCancel: true,
104
+ title: t(`Delete saved search?`),
105
+ description: React.createElement(Trans, null, "This will permanently remove it from your list of saved searches."),
106
+ });
107
+ try {
108
+ delete previousBookmarkedSearchesObj[localSavedSearchName];
109
+ setLocalSavedSearchName('');
110
+ yield preferencesApiCall(previousBookmarkedSearchesObj);
111
+ ToastNotification.addSuccessMessage(t('Saved search has been removed successfully'));
112
+ }
113
+ catch (e) {
114
+ ToastNotification.addDangerMessage(t('Search failed to be saved'));
115
+ }
116
+ }
117
+ catch (e) {
118
+ // on confirm modal, cancel button is clicked
119
+ }
120
+ });
121
+ useEffect(() => {
122
+ var _a;
123
+ setLocalSavedSearchName(selectedSearchNameToEdit);
124
+ setLocalDefaultChecked(((_a = previousBookmarkedSearchesObj[selectedSearchNameToEdit]) === null || _a === void 0 ? void 0 : _a.defaultChecked) || false);
125
+ // eslint-disable-next-line react-hooks/exhaustive-deps
126
+ }, [selectedSearchNameToEdit]);
127
+ return (React.createElement(Modal, { variant: ModalVariant.medium, title: isAdding ? t('Save search and filters') : t('Edit saved search and filters'), isOpen: isModalOpen, onClose: modalToggle, actions: [
128
+ React.createElement(Button, { key: "save", variant: ButtonVariant.primary, isLoading: isUpdating, spinnerAriaValueText: hydraUserPreferences.isFetching ? 'Saving' : undefined, isDisabled: isEmpty(localSavedSearchName.trim()) || isDuplicateNameError || hydraUserPreferences.isFetching, "data-tracking-id": isAdding ? 'case-list-bookmark-search-saved' : 'case-list-bookmark-search-edited', onClick: isAdding ? addSavedSearch : onSearchEdit },
58
129
  React.createElement(Trans, null, "Save")),
59
- React.createElement(Button, { key: "cancel", variant: "secondary", "data-tracking-id": "case-list-bookmark-search-canceled", onClick: handleModalToggle },
130
+ React.createElement(Button, { key: "cancel", variant: ButtonVariant.secondary, "data-tracking-id": "case-list-bookmark-search-canceled", onClick: modalToggle },
60
131
  React.createElement(Trans, null, "Cancel")),
132
+ React.createElement(React.Fragment, null,
133
+ React.createElement(Checkbox, { className: "pf-u-ml-md save-search-set-default", key: "set-as-default", "aria-label": t('Set as default'), id: "case-list-bookmark-search-set-as-default", "data-tracking-id": "case-list-bookmark-search-set-as-default", isChecked: localDefaultChecked, onChange: (checkbox, e) => {
134
+ e.stopPropagation();
135
+ setLocalDefaultChecked(!localDefaultChecked);
136
+ } }),
137
+ ' ',
138
+ "Set as default"),
139
+ React.createElement(React.Fragment, null, !isAdding && (React.createElement(Button, { key: "delete", variant: ButtonVariant.link, isDanger: true, "data-tracking-id": "case-list-bookmark-search-deleted", onClick: deleteSavedSearch, style: { marginLeft: 'auto' } },
140
+ React.createElement(Trans, null, "Remove")))),
61
141
  ] },
62
- React.createElement(Form, { className: "pull-bottom" },
63
- React.createElement(FormGroup, { label: t('Name'), isRequired: true, fieldId: "save-search-name", helperText: t('Enter a unique name to remember later'), validated: isDuplicateNameError ? 'error' : 'default', helperTextInvalid: t('Filter with same name already exists. Please enter a unique name.'), className: "form-group pull-bottom-narrow" },
64
- React.createElement(TextInput, { isRequired: true, type: "text", placeholder: t('Example: Open RHEL cases'), id: "save-search-name", name: "save-search-name", "aria-describedby": "save-search-name-helper", value: savedSearchName, onChange: handleSaveSearchNameChange, className: `form-control${isDuplicateNameError || !savedSearchName ? ' form-invalid' : ''}` })),
65
- React.createElement(FormGroup, { label: t('Save as'), isRequired: true, fieldId: "filter-query", helperText: t('Filters applied to this query'), className: "form-group" },
66
- React.createElement(TextInput, { isRequired: true, type: "text", id: "filter-query", name: "filter-query", "aria-describedby": "filter-query-helper", value: filterQuery, onChange: handleFilterQueryChange, className: `form-control${!filterQuery ? ' form-invalid' : ''}` })))));
142
+ React.createElement(Form, null,
143
+ React.createElement(FormGroup, { label: t('Name'), isRequired: true, fieldId: "save-search-name", validated: isDuplicateNameError ? 'error' : 'default', helperTextInvalid: t('Filter with same name already exists. Please enter a unique name.'), className: "form-group pull-bottom-narrow" },
144
+ React.createElement(TextInput, { isRequired: true, type: "text", placeholder: t('Enter a unique name to reference in the future'), id: "save-search-name", name: "save-search-name", "aria-describedby": "save-search-name-helper", value: localSavedSearchName, onChange: handleSaveSearchNameChange, className: `form-control${isDuplicateNameError || !localSavedSearchName ? ' form-invalid' : ''}` })),
145
+ React.createElement(FormGroup, { label: t('Search and filter query'), isRequired: true, fieldId: "filter-query", className: "form-group pf-u-mt-lg" },
146
+ React.createElement(TextArea, { isRequired: true, type: "text", id: "filter-query", name: "filter-query", "aria-describedby": "filter-query-helper", value: isAdding
147
+ ? createUserFriendlyQueryFromFilterState(filterInfo, filterQueryInfo.queryString)
148
+ : selectedSearchNameToEdit && previousBookmarkedSearchesObj[selectedSearchNameToEdit]
149
+ ? createUserFriendlyQueryFromFilterState(previousBookmarkedSearchesObj[selectedSearchNameToEdit].filterState, previousBookmarkedSearchesObj[selectedSearchNameToEdit].queryString)
150
+ : '', className: "form-control", isDisabled: true })))));
67
151
  }
@@ -0,0 +1,5 @@
1
+ import { CaseSearchQueryType } from '../enums/caseSearch';
2
+ export declare function useFilterStateOnLoad(): {
3
+ set: (queryFromUrl: string, pageSizeFromUrl: number, currentPageFromUrl: number, searchType: CaseSearchQueryType) => void;
4
+ };
5
+ //# sourceMappingURL=useFilterStateOnLoad.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFilterStateOnLoad.d.ts","sourceRoot":"","sources":["../../../src/hooks/useFilterStateOnLoad.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAI1D,wBAAgB,oBAAoB;wBAmBd,MAAM,mBACH,MAAM,sBACH,MAAM,cACd,mBAAmB;EA0DtC"}
@@ -0,0 +1,45 @@
1
+ import { GlobalMetadataStateContext, UserPreferencesKeys } from '@rh-support/react-context';
2
+ import find from 'lodash/find';
3
+ import findKey from 'lodash/findKey';
4
+ import isEmpty from 'lodash/isEmpty';
5
+ import { useContext, useMemo } from 'react';
6
+ import { CaseListFilterDispatchContext, CaseListFilterStateContext, } from '../components/case-list/CaseListFilterContext';
7
+ import { isArrayHashMapEmpty } from '../components/case-list/CaseListFilterHelpers';
8
+ import { updateFilterState } from '../components/case-list/CaseListFilterReducer';
9
+ import { SolrKeys } from '../enums/filters';
10
+ import { createFilterStateFromUrlQuery } from '../utils/caseSearchUtils';
11
+ export function useFilterStateOnLoad() {
12
+ const { globalMetadataState, globalMetadataState: { caseGroups, hydraUserPreferences }, } = useContext(GlobalMetadataStateContext);
13
+ const filterState = useContext(CaseListFilterStateContext);
14
+ const filterDispatch = useContext(CaseListFilterDispatchContext);
15
+ const savesSearches = find(hydraUserPreferences.data, (pref) => pref.key === UserPreferencesKeys.caseSavedSearchFilters);
16
+ const savedSearchesObj = useMemo(() => ((savesSearches === null || savesSearches === void 0 ? void 0 : savesSearches.value) ? JSON.parse(savesSearches.value) : {}), [savesSearches]);
17
+ const set = (queryFromUrl, pageSizeFromUrl, currentPageFromUrl, searchType) => {
18
+ // set state from url
19
+ let defaultFilterState = filterState;
20
+ const filterStateFromQuery = createFilterStateFromUrlQuery(queryFromUrl, globalMetadataState, pageSizeFromUrl, currentPageFromUrl, searchType);
21
+ const hasFilterStateFromQuery = !isArrayHashMapEmpty(filterStateFromQuery.filterInfo) &&
22
+ !isEmpty(filterStateFromQuery.filterQueryInfo.queryString);
23
+ let savedSearchFilterState = null;
24
+ const defaultSavedSearchKey = findKey(savedSearchesObj, { defaultChecked: true });
25
+ if (defaultSavedSearchKey) {
26
+ const { filterState: filterStateSaved, queryString, type, sortState, } = savedSearchesObj[defaultSavedSearchKey];
27
+ savedSearchFilterState = Object.assign(Object.assign({}, filterState), { sortInfo: sortState, filterQueryInfo: Object.assign(Object.assign({}, filterState.filterQueryInfo), { queryString, type }), filterInfo: filterStateSaved });
28
+ }
29
+ defaultFilterState = hasFilterStateFromQuery
30
+ ? filterStateFromQuery
31
+ : savedSearchFilterState
32
+ ? savedSearchFilterState
33
+ : defaultFilterState;
34
+ const defaultGroup = (caseGroups.data || []).find((group) => group.isDefault);
35
+ if (defaultGroup) {
36
+ const updatedFilterInfo = Object.assign(Object.assign({}, filterState.filterInfo), { [SolrKeys.group]: [{ key: defaultGroup.groupNum, value: defaultGroup.name }] });
37
+ defaultFilterState = Object.assign(Object.assign({}, filterState), { filterInfo: updatedFilterInfo });
38
+ }
39
+ // we only update the state without api call as we fetch result in another useEffect that observes the state
40
+ updateFilterState(filterDispatch, defaultFilterState);
41
+ };
42
+ return {
43
+ set,
44
+ };
45
+ }
@@ -3,6 +3,7 @@ import { IFilterInfo, IFilterQueryInfo, ISortInfo } from '../components/case-lis
3
3
  export interface IBookmarkedCaseSearch extends IFilterQueryInfo {
4
4
  filterState: Partial<IFilterInfo>;
5
5
  sortState: ISortInfo;
6
+ defaultChecked: boolean;
6
7
  }
7
8
  export interface IBookmarkedCaseSearches {
8
9
  [id: string]: IBookmarkedCaseSearch;
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/models/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAEzG,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC3D,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,SAAS,EAAE,SAAS,CAAC;CACxB;AACD,MAAM,WAAW,uBAAuB;IACpC,CAAC,EAAE,EAAE,MAAM,GAAG,qBAAqB,CAAC;CACvC;AAED,MAAM,WAAW,4BAA6B,SAAQ,UAAU,CAAC,uBAAuB,CAAC;IACrF,KAAK,EAAE,uBAAuB,CAAC;CAClC;AAED,MAAM,WAAW,6BAA8B,SAAQ,UAAU,CAAC,MAAM,EAAE,CAAC;IACvE,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,yBAA0B,SAAQ,UAAU,CAAC,MAAM,CAAC;IACjE,KAAK,EAAE,MAAM,CAAC;CACjB"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/models/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAEzG,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC3D,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;CAC3B;AACD,MAAM,WAAW,uBAAuB;IACpC,CAAC,EAAE,EAAE,MAAM,GAAG,qBAAqB,CAAC;CACvC;AAED,MAAM,WAAW,4BAA6B,SAAQ,UAAU,CAAC,uBAAuB,CAAC;IACrF,KAAK,EAAE,uBAAuB,CAAC;CAClC;AAED,MAAM,WAAW,6BAA8B,SAAQ,UAAU,CAAC,MAAM,EAAE,CAAC;IACvE,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,yBAA0B,SAAQ,UAAU,CAAC,MAAM,CAAC;IACjE,KAAK,EAAE,MAAM,CAAC;CACjB"}
@@ -265,7 +265,7 @@ export const userPreferenceMock = [
265
265
  },
266
266
  {
267
267
  key: 'PCM-CaseSavedSearchFilters',
268
- value: '{"Test Saved Search":{"filterState":{"case_product,case_version":[{"field":"case_product","value":".NET Core","case_version":[]},{"field":"case_product","value":"Ansible Automation Analytics","case_version":[]}],"case_status":["Waiting on Red Hat","Waiting on Customer"],"case_accountNumber":[],"case_folderNumber":[],"case_severity":[],"case_owner_sso_username":[],"case_customer_escalation":[{"key":"true","value":"Escalated cases"}],"case_createdby_sso_username":[],"case_contact_sso_username":[]},"sortState":{"column":"number","direction":"asc"},"type":"basic","queryString":""},"cc":{"filterState":{"case_product,case_version":[{"field":"case_product","value":".NET Core","case_version":[]},{"field":"case_product","value":"Ansible Automation Analytics","case_version":[]}],"case_status":["Waiting on Red Hat","Waiting on Customer"],"case_accountNumber":[],"case_folderNumber":[],"case_severity":[],"case_owner_sso_username":[],"case_customer_escalation":[{"key":"true","value":"Escalated cases"}],"case_createdby_sso_username":[],"case_contact_sso_username":[]},"sortState":{"column":"number","direction":"asc"},"type":"basic","queryString":"test"},"MyFilter":{"filterState":{"case_product,case_version":[{"field":"case_product","value":".NET Core","case_version":[]},{"field":"case_product","value":"Ansible Automation Analytics","case_version":[]}],"case_status":["Waiting on Red Hat","Waiting on Customer"],"case_accountNumber":[],"case_folderNumber":[],"case_severity":[],"case_owner_sso_username":[],"case_customer_escalation":[{"key":true,"value":"Escalated cases"}],"case_createdby_sso_username":[],"case_contact_sso_username":[]},"sortState":{"direction":"desc","column":"lastModifiedDate"},"type":"basic","queryString":"test"}}',
268
+ value: '{"Test Saved Search":{"filterState":{"case_product,case_version":[{"field":"case_product","value":".NET Core","case_version":[]},{"field":"case_product","value":"Ansible Automation Analytics","case_version":[]}],"case_status":["Waiting on Red Hat","Waiting on Customer"],"case_accountNumber":[],"case_folderNumber":[],"case_severity":[],"case_owner_sso_username":[],"case_customer_escalation":[{"key":"true","value":"Escalated cases"}],"case_createdby_sso_username":[],"case_contact_sso_username":[]},"sortState":{"column":"number","direction":"asc"},"defaultChecked":false,"type":"basic","queryString":""},"A saved search":{"filterState":{"case_product,case_version":[{"field":"case_product","value":".NET Core","case_version":[]},{"field":"case_product","value":"Ansible Automation Analytics","case_version":[]}],"case_status":["Waiting on Red Hat","Waiting on Customer"],"case_accountNumber":[],"case_folderNumber":[],"case_severity":[],"case_owner_sso_username":[],"case_customer_escalation":[{"key":"true","value":"Escalated cases"}],"case_createdby_sso_username":[],"case_contact_sso_username":[]},"sortState":{"column":"number","direction":"asc"},"defaultChecked":true,"type":"basic","queryString":"test"},"MyFilter":{"filterState":{"case_product,case_version":[{"field":"case_product","value":".NET Core","case_version":[]},{"field":"case_product","value":"Ansible Automation Analytics","case_version":[]}],"case_status":["Waiting on Red Hat","Waiting on Customer"],"case_accountNumber":[],"case_folderNumber":[],"case_severity":[],"case_owner_sso_username":[],"case_customer_escalation":[{"key":true,"value":"Escalated cases"}],"case_createdby_sso_username":[],"case_contact_sso_username":[]},"sortState":{"direction":"desc","column":"lastModifiedDate"},"defaultChecked":false,"type":"basic","queryString":"test"}}',
269
269
  createdBy: 'rhn-support-vrathee',
270
270
  createdDate: '2020-11-05T08:22:46Z',
271
271
  modifiedBy: 'rhn-support-vrathee',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rh-support/cases",
3
- "version": "0.2.34",
3
+ "version": "0.2.38",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org"
@@ -26,11 +26,11 @@
26
26
  "lib/**/*"
27
27
  ],
28
28
  "peerDependencies": {
29
- "@cee-eng/hydrajs": "4.7.3",
30
- "@patternfly/patternfly": "4.102.2",
31
- "@patternfly/pfe-collapse": "1.1.0",
32
- "@patternfly/react-core": "4.128.2",
33
- "@patternfly/react-table": "4.26.7",
29
+ "@cee-eng/hydrajs": "4.7.20",
30
+ "@patternfly/patternfly": "4.176.2",
31
+ "@patternfly/pfe-collapse": "1.12.3",
32
+ "@patternfly/react-core": "4.194.0",
33
+ "@patternfly/react-table": "4.63.0",
34
34
  "@rh-support/api": "0.3.9",
35
35
  "@rh-support/components": "^0.1.3",
36
36
  "@rh-support/react-context": "^0.1.3",
@@ -47,17 +47,17 @@
47
47
  "solr-query-builder": "1.0.1"
48
48
  },
49
49
  "dependencies": {
50
- "@cee-eng/hydrajs": "4.7.3",
51
- "@patternfly/patternfly": "4.102.2",
52
- "@patternfly/pfe-collapse": "1.1.0",
53
- "@patternfly/react-core": "4.128.2",
54
- "@patternfly/react-table": "4.26.7",
55
- "@rh-support/api": "0.3.9",
56
- "@rh-support/components": "1.1.23",
57
- "@rh-support/react-context": "0.2.26",
50
+ "@cee-eng/hydrajs": "4.7.20",
51
+ "@patternfly/patternfly": "4.176.2",
52
+ "@patternfly/pfe-collapse": "1.12.3",
53
+ "@patternfly/react-core": "4.194.0",
54
+ "@patternfly/react-table": "4.63.0",
55
+ "@rh-support/api": "0.3.10",
56
+ "@rh-support/components": "1.1.27",
57
+ "@rh-support/react-context": "0.2.30",
58
58
  "@rh-support/types": "0.2.0",
59
- "@rh-support/user-permissions": "0.2.17",
60
- "@rh-support/utils": "0.2.15",
59
+ "@rh-support/user-permissions": "0.2.21",
60
+ "@rh-support/utils": "0.2.19",
61
61
  "i18next": "^19.0.1",
62
62
  "localforage": "^1.7.3",
63
63
  "lodash": "^4.17.15",
@@ -101,5 +101,5 @@
101
101
  "not ie <= 11",
102
102
  "not op_mini all"
103
103
  ],
104
- "gitHead": "aaf1c0772424a3918b78cef3ac74afcce4c6b583"
104
+ "gitHead": "230218b05ecdb08d048db04a7f8fcb6646b4fa35"
105
105
  }