@rh-support/cases 2.6.186 → 2.6.187
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 +0 -7
- package/lib/esm/components/case-list/CaseList.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseList.js +195 -113
- 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 +35 -4
- package/lib/esm/components/case-list/CaseListFilterReducer.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListFilterReducer.js +4 -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 +6 -2
- 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 +12 -13
- 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 +116 -71
- 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 +14 -44
- 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/CaseListTable.d.ts +7 -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 +77 -60
- 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 +38 -68
- 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 +2 -3
- 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 +1 -0
- 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 +111 -22
- package/lib/esm/css/caseSearch.css +114 -0
- package/lib/esm/enums/case.d.ts +2 -1
- package/lib/esm/enums/case.d.ts.map +1 -1
- package/lib/esm/enums/case.js +14 -1
- package/lib/esm/enums/caseSearch.d.ts +1 -0
- package/lib/esm/enums/caseSearch.d.ts.map +1 -1
- package/lib/esm/enums/caseSearch.js +1 -1
- 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/test-utils/mockData.js +1 -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 +149 -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 +280 -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 +36 -0
- package/lib/esm/utils/caseListVariablesBuilder.d.ts +15 -0
- package/lib/esm/utils/caseListVariablesBuilder.d.ts.map +1 -0
- package/lib/esm/utils/caseListVariablesBuilder.js +399 -0
- package/lib/esm/utils/caseSearchUtils.d.ts.map +1 -1
- package/lib/esm/utils/caseSearchUtils.js +26 -1
- 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 +20 -2
- package/lib/esm/utils/mockSolrResponse.js +1 -1
- package/lib/esm/utils/statusUtils.d.ts +4 -0
- package/lib/esm/utils/statusUtils.d.ts.map +1 -0
- package/lib/esm/utils/statusUtils.js +36 -0
- package/package.json +8 -8
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { toNewCaseTypeMapper } from '@rh-support/utils';
|
|
2
|
+
import isEqual from 'lodash/isEqual';
|
|
3
|
+
import { SolrKeys, SolrPivotKeys } from '../enums/filters';
|
|
4
|
+
const YYYY_MM_DD_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
|
|
5
|
+
/** Matches PatternFly DatePicker yyyy-MM-dd parsing and rejects impossible dates (e.g. 2024-02-31). */
|
|
6
|
+
export const parseAdvanceSearchDate = (value) => {
|
|
7
|
+
const trimmed = value.trim();
|
|
8
|
+
if (!trimmed) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
if (!YYYY_MM_DD_PATTERN.test(trimmed)) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
const [year, month, day] = trimmed.split('-').map(Number);
|
|
15
|
+
const parsedDate = new Date(`${trimmed}T00:00:00`);
|
|
16
|
+
if (Number.isNaN(parsedDate.getTime())) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
if (parsedDate.getFullYear() !== year || parsedDate.getMonth() + 1 !== month || parsedDate.getDate() !== day) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
return parsedDate;
|
|
23
|
+
};
|
|
24
|
+
export const isValidAdvanceSearchDateInput = (value) => !value.trim() || parseAdvanceSearchDate(value) !== undefined;
|
|
25
|
+
export const isAdvanceSearchDateRangeValid = (range) => {
|
|
26
|
+
if (!isValidAdvanceSearchDateInput(range.startDate) || !isValidAdvanceSearchDateInput(range.endDate)) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
const startDate = parseAdvanceSearchDate(range.startDate);
|
|
30
|
+
const endDate = parseAdvanceSearchDate(range.endDate);
|
|
31
|
+
if (startDate && endDate && startDate > endDate) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
return true;
|
|
35
|
+
};
|
|
36
|
+
export const hasInvalidAdvanceSearchDates = (ranges) => !isAdvanceSearchDateRangeValid(ranges.createdDateRange) ||
|
|
37
|
+
!isAdvanceSearchDateRangeValid(ranges.lastModifiedDateRange) ||
|
|
38
|
+
!isAdvanceSearchDateRangeValid(ranges.closedDateRange);
|
|
39
|
+
export const getAdvanceSearchDateRangeFieldErrors = (range, messages) => {
|
|
40
|
+
const errors = {};
|
|
41
|
+
if (!isValidAdvanceSearchDateInput(range.startDate)) {
|
|
42
|
+
errors.startDate = messages.invalidDateFormat;
|
|
43
|
+
}
|
|
44
|
+
if (!isValidAdvanceSearchDateInput(range.endDate)) {
|
|
45
|
+
errors.endDate = messages.invalidDateFormat;
|
|
46
|
+
}
|
|
47
|
+
if (!errors.startDate && !errors.endDate) {
|
|
48
|
+
const startDate = parseAdvanceSearchDate(range.startDate);
|
|
49
|
+
const endDate = parseAdvanceSearchDate(range.endDate);
|
|
50
|
+
if (startDate && endDate && startDate > endDate) {
|
|
51
|
+
errors.endDate = messages.invalidDateRange;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return errors;
|
|
55
|
+
};
|
|
56
|
+
const emptyDateRange = () => ({
|
|
57
|
+
startDate: '',
|
|
58
|
+
endDate: '',
|
|
59
|
+
});
|
|
60
|
+
export const createInitialAdvanceSearchFormState = () => ({
|
|
61
|
+
statuses: [],
|
|
62
|
+
severities: [],
|
|
63
|
+
supportTypes: [],
|
|
64
|
+
showEscalatedOnly: false,
|
|
65
|
+
accountNumbers: [],
|
|
66
|
+
personalReferenceNumber: '',
|
|
67
|
+
openshiftClusterId: '',
|
|
68
|
+
ownerNameAndSso: '',
|
|
69
|
+
assignedToNameAndSso: '',
|
|
70
|
+
groups: [],
|
|
71
|
+
createdByNameAndSso: '',
|
|
72
|
+
lastModifiedByNameAndSso: '',
|
|
73
|
+
createdDateRange: emptyDateRange(),
|
|
74
|
+
lastModifiedDateRange: emptyDateRange(),
|
|
75
|
+
closedDateRange: emptyDateRange(),
|
|
76
|
+
products: [],
|
|
77
|
+
});
|
|
78
|
+
export const mapFilterStateToAdvanceSearchForm = (filterState) => {
|
|
79
|
+
var _a, _b, _c;
|
|
80
|
+
const { filterInfo } = filterState;
|
|
81
|
+
if (!filterInfo) {
|
|
82
|
+
return createInitialAdvanceSearchFormState();
|
|
83
|
+
}
|
|
84
|
+
const escalationValues = filterInfo[SolrKeys.escalation] || [];
|
|
85
|
+
return {
|
|
86
|
+
statuses: [...(filterInfo[SolrKeys.status] || [])],
|
|
87
|
+
severities: [...(filterInfo[SolrKeys.severity] || [])],
|
|
88
|
+
supportTypes: toNewCaseTypeMapper(filterInfo[SolrKeys.type] || []),
|
|
89
|
+
showEscalatedOnly: escalationValues.some((item) => item.key === 'true'),
|
|
90
|
+
accountNumbers: [...(filterInfo[SolrKeys.accountNumber] || [])],
|
|
91
|
+
personalReferenceNumber: (filterInfo[SolrKeys.alternateId] || []).join(' '),
|
|
92
|
+
openshiftClusterId: (filterInfo[SolrKeys.openshiftClusterId] || []).join(' '),
|
|
93
|
+
ownerNameAndSso: (filterInfo[SolrKeys.caseContactSSO] || []).join(', '),
|
|
94
|
+
assignedToNameAndSso: (filterInfo[SolrKeys.caseOwner] || []).join(', '),
|
|
95
|
+
groups: [...(filterInfo[SolrKeys.group] || [])],
|
|
96
|
+
createdByNameAndSso: (filterInfo[SolrKeys.createdBySsoUsername] || []).join(', '),
|
|
97
|
+
lastModifiedByNameAndSso: (filterInfo[SolrKeys.modifiedBy] || []).join(', '),
|
|
98
|
+
createdDateRange: Object.assign({}, (((_a = filterState.advanceSearchDateRanges) === null || _a === void 0 ? void 0 : _a.createdDateRange) || emptyDateRange())),
|
|
99
|
+
lastModifiedDateRange: Object.assign({}, (((_b = filterState.advanceSearchDateRanges) === null || _b === void 0 ? void 0 : _b.lastModifiedDateRange) || emptyDateRange())),
|
|
100
|
+
closedDateRange: Object.assign({}, (((_c = filterState.advanceSearchDateRanges) === null || _c === void 0 ? void 0 : _c.closedDateRange) || emptyDateRange())),
|
|
101
|
+
products: (filterInfo[SolrPivotKeys.product_version] || []).map((product) => (Object.assign(Object.assign({}, product), { [SolrKeys.version]: [...(product[SolrKeys.version] || [])] }))),
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
export const isAdvanceSearchFormEmpty = (formState) => {
|
|
105
|
+
const initialState = createInitialAdvanceSearchFormState();
|
|
106
|
+
return isEqual(formState, initialState);
|
|
107
|
+
};
|
|
108
|
+
const countDateRangeValues = (range) => {
|
|
109
|
+
if (!range) {
|
|
110
|
+
return 0;
|
|
111
|
+
}
|
|
112
|
+
let count = 0;
|
|
113
|
+
if (range.startDate.trim()) {
|
|
114
|
+
count++;
|
|
115
|
+
}
|
|
116
|
+
if (range.endDate.trim()) {
|
|
117
|
+
count++;
|
|
118
|
+
}
|
|
119
|
+
return count;
|
|
120
|
+
};
|
|
121
|
+
const countProductFilterValues = (products) => products.reduce((total, product) => {
|
|
122
|
+
const versions = product[SolrKeys.version] || [];
|
|
123
|
+
return total + (versions.length > 0 ? versions.length : 1);
|
|
124
|
+
}, 0);
|
|
125
|
+
/** Counts total applied advanced-search filter values across all fields. */
|
|
126
|
+
export const getAdvanceSearchAppliedFilterCount = (filterState) => {
|
|
127
|
+
const { filterInfo, advanceSearchDateRanges } = filterState;
|
|
128
|
+
if (!filterInfo) {
|
|
129
|
+
return 0;
|
|
130
|
+
}
|
|
131
|
+
let count = 0;
|
|
132
|
+
count += (filterInfo[SolrKeys.status] || []).length;
|
|
133
|
+
count += (filterInfo[SolrKeys.severity] || []).length;
|
|
134
|
+
count += (filterInfo[SolrKeys.type] || []).length;
|
|
135
|
+
count += (filterInfo[SolrKeys.escalation] || []).length;
|
|
136
|
+
count += (filterInfo[SolrKeys.accountNumber] || []).length;
|
|
137
|
+
count += (filterInfo[SolrKeys.alternateId] || []).length;
|
|
138
|
+
count += (filterInfo[SolrKeys.openshiftClusterId] || []).length;
|
|
139
|
+
count += (filterInfo[SolrKeys.caseContactSSO] || []).length;
|
|
140
|
+
count += (filterInfo[SolrKeys.caseOwner] || []).length;
|
|
141
|
+
count += (filterInfo[SolrKeys.group] || []).length;
|
|
142
|
+
count += (filterInfo[SolrKeys.createdBySsoUsername] || []).length;
|
|
143
|
+
count += (filterInfo[SolrKeys.modifiedBy] || []).length;
|
|
144
|
+
count += countProductFilterValues(filterInfo[SolrPivotKeys.product_version] || []);
|
|
145
|
+
count += countDateRangeValues(advanceSearchDateRanges === null || advanceSearchDateRanges === void 0 ? void 0 : advanceSearchDateRanges.createdDateRange);
|
|
146
|
+
count += countDateRangeValues(advanceSearchDateRanges === null || advanceSearchDateRanges === void 0 ? void 0 : advanceSearchDateRanges.lastModifiedDateRange);
|
|
147
|
+
count += countDateRangeValues(advanceSearchDateRanges === null || advanceSearchDateRanges === void 0 ? void 0 : advanceSearchDateRanges.closedDateRange);
|
|
148
|
+
return count;
|
|
149
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ApolloClient } from '@apollo/client';
|
|
2
|
+
import { ICaseListItem } from '@rh-support/utils';
|
|
3
|
+
import { ICaseListFilterState } from '../components/case-list/CaseListFilterReducer';
|
|
4
|
+
export interface IGraphQLCaseListResponse {
|
|
5
|
+
caseListResponse: {
|
|
6
|
+
response: {
|
|
7
|
+
docs: ICaseListItem[];
|
|
8
|
+
numFound: number;
|
|
9
|
+
start: number;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
showErrorMessage: boolean;
|
|
13
|
+
hasNextPage: boolean;
|
|
14
|
+
endCursor: string | undefined;
|
|
15
|
+
}
|
|
16
|
+
export declare function clearPageCursors(): void;
|
|
17
|
+
export declare function getCaseListFromGraphQL(filterState: ICaseListFilterState, apolloClient: ApolloClient, limitOverride?: number, signal?: AbortSignal, selectedCaseNumbers?: string[]): Promise<IGraphQLCaseListResponse>;
|
|
18
|
+
export interface ILoadMoreResult {
|
|
19
|
+
docs: ICaseListItem[];
|
|
20
|
+
hasNextPage: boolean;
|
|
21
|
+
endCursor: string | undefined;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Fetches the next page of cases for infinite scroll.
|
|
25
|
+
* Uses the provided `afterCursor` instead of the page-based cursor store.
|
|
26
|
+
*/
|
|
27
|
+
export declare function loadMoreCases(filterState: ICaseListFilterState, apolloClient: ApolloClient, afterCursor: string, signal?: AbortSignal): Promise<ILoadMoreResult>;
|
|
28
|
+
//# sourceMappingURL=caseListGraphQLUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caseListGraphQLUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/caseListGraphQLUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAKH,aAAa,EAEhB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,oBAAoB,EAAkB,MAAM,+CAA+C,CAAC;AASrG,MAAM,WAAW,wBAAwB;IACrC,gBAAgB,EAAE;QACd,QAAQ,EAAE;YACN,IAAI,EAAE,aAAa,EAAE,CAAC;YACtB,QAAQ,EAAE,MAAM,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;SACjB,CAAC;KACL,CAAC;IACF,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAwDD,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAkFD,wBAAsB,sBAAsB,CACxC,WAAW,EAAE,oBAAoB,EACjC,YAAY,EAAE,YAAY,EAC1B,aAAa,CAAC,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,WAAW,EACpB,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,wBAAwB,CAAC,CAwFnC;AAED,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAC/B,WAAW,EAAE,oBAAoB,EACjC,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,eAAe,CAAC,CA4C1B"}
|
|
@@ -0,0 +1,280 @@
|
|
|
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
|
+
import { GET_CASES_BY_FILTERS, GET_GROUP_IDS_BY_NAME, GET_PRODUCTS, GET_USER_IDS_BY_FEDERATION, } from '@rh-support/utils';
|
|
11
|
+
import { SolrKeys, SolrPivotKeys } from '../enums/filters';
|
|
12
|
+
import { mapGraphQLResponseToCaseList } from './caseListMapper';
|
|
13
|
+
import { createGraphQLVariablesFromFilterState, getOwnerFederationIdsToResolve, } from './caseListVariablesBuilder';
|
|
14
|
+
const pageCursors = new Map();
|
|
15
|
+
/**
|
|
16
|
+
* Workaround step 1 for Assigned To (case OwnerId): lookup SalesforceSupportUser and
|
|
17
|
+
* SalesforceSupportGroup IDs by federation ID or name. Pre-resolved here and passed into
|
|
18
|
+
* createGraphQLVariablesFromFilterState as OwnerId — do not use nested Owner filters on the case where clause.
|
|
19
|
+
*/
|
|
20
|
+
function resolveOwnerIds(searchTerms, apolloClient) {
|
|
21
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
22
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
23
|
+
if (!searchTerms.length)
|
|
24
|
+
return [];
|
|
25
|
+
const ownerIds = [];
|
|
26
|
+
for (const searchTerm of searchTerms) {
|
|
27
|
+
try {
|
|
28
|
+
const [userResult, groupResult] = yield Promise.all([
|
|
29
|
+
apolloClient.query({
|
|
30
|
+
query: GET_USER_IDS_BY_FEDERATION,
|
|
31
|
+
variables: {
|
|
32
|
+
searchTerm,
|
|
33
|
+
namePattern: `%${searchTerm}%`,
|
|
34
|
+
},
|
|
35
|
+
fetchPolicy: 'network-only',
|
|
36
|
+
}),
|
|
37
|
+
apolloClient.query({
|
|
38
|
+
query: GET_GROUP_IDS_BY_NAME,
|
|
39
|
+
variables: {
|
|
40
|
+
namePattern: `%${searchTerm}%`,
|
|
41
|
+
},
|
|
42
|
+
fetchPolicy: 'network-only',
|
|
43
|
+
}),
|
|
44
|
+
]);
|
|
45
|
+
const userEdges = ((_d = (_c = (_b = (_a = userResult.data) === null || _a === void 0 ? void 0 : _a.salesforce_support_uiapi) === null || _b === void 0 ? void 0 : _b.query) === null || _c === void 0 ? void 0 : _c.SalesforceSupportUser) === null || _d === void 0 ? void 0 : _d.edges) || [];
|
|
46
|
+
userEdges.forEach((edge) => {
|
|
47
|
+
var _a, _b, _c;
|
|
48
|
+
const federationId = (_b = (_a = edge.node) === null || _a === void 0 ? void 0 : _a.FederationIdentifier) === null || _b === void 0 ? void 0 : _b.value;
|
|
49
|
+
if (((_c = edge.node) === null || _c === void 0 ? void 0 : _c.Id) && federationId) {
|
|
50
|
+
ownerIds.push(edge.node.Id);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
const groupEdges = ((_h = (_g = (_f = (_e = groupResult.data) === null || _e === void 0 ? void 0 : _e.salesforce_support_uiapi) === null || _f === void 0 ? void 0 : _f.query) === null || _g === void 0 ? void 0 : _g.SalesforceSupportGroup) === null || _h === void 0 ? void 0 : _h.edges) || [];
|
|
54
|
+
groupEdges.forEach((edge) => {
|
|
55
|
+
var _a;
|
|
56
|
+
if ((_a = edge.node) === null || _a === void 0 ? void 0 : _a.Id) {
|
|
57
|
+
ownerIds.push(edge.node.Id);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.error('[GraphQL] Failed to resolve owner IDs:', error);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return [...new Set(ownerIds)];
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
export function clearPageCursors() {
|
|
69
|
+
pageCursors.clear();
|
|
70
|
+
}
|
|
71
|
+
function getCursorForPage(page) {
|
|
72
|
+
var _a;
|
|
73
|
+
if (page <= 1)
|
|
74
|
+
return undefined;
|
|
75
|
+
return (_a = pageCursors.get(page)) !== null && _a !== void 0 ? _a : undefined;
|
|
76
|
+
}
|
|
77
|
+
function storeEndCursor(currentPage, endCursor) {
|
|
78
|
+
pageCursors.set(currentPage + 1, endCursor);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Resolves missing Product2 IDs for product/version filters loaded from URL.
|
|
82
|
+
* When filters come from the UI, IDs are already set by ProductsFilter/VersionsFilter.
|
|
83
|
+
* When filters come from a URL (which only contains product/version names), this function
|
|
84
|
+
* queries GraphQL to resolve names → IDs so buildProductFilter can construct the where clause.
|
|
85
|
+
* Uses cache-first policy to avoid redundant network calls.
|
|
86
|
+
*/
|
|
87
|
+
function resolveVersionProductIds(filterState, apolloClient) {
|
|
88
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
89
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
90
|
+
const products = (_a = filterState.filterInfo) === null || _a === void 0 ? void 0 : _a[SolrPivotKeys.product_version];
|
|
91
|
+
if (!(products === null || products === void 0 ? void 0 : products.length))
|
|
92
|
+
return;
|
|
93
|
+
for (const product of products) {
|
|
94
|
+
// Resolve parent product ID by name (only needed for URL-based filters)
|
|
95
|
+
if (!product.productId) {
|
|
96
|
+
try {
|
|
97
|
+
const { data: prodData } = yield apolloClient.query({
|
|
98
|
+
query: GET_PRODUCTS,
|
|
99
|
+
variables: {
|
|
100
|
+
where: { Name: { eq: product.value }, IsActive: { eq: true } },
|
|
101
|
+
first: 1,
|
|
102
|
+
},
|
|
103
|
+
fetchPolicy: 'cache-first',
|
|
104
|
+
});
|
|
105
|
+
const parentEdges = (_e = (_d = (_c = (_b = prodData === null || prodData === void 0 ? void 0 : prodData.salesforce_support_uiapi) === null || _b === void 0 ? void 0 : _b.query) === null || _c === void 0 ? void 0 : _c.SalesforceSupportProduct2) === null || _d === void 0 ? void 0 : _d.edges) !== null && _e !== void 0 ? _e : [];
|
|
106
|
+
if (parentEdges.length > 0) {
|
|
107
|
+
product.productId = parentEdges[0].node.Id;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (_k) {
|
|
111
|
+
// continue without parent ID
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const versions = product[SolrKeys.version];
|
|
115
|
+
if (!(versions === null || versions === void 0 ? void 0 : versions.length) || !product.productId)
|
|
116
|
+
continue;
|
|
117
|
+
const hasUnresolvedVersions = versions.some((v) => v.productId === undefined || v.productId === null);
|
|
118
|
+
if (!hasUnresolvedVersions)
|
|
119
|
+
continue;
|
|
120
|
+
// Fetch child products for this parent and match version names to their Product2 IDs
|
|
121
|
+
try {
|
|
122
|
+
const { data } = yield apolloClient.query({
|
|
123
|
+
query: GET_PRODUCTS,
|
|
124
|
+
variables: {
|
|
125
|
+
where: { ParentProduct__c: { eq: product.productId }, IsActive: { eq: true } },
|
|
126
|
+
first: 200,
|
|
127
|
+
orderBy: { Name: { order: 'ASC' } },
|
|
128
|
+
},
|
|
129
|
+
fetchPolicy: 'cache-first',
|
|
130
|
+
});
|
|
131
|
+
const edges = (_j = (_h = (_g = (_f = data === null || data === void 0 ? void 0 : data.salesforce_support_uiapi) === null || _f === void 0 ? void 0 : _f.query) === null || _g === void 0 ? void 0 : _g.SalesforceSupportProduct2) === null || _h === void 0 ? void 0 : _h.edges) !== null && _j !== void 0 ? _j : [];
|
|
132
|
+
const childProducts = edges.map((edge) => ({
|
|
133
|
+
id: edge.node.Id,
|
|
134
|
+
name: edge.node.Name.value,
|
|
135
|
+
}));
|
|
136
|
+
versions.forEach((ver) => {
|
|
137
|
+
if (ver.productId)
|
|
138
|
+
return;
|
|
139
|
+
const match = childProducts.find((cp) => cp.name === ver.value || cp.name.endsWith(ver.value));
|
|
140
|
+
if (match) {
|
|
141
|
+
ver.productId = match.id;
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
console.error('[GraphQL] Failed to resolve version product IDs:', error);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
export function getCaseListFromGraphQL(filterState, apolloClient, limitOverride, signal, selectedCaseNumbers) {
|
|
152
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
153
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
154
|
+
try {
|
|
155
|
+
yield resolveVersionProductIds(filterState, apolloClient);
|
|
156
|
+
// Pre-resolve Assigned To owner IDs — users and groups (see resolveOwnerIds / caseListVariablesBuilder comments).
|
|
157
|
+
const federationIdsToResolve = getOwnerFederationIdsToResolve(filterState);
|
|
158
|
+
let resolvedUserIds;
|
|
159
|
+
if (federationIdsToResolve.length) {
|
|
160
|
+
const ownerUserIds = yield resolveOwnerIds(federationIdsToResolve, apolloClient);
|
|
161
|
+
resolvedUserIds = { ownerUserIds };
|
|
162
|
+
}
|
|
163
|
+
const variables = yield createGraphQLVariablesFromFilterState(filterState, apolloClient, resolvedUserIds);
|
|
164
|
+
if (limitOverride) {
|
|
165
|
+
variables.first = limitOverride;
|
|
166
|
+
}
|
|
167
|
+
const currentPage = ((_a = filterState.paginationInfo) === null || _a === void 0 ? void 0 : _a.currentPage) || 1;
|
|
168
|
+
if (selectedCaseNumbers === null || selectedCaseNumbers === void 0 ? void 0 : selectedCaseNumbers.length) {
|
|
169
|
+
const caseNumberFilter = { CaseNumber__c: { in: selectedCaseNumbers } };
|
|
170
|
+
variables.first = selectedCaseNumbers.length;
|
|
171
|
+
if ((_b = variables.where) === null || _b === void 0 ? void 0 : _b.and) {
|
|
172
|
+
variables.where.and.push(caseNumberFilter);
|
|
173
|
+
}
|
|
174
|
+
else if (variables.where) {
|
|
175
|
+
variables.where = { and: [variables.where, caseNumberFilter] };
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
variables.where = caseNumberFilter;
|
|
179
|
+
}
|
|
180
|
+
variables.after = undefined;
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
variables.after = getCursorForPage(currentPage);
|
|
184
|
+
}
|
|
185
|
+
const { data, error } = yield apolloClient.query({
|
|
186
|
+
query: GET_CASES_BY_FILTERS,
|
|
187
|
+
variables,
|
|
188
|
+
fetchPolicy: 'network-only',
|
|
189
|
+
context: signal ? { fetchOptions: { signal } } : undefined,
|
|
190
|
+
});
|
|
191
|
+
const connection = (_d = (_c = data === null || data === void 0 ? void 0 : data.salesforce_support_uiapi) === null || _c === void 0 ? void 0 : _c.query) === null || _d === void 0 ? void 0 : _d.SalesforceSupportCase;
|
|
192
|
+
if (!connection) {
|
|
193
|
+
return {
|
|
194
|
+
caseListResponse: { response: { docs: [], numFound: 0, start: 0 } },
|
|
195
|
+
showErrorMessage: !!error,
|
|
196
|
+
hasNextPage: false,
|
|
197
|
+
endCursor: undefined,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
if ((_e = connection.pageInfo) === null || _e === void 0 ? void 0 : _e.endCursor) {
|
|
201
|
+
storeEndCursor(currentPage, connection.pageInfo.endCursor);
|
|
202
|
+
}
|
|
203
|
+
const docs = mapGraphQLResponseToCaseList(connection.edges || []);
|
|
204
|
+
return {
|
|
205
|
+
caseListResponse: {
|
|
206
|
+
response: {
|
|
207
|
+
docs,
|
|
208
|
+
numFound: connection.totalCount || 0,
|
|
209
|
+
start: 0,
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
showErrorMessage: false,
|
|
213
|
+
hasNextPage: (_g = (_f = connection.pageInfo) === null || _f === void 0 ? void 0 : _f.hasNextPage) !== null && _g !== void 0 ? _g : false,
|
|
214
|
+
endCursor: (_j = (_h = connection.pageInfo) === null || _h === void 0 ? void 0 : _h.endCursor) !== null && _j !== void 0 ? _j : undefined,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
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)) {
|
|
219
|
+
return {
|
|
220
|
+
caseListResponse: { response: { docs: [], numFound: 0, start: 0 } },
|
|
221
|
+
showErrorMessage: false,
|
|
222
|
+
hasNextPage: false,
|
|
223
|
+
endCursor: undefined,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
console.error('[GraphQL] getCaseListFromGraphQL error:', error);
|
|
227
|
+
return {
|
|
228
|
+
caseListResponse: { response: { docs: [], numFound: 0, start: 0 } },
|
|
229
|
+
showErrorMessage: true,
|
|
230
|
+
hasNextPage: false,
|
|
231
|
+
endCursor: undefined,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Fetches the next page of cases for infinite scroll.
|
|
238
|
+
* Uses the provided `afterCursor` instead of the page-based cursor store.
|
|
239
|
+
*/
|
|
240
|
+
export function loadMoreCases(filterState, apolloClient, afterCursor, signal) {
|
|
241
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
242
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
243
|
+
try {
|
|
244
|
+
yield resolveVersionProductIds(filterState, apolloClient);
|
|
245
|
+
// Pre-resolve Assigned To owner IDs — users and groups (see resolveOwnerIds / caseListVariablesBuilder comments).
|
|
246
|
+
const federationIdsToResolve = getOwnerFederationIdsToResolve(filterState);
|
|
247
|
+
let resolvedUserIds;
|
|
248
|
+
if (federationIdsToResolve.length) {
|
|
249
|
+
const ownerUserIds = yield resolveOwnerIds(federationIdsToResolve, apolloClient);
|
|
250
|
+
resolvedUserIds = { ownerUserIds };
|
|
251
|
+
}
|
|
252
|
+
const variables = yield createGraphQLVariablesFromFilterState(filterState, apolloClient, resolvedUserIds);
|
|
253
|
+
variables.first = 20;
|
|
254
|
+
variables.after = afterCursor;
|
|
255
|
+
const { data } = yield apolloClient.query({
|
|
256
|
+
query: GET_CASES_BY_FILTERS,
|
|
257
|
+
variables,
|
|
258
|
+
fetchPolicy: 'network-only',
|
|
259
|
+
context: signal ? { fetchOptions: { signal } } : undefined,
|
|
260
|
+
});
|
|
261
|
+
const connection = (_b = (_a = data === null || data === void 0 ? void 0 : data.salesforce_support_uiapi) === null || _a === void 0 ? void 0 : _a.query) === null || _b === void 0 ? void 0 : _b.SalesforceSupportCase;
|
|
262
|
+
if (!connection) {
|
|
263
|
+
return { docs: [], hasNextPage: false, endCursor: undefined };
|
|
264
|
+
}
|
|
265
|
+
const docs = mapGraphQLResponseToCaseList(connection.edges || []);
|
|
266
|
+
return {
|
|
267
|
+
docs,
|
|
268
|
+
hasNextPage: (_d = (_c = connection.pageInfo) === null || _c === void 0 ? void 0 : _c.hasNextPage) !== null && _d !== void 0 ? _d : false,
|
|
269
|
+
endCursor: (_f = (_e = connection.pageInfo) === null || _e === void 0 ? void 0 : _e.endCursor) !== null && _f !== void 0 ? _f : undefined,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
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)) {
|
|
274
|
+
return { docs: [], hasNextPage: false, endCursor: undefined };
|
|
275
|
+
}
|
|
276
|
+
console.error('[GraphQL] loadMoreCases error:', error);
|
|
277
|
+
throw error;
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
}
|
|
@@ -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;AAEhE,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAgC9E;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC,GAAG,aAAa,EAAE,CAElG"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export function mapGraphQLCaseToCaseListItem(node) {
|
|
2
|
+
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;
|
|
3
|
+
const isEscalated = ((_a = node.IsEscalated) === null || _a === void 0 ? void 0 : _a.value) === true;
|
|
4
|
+
return {
|
|
5
|
+
id: node.Id || '',
|
|
6
|
+
case_number: ((_b = node.CaseNumber__c) === null || _b === void 0 ? void 0 : _b.value) || '',
|
|
7
|
+
case_summary: ((_c = node.Subject) === null || _c === void 0 ? void 0 : _c.value) || '',
|
|
8
|
+
case_status: ((_d = node.Status) === null || _d === void 0 ? void 0 : _d.value) || '',
|
|
9
|
+
case_severity: ((_e = node.Priority) === null || _e === void 0 ? void 0 : _e.value) || '',
|
|
10
|
+
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)
|
|
11
|
+
? [node.Product.ParentProduct__r.Name.value]
|
|
12
|
+
: ((_k = (_j = node.Product) === null || _j === void 0 ? void 0 : _j.Name) === null || _k === void 0 ? void 0 : _k.value)
|
|
13
|
+
? [node.Product.Name.value]
|
|
14
|
+
: [],
|
|
15
|
+
case_version: ((_m = (_l = node.Product) === null || _l === void 0 ? void 0 : _l.VersionName__c) === null || _m === void 0 ? void 0 : _m.value) || '',
|
|
16
|
+
case_type: ((_o = node.Type) === null || _o === void 0 ? void 0 : _o.value) || '',
|
|
17
|
+
case_accountNumber: ((_p = node.Account_Number__c) === null || _p === void 0 ? void 0 : _p.value) || '',
|
|
18
|
+
case_contactName: ((_r = (_q = node.SalesforceSupportContact) === null || _q === void 0 ? void 0 : _q.Name) === null || _r === void 0 ? void 0 : _r.value) || '',
|
|
19
|
+
case_owner: ((_t = (_s = node.Owner) === null || _s === void 0 ? void 0 : _s.Name) === null || _t === void 0 ? void 0 : _t.value) || '',
|
|
20
|
+
case_createdByName: ((_v = (_u = node.CreatedBy) === null || _u === void 0 ? void 0 : _u.Name) === null || _v === void 0 ? void 0 : _v.value) || '',
|
|
21
|
+
case_createdDate: ((_w = node.CreatedDate) === null || _w === void 0 ? void 0 : _w.value) || '',
|
|
22
|
+
case_lastModifiedByName: ((_y = (_x = node.LastModifiedBy) === null || _x === void 0 ? void 0 : _x.Name) === null || _y === void 0 ? void 0 : _y.value) || '',
|
|
23
|
+
case_lastModifiedDate: ((_z = node.LastModifiedDate) === null || _z === void 0 ? void 0 : _z.value) || '',
|
|
24
|
+
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) || '',
|
|
25
|
+
case_last_public_update_date: ((_2 = node.LastModifiedDate) === null || _2 === void 0 ? void 0 : _2.value) || '',
|
|
26
|
+
case_customer_escalation: isEscalated,
|
|
27
|
+
case_closedDate: ((_3 = node.ClosedDate) === null || _3 === void 0 ? void 0 : _3.value) || '',
|
|
28
|
+
case_folderName: ((_5 = (_4 = node.Group__r) === null || _4 === void 0 ? void 0 : _4.Name) === null || _5 === void 0 ? void 0 : _5.value) || '',
|
|
29
|
+
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) || '',
|
|
30
|
+
case_alternate_id: ((_8 = node.AlternateCaseId__c) === null || _8 === void 0 ? void 0 : _8.value) || '',
|
|
31
|
+
uri: '',
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export function mapGraphQLResponseToCaseList(edges) {
|
|
35
|
+
return edges.map((edge) => mapGraphQLCaseToCaseListItem(edge.node));
|
|
36
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
+
}
|
|
10
|
+
export interface IResolvedUserIds {
|
|
11
|
+
/** Pre-resolved OwnerId values (SalesforceSupportUser or SalesforceSupportGroup). */
|
|
12
|
+
ownerUserIds?: string[];
|
|
13
|
+
}
|
|
14
|
+
export declare function createGraphQLVariablesFromFilterState(filterState: ICaseListFilterState, apolloClient: ApolloClient, resolvedUserIds?: IResolvedUserIds): Promise<IGraphQLCaseListVariables>;
|
|
15
|
+
//# 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;AAQnD,OAAO,EAEH,oBAAoB,EAEvB,MAAM,+CAA+C,CAAC;AAMvD,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAW1F;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;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC7B,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AA0SD,wBAAsB,qCAAqC,CACvD,WAAW,EAAE,oBAAoB,EACjC,YAAY,EAAE,YAAY,EAC1B,eAAe,CAAC,EAAE,gBAAgB,GACnC,OAAO,CAAC,yBAAyB,CAAC,CA4HpC"}
|