@rh-support/cases 2.6.235 → 2.7.10
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/NewCaseButton.js +1 -1
- package/lib/esm/components/case-list/CaseList.d.ts +0 -7
- package/lib/esm/components/case-list/CaseList.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseList.js +372 -137
- package/lib/esm/components/case-list/CaseListContext.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListContext.js +5 -2
- package/lib/esm/components/case-list/CaseListFilterContext.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListFilterContext.js +2 -1
- package/lib/esm/components/case-list/CaseListFilterHelpers.d.ts +3 -2
- package/lib/esm/components/case-list/CaseListFilterHelpers.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListFilterHelpers.js +19 -6
- package/lib/esm/components/case-list/CaseListFilterReducer.d.ts +36 -4
- package/lib/esm/components/case-list/CaseListFilterReducer.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListFilterReducer.js +6 -12
- package/lib/esm/components/case-list/CaseListReducer.d.ts +22 -10
- package/lib/esm/components/case-list/CaseListReducer.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListReducer.js +25 -7
- package/lib/esm/components/case-list/case-list-filters/AccountsFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/AccountsFilter.js +18 -11
- package/lib/esm/components/case-list/case-list-filters/AdditionalFilters.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/AdditionalFilters.js +20 -4
- package/lib/esm/components/case-list/case-list-filters/CaseLabelsFilter.d.ts +3 -0
- package/lib/esm/components/case-list/case-list-filters/CaseLabelsFilter.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-list-filters/CaseLabelsFilter.js +178 -0
- package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.d.ts +1 -7
- package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.js +12 -16
- package/lib/esm/components/case-list/case-list-filters/CaseListFilters.d.ts +2 -5
- package/lib/esm/components/case-list/case-list-filters/CaseListFilters.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/CaseListFilters.js +14 -13
- package/lib/esm/components/case-list/case-list-filters/CreatorSsoNameFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/CreatorSsoNameFilter.js +21 -14
- package/lib/esm/components/case-list/case-list-filters/CreatorSsoNameFilterChip.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/CreatorSsoNameFilterChip.js +3 -0
- package/lib/esm/components/case-list/case-list-filters/GroupsFilter.d.ts +11 -1
- package/lib/esm/components/case-list/case-list-filters/GroupsFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/GroupsFilter.js +90 -70
- package/lib/esm/components/case-list/case-list-filters/ProductFilterChip.d.ts +1 -3
- package/lib/esm/components/case-list/case-list-filters/ProductFilterChip.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/ProductFilterChip.js +2 -2
- package/lib/esm/components/case-list/case-list-filters/ProductsFilter.d.ts +5 -4
- 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 +15 -54
- package/lib/esm/components/case-list/case-list-filters/SeverityFilter.d.ts +0 -3
- 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 +18 -44
- package/lib/esm/components/case-list/case-list-filters/StatusFilter.d.ts +0 -3
- 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 +23 -49
- package/lib/esm/components/case-list/case-list-filters/VersionsFilter.d.ts +1 -3
- 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 +60 -59
- package/lib/esm/components/case-list/case-list-table/ArchivedCaseLabel.d.ts +3 -0
- package/lib/esm/components/case-list/case-list-table/ArchivedCaseLabel.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-list-table/ArchivedCaseLabel.js +8 -0
- package/lib/esm/components/case-list/case-list-table/CaseListLabelGroup.d.ts +9 -0
- package/lib/esm/components/case-list/case-list-table/CaseListLabelGroup.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-list-table/CaseListLabelGroup.js +105 -0
- package/lib/esm/components/case-list/case-list-table/CaseListTable.d.ts +10 -3
- package/lib/esm/components/case-list/case-list-table/CaseListTable.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-table/CaseListTable.js +98 -84
- package/lib/esm/components/case-list/case-list-table/CaseListTableRow.d.ts +33 -0
- package/lib/esm/components/case-list/case-list-table/CaseListTableRow.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-list-table/CaseListTableRow.js +51 -0
- package/lib/esm/components/case-list/case-list-table/CaseListTableSkeletonRow.d.ts +9 -0
- package/lib/esm/components/case-list/case-list-table/CaseListTableSkeletonRow.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-list-table/CaseListTableSkeletonRow.js +10 -0
- package/lib/esm/components/case-list/case-list-table/CloseCaseBtn.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-table/CloseCaseBtn.js +27 -28
- package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.d.ts +0 -5
- package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.js +51 -70
- package/lib/esm/components/case-list/case-list-table/ExportCaseListCSV.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-table/ExportCaseListCSV.js +5 -15
- package/lib/esm/components/case-list/case-list-table/SeverityLabel.js +1 -1
- package/lib/esm/components/case-list/case-list-table/TableActionsDropdown.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-table/TableActionsDropdown.js +4 -5
- package/lib/esm/components/case-list/case-list-table/table-column-selector/TableColumnSelector.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-table/table-column-selector/TableColumnSelector.js +1 -0
- package/lib/esm/components/case-list/case-search/AdvanceSearchToggleButton.d.ts +8 -0
- package/lib/esm/components/case-list/case-search/AdvanceSearchToggleButton.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/AdvanceSearchToggleButton.js +8 -0
- package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.js +15 -2
- package/lib/esm/components/case-list/case-search/CaseSearch.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-search/CaseSearch.js +55 -24
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAccountSection.d.ts +10 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAccountSection.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAccountSection.js +29 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAuditsSection.d.ts +10 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAuditsSection.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAuditsSection.js +16 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchCaseSection.d.ts +9 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchCaseSection.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchCaseSection.js +21 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchDateRangeField.d.ts +12 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchDateRangeField.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchDateRangeField.js +31 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchFieldBlock.d.ts +10 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchFieldBlock.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchFieldBlock.js +10 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchModal.d.ts +10 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchModal.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchModal.js +92 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchOwnerSection.d.ts +9 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchOwnerSection.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchOwnerSection.js +20 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchProductSection.d.ts +9 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchProductSection.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchProductSection.js +28 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/ProductVersionDrilldownSelect.d.ts +9 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/ProductVersionDrilldownSelect.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/ProductVersionDrilldownSelect.js +241 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/SelectableLabelFilter.d.ts +11 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/SelectableLabelFilter.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-search/advance-search-modal/SelectableLabelFilter.js +23 -0
- package/lib/esm/components/case-list/case-search/useAdvanceSearchParser.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-search/useAdvanceSearchParser.js +2 -1
- package/lib/esm/css/caseList.css +197 -28
- package/lib/esm/css/caseSearch.css +114 -0
- package/lib/esm/enums/case.d.ts +13 -5
- package/lib/esm/enums/case.d.ts.map +1 -1
- package/lib/esm/enums/case.js +23 -3
- package/lib/esm/enums/caseSearch.d.ts +3 -0
- package/lib/esm/enums/caseSearch.d.ts.map +1 -1
- package/lib/esm/enums/caseSearch.js +2 -1
- package/lib/esm/enums/filters.d.ts +5 -1
- package/lib/esm/enums/filters.d.ts.map +1 -1
- package/lib/esm/enums/filters.js +4 -0
- package/lib/esm/hooks/useCaseLabels.d.ts +14 -0
- package/lib/esm/hooks/useCaseLabels.d.ts.map +1 -0
- package/lib/esm/hooks/useCaseLabels.js +50 -0
- package/lib/esm/hooks/useCloseCase.d.ts +1 -1
- package/lib/esm/hooks/useCloseCase.d.ts.map +1 -1
- package/lib/esm/hooks/useCloseCase.js +54 -30
- package/lib/esm/hooks/useExportCaseListCSV.d.ts.map +1 -1
- package/lib/esm/hooks/useExportCaseListCSV.js +1 -9
- package/lib/esm/hooks/useFilterStateOnLoad.d.ts +1 -1
- package/lib/esm/hooks/useFilterStateOnLoad.d.ts.map +1 -1
- package/lib/esm/hooks/useFilterStateOnLoad.js +7 -5
- package/lib/esm/index.js +1 -0
- package/lib/esm/models/caseList.d.ts +1 -0
- package/lib/esm/models/caseList.d.ts.map +1 -1
- package/lib/esm/test-utils/mockData.d.ts +1 -0
- package/lib/esm/test-utils/mockData.d.ts.map +1 -1
- package/lib/esm/test-utils/mockData.js +2 -1
- package/lib/esm/utils/advanceSearchFormMapper.d.ts +11 -0
- package/lib/esm/utils/advanceSearchFormMapper.d.ts.map +1 -0
- package/lib/esm/utils/advanceSearchFormMapper.js +71 -0
- package/lib/esm/utils/advanceSearchUtils.d.ts +24 -0
- package/lib/esm/utils/advanceSearchUtils.d.ts.map +1 -0
- package/lib/esm/utils/advanceSearchUtils.js +150 -0
- package/lib/esm/utils/caseGroupDefaultFilterUtils.d.ts +12 -0
- package/lib/esm/utils/caseGroupDefaultFilterUtils.d.ts.map +1 -0
- package/lib/esm/utils/caseGroupDefaultFilterUtils.js +34 -0
- package/lib/esm/utils/caseGroupDefaultUtils.d.ts +10 -0
- package/lib/esm/utils/caseGroupDefaultUtils.d.ts.map +1 -0
- package/lib/esm/utils/caseGroupDefaultUtils.js +20 -0
- package/lib/esm/utils/caseListGraphQLUtils.d.ts +28 -0
- package/lib/esm/utils/caseListGraphQLUtils.d.ts.map +1 -0
- package/lib/esm/utils/caseListGraphQLUtils.js +304 -0
- package/lib/esm/utils/caseListMapper.d.ts +6 -0
- package/lib/esm/utils/caseListMapper.d.ts.map +1 -0
- package/lib/esm/utils/caseListMapper.js +47 -0
- package/lib/esm/utils/caseListVariablesBuilder.d.ts +17 -0
- package/lib/esm/utils/caseListVariablesBuilder.d.ts.map +1 -0
- package/lib/esm/utils/caseListVariablesBuilder.js +535 -0
- package/lib/esm/utils/caseSearchUtils.d.ts.map +1 -1
- package/lib/esm/utils/caseSearchUtils.js +39 -2
- package/lib/esm/utils/constants.d.ts +4 -1
- package/lib/esm/utils/constants.d.ts.map +1 -1
- package/lib/esm/utils/constants.js +9 -2
- package/lib/esm/utils/mockSolrResponse.js +1 -1
- package/package.json +8 -6
|
@@ -0,0 +1,304 @@
|
|
|
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
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
11
|
+
var t = {};
|
|
12
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
13
|
+
t[p] = s[p];
|
|
14
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
15
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
16
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
17
|
+
t[p[i]] = s[p[i]];
|
|
18
|
+
}
|
|
19
|
+
return t;
|
|
20
|
+
};
|
|
21
|
+
import { GET_CASES_BY_FILTERS, GET_GROUP_IDS_BY_NAME, GET_PRODUCTS, GET_USER_IDS_BY_FEDERATION, } from '@rh-support/utils';
|
|
22
|
+
import { SolrKeys, SolrPivotKeys } from '../enums/filters';
|
|
23
|
+
import { mapGraphQLResponseToCaseList } from './caseListMapper';
|
|
24
|
+
import { createGraphQLVariablesFromFilterState, getOwnerFederationIdsToResolve, } from './caseListVariablesBuilder';
|
|
25
|
+
const pageCursors = new Map();
|
|
26
|
+
/**
|
|
27
|
+
* Workaround step 1 for Assigned To (case OwnerId): lookup RedHatSupportUser and
|
|
28
|
+
* RedHatSupportGroup IDs by federation ID or name. Pre-resolved here and passed into
|
|
29
|
+
* createGraphQLVariablesFromFilterState as OwnerId — do not use nested Owner filters on the case where clause.
|
|
30
|
+
*/
|
|
31
|
+
function resolveOwnerIds(searchTerms, apolloClient) {
|
|
32
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
33
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
34
|
+
if (!searchTerms.length)
|
|
35
|
+
return [];
|
|
36
|
+
const ownerIds = [];
|
|
37
|
+
for (const searchTerm of searchTerms) {
|
|
38
|
+
try {
|
|
39
|
+
const [userResult, groupResult] = yield Promise.all([
|
|
40
|
+
apolloClient.query({
|
|
41
|
+
query: GET_USER_IDS_BY_FEDERATION,
|
|
42
|
+
variables: {
|
|
43
|
+
searchTerm,
|
|
44
|
+
namePattern: `%${searchTerm}%`,
|
|
45
|
+
},
|
|
46
|
+
fetchPolicy: 'cache-first',
|
|
47
|
+
}),
|
|
48
|
+
apolloClient.query({
|
|
49
|
+
query: GET_GROUP_IDS_BY_NAME,
|
|
50
|
+
variables: {
|
|
51
|
+
namePattern: `%${searchTerm}%`,
|
|
52
|
+
},
|
|
53
|
+
fetchPolicy: 'cache-first',
|
|
54
|
+
}),
|
|
55
|
+
]);
|
|
56
|
+
const userEdges = ((_d = (_c = (_b = (_a = userResult.data) === null || _a === void 0 ? void 0 : _a.redhat_support_uiapi) === null || _b === void 0 ? void 0 : _b.query) === null || _c === void 0 ? void 0 : _c.RedHatSupportUser) === null || _d === void 0 ? void 0 : _d.edges) || [];
|
|
57
|
+
userEdges.forEach((edge) => {
|
|
58
|
+
var _a, _b, _c;
|
|
59
|
+
const federationId = (_b = (_a = edge.node) === null || _a === void 0 ? void 0 : _a.FederationIdentifier) === null || _b === void 0 ? void 0 : _b.value;
|
|
60
|
+
if (((_c = edge.node) === null || _c === void 0 ? void 0 : _c.Id) && federationId) {
|
|
61
|
+
ownerIds.push(edge.node.Id);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
const groupEdges = ((_h = (_g = (_f = (_e = groupResult.data) === null || _e === void 0 ? void 0 : _e.redhat_support_uiapi) === null || _f === void 0 ? void 0 : _f.query) === null || _g === void 0 ? void 0 : _g.RedHatSupportGroup) === null || _h === void 0 ? void 0 : _h.edges) || [];
|
|
65
|
+
groupEdges.forEach((edge) => {
|
|
66
|
+
var _a;
|
|
67
|
+
if ((_a = edge.node) === null || _a === void 0 ? void 0 : _a.Id) {
|
|
68
|
+
ownerIds.push(edge.node.Id);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
console.error('[GraphQL] Failed to resolve owner IDs:', error);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return [...new Set(ownerIds)];
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
export function clearPageCursors() {
|
|
80
|
+
pageCursors.clear();
|
|
81
|
+
}
|
|
82
|
+
function getCursorForPage(page) {
|
|
83
|
+
var _a;
|
|
84
|
+
if (page <= 1)
|
|
85
|
+
return undefined;
|
|
86
|
+
return (_a = pageCursors.get(page)) !== null && _a !== void 0 ? _a : undefined;
|
|
87
|
+
}
|
|
88
|
+
function storeEndCursor(currentPage, endCursor) {
|
|
89
|
+
pageCursors.set(currentPage + 1, endCursor);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Resolves missing Product2 IDs for product/version filters loaded from URL.
|
|
93
|
+
* When filters come from the UI, IDs are already set by ProductsFilter/VersionsFilter.
|
|
94
|
+
* When filters come from a URL (which only contains product/version names), this function
|
|
95
|
+
* queries GraphQL to resolve names → IDs so buildProductFilter can construct the where clause.
|
|
96
|
+
* Uses cache-first policy to avoid redundant network calls.
|
|
97
|
+
*/
|
|
98
|
+
function resolveVersionProductIds(filterState, apolloClient) {
|
|
99
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
100
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
101
|
+
const products = (_a = filterState.filterInfo) === null || _a === void 0 ? void 0 : _a[SolrPivotKeys.product_version];
|
|
102
|
+
if (!(products === null || products === void 0 ? void 0 : products.length))
|
|
103
|
+
return;
|
|
104
|
+
for (const product of products) {
|
|
105
|
+
// Resolve parent product ID by name (only needed for URL-based filters)
|
|
106
|
+
if (!product.productId) {
|
|
107
|
+
try {
|
|
108
|
+
const { data: prodData } = yield apolloClient.query({
|
|
109
|
+
query: GET_PRODUCTS,
|
|
110
|
+
variables: {
|
|
111
|
+
where: { Name: { eq: product.value }, IsActive: { eq: true } },
|
|
112
|
+
first: 1,
|
|
113
|
+
},
|
|
114
|
+
fetchPolicy: 'cache-first',
|
|
115
|
+
});
|
|
116
|
+
const parentEdges = (_e = (_d = (_c = (_b = prodData === null || prodData === void 0 ? void 0 : prodData.redhat_support_uiapi) === null || _b === void 0 ? void 0 : _b.query) === null || _c === void 0 ? void 0 : _c.RedHatSupportProduct2) === null || _d === void 0 ? void 0 : _d.edges) !== null && _e !== void 0 ? _e : [];
|
|
117
|
+
if (parentEdges.length > 0) {
|
|
118
|
+
product.productId = parentEdges[0].node.Id;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (_k) {
|
|
122
|
+
// continue without parent ID
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
const versions = product[SolrKeys.version];
|
|
126
|
+
if (!(versions === null || versions === void 0 ? void 0 : versions.length) || !product.productId)
|
|
127
|
+
continue;
|
|
128
|
+
const hasUnresolvedVersions = versions.some((v) => v.productId === undefined || v.productId === null);
|
|
129
|
+
if (!hasUnresolvedVersions)
|
|
130
|
+
continue;
|
|
131
|
+
// Fetch child products for this parent and match version names to their Product2 IDs
|
|
132
|
+
try {
|
|
133
|
+
const { data } = yield apolloClient.query({
|
|
134
|
+
query: GET_PRODUCTS,
|
|
135
|
+
variables: {
|
|
136
|
+
where: { ParentProduct__c: { eq: product.productId }, IsActive: { eq: true } },
|
|
137
|
+
first: 200,
|
|
138
|
+
orderBy: { Name: { order: 'ASC' } },
|
|
139
|
+
},
|
|
140
|
+
fetchPolicy: 'cache-first',
|
|
141
|
+
});
|
|
142
|
+
const edges = (_j = (_h = (_g = (_f = data === null || data === void 0 ? void 0 : data.redhat_support_uiapi) === null || _f === void 0 ? void 0 : _f.query) === null || _g === void 0 ? void 0 : _g.RedHatSupportProduct2) === null || _h === void 0 ? void 0 : _h.edges) !== null && _j !== void 0 ? _j : [];
|
|
143
|
+
const childProducts = edges.map((edge) => ({
|
|
144
|
+
id: edge.node.Id,
|
|
145
|
+
name: edge.node.Name.value,
|
|
146
|
+
}));
|
|
147
|
+
versions.forEach((ver) => {
|
|
148
|
+
if (ver.productId)
|
|
149
|
+
return;
|
|
150
|
+
const match = childProducts.find((cp) => cp.name === ver.value || cp.name.endsWith(ver.value));
|
|
151
|
+
if (match) {
|
|
152
|
+
ver.productId = match.id;
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
console.error('[GraphQL] Failed to resolve version product IDs:', error);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
export function getCaseListFromGraphQL(filterState_1, apolloClient_1, limitOverride_1, signal_1, selectedCaseNumbers_1) {
|
|
163
|
+
return __awaiter(this, arguments, void 0, function* (filterState, apolloClient, limitOverride, signal, selectedCaseNumbers, includeSecureSupportCases = false) {
|
|
164
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
165
|
+
try {
|
|
166
|
+
yield resolveVersionProductIds(filterState, apolloClient);
|
|
167
|
+
// Pre-resolve Assigned To owner IDs — users and groups (see resolveOwnerIds / caseListVariablesBuilder comments).
|
|
168
|
+
const federationIdsToResolve = getOwnerFederationIdsToResolve(filterState);
|
|
169
|
+
let resolvedUserIds;
|
|
170
|
+
if (federationIdsToResolve.length) {
|
|
171
|
+
const ownerUserIds = yield resolveOwnerIds(federationIdsToResolve, apolloClient);
|
|
172
|
+
resolvedUserIds = { ownerUserIds };
|
|
173
|
+
}
|
|
174
|
+
const variables = yield createGraphQLVariablesFromFilterState(filterState, apolloClient, resolvedUserIds, includeSecureSupportCases);
|
|
175
|
+
const { forceEmptyResult } = variables, caseQueryVariables = __rest(variables, ["forceEmptyResult"]);
|
|
176
|
+
if (limitOverride) {
|
|
177
|
+
caseQueryVariables.first = limitOverride;
|
|
178
|
+
}
|
|
179
|
+
if (forceEmptyResult) {
|
|
180
|
+
return {
|
|
181
|
+
caseListResponse: { response: { docs: [], numFound: 0, start: 0 } },
|
|
182
|
+
showErrorMessage: false,
|
|
183
|
+
hasNextPage: false,
|
|
184
|
+
endCursor: undefined,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
const currentPage = ((_a = filterState.paginationInfo) === null || _a === void 0 ? void 0 : _a.currentPage) || 1;
|
|
188
|
+
if (selectedCaseNumbers === null || selectedCaseNumbers === void 0 ? void 0 : selectedCaseNumbers.length) {
|
|
189
|
+
const caseNumberFilter = { CaseNumber__c: { in: selectedCaseNumbers } };
|
|
190
|
+
caseQueryVariables.first = selectedCaseNumbers.length;
|
|
191
|
+
if ((_b = caseQueryVariables.where) === null || _b === void 0 ? void 0 : _b.and) {
|
|
192
|
+
caseQueryVariables.where.and.push(caseNumberFilter);
|
|
193
|
+
}
|
|
194
|
+
else if (caseQueryVariables.where) {
|
|
195
|
+
caseQueryVariables.where = { and: [caseQueryVariables.where, caseNumberFilter] };
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
caseQueryVariables.where = caseNumberFilter;
|
|
199
|
+
}
|
|
200
|
+
caseQueryVariables.after = undefined;
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
caseQueryVariables.after = getCursorForPage(currentPage);
|
|
204
|
+
}
|
|
205
|
+
const { data, error } = yield apolloClient.query({
|
|
206
|
+
query: GET_CASES_BY_FILTERS,
|
|
207
|
+
variables: caseQueryVariables,
|
|
208
|
+
fetchPolicy: 'network-only',
|
|
209
|
+
context: signal ? { fetchOptions: { signal } } : undefined,
|
|
210
|
+
});
|
|
211
|
+
const connection = (_d = (_c = data === null || data === void 0 ? void 0 : data.redhat_support_uiapi) === null || _c === void 0 ? void 0 : _c.query) === null || _d === void 0 ? void 0 : _d.RedHatSupportCase;
|
|
212
|
+
if (!connection) {
|
|
213
|
+
return {
|
|
214
|
+
caseListResponse: { response: { docs: [], numFound: 0, start: 0 } },
|
|
215
|
+
showErrorMessage: !!error,
|
|
216
|
+
hasNextPage: false,
|
|
217
|
+
endCursor: undefined,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
if ((_e = connection.pageInfo) === null || _e === void 0 ? void 0 : _e.endCursor) {
|
|
221
|
+
storeEndCursor(currentPage, connection.pageInfo.endCursor);
|
|
222
|
+
}
|
|
223
|
+
const docs = mapGraphQLResponseToCaseList(connection.edges || []);
|
|
224
|
+
return {
|
|
225
|
+
caseListResponse: {
|
|
226
|
+
response: {
|
|
227
|
+
docs,
|
|
228
|
+
numFound: connection.totalCount || 0,
|
|
229
|
+
start: 0,
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
showErrorMessage: false,
|
|
233
|
+
hasNextPage: (_g = (_f = connection.pageInfo) === null || _f === void 0 ? void 0 : _f.hasNextPage) !== null && _g !== void 0 ? _g : false,
|
|
234
|
+
endCursor: (_j = (_h = connection.pageInfo) === null || _h === void 0 ? void 0 : _h.endCursor) !== null && _j !== void 0 ? _j : undefined,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
if ((error === null || error === void 0 ? void 0 : error.name) === 'AbortError' || ((_k = error === null || error === void 0 ? void 0 : error.message) === null || _k === void 0 ? void 0 : _k.includes('aborted')) || (signal === null || signal === void 0 ? void 0 : signal.aborted)) {
|
|
239
|
+
return {
|
|
240
|
+
caseListResponse: { response: { docs: [], numFound: 0, start: 0 } },
|
|
241
|
+
showErrorMessage: false,
|
|
242
|
+
hasNextPage: false,
|
|
243
|
+
endCursor: undefined,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
console.error('[GraphQL] getCaseListFromGraphQL error:', error);
|
|
247
|
+
return {
|
|
248
|
+
caseListResponse: { response: { docs: [], numFound: 0, start: 0 } },
|
|
249
|
+
showErrorMessage: true,
|
|
250
|
+
hasNextPage: false,
|
|
251
|
+
endCursor: undefined,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Fetches the next page of cases for infinite scroll.
|
|
258
|
+
* Uses the provided `afterCursor` instead of the page-based cursor store.
|
|
259
|
+
*/
|
|
260
|
+
export function loadMoreCases(filterState_1, apolloClient_1, afterCursor_1, signal_1) {
|
|
261
|
+
return __awaiter(this, arguments, void 0, function* (filterState, apolloClient, afterCursor, signal, includeSecureSupportCases = false) {
|
|
262
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
263
|
+
try {
|
|
264
|
+
yield resolveVersionProductIds(filterState, apolloClient);
|
|
265
|
+
// Pre-resolve Assigned To owner IDs — users and groups (see resolveOwnerIds / caseListVariablesBuilder comments).
|
|
266
|
+
const federationIdsToResolve = getOwnerFederationIdsToResolve(filterState);
|
|
267
|
+
let resolvedUserIds;
|
|
268
|
+
if (federationIdsToResolve.length) {
|
|
269
|
+
const ownerUserIds = yield resolveOwnerIds(federationIdsToResolve, apolloClient);
|
|
270
|
+
resolvedUserIds = { ownerUserIds };
|
|
271
|
+
}
|
|
272
|
+
const variables = yield createGraphQLVariablesFromFilterState(filterState, apolloClient, resolvedUserIds, includeSecureSupportCases);
|
|
273
|
+
const { forceEmptyResult } = variables, caseQueryVariables = __rest(variables, ["forceEmptyResult"]);
|
|
274
|
+
if (forceEmptyResult) {
|
|
275
|
+
return { docs: [], hasNextPage: false, endCursor: undefined };
|
|
276
|
+
}
|
|
277
|
+
caseQueryVariables.first = 20;
|
|
278
|
+
caseQueryVariables.after = afterCursor;
|
|
279
|
+
const { data } = yield apolloClient.query({
|
|
280
|
+
query: GET_CASES_BY_FILTERS,
|
|
281
|
+
variables: caseQueryVariables,
|
|
282
|
+
fetchPolicy: 'no-cache',
|
|
283
|
+
context: Object.assign({ queryDeduplication: false }, (signal ? { fetchOptions: { signal } } : undefined)),
|
|
284
|
+
});
|
|
285
|
+
const connection = (_b = (_a = data === null || data === void 0 ? void 0 : data.redhat_support_uiapi) === null || _a === void 0 ? void 0 : _a.query) === null || _b === void 0 ? void 0 : _b.RedHatSupportCase;
|
|
286
|
+
if (!connection) {
|
|
287
|
+
return { docs: [], hasNextPage: false, endCursor: undefined };
|
|
288
|
+
}
|
|
289
|
+
const docs = mapGraphQLResponseToCaseList(connection.edges || []);
|
|
290
|
+
return {
|
|
291
|
+
docs,
|
|
292
|
+
hasNextPage: (_d = (_c = connection.pageInfo) === null || _c === void 0 ? void 0 : _c.hasNextPage) !== null && _d !== void 0 ? _d : false,
|
|
293
|
+
endCursor: (_f = (_e = connection.pageInfo) === null || _e === void 0 ? void 0 : _e.endCursor) !== null && _f !== void 0 ? _f : undefined,
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
catch (error) {
|
|
297
|
+
if ((error === null || error === void 0 ? void 0 : error.name) === 'AbortError' || ((_g = error === null || error === void 0 ? void 0 : error.message) === null || _g === void 0 ? void 0 : _g.includes('aborted')) || (signal === null || signal === void 0 ? void 0 : signal.aborted)) {
|
|
298
|
+
throw error;
|
|
299
|
+
}
|
|
300
|
+
console.error('[GraphQL] loadMoreCases error:', error);
|
|
301
|
+
throw error;
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ICaseListItem, IGqlCaseNode } from '@rh-support/utils';
|
|
2
|
+
export declare function mapGraphQLCaseToCaseListItem(node: IGqlCaseNode): ICaseListItem;
|
|
3
|
+
export declare function mapGraphQLResponseToCaseList(edges: Array<{
|
|
4
|
+
node: IGqlCaseNode;
|
|
5
|
+
}>): ICaseListItem[];
|
|
6
|
+
//# sourceMappingURL=caseListMapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caseListMapper.d.ts","sourceRoot":"","sources":["../../../src/utils/caseListMapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAYhE,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAiC9E;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC,GAAG,aAAa,EAAE,CAElG"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import unescape from 'lodash/unescape';
|
|
2
|
+
function mapCaseLabelNames(node) {
|
|
3
|
+
var _a, _b;
|
|
4
|
+
const edges = (_b = (_a = node.Case_Label_Links__r) === null || _a === void 0 ? void 0 : _a.edges) !== null && _b !== void 0 ? _b : [];
|
|
5
|
+
const names = edges
|
|
6
|
+
.map((edge) => { var _a, _b, _c; return (_c = (_b = (_a = edge.node) === null || _a === void 0 ? void 0 : _a.Label__r) === null || _b === void 0 ? void 0 : _b.Name) === null || _c === void 0 ? void 0 : _c.value; })
|
|
7
|
+
.filter((name) => Boolean(name))
|
|
8
|
+
.map((name) => unescape(name));
|
|
9
|
+
return [...new Set(names)];
|
|
10
|
+
}
|
|
11
|
+
export function mapGraphQLCaseToCaseListItem(node) {
|
|
12
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8;
|
|
13
|
+
const isEscalated = ((_a = node.IsEscalated) === null || _a === void 0 ? void 0 : _a.value) === true;
|
|
14
|
+
return {
|
|
15
|
+
id: node.Id || '',
|
|
16
|
+
case_number: ((_b = node.CaseNumber__c) === null || _b === void 0 ? void 0 : _b.value) || '',
|
|
17
|
+
case_summary: unescape(((_c = node.Subject) === null || _c === void 0 ? void 0 : _c.value) || ''),
|
|
18
|
+
case_status: ((_d = node.Status) === null || _d === void 0 ? void 0 : _d.value) || '',
|
|
19
|
+
case_severity: ((_e = node.Priority) === null || _e === void 0 ? void 0 : _e.value) || '',
|
|
20
|
+
case_product: ((_h = (_g = (_f = node.Product) === null || _f === void 0 ? void 0 : _f.ParentProduct__r) === null || _g === void 0 ? void 0 : _g.Name) === null || _h === void 0 ? void 0 : _h.value)
|
|
21
|
+
? [node.Product.ParentProduct__r.Name.value]
|
|
22
|
+
: ((_k = (_j = node.Product) === null || _j === void 0 ? void 0 : _j.Name) === null || _k === void 0 ? void 0 : _k.value)
|
|
23
|
+
? [node.Product.Name.value]
|
|
24
|
+
: [],
|
|
25
|
+
case_version: ((_m = (_l = node.Product) === null || _l === void 0 ? void 0 : _l.VersionName__c) === null || _m === void 0 ? void 0 : _m.value) || '',
|
|
26
|
+
case_type: ((_o = node.Type) === null || _o === void 0 ? void 0 : _o.value) || '',
|
|
27
|
+
case_accountNumber: ((_p = node.Account_Number__c) === null || _p === void 0 ? void 0 : _p.value) || '',
|
|
28
|
+
case_contactName: ((_r = (_q = node.RedHatSupportContact) === null || _q === void 0 ? void 0 : _q.Name) === null || _r === void 0 ? void 0 : _r.value) || '',
|
|
29
|
+
case_owner: ((_t = (_s = node.Owner) === null || _s === void 0 ? void 0 : _s.Name) === null || _t === void 0 ? void 0 : _t.value) || '',
|
|
30
|
+
case_createdByName: ((_v = (_u = node.CreatedBy) === null || _u === void 0 ? void 0 : _u.Name) === null || _v === void 0 ? void 0 : _v.value) || '',
|
|
31
|
+
case_createdDate: ((_w = node.CreatedDate) === null || _w === void 0 ? void 0 : _w.value) || '',
|
|
32
|
+
case_lastModifiedByName: ((_y = (_x = node.LastModifiedBy) === null || _x === void 0 ? void 0 : _x.Name) === null || _y === void 0 ? void 0 : _y.value) || '',
|
|
33
|
+
case_lastModifiedDate: ((_z = node.LastModifiedDate) === null || _z === void 0 ? void 0 : _z.value) || '',
|
|
34
|
+
case_last_public_update_by: ((_1 = (_0 = node.LastModifiedBy) === null || _0 === void 0 ? void 0 : _0.Name) === null || _1 === void 0 ? void 0 : _1.value) || '',
|
|
35
|
+
case_last_public_update_date: ((_2 = node.LastModifiedDate) === null || _2 === void 0 ? void 0 : _2.value) || '',
|
|
36
|
+
case_customer_escalation: isEscalated,
|
|
37
|
+
case_closedDate: ((_3 = node.ClosedDate) === null || _3 === void 0 ? void 0 : _3.value) || '',
|
|
38
|
+
case_folderName: unescape(((_5 = (_4 = node.Group__r) === null || _4 === void 0 ? void 0 : _4.Name) === null || _5 === void 0 ? void 0 : _5.value) || ''),
|
|
39
|
+
case_folderNumber: ((_6 = node.Group__c) === null || _6 === void 0 ? void 0 : _6.value) || ((_7 = node.Group__r) === null || _7 === void 0 ? void 0 : _7.Id) || '',
|
|
40
|
+
case_alternate_id: unescape(((_8 = node.AlternateCaseId__c) === null || _8 === void 0 ? void 0 : _8.value) || ''),
|
|
41
|
+
case_label: mapCaseLabelNames(node),
|
|
42
|
+
uri: '',
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export function mapGraphQLResponseToCaseList(edges) {
|
|
46
|
+
return edges.map((edge) => mapGraphQLCaseToCaseListItem(edge.node));
|
|
47
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ApolloClient } from '@apollo/client';
|
|
2
|
+
import { ICaseListFilterState } from '../components/case-list/CaseListFilterReducer';
|
|
3
|
+
export declare function getOwnerFederationIdsToResolve(filterState: ICaseListFilterState): string[];
|
|
4
|
+
export interface IGraphQLCaseListVariables {
|
|
5
|
+
after?: string;
|
|
6
|
+
first: number;
|
|
7
|
+
where?: Record<string, unknown>;
|
|
8
|
+
orderBy?: Record<string, unknown>;
|
|
9
|
+
/** When true, filters resolve to zero cases (e.g. label with no linked cases) — skip the cases query. */
|
|
10
|
+
forceEmptyResult?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface IResolvedUserIds {
|
|
13
|
+
/** Pre-resolved OwnerId values (RedHatSupportUser or RedHatSupportGroup). */
|
|
14
|
+
ownerUserIds?: string[];
|
|
15
|
+
}
|
|
16
|
+
export declare function createGraphQLVariablesFromFilterState(filterState: ICaseListFilterState, apolloClient: ApolloClient, resolvedUserIds?: IResolvedUserIds, includeSecureSupportCases?: boolean): Promise<IGraphQLCaseListVariables>;
|
|
17
|
+
//# sourceMappingURL=caseListVariablesBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caseListVariablesBuilder.d.ts","sourceRoot":"","sources":["../../../src/utils/caseListVariablesBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAcnD,OAAO,EAEH,oBAAoB,EAEvB,MAAM,+CAA+C,CAAC;AAMvD,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAM1F;AAED,MAAM,WAAW,yBAAyB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,yGAAyG;IACzG,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC7B,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAicD,wBAAsB,qCAAqC,CACvD,WAAW,EAAE,oBAAoB,EACjC,YAAY,EAAE,YAAY,EAC1B,eAAe,CAAC,EAAE,gBAAgB,EAClC,yBAAyB,UAAQ,GAClC,OAAO,CAAC,yBAAyB,CAAC,CA0IpC"}
|