@rh-support/cases 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/lib/esm/components/case-list/case-list-filters/ProductsFilter.d.ts.map +1 -1
  2. package/lib/esm/components/case-list/case-list-filters/ProductsFilter.js +21 -17
  3. package/lib/esm/components/case-list/case-list-filters/SeverityFilter.d.ts.map +1 -1
  4. package/lib/esm/components/case-list/case-list-filters/SeverityFilter.js +19 -20
  5. package/lib/esm/components/case-list/case-list-filters/StatusFilter.d.ts.map +1 -1
  6. package/lib/esm/components/case-list/case-list-filters/StatusFilter.js +18 -20
  7. package/lib/esm/components/case-list/case-list-filters/TypeFilter.d.ts.map +1 -1
  8. package/lib/esm/components/case-list/case-list-filters/TypeFilter.js +19 -13
  9. package/lib/esm/components/case-list/case-list-filters/VersionsFilter.d.ts.map +1 -1
  10. package/lib/esm/components/case-list/case-list-filters/VersionsFilter.js +17 -19
  11. package/lib/esm/components/case-list/case-list-table/ExportCaseListCSV.js +1 -1
  12. package/lib/esm/components/case-list/case-search/AdvanceSearch.d.ts +1 -1
  13. package/lib/esm/components/case-list/case-search/AdvanceSearch.d.ts.map +1 -1
  14. package/lib/esm/components/case-list/case-search/AdvanceSearch.js +29 -49
  15. package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.js +1 -1
  16. package/lib/esm/components/case-list/case-search/CaseSearch.d.ts.map +1 -1
  17. package/lib/esm/components/case-list/case-search/CaseSearch.js +16 -15
  18. package/lib/esm/components/case-list/case-search/useAdvanceSearchParser.d.ts.map +1 -1
  19. package/lib/esm/components/case-list/case-search/useAdvanceSearchParser.js +161 -64
  20. package/lib/esm/css/caseList.css +7 -2
  21. package/lib/esm/css/caseSearch.css +0 -4
  22. package/lib/esm/enums/case.d.ts +15 -1
  23. package/lib/esm/enums/case.d.ts.map +1 -1
  24. package/lib/esm/enums/case.js +16 -2
  25. package/lib/esm/enums/filters.d.ts +35 -1
  26. package/lib/esm/enums/filters.d.ts.map +1 -1
  27. package/lib/esm/enums/filters.js +34 -0
  28. package/lib/esm/utils/caseSearchUtils.d.ts +3 -2
  29. package/lib/esm/utils/caseSearchUtils.d.ts.map +1 -1
  30. package/lib/esm/utils/caseSearchUtils.js +68 -15
  31. package/package.json +2 -2
@@ -17,9 +17,9 @@ import merge from 'lodash/merge';
17
17
  import SolrQueryBuilder from 'solr-query-builder';
18
18
  import { getLabel } from '../components/case-list/case-list-filters/AccountsBookmarkedGroupFilter';
19
19
  import { initialCaseFilterState } from '../components/case-list/CaseListFilterContext';
20
- import { CaseListColumnIds, caseListSortColumnIdsToSolrMap, CaseStatus } from '../enums/case';
20
+ import { CaseListColumnIds, caseListSortColumnIdsToSFDCMap, caseListSortColumnIdsToSolrMap, CaseStatus, } from '../enums/case';
21
21
  import { advanceSearchFieldNameToSolrFieldMapping, CaseSearchQueryType, fieldNameToSolrFieldMapping, } from '../enums/caseSearch';
22
- import { AdditionalFilterLabels, ProductVersionKey, sfdcFieldToSolrMap, SolrKeys, SolrPivotKeys, SolrTags, } from '../enums/filters';
22
+ import { AdditionalFilterLabels, advancedSearchMap, ProductVersionKey, sfdcFieldToSolrMap, SolrKeys, SolrPivotKeys, SolrTags, } from '../enums/filters';
23
23
  export const FILTER_URL_QUERY_SEARCH_PARAM = 'query';
24
24
  export const FILTER_URL_CURRENT_PAGE_SEARCH_PARAM = 'p';
25
25
  export const FILTER_URL_PAGE_SIZE_SEARCH_PARAM = 'size';
@@ -27,8 +27,7 @@ export const FILTER_URL_QUERY_TYPE = 'searchType';
27
27
  function createSolrQueryFromFilterState(filterState, loggedInUser) {
28
28
  const { paginationInfo: { pageSize, currentPage }, sortInfo: { column, direction }, filterInfo, filterQueryInfo, } = filterState;
29
29
  const rows = pageSize;
30
- const isAdvancedSearch = filterQueryInfo.type === CaseSearchQueryType.ADVANCED;
31
- const queryString = ((isAdvancedSearch ? filterQueryInfo.parsedQuery : filterQueryInfo.queryString) || '*:*').trim();
30
+ const queryString = (filterQueryInfo.queryString || '*:*').trim();
32
31
  const isCaseNumberQuery = isValidCaseNumber(queryString);
33
32
  const q = isCaseNumberQuery ? `${SolrKeys.caseNumber}:${queryString}` : queryString;
34
33
  const sort = `${caseListSortColumnIdsToSolrMap[column]} ${direction}`;
@@ -97,6 +96,52 @@ function createUserFriendlyQueryFromFilterState(filterInfo, filterQuery, useKeyF
97
96
  filtersQuery !== '*:*' && finalQueryArr.push(filtersQuery);
98
97
  return finalQueryArr.join(' AND ');
99
98
  }
99
+ function createUserFriendlyQueryFromFilterStateAdvancedSearch(filterInfo, filterQuery, useKeyForKVPair = false) {
100
+ // if query contains quotes then we need to escape it so that solr parser can parse it successfully
101
+ //const searchTextQuery = filterQuery ? `keyword: "${filterQuery.replace(/"/g, '\\"')}"` : '';
102
+ let solrQuery = new SolrQueryBuilder();
103
+ Object.keys(filterInfo).forEach((_filterKey) => {
104
+ const fieldLabel = fieldNameToSolrFieldMapping[_filterKey]
105
+ ? fieldNameToSolrFieldMapping[_filterKey]
106
+ : _filterKey;
107
+ const fieldValue = isKeyValuePair(filterInfo[_filterKey])
108
+ ? filterInfo[_filterKey].map((item) => (useKeyForKVPair ? item.key : item.value))
109
+ : filterInfo[_filterKey];
110
+ if (_filterKey !== ProductVersionKey) {
111
+ Array.isArray(fieldValue) && fieldValue.length > 0 && solrQuery.where(fieldLabel).in(flatMap(fieldValue));
112
+ }
113
+ });
114
+ const filtersQuery = solrQuery.build();
115
+ const productVersionQuery = createProductVersionQueryStringFromFilterState(filterInfo);
116
+ // add text: to string search and create and with the rest
117
+ const q = parseSolrQuery(filterQuery);
118
+ const newFilterInfo = {};
119
+ let advanceToBasicQuery = [];
120
+ Object.keys(q || {}).forEach((_key) => {
121
+ if (_key === SolrKeys.product) {
122
+ newFilterInfo[SolrPivotKeys.product_version] = generateProductVersionPivotValue(q[_key]);
123
+ }
124
+ // if it's an unnamed field we should add it to free text querystring
125
+ else if (_key === '<implicit>' || _key === 'undefined') {
126
+ advanceToBasicQuery.push(q[_key]);
127
+ }
128
+ else {
129
+ // it means field is not supported as a filter
130
+ if (!fieldNameToSolrFieldMapping[_key]) {
131
+ // if it's supported in basic search mode then add it as a query string in the search input
132
+ if (advanceSearchFieldNameToSolrFieldMapping[_key] || SolrKeys[_key]) {
133
+ advanceToBasicQuery.push(`${advancedSearchMap[_key]}:${getStringOrBooleanValue(q[_key][0])}`);
134
+ }
135
+ }
136
+ }
137
+ });
138
+ const textSearch = advanceToBasicQuery.length !== 0 ? [`text:"${advanceToBasicQuery.join(' ')}"`] : [];
139
+ const parsedQueryString = []
140
+ .concat(textSearch)
141
+ .concat(productVersionQuery ? productVersionQuery : [])
142
+ .concat(filtersQuery !== '*:*' ? filtersQuery : []);
143
+ return parsedQueryString.join(' and ').replace(/ AND /g, ' and ').replace(/ OR /g, ' or ');
144
+ }
100
145
  function createProductVersionQueryStringFromFilterState(filterInfo) {
101
146
  const queryStringForProductFilter = buildSolrQuery({ [ProductVersionKey]: filterInfo[ProductVersionKey] });
102
147
  let productVersionQuery = '';
@@ -107,7 +152,7 @@ function createProductVersionQueryStringFromFilterState(filterInfo) {
107
152
  .replace(regexForProductReplace, fieldNameToSolrFieldMapping[SolrKeys.product])
108
153
  .replace(regexForVersionReplace, fieldNameToSolrFieldMapping[SolrKeys.version]);
109
154
  }
110
- return productVersionQuery;
155
+ return productVersionQuery.replace(/\(\s+/g, '(').replace(/\s\)+/g, ')');
111
156
  }
112
157
  function createAdvancedSearchQueryFromFilterState(filterInfo, keyword, useKeyForKVPair = []) {
113
158
  const finalQueryArr = [];
@@ -141,8 +186,13 @@ function createAdvancedSearchQueryFromFilterState(filterInfo, keyword, useKeyFor
141
186
  filtersQuery !== '*:*' && finalQueryArr.push(filtersQuery);
142
187
  return finalQueryArr.join(' and ');
143
188
  }
189
+ function isBoolean(val) {
190
+ return val === false || val === true;
191
+ }
144
192
  function getStringOrBooleanValue(val) {
145
- return val === 'true' ? true : val === 'false' ? false : val;
193
+ if (isBoolean(val))
194
+ return val;
195
+ return val === 'true' ? true : val === 'false' ? false : `"${val}"`;
146
196
  }
147
197
  function createQueryForCSVDownload(filterState, loggedInUserRights, loggedInUsersAccount, startValue = 0, limitValue = 1000) {
148
198
  if (loggedInUsersAccount.secureSupport) {
@@ -174,7 +224,6 @@ function objectFlip(obj, camelCaseKey = false) {
174
224
  }, {});
175
225
  }
176
226
  function createSFDCQueryFromFilterState(filterState, loggedInUser, loggedInUserAccount) {
177
- const solrFieldToSfdcMap = objectFlip(sfdcFieldToSolrMap, true);
178
227
  const { paginationInfo: { pageSize, currentPage }, sortInfo: { column, direction }, filterInfo, filterQueryInfo, } = filterState;
179
228
  const maxResults = pageSize;
180
229
  const offset = (currentPage - 1) * pageSize;
@@ -192,12 +241,11 @@ function createSFDCQueryFromFilterState(filterState, loggedInUser, loggedInUserA
192
241
  if ((filteredStatus || []).length > 1 && filteredStatus.includes(CaseStatus.Closed)) {
193
242
  filteredStatus = filteredStatus.filter((status) => status !== CaseStatus.Closed);
194
243
  }
195
- const sortFieldSolr = caseListSortColumnIdsToSolrMap[column];
196
244
  const sfdcFilter = {
197
245
  maxResults,
198
246
  offset,
199
247
  includeClosed,
200
- sortField: solrFieldToSfdcMap[sortFieldSolr],
248
+ sortField: caseListSortColumnIdsToSFDCMap[column],
201
249
  sortOrder: direction.toUpperCase(),
202
250
  };
203
251
  const queryString = (filterQueryInfo.queryString || '').trim();
@@ -285,15 +333,19 @@ function createFilterStateFromUrlQuery(urlQuery, globalMetadataState, pageSize,
285
333
  }
286
334
  }
287
335
  });
336
+ const parsedQuery = filterQueryInfo.type === CaseSearchQueryType.ADVANCED
337
+ ? createUserFriendlyQueryFromFilterStateAdvancedSearch(filterInfo, filterQueryInfo.queryString, true)
338
+ : '';
288
339
  const filterQuery = {
289
340
  sortInfo,
290
341
  paginationInfo,
291
- filterQueryInfo,
342
+ filterQueryInfo: Object.assign(Object.assign({}, filterQueryInfo), { parsedQuery }),
292
343
  filterInfo: Object.assign(Object.assign({}, defaultFilterInfo), filterInfo),
293
344
  };
294
345
  return filterQuery;
295
346
  }
296
- function createFilterStateFromAdvancedQuery(queryString, globalMetadataState, currentFilterState) {
347
+ // when from advaced query we want to swith to basic query is called
348
+ function createFilterStateFromAdvancedQuery(queryString, globalMetadataState, currentFilterState, parsedQuery = '', type = CaseSearchQueryType.BASIC) {
297
349
  const filterObj = parseSolrQuery(queryString);
298
350
  const newFilterInfo = {};
299
351
  let advanceToBasicQuery = [];
@@ -312,14 +364,15 @@ function createFilterStateFromAdvancedQuery(queryString, globalMetadataState, cu
312
364
  }
313
365
  else {
314
366
  // if it's supported in basic search mode then add it as a query string in the search input
315
- if (advanceSearchFieldNameToSolrFieldMapping[_key]) {
367
+ if (advanceSearchFieldNameToSolrFieldMapping[_key] || SolrKeys[_key]) {
316
368
  const val = filterObj[_key];
317
- advanceToBasicQuery.push(`${_key}: "${getStringOrBooleanValue(val)}"`);
369
+ advanceToBasicQuery.push(`${_key}:${getStringOrBooleanValue(val)}`);
318
370
  }
319
371
  }
320
372
  }
321
373
  });
322
- const filterState = Object.assign(Object.assign({}, currentFilterState), { filterQueryInfo: Object.assign(Object.assign({}, currentFilterState.filterQueryInfo), { queryString: advanceToBasicQuery.join(' AND '), type: CaseSearchQueryType.BASIC }), filterInfo: Object.assign(Object.assign({}, initialCaseFilterState.filterInfo), newFilterInfo) });
374
+ const filterState = Object.assign(Object.assign({}, currentFilterState), { filterQueryInfo: Object.assign(Object.assign({}, currentFilterState.filterQueryInfo), { queryString: advanceToBasicQuery.join(' AND '), parsedQuery,
375
+ type }), filterInfo: Object.assign(Object.assign({}, initialCaseFilterState.filterInfo), newFilterInfo) });
323
376
  return filterState;
324
377
  }
325
378
  function generateFilterValue(solrFieldName, value, globalMetadataState) {
@@ -395,4 +448,4 @@ function generateProductVersionPivotValue(values) {
395
448
  };
396
449
  });
397
450
  }
398
- export { createSolrQueryFromFilterState, createUserFriendlyQueryFromFilterState, createQueryForCSVDownload, createSFDCQueryFromFilterState, mapSFDCCaseListToSolrCaseList, createURLQueryFromFilterState, createFilterStateFromUrlQuery, createAdvancedSearchQueryFromFilterState, createFilterStateFromAdvancedQuery, };
451
+ export { createSolrQueryFromFilterState, createUserFriendlyQueryFromFilterState, createUserFriendlyQueryFromFilterStateAdvancedSearch, createQueryForCSVDownload, createSFDCQueryFromFilterState, mapSFDCCaseListToSolrCaseList, createURLQueryFromFilterState, createFilterStateFromUrlQuery, createAdvancedSearchQueryFromFilterState, createFilterStateFromAdvancedQuery, };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rh-support/cases",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org"
@@ -99,5 +99,5 @@
99
99
  "not ie <= 11",
100
100
  "not op_mini all"
101
101
  ],
102
- "gitHead": "455d21baf7d383cdd9a58ba9ff6483dd4a9b60a9"
102
+ "gitHead": "08110e83fe460e529f74fa3429ca9f99342dc76d"
103
103
  }