@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.
- package/lib/esm/components/case-list/CaseList.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseList.js +5 -12
- package/lib/esm/components/case-list/CaseListFilterHelpers.d.ts +2 -1
- package/lib/esm/components/case-list/CaseListFilterHelpers.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListFilterHelpers.js +1 -1
- package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.js +36 -18
- package/lib/esm/components/case-list/case-search/CaseSearch.js +1 -1
- package/lib/esm/components/case-list/case-search/SaveCaseSearchModal.d.ts +4 -5
- package/lib/esm/components/case-list/case-search/SaveCaseSearchModal.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-search/SaveCaseSearchModal.js +110 -26
- package/lib/esm/hooks/useFilterStateOnLoad.d.ts +5 -0
- package/lib/esm/hooks/useFilterStateOnLoad.d.ts.map +1 -0
- package/lib/esm/hooks/useFilterStateOnLoad.js +45 -0
- package/lib/esm/models/cache.d.ts +1 -0
- package/lib/esm/models/cache.d.ts.map +1 -1
- package/lib/esm/test-utils/mockData.js +1 -1
- package/package.json +17 -17
|
@@ -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;
|
|
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 {
|
|
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;
|
|
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":"
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
|
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
|
|
84
|
-
|
|
85
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
modalToggle: () => void;
|
|
4
|
+
isAdding: boolean;
|
|
5
|
+
selectedSearchNameToEdit: string;
|
|
7
6
|
}
|
|
8
|
-
export declare function SaveCaseSearchModal({ isModalOpen,
|
|
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":"
|
|
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
|
|
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,
|
|
20
|
+
export function SaveCaseSearchModal({ isModalOpen, modalToggle, isAdding, selectedSearchNameToEdit }) {
|
|
18
21
|
const { t } = useTranslation();
|
|
19
|
-
const
|
|
20
|
-
const [
|
|
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
|
-
|
|
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
|
|
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(
|
|
48
|
+
value: JSON.stringify(BookmarkedSearchesObj),
|
|
52
49
|
},
|
|
53
50
|
], 'add');
|
|
54
|
-
onCaseSearchSaveSuccess && onCaseSearchSaveSuccess(savedSearchName, currentFilterQuery);
|
|
55
51
|
});
|
|
56
|
-
|
|
57
|
-
|
|
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:
|
|
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,
|
|
63
|
-
React.createElement(FormGroup, { label: t('Name'), isRequired: true, fieldId: "save-search-name",
|
|
64
|
-
React.createElement(TextInput, { isRequired: true, type: "text", placeholder: t('
|
|
65
|
-
React.createElement(FormGroup, { label: t('
|
|
66
|
-
React.createElement(
|
|
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;
|
|
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":""},"
|
|
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.
|
|
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.
|
|
30
|
-
"@patternfly/patternfly": "4.
|
|
31
|
-
"@patternfly/pfe-collapse": "1.
|
|
32
|
-
"@patternfly/react-core": "4.
|
|
33
|
-
"@patternfly/react-table": "4.
|
|
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.
|
|
51
|
-
"@patternfly/patternfly": "4.
|
|
52
|
-
"@patternfly/pfe-collapse": "1.
|
|
53
|
-
"@patternfly/react-core": "4.
|
|
54
|
-
"@patternfly/react-table": "4.
|
|
55
|
-
"@rh-support/api": "0.3.
|
|
56
|
-
"@rh-support/components": "1.1.
|
|
57
|
-
"@rh-support/react-context": "0.2.
|
|
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.
|
|
60
|
-
"@rh-support/utils": "0.2.
|
|
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": "
|
|
104
|
+
"gitHead": "230218b05ecdb08d048db04a7f8fcb6646b4fa35"
|
|
105
105
|
}
|