@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.
- package/lib/esm/components/case-list/case-list-filters/ProductsFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/ProductsFilter.js +21 -17
- package/lib/esm/components/case-list/case-list-filters/SeverityFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/SeverityFilter.js +19 -20
- package/lib/esm/components/case-list/case-list-filters/StatusFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/StatusFilter.js +18 -20
- package/lib/esm/components/case-list/case-list-filters/TypeFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/TypeFilter.js +19 -13
- package/lib/esm/components/case-list/case-list-filters/VersionsFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/VersionsFilter.js +17 -19
- package/lib/esm/components/case-list/case-list-table/ExportCaseListCSV.js +1 -1
- package/lib/esm/components/case-list/case-search/AdvanceSearch.d.ts +1 -1
- package/lib/esm/components/case-list/case-search/AdvanceSearch.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-search/AdvanceSearch.js +29 -49
- package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.js +1 -1
- package/lib/esm/components/case-list/case-search/CaseSearch.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-search/CaseSearch.js +16 -15
- package/lib/esm/components/case-list/case-search/useAdvanceSearchParser.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-search/useAdvanceSearchParser.js +161 -64
- package/lib/esm/css/caseList.css +7 -2
- package/lib/esm/css/caseSearch.css +0 -4
- package/lib/esm/enums/case.d.ts +15 -1
- package/lib/esm/enums/case.d.ts.map +1 -1
- package/lib/esm/enums/case.js +16 -2
- package/lib/esm/enums/filters.d.ts +35 -1
- package/lib/esm/enums/filters.d.ts.map +1 -1
- package/lib/esm/enums/filters.js +34 -0
- package/lib/esm/utils/caseSearchUtils.d.ts +3 -2
- package/lib/esm/utils/caseSearchUtils.d.ts.map +1 -1
- package/lib/esm/utils/caseSearchUtils.js +68 -15
- 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
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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}
|
|
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 '),
|
|
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.
|
|
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": "
|
|
102
|
+
"gitHead": "08110e83fe460e529f74fa3429ca9f99342dc76d"
|
|
103
103
|
}
|