@rh-support/cases 0.2.42 → 0.2.46

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.
@@ -4,6 +4,7 @@ interface IProps {
4
4
  onSearchTypeChange?: (newType: CaseSearchQueryType) => void;
5
5
  onSearchClear?: () => void;
6
6
  onSearchSubmit: (parsedQuery: string) => void;
7
+ onAdvancedSearchValidation: (validation: boolean) => void;
7
8
  }
8
9
  export declare function AdvanceSearch(props: IProps): JSX.Element;
9
10
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"AdvanceSearch.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-search/AdvanceSearch.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAMhE,UAAU,MAAM;IACZ,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC5D,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,eAsV1C"}
1
+ {"version":3,"file":"AdvanceSearch.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-search/AdvanceSearch.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAMhE,UAAU,MAAM;IACZ,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC5D,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,0BAA0B,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,eAwV1C"}
@@ -23,6 +23,7 @@ export function AdvanceSearch(props) {
23
23
  try {
24
24
  parse(queryString);
25
25
  setIsParsingSuccessful(true);
26
+ props.onAdvancedSearchValidation(true);
26
27
  try {
27
28
  // to trigger the autocomplete on a valid selection
28
29
  parse(queryString + ' ');
@@ -34,6 +35,7 @@ export function AdvanceSearch(props) {
34
35
  }
35
36
  catch (e) {
36
37
  setIsParsingSuccessful(false);
38
+ props.onAdvancedSearchValidation(false);
37
39
  parserErrorRef.current = e;
38
40
  autoCompleteSetup(e.expected, queryString.substring(e.location.start.offset, queryString.length));
39
41
  }
@@ -2,6 +2,7 @@ import { CaseSearchQueryType } from '../../../enums/caseSearch';
2
2
  interface IProps {
3
3
  currentCaseSearchString: string;
4
4
  currentSearchType: CaseSearchQueryType;
5
+ isAdvancedSearchValid: boolean;
5
6
  }
6
7
  export declare function BookmarkedSearchesSelector(props: IProps): JSX.Element;
7
8
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"BookmarkedSearchesSelector.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-search/BookmarkedSearchesSelector.tsx"],"names":[],"mappings":"AAwBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAWhE,UAAU,MAAM;IACZ,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,mBAAmB,CAAC;CAC1C;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,eA6MvD"}
1
+ {"version":3,"file":"BookmarkedSearchesSelector.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-search/BookmarkedSearchesSelector.tsx"],"names":[],"mappings":"AAwBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAWhE,UAAU,MAAM;IACZ,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,mBAAmB,CAAC;IACvC,qBAAqB,EAAE,OAAO,CAAC;CAClC;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,eAqNvD"}
@@ -10,6 +10,7 @@ import isEmpty from 'lodash/isEmpty';
10
10
  import isEqual from 'lodash/isEqual';
11
11
  import React, { useContext, useEffect, useRef, useState } from 'react';
12
12
  import { Trans, useTranslation } from 'react-i18next';
13
+ import { CaseSearchQueryType } from '../../../enums/caseSearch';
13
14
  import { CaseListFilterDispatchContext, CaseListFilterStateContext, initialCaseFilterState, } from '../CaseListFilterContext';
14
15
  import { isNoFilterApplied, isOnlyDefaultFilterApplied } from '../CaseListFilterHelpers';
15
16
  import { clearFilters, updateFilterQuery, updateFilterState, updateSort } from '../CaseListFilterReducer';
@@ -68,7 +69,7 @@ export function BookmarkedSearchesSelector(props) {
68
69
  setSelectedSearch(selectedItem);
69
70
  const { filterState: filterStateSaved, queryString, type, sortState } = searchQuery;
70
71
  // update filters with new value
71
- queryString && updateFilterQuery(dispatch, { queryString, type });
72
+ updateFilterQuery(dispatch, { queryString: queryString || '', type: type || CaseSearchQueryType.BASIC });
72
73
  updateFilterState(dispatch, { filterInfo: Object.assign(Object.assign({}, initialCaseFilterState.filterInfo), filterStateSaved) });
73
74
  sortState && updateSort(dispatch, sortState);
74
75
  doToggle && toggleMenu(!isMenuOpen);
@@ -114,14 +115,16 @@ export function BookmarkedSearchesSelector(props) {
114
115
  ...(renderSavedSearchItems.length !== 0 ? [React.createElement(DropdownSeparator, { key: "separator" })] : []),
115
116
  ...(!isEmpty(mostRecentSearch) ? renderMostRecentSearch : []),
116
117
  ];
118
+ const advancedSearchPhraseIsNotValid = filterState.filterQueryInfo.type === CaseSearchQueryType.ADVANCED && !props.isAdvancedSearchValid;
119
+ const noFilterOrSearchQueryApplied = !props.currentCaseSearchString && (isOnlyDefaultFilterApplied(filterState) || isNoFilterApplied(filterState));
117
120
  return (React.createElement(React.Fragment, null,
118
121
  React.createElement("div", { className: "bookmark-search-dropdown-wrapper" },
119
122
  React.createElement(Dropdown, { className: "bookmark-search-dropdown", isOpen: isMenuOpen, dropdownItems: renderListItems, toggle: React.createElement(DropdownToggle, { splitButtonItems: [
120
123
  React.createElement(DropdownToggleAction, { onClick: onSaveForLaterClick, key: "action", isDisabled: !!selectedSearch ||
121
- (!props.currentCaseSearchString &&
122
- (isOnlyDefaultFilterApplied(filterState) || isNoFilterApplied(filterState))), "data-tracking-id": "case-list-bookmark-search-trigger" }, selectedSearch ? selectedSearch : React.createElement(Trans, null, "Save for later")),
124
+ noFilterOrSearchQueryApplied ||
125
+ advancedSearchPhraseIsNotValid, "data-tracking-id": "case-list-bookmark-search-trigger" }, selectedSearch ? selectedSearch : React.createElement(Trans, null, "Save for later")),
123
126
  ], splitButtonVariant: "action", onToggle: onMenuToggle, "aria-label": t(`${isMenuOpen ? 'Close' : 'Open'} bookmarked searches selector'`), isDisabled: !bookmarkedSearches }), disabled: hydraUserPreferences.isFetching || hydraUserPreferences.isError }),
124
127
  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" },
125
128
  React.createElement(Trans, null, "Restore most recent filters")))),
126
- React.createElement(ConfirmationServiceProvider, null, isSaveSearchModalOpen && (React.createElement(SaveCaseSearchModal, { isModalOpen: isSaveSearchModalOpen, modalToggle: modalToggle, isAdding: isAddingBookmarkSearch, selectedSearchNameToEdit: selectedSearchNameToEdit })))));
129
+ React.createElement(ConfirmationServiceProvider, null, isSaveSearchModalOpen && (React.createElement(SaveCaseSearchModal, { currentCaseSearchString: props.currentCaseSearchString, currentSearchType: props.currentSearchType, isModalOpen: isSaveSearchModalOpen, modalToggle: modalToggle, isAdding: isAddingBookmarkSearch, selectedSearchNameToEdit: selectedSearchNameToEdit })))));
127
130
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CaseSearch.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-search/CaseSearch.tsx"],"names":[],"mappings":"AAeA,wBAAgB,UAAU,gBA8IzB"}
1
+ {"version":3,"file":"CaseSearch.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-search/CaseSearch.tsx"],"names":[],"mappings":"AAeA,wBAAgB,UAAU,gBAoJzB"}
@@ -19,6 +19,7 @@ export function CaseSearch() {
19
19
  const { filterQueryInfo } = filterState;
20
20
  const [searchVal, setSearchVal] = useState(filterQueryInfo.queryString);
21
21
  const [searchType, setSearchType] = useState(CaseSearchQueryType.BASIC);
22
+ const [isAdvancedSearchValid, setIsAdvancedSearchValid] = useState(true);
22
23
  const dispatch = useContext(CaseListFilterDispatchContext);
23
24
  const { isFetching } = useCaseListStateContext();
24
25
  useEffect(() => {
@@ -90,10 +91,10 @@ export function CaseSearch() {
90
91
  };
91
92
  const renderAdvanceSearch = () => {
92
93
  return canUseAdvancedSearch ? (React.createElement(React.Fragment, null,
93
- React.createElement(AdvanceSearch, { onSearchValChange: onSearchValChange, onSearchClear: clearSearchVal, onSearchSubmit: onCaseSearch, onSearchTypeChange: onSearchTypeChange }))) : (React.createElement(React.Fragment, null));
94
+ React.createElement(AdvanceSearch, { onSearchValChange: onSearchValChange, onSearchClear: clearSearchVal, onSearchSubmit: onCaseSearch, onSearchTypeChange: onSearchTypeChange, onAdvancedSearchValidation: (isValid) => setIsAdvancedSearchValid(isValid) }))) : (React.createElement(React.Fragment, null));
94
95
  };
95
96
  return (React.createElement(React.Fragment, null,
96
97
  React.createElement("form", { onSubmit: handleSubmit, onKeyDown: handleSearchInputKeyDown },
97
98
  React.createElement("div", { className: "form-group case-search-form-group" }, CaseSearchQueryType.BASIC === searchType ? renderBasicSearch() : renderAdvanceSearch())),
98
- React.createElement(BookmarkedSearchesSelector, { currentCaseSearchString: searchVal === null || searchVal === void 0 ? void 0 : searchVal.trim(), currentSearchType: searchType })));
99
+ React.createElement(BookmarkedSearchesSelector, { currentCaseSearchString: searchVal === null || searchVal === void 0 ? void 0 : searchVal.trim(), currentSearchType: searchType, isAdvancedSearchValid: isAdvancedSearchValid })));
99
100
  }
@@ -3,7 +3,9 @@ interface IProps {
3
3
  modalToggle: () => void;
4
4
  isAdding: boolean;
5
5
  selectedSearchNameToEdit: string;
6
+ currentCaseSearchString: string;
7
+ currentSearchType: string;
6
8
  }
7
- export declare function SaveCaseSearchModal({ isModalOpen, modalToggle, isAdding, selectedSearchNameToEdit }: IProps): JSX.Element;
9
+ export declare function SaveCaseSearchModal({ isModalOpen, modalToggle, isAdding, selectedSearchNameToEdit, currentCaseSearchString, currentSearchType, }: IProps): JSX.Element;
8
10
  export {};
9
11
  //# 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":"AA4BA,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,eA0Q3G"}
1
+ {"version":3,"file":"SaveCaseSearchModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-search/SaveCaseSearchModal.tsx"],"names":[],"mappings":"AA4BA,UAAU,MAAM;IACZ,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,wBAAwB,EAAE,MAAM,CAAC;IACjC,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,mBAAmB,CAAC,EAChC,WAAW,EACX,WAAW,EACX,QAAQ,EACR,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,GACpB,EAAE,MAAM,eAwQR"}
@@ -19,7 +19,7 @@ import { Trans, useTranslation } from 'react-i18next';
19
19
  import { CaseSearchQueryType } from '../../../enums/caseSearch';
20
20
  import { createUserFriendlyQueryFromFilterState } from '../../../utils/caseSearchUtils';
21
21
  import { CaseListFilterStateContext } from '../CaseListFilterContext';
22
- export function SaveCaseSearchModal({ isModalOpen, modalToggle, isAdding, selectedSearchNameToEdit }) {
22
+ export function SaveCaseSearchModal({ isModalOpen, modalToggle, isAdding, selectedSearchNameToEdit, currentCaseSearchString, currentSearchType, }) {
23
23
  const { t } = useTranslation();
24
24
  const [localSavedSearchName, setLocalSavedSearchName] = useState('');
25
25
  const [localDefaultChecked, setLocalDefaultChecked] = useState(false);
@@ -70,13 +70,12 @@ export function SaveCaseSearchModal({ isModalOpen, modalToggle, isAdding, select
70
70
  // need to remove old default search if there is any
71
71
  localDefaultChecked && setDefaultSearchToFalse();
72
72
  if (isAdding) {
73
- const type = filterState.filterQueryInfo.type;
74
73
  previousBookmarkedSearchesObj[localSavedSearchName] = {
75
74
  filterState: pickBy(filterState.filterInfo, (value) => value.length !== 0),
76
75
  sortState: sortInfo,
77
- type,
76
+ type: currentSearchType,
77
+ queryString: currentCaseSearchString,
78
78
  defaultChecked: localDefaultChecked,
79
- queryString: getQueryStr(),
80
79
  };
81
80
  }
82
81
  else {
@@ -129,11 +128,10 @@ export function SaveCaseSearchModal({ isModalOpen, modalToggle, isAdding, select
129
128
  const getQueryStr = () => {
130
129
  let queryStr = '';
131
130
  if (isAdding) {
132
- const type = filterState.filterQueryInfo.type;
133
131
  queryStr =
134
- type === CaseSearchQueryType.BASIC
135
- ? createUserFriendlyQueryFromFilterState(filterInfo, filterQueryInfo.queryString)
136
- : filterQueryInfo.queryString;
132
+ currentSearchType === CaseSearchQueryType.BASIC
133
+ ? createUserFriendlyQueryFromFilterState(filterInfo, currentCaseSearchString)
134
+ : currentCaseSearchString;
137
135
  }
138
136
  else if (selectedSearchNameToEdit && previousBookmarkedSearchesObj[selectedSearchNameToEdit]) {
139
137
  queryStr = createUserFriendlyQueryFromFilterState(previousBookmarkedSearchesObj[selectedSearchNameToEdit].filterState, previousBookmarkedSearchesObj[selectedSearchNameToEdit].queryString);
@@ -141,14 +139,14 @@ export function SaveCaseSearchModal({ isModalOpen, modalToggle, isAdding, select
141
139
  else {
142
140
  queryStr = previousBookmarkedSearchesObj[localSavedSearchName] || '';
143
141
  }
144
- return queryStr;
142
+ return queryStr || '';
145
143
  };
146
144
  useEffect(() => {
147
145
  var _a;
148
146
  setLocalSavedSearchName(selectedSearchNameToEdit);
149
147
  setLocalDefaultChecked(((_a = previousBookmarkedSearchesObj[selectedSearchNameToEdit]) === null || _a === void 0 ? void 0 : _a.defaultChecked) || false);
150
148
  // eslint-disable-next-line react-hooks/exhaustive-deps
151
- }, [filterInfo, filterQueryInfo.queryString, isAdding, selectedSearchNameToEdit]);
149
+ }, [filterInfo, filterQueryInfo.queryString, isAdding, selectedSearchNameToEdit, currentCaseSearchString]);
152
150
  return (React.createElement(Modal, { variant: ModalVariant.medium, title: isAdding ? t('Save search and filters') : t('Edit saved search and filters'), isOpen: isModalOpen, onClose: closeModal, style: { overflow: 'visible' }, actions: [
153
151
  React.createElement(Button, { key: "save", variant: ButtonVariant.primary, isLoading: isUpdating, spinnerAriaValueText: hydraUserPreferences.isFetching ? 'Saving' : undefined, isDisabled: hydraUserPreferences.isFetching ||
154
152
  (saveButtonIsClicked && (isEmpty(localSavedSearchName.trim()) || isDuplicateNameError)), "data-tracking-id": isAdding ? 'case-list-bookmark-search-saved' : 'case-list-bookmark-search-edited', onClick: save },
@@ -1 +1 @@
1
- {"version":3,"file":"useAdvanceSearchParser.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-search/useAdvanceSearchParser.tsx"],"names":[],"mappings":"AAWA,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAAE,MAAM,EAAE;;CAAA;yBASzB,MAAM;6BASF,MAAM;;EAwEzC"}
1
+ {"version":3,"file":"useAdvanceSearchParser.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-search/useAdvanceSearchParser.tsx"],"names":[],"mappings":"AAWA,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAAE,MAAM,EAAE;;CAAA;yBASzB,MAAM;6BASF,MAAM;;EA4EzC"}
@@ -26,7 +26,12 @@ export default function useAdvanceSearchParser({ onInit }) {
26
26
  return '';
27
27
  };
28
28
  const initParser = () => {
29
- parserRef.current = PEG.generate(grammerStringRef.current);
29
+ try {
30
+ parserRef.current = PEG.generate(grammerStringRef.current);
31
+ }
32
+ catch (_a) {
33
+ parserRef.current = null;
34
+ }
30
35
  };
31
36
  // write products, severity and status to grammar string once we have the values from facets
32
37
  useEffect(() => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rh-support/cases",
3
- "version": "0.2.42",
3
+ "version": "0.2.46",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org"
@@ -52,12 +52,12 @@
52
52
  "@patternfly/pfe-collapse": "1.12.3",
53
53
  "@patternfly/react-core": "4.194.0",
54
54
  "@patternfly/react-table": "4.63.0",
55
- "@rh-support/api": "0.3.10",
56
- "@rh-support/components": "1.1.29",
57
- "@rh-support/react-context": "0.2.32",
58
- "@rh-support/types": "0.2.0",
59
- "@rh-support/user-permissions": "0.2.23",
60
- "@rh-support/utils": "0.2.21",
55
+ "@rh-support/api": "^0.3.12",
56
+ "@rh-support/components": "^1.1.31",
57
+ "@rh-support/react-context": "^0.2.34",
58
+ "@rh-support/types": "^0.2.2",
59
+ "@rh-support/user-permissions": "^0.2.25",
60
+ "@rh-support/utils": "^0.2.23",
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": "8ce3e080eafb6dd8df726bed5b7f2d54acf8cc22"
104
+ "gitHead": "70f8095b855f531eb814e85cb5a77908405fff5f"
105
105
  }