@rh-support/cases 2.4.10-beta.6 → 2.5.1
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/README.md +2 -0
- package/lib/esm/components/case/NewCaseButton.d.ts +2 -1
- package/lib/esm/components/case/NewCaseButton.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseList.d.ts +4 -3
- package/lib/esm/components/case-list/CaseList.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseList.js +42 -44
- package/lib/esm/components/case-list/CaseListContext.d.ts +1 -1
- package/lib/esm/components/case-list/CaseListContext.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListFilterContext.d.ts +1 -1
- package/lib/esm/components/case-list/CaseListFilterContext.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListFilterHelpers.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListFilterReducer.d.ts +6 -3
- package/lib/esm/components/case-list/CaseListFilterReducer.d.ts.map +1 -1
- package/lib/esm/components/case-list/CaseListFilterReducer.js +3 -0
- package/lib/esm/components/case-list/CaseListReducer.d.ts +2 -2
- package/lib/esm/components/case-list/CaseListReducer.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/AccountsBookmarkedGroupFilter.d.ts +3 -2
- package/lib/esm/components/case-list/case-list-filters/AccountsBookmarkedGroupFilter.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/AccountsBookmarkedGroupFilter.js +25 -11
- package/lib/esm/components/case-list/case-list-filters/AccountsFilter.d.ts +2 -1
- 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 +10 -5
- package/lib/esm/components/case-list/case-list-filters/AdditionalFilters.d.ts +2 -1
- 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 +19 -4
- package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.d.ts +2 -1
- 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 +1 -1
- package/lib/esm/components/case-list/case-list-filters/CaseListFilters.d.ts +2 -1
- package/lib/esm/components/case-list/case-list-filters/CaseListFilters.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-filters/CreatorSsoNameFilter.d.ts +12 -1
- 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 +138 -163
- package/lib/esm/components/case-list/case-list-filters/CreatorSsoNameFilterChip.d.ts +2 -1
- 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 +1 -1
- package/lib/esm/components/case-list/case-list-filters/GroupsFilter.d.ts +2 -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 +157 -27
- package/lib/esm/components/case-list/case-list-filters/InternalSsoNameFilter.d.ts +3 -0
- package/lib/esm/components/case-list/case-list-filters/InternalSsoNameFilter.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-list-filters/InternalSsoNameFilter.js +207 -0
- package/lib/esm/components/case-list/case-list-filters/ProductFilterChip.d.ts +2 -1
- 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 +1 -1
- package/lib/esm/components/case-list/case-list-filters/ProductsFilter.d.ts +2 -1
- 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 +7 -5
- package/lib/esm/components/case-list/case-list-filters/SeverityFilter.d.ts +2 -1
- 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 +4 -4
- package/lib/esm/components/case-list/case-list-filters/StatusFilter.d.ts +2 -1
- 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 +4 -4
- package/lib/esm/components/case-list/case-list-filters/TypeFilter.d.ts +2 -1
- 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 +3 -3
- package/lib/esm/components/case-list/case-list-filters/VersionsFilter.d.ts +2 -1
- 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 +35 -4
- package/lib/esm/components/case-list/case-list-table/CaseListTable.d.ts +2 -1
- 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 +211 -113
- package/lib/esm/components/case-list/case-list-table/CloseCaseBtn.d.ts +2 -1
- 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 +7 -2
- package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.d.ts +19 -0
- package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.js +296 -0
- package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.scss +27 -0
- package/lib/esm/components/case-list/case-list-table/ExportCaseListCSV.d.ts +3 -1
- 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 +19 -96
- package/lib/esm/components/case-list/case-list-table/SeverityLabel.d.ts +2 -1
- package/lib/esm/components/case-list/case-list-table/SeverityLabel.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-list-table/table-column-selector/TableColumnSelector.d.ts +9 -0
- package/lib/esm/components/case-list/case-list-table/table-column-selector/TableColumnSelector.d.ts.map +1 -0
- package/lib/esm/components/case-list/case-list-table/table-column-selector/TableColumnSelector.js +53 -0
- package/lib/esm/components/case-list/case-list-table/table-column-selector/TableColumnSelector.scss +7 -0
- package/lib/esm/components/case-list/case-search/AdvanceSearch.d.ts +2 -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 +18 -13
- package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.d.ts +2 -1
- package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.js +7 -6
- package/lib/esm/components/case-list/case-search/CaseSearch.d.ts +2 -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 +2 -2
- package/lib/esm/components/case-list/case-search/SaveCaseSearchModal.d.ts +2 -1
- package/lib/esm/components/case-list/case-search/SaveCaseSearchModal.d.ts.map +1 -1
- package/lib/esm/components/case-list/case-search/SaveCaseSearchModal.js +48 -40
- package/lib/esm/components/case-list/case-search/useAdvanceSearchParser.js +1 -1
- package/lib/esm/components/escalations/EscalationForm.d.ts +1 -1
- package/lib/esm/components/escalations/EscalationForm.d.ts.map +1 -1
- package/lib/esm/components/escalations/EscalationForm.js +18 -9
- package/lib/esm/components/escalations/PartnerEscalation.d.ts +2 -1
- package/lib/esm/components/escalations/PartnerEscalation.d.ts.map +1 -1
- package/lib/esm/components/index.d.ts +2 -8
- package/lib/esm/components/index.d.ts.map +1 -1
- package/lib/esm/components/index.js +5 -8
- package/lib/esm/css/caseList.css +85 -64
- package/lib/esm/css/caseSearch.css +1 -1
- package/lib/esm/css/escalation.css +4 -4
- package/lib/esm/enums/cache.d.ts +1 -1
- package/lib/esm/enums/cache.d.ts.map +1 -1
- package/lib/esm/enums/case.js +1 -1
- package/lib/esm/enums/filters.d.ts +1 -1
- package/lib/esm/enums/filters.d.ts.map +1 -1
- package/lib/esm/enums/filters.js +1 -1
- package/lib/esm/i18n/template-es.js +1 -1
- package/lib/esm/index.d.ts +0 -2
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/index.js +0 -2
- package/lib/esm/models/caseList.d.ts +5 -2
- package/lib/esm/models/caseList.d.ts.map +1 -1
- package/lib/esm/scss/_main.scss +11 -11
- package/lib/esm/scss/_pf-overrides.scss +40 -4
- package/lib/esm/scss/index.scss +0 -1
- package/lib/esm/test-utils/testSetup.d.ts +1 -1
- package/lib/esm/test-utils/testSetup.d.ts.map +1 -1
- package/lib/esm/test-utils/testSetup.js +1 -1
- package/lib/esm/test-utils/testUtils.d.ts +1 -1
- package/lib/esm/test-utils/testUtils.js +1 -1
- package/lib/esm/utils/caseListUtils.js +3 -3
- package/lib/esm/utils/caseSearchUtils.d.ts +3 -3
- package/lib/esm/utils/caseSearchUtils.d.ts.map +1 -1
- package/lib/esm/utils/caseSearchUtils.js +18 -5
- package/lib/esm/utils/constants.js +1 -1
- package/lib/esm/utils/routeUtils.js +2 -1
- package/package.json +35 -32
|
@@ -0,0 +1,296 @@
|
|
|
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 './DownloadCSVFileModal.scss';
|
|
11
|
+
import { publicApi } from '@cee-eng/hydrajs';
|
|
12
|
+
import { Button, Checkbox, Form, FormGroup, Grid, GridItem, InputGroup, Modal, ModalVariant, Spinner, TextInput, ValidatedOptions, } from '@patternfly/react-core';
|
|
13
|
+
import DownloadIcon from '@patternfly/react-icons/dist/js/icons/download-icon';
|
|
14
|
+
import TimesCircleIcon from '@patternfly/react-icons/dist/js/icons/times-circle-icon';
|
|
15
|
+
import { ToastNotification, useFetch } from '@rh-support/components';
|
|
16
|
+
import { downloadCSV, formatDateTime, toNewCaseTypeSwitcher } from '@rh-support/utils';
|
|
17
|
+
import { isEmpty } from 'lodash';
|
|
18
|
+
import React, { useEffect, useMemo, useState } from 'react';
|
|
19
|
+
import { useTranslation } from 'react-i18next';
|
|
20
|
+
import { SFDCKeys, SolrKeys } from '../../../enums/filters';
|
|
21
|
+
import { getCaseListFromSolr } from '../../../utils/caseListUtils';
|
|
22
|
+
import { createQueryForCSVDownload } from '../../../utils/caseSearchUtils';
|
|
23
|
+
const csvHeadersSolr = [
|
|
24
|
+
{ label: 'Case number', key: SolrKeys.caseNumber },
|
|
25
|
+
{
|
|
26
|
+
label: 'Case link',
|
|
27
|
+
key: 'case_link',
|
|
28
|
+
},
|
|
29
|
+
{ label: 'Title', key: SolrKeys.caseSummary },
|
|
30
|
+
];
|
|
31
|
+
const csvHeadersSFDC = [
|
|
32
|
+
{ label: 'Case number', key: SFDCKeys.caseNumber },
|
|
33
|
+
{
|
|
34
|
+
label: 'Case link',
|
|
35
|
+
key: 'case_link',
|
|
36
|
+
},
|
|
37
|
+
{ label: 'Title', key: SFDCKeys.caseSummary },
|
|
38
|
+
];
|
|
39
|
+
export default function DownloadCSVFileModal(props) {
|
|
40
|
+
const { onClose, onModalshow, isDisabled, loggedInUserRights, loggedInUsersAccount, filterState, selectedCases, filteredCaseCount, } = props;
|
|
41
|
+
const { t } = useTranslation();
|
|
42
|
+
const { isFetching, request } = useFetch(getCaseListFromSolr, { propgateErrors: true });
|
|
43
|
+
const [downloadCSVFileName, setDownloadCSVFileName] = useState('CaseList.csv');
|
|
44
|
+
const [isFetchingSFDC, setIsFetchingSFDC] = useState(false);
|
|
45
|
+
const [checkboxes, setCheckboxes] = useState({
|
|
46
|
+
selectAll: false,
|
|
47
|
+
ownerName: false,
|
|
48
|
+
modifiedBy: false,
|
|
49
|
+
severity: false,
|
|
50
|
+
status: false,
|
|
51
|
+
createdBy: false,
|
|
52
|
+
productVersion: false,
|
|
53
|
+
accountNumber: false,
|
|
54
|
+
alternateId: false,
|
|
55
|
+
type: false,
|
|
56
|
+
caseClosedDate: false,
|
|
57
|
+
group: false,
|
|
58
|
+
});
|
|
59
|
+
const [isSaveClicked, setIsSavedClicked] = useState(false);
|
|
60
|
+
function getKey(key, isSecureSupport) {
|
|
61
|
+
return isSecureSupport ? SFDCKeys[key] : SolrKeys[key];
|
|
62
|
+
}
|
|
63
|
+
const isSecureSupportUser = loggedInUsersAccount.data.secureSupport;
|
|
64
|
+
const headerDefinitions = useMemo(() => [
|
|
65
|
+
{
|
|
66
|
+
checkbox: checkboxes.ownerName,
|
|
67
|
+
key: getKey('ownerName', isSecureSupportUser),
|
|
68
|
+
label: 'Owner name',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
checkbox: checkboxes.severity,
|
|
72
|
+
key: getKey('severity', isSecureSupportUser),
|
|
73
|
+
label: 'Severity',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
checkbox: checkboxes.createdBy,
|
|
77
|
+
key: getKey('createdBy', isSecureSupportUser),
|
|
78
|
+
label: 'Created by',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
checkbox: checkboxes.createdBy,
|
|
82
|
+
key: getKey('createdDate', isSecureSupportUser),
|
|
83
|
+
label: 'Created date',
|
|
84
|
+
transform: formatDateTime,
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
checkbox: checkboxes.accountNumber,
|
|
88
|
+
key: getKey('accountNumber', isSecureSupportUser),
|
|
89
|
+
label: 'Account number',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
checkbox: checkboxes.type,
|
|
93
|
+
key: getKey(isSecureSupportUser ? 'caseType' : 'type', isSecureSupportUser),
|
|
94
|
+
label: 'Support type',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
checkbox: checkboxes.modifiedBy,
|
|
98
|
+
key: getKey('modifiedBy', isSecureSupportUser),
|
|
99
|
+
label: 'Modified by',
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
checkbox: checkboxes.modifiedBy,
|
|
103
|
+
key: getKey('modifiedDate', isSecureSupportUser),
|
|
104
|
+
label: 'Modified date',
|
|
105
|
+
transform: formatDateTime,
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
checkbox: checkboxes.status,
|
|
109
|
+
key: getKey('status', isSecureSupportUser),
|
|
110
|
+
label: 'Status',
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
checkbox: checkboxes.productVersion,
|
|
114
|
+
key: getKey('product', isSecureSupportUser),
|
|
115
|
+
label: 'Product',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
checkbox: checkboxes.productVersion,
|
|
119
|
+
key: getKey('version', isSecureSupportUser),
|
|
120
|
+
label: 'Version',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
checkbox: checkboxes.alternateId,
|
|
124
|
+
key: getKey('alternateId', isSecureSupportUser),
|
|
125
|
+
label: 'Alternate ID',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
checkbox: checkboxes.caseClosedDate,
|
|
129
|
+
key: getKey('caseClosedDate', isSecureSupportUser),
|
|
130
|
+
label: 'Closed date',
|
|
131
|
+
transform: formatDateTime,
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
checkbox: checkboxes.group,
|
|
135
|
+
key: getKey('groupName', isSecureSupportUser),
|
|
136
|
+
label: 'Group',
|
|
137
|
+
},
|
|
138
|
+
], [checkboxes, isSecureSupportUser]);
|
|
139
|
+
const getHeaders = () => {
|
|
140
|
+
const updatedCsvHeaders = isSecureSupportUser ? csvHeadersSFDC : csvHeadersSolr;
|
|
141
|
+
headerDefinitions.forEach((headerDefinition) => {
|
|
142
|
+
const { checkbox, key, label, transform } = headerDefinition;
|
|
143
|
+
const index = updatedCsvHeaders.findIndex((header) => header.key === key);
|
|
144
|
+
if (checkbox) {
|
|
145
|
+
if (index === -1) {
|
|
146
|
+
updatedCsvHeaders.push({ key, label, transform });
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
if (index !== -1) {
|
|
151
|
+
updatedCsvHeaders.splice(index, 1);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
return updatedCsvHeaders;
|
|
156
|
+
};
|
|
157
|
+
const isFetchingCSVData = isFetching || isFetchingSFDC;
|
|
158
|
+
const partnerSearch = loggedInUserRights.data.hasManagedAccounts();
|
|
159
|
+
const splitExtensionName = downloadCSVFileName.split('.')[0].replace(/ +/g, ''); // To split and trim value before saving PDF
|
|
160
|
+
const onCancel = () => {
|
|
161
|
+
onClose && onClose();
|
|
162
|
+
setIsSavedClicked(false);
|
|
163
|
+
setDownloadCSVFileName('CaseList.csv');
|
|
164
|
+
};
|
|
165
|
+
const handleCSVFileNameChange = (value) => {
|
|
166
|
+
setDownloadCSVFileName(value);
|
|
167
|
+
};
|
|
168
|
+
const clearDownloadCSVFileName = () => {
|
|
169
|
+
setDownloadCSVFileName('');
|
|
170
|
+
};
|
|
171
|
+
const handleCheckboxChange = (key) => {
|
|
172
|
+
setCheckboxes((prevCheckboxes) => (Object.assign(Object.assign({}, prevCheckboxes), { [key]: !prevCheckboxes[key] })));
|
|
173
|
+
};
|
|
174
|
+
const checkboxValues = Object.values(checkboxes).slice(1); // as we don't want selectAll value
|
|
175
|
+
const allCheckBoxNotSelected = checkboxValues.includes(false);
|
|
176
|
+
// For SOLR
|
|
177
|
+
const onExportCSVClick = () => __awaiter(this, void 0, void 0, function* () {
|
|
178
|
+
try {
|
|
179
|
+
setIsSavedClicked(true);
|
|
180
|
+
if (!isEmpty(splitExtensionName)) {
|
|
181
|
+
const query = createQueryForCSVDownload(filterState, loggedInUserRights.data, loggedInUsersAccount.data, selectedCases);
|
|
182
|
+
const res = yield request(query, partnerSearch, null, isSecureSupportUser);
|
|
183
|
+
// To map the values in csv to new support type
|
|
184
|
+
const updatedCsvData = res.response.docs.map((row) => (Object.assign(Object.assign({}, row), { case_type: toNewCaseTypeSwitcher(row.case_type), case_link: `https://${window.location.host}${window.location.pathname}/#/case/${row.case_number}` })));
|
|
185
|
+
downloadCSV(updatedCsvData, getHeaders(), splitExtensionName ? `${splitExtensionName}.csv` : 'CaseList.csv');
|
|
186
|
+
onCancel();
|
|
187
|
+
ToastNotification.addSuccessMessage(t('File downloaded successfully!'));
|
|
188
|
+
setIsSavedClicked(false);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
catch (e) {
|
|
192
|
+
onCancel();
|
|
193
|
+
ToastNotification.addDangerMessage(t('File could not be downloaded. Please try again! '));
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
// For SFDC
|
|
197
|
+
const onExportCSVClickSecureSupport = () => __awaiter(this, void 0, void 0, function* () {
|
|
198
|
+
try {
|
|
199
|
+
setIsSavedClicked(true);
|
|
200
|
+
if (!isEmpty(splitExtensionName)) {
|
|
201
|
+
const sfdcFilter = createQueryForCSVDownload(filterState, loggedInUserRights.data, loggedInUsersAccount.data, selectedCases);
|
|
202
|
+
setIsFetchingSFDC(true);
|
|
203
|
+
const sfdcResponse = yield publicApi.caseList.getCaseListFromSFDC(sfdcFilter, false, true);
|
|
204
|
+
setIsFetchingSFDC(false);
|
|
205
|
+
// To map the values in csv to new support type
|
|
206
|
+
const updatedCsvData = sfdcResponse.cases.map((row) => (Object.assign(Object.assign({}, row), { caseType: toNewCaseTypeSwitcher(row.caseType), case_link: `https://${window.location.host}${window.location.pathname}/#/case/${row.caseNumber}` })));
|
|
207
|
+
downloadCSV(updatedCsvData, getHeaders(), splitExtensionName ? `${splitExtensionName}.csv` : 'CaseList.csv');
|
|
208
|
+
onCancel();
|
|
209
|
+
ToastNotification.addSuccessMessage(t('File downloaded successfully!'));
|
|
210
|
+
setIsSavedClicked(false);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
catch (e) {
|
|
214
|
+
setIsFetchingSFDC(false);
|
|
215
|
+
onCancel();
|
|
216
|
+
ToastNotification.addDangerMessage(t('Could not export CSV'));
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
const handleSelectAll = () => {
|
|
220
|
+
const newSelectAllState = !checkboxes.selectAll;
|
|
221
|
+
const updatedCheckboxes = {
|
|
222
|
+
ownerName: newSelectAllState,
|
|
223
|
+
modifiedBy: newSelectAllState,
|
|
224
|
+
severity: newSelectAllState,
|
|
225
|
+
status: newSelectAllState,
|
|
226
|
+
createdBy: newSelectAllState,
|
|
227
|
+
productVersion: newSelectAllState,
|
|
228
|
+
accountNumber: newSelectAllState,
|
|
229
|
+
alternateId: newSelectAllState,
|
|
230
|
+
type: newSelectAllState,
|
|
231
|
+
caseClosedDate: newSelectAllState,
|
|
232
|
+
group: newSelectAllState,
|
|
233
|
+
};
|
|
234
|
+
setCheckboxes((prevCheckboxes) => (Object.assign({ selectAll: !prevCheckboxes.selectAll }, updatedCheckboxes)));
|
|
235
|
+
};
|
|
236
|
+
const csvHeadersOne = [
|
|
237
|
+
{ label: 'Owner', key: 'ownerName' },
|
|
238
|
+
{ label: 'Severity', key: 'severity' },
|
|
239
|
+
{ label: 'Created by', key: 'createdBy' },
|
|
240
|
+
{ label: 'Account number', key: 'accountNumber' },
|
|
241
|
+
{ label: 'Support type', key: 'type' },
|
|
242
|
+
{ label: 'Group', key: 'group' },
|
|
243
|
+
];
|
|
244
|
+
const csvHeadersTwo = [
|
|
245
|
+
{ label: 'Modified by', key: 'modifiedBy' },
|
|
246
|
+
{ label: 'Status', key: 'status' },
|
|
247
|
+
{ label: 'Product and version', key: 'productVersion' },
|
|
248
|
+
{ label: 'Personal reference number', key: 'alternateId' },
|
|
249
|
+
{ label: 'Closed date', key: 'caseClosedDate' },
|
|
250
|
+
];
|
|
251
|
+
const generateCheckboxes = (fieldDefinitions) => {
|
|
252
|
+
return fieldDefinitions.map((field) => (React.createElement(Checkbox, { key: field.key, className: "nested", label: t(field.label), isChecked: checkboxes[field.key], onChange: () => {
|
|
253
|
+
handleCheckboxChange(field.key);
|
|
254
|
+
}, id: field.key, name: field.key })));
|
|
255
|
+
};
|
|
256
|
+
// CSV Modal Body
|
|
257
|
+
const downloadCSVModalBody = () => {
|
|
258
|
+
return (React.createElement(Form, { className: "download-csv-modal-body" },
|
|
259
|
+
React.createElement(FormGroup, { label: t('File name'), fieldId: "download-csv-file-name", isRequired: true },
|
|
260
|
+
React.createElement(InputGroup, null,
|
|
261
|
+
React.createElement(TextInput, { type: "text", id: "csv-file-name", name: "download-csv-file-name", value: downloadCSVFileName, onChange: (_event, value) => handleCSVFileNameChange(value), placeholder: t('Enter a file name'), validated: isSaveClicked && isEmpty(splitExtensionName)
|
|
262
|
+
? ValidatedOptions.error
|
|
263
|
+
: ValidatedOptions.default, isRequired: true }),
|
|
264
|
+
React.createElement(Button, { variant: "plain", onClick: clearDownloadCSVFileName, icon: React.createElement(TimesCircleIcon, null) }))),
|
|
265
|
+
React.createElement(FormGroup, { label: t('Please select the fields you want included in your download.'), fieldId: "download-csv-file-fields-select" },
|
|
266
|
+
React.createElement(Grid, null,
|
|
267
|
+
React.createElement(Checkbox, { label: t('Select all'), isChecked: checkboxes.selectAll, onChange: handleSelectAll, id: "selectAll", name: "selectAll" }),
|
|
268
|
+
React.createElement(GridItem, { span: 6 },
|
|
269
|
+
React.createElement(Checkbox, { className: "nested", label: t('Case ID'), defaultChecked: true, isDisabled: true, id: "controlled-check-2", name: "check2" }),
|
|
270
|
+
generateCheckboxes(csvHeadersOne)),
|
|
271
|
+
React.createElement(GridItem, { span: 6 },
|
|
272
|
+
React.createElement(Checkbox, { className: "nested", label: t('Title'), defaultChecked: true, isDisabled: true, id: "controlled-check-3", name: "check3" }),
|
|
273
|
+
generateCheckboxes(csvHeadersTwo))))));
|
|
274
|
+
};
|
|
275
|
+
const downloadCSVModalDescription = (numberOfCases) => {
|
|
276
|
+
if (numberOfCases <= 1000)
|
|
277
|
+
return t('Your download will include {{count}} cases.', { count: numberOfCases });
|
|
278
|
+
return t('Only the first 1000 cases will be included in your download. Please note this may take a while.');
|
|
279
|
+
};
|
|
280
|
+
// Download CSV modal buttons
|
|
281
|
+
const modalActions = [
|
|
282
|
+
React.createElement(Button, { key: "submit", icon: isFetchingCSVData ? React.createElement(Spinner, { size: "md" }) : React.createElement(DownloadIcon, null), variant: "primary", "data-tracking-id": "download-csv-modal-submit", onClick: isSecureSupportUser ? onExportCSVClickSecureSupport : onExportCSVClick, isDisabled: (isSaveClicked && isEmpty(splitExtensionName)) || isDisabled || isFetchingCSVData }, t('Download')),
|
|
283
|
+
React.createElement(Button, { key: "back", variant: "secondary", onClick: onCancel, isDisabled: isDisabled || isFetchingCSVData, "data-tracking-id": "download-csv-modal-cancel" }, t('Cancel')),
|
|
284
|
+
];
|
|
285
|
+
// To handle select all checkbox when any of the column checkbox is checked or unchecked
|
|
286
|
+
useEffect(() => {
|
|
287
|
+
allCheckBoxNotSelected
|
|
288
|
+
? setCheckboxes((prevCheckboxes) => (Object.assign(Object.assign({}, prevCheckboxes), { selectAll: false })))
|
|
289
|
+
: setCheckboxes((prevCheckboxes) => (Object.assign({}, prevCheckboxes)));
|
|
290
|
+
if (!checkboxes.selectAll && !allCheckBoxNotSelected) {
|
|
291
|
+
handleSelectAll(); // To check select all checkbox
|
|
292
|
+
}
|
|
293
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
294
|
+
}, [allCheckBoxNotSelected, checkboxes.selectAll]);
|
|
295
|
+
return (React.createElement(Modal, { title: t('Download CSV file'), description: downloadCSVModalDescription(selectedCases.length || filteredCaseCount), className: "download-csv-modal", variant: ModalVariant.large, isOpen: onModalshow, onClose: onCancel, actions: modalActions }, downloadCSVModalBody()));
|
|
296
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
.pf-c-form__group {
|
|
2
|
+
.pf-c-form__group-control {
|
|
3
|
+
.pf-l-grid {
|
|
4
|
+
.pf-c-check {
|
|
5
|
+
.pf-c-check__label {
|
|
6
|
+
font-size: 16px;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
.pf-l-grid__item.pf-m-6-col {
|
|
13
|
+
.pf-c-check.nested {
|
|
14
|
+
margin-top: 8px;
|
|
15
|
+
}
|
|
16
|
+
margin-left: 21px;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.download-csv-select-all {
|
|
20
|
+
align-items: center;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.download-csv-modal {
|
|
24
|
+
.download-csv-modal-body {
|
|
25
|
+
overflow: hidden;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { ISolrResponse } from '@rh-support/types/shared';
|
|
2
|
+
import React from 'react';
|
|
2
3
|
import { ICaseListResponse } from '../../../models/caseList';
|
|
3
4
|
interface IProps {
|
|
4
5
|
currentFilteredCaseList: ISolrResponse<ICaseListResponse>;
|
|
5
6
|
isExportCsvDisabled?: boolean;
|
|
7
|
+
selectedCases: string[];
|
|
6
8
|
}
|
|
7
|
-
export declare function ExportCaseListCSV(
|
|
9
|
+
export declare function ExportCaseListCSV({ currentFilteredCaseList, selectedCases, isExportCsvDisabled }: IProps): React.JSX.Element;
|
|
8
10
|
export {};
|
|
9
11
|
//# sourceMappingURL=ExportCaseListCSV.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExportCaseListCSV.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-table/ExportCaseListCSV.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ExportCaseListCSV.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-table/ExportCaseListCSV.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAA+B,MAAM,OAAO,CAAC;AAGpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAK7D,UAAU,MAAM;IACZ,uBAAuB,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAC1D,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,EAAE,MAAM,EAAE,CAAC;CAC3B;AAID,wBAAgB,iBAAiB,CAAC,EAAE,uBAAuB,EAAE,aAAa,EAAE,mBAAmB,EAAE,EAAE,MAAM,qBAqExG"}
|
|
@@ -1,119 +1,42 @@
|
|
|
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 { publicApi } from '@cee-eng/hydrajs';
|
|
11
1
|
import { Button, Spinner } from '@patternfly/react-core';
|
|
12
|
-
import {
|
|
2
|
+
import { useFetch } from '@rh-support/components';
|
|
13
3
|
import { GlobalMetadataStateContext } from '@rh-support/react-context';
|
|
14
|
-
import { downloadCSV, formatDateTime, toNewCaseTypeSwitcher } from '@rh-support/utils';
|
|
15
4
|
import React, { useContext, useState } from 'react';
|
|
16
5
|
import { Trans, useTranslation } from 'react-i18next';
|
|
17
|
-
import { SFDCKeys, SolrKeys } from '../../../enums/filters';
|
|
18
6
|
import { getCaseListFromSolr } from '../../../utils/caseListUtils';
|
|
19
|
-
import { createQueryForCSVDownload } from '../../../utils/caseSearchUtils';
|
|
20
7
|
import { CaseListFilterStateContext } from '../CaseListFilterContext';
|
|
21
|
-
|
|
22
|
-
{ label: 'Account number', key: SolrKeys.accountNumber },
|
|
23
|
-
{ label: 'Case number', key: SolrKeys.caseNumber },
|
|
24
|
-
{ label: 'Summary', key: SolrKeys.caseSummary },
|
|
25
|
-
{ label: 'Status', key: SolrKeys.status },
|
|
26
|
-
{ label: 'Severity', key: SolrKeys.severity },
|
|
27
|
-
{ label: 'Escalated', key: SolrKeys.escalation },
|
|
28
|
-
{ label: 'Owner', key: SolrKeys.contactName },
|
|
29
|
-
{ label: 'Product', key: SolrKeys.product },
|
|
30
|
-
{ label: 'Version', key: SolrKeys.version },
|
|
31
|
-
{ label: 'Created by', key: SolrKeys.createdBy },
|
|
32
|
-
{ label: 'Created date', key: SolrKeys.createdDate, transform: formatDateTime },
|
|
33
|
-
{ label: 'Modified by', key: SolrKeys.modifiedBy },
|
|
34
|
-
{ label: 'Modified date', key: SolrKeys.modifiedDate, transform: formatDateTime },
|
|
35
|
-
{ label: 'Uri', key: SolrKeys.uri },
|
|
36
|
-
{ label: 'Personal reference number', key: SolrKeys.alternateId },
|
|
37
|
-
{ label: 'Support type', key: SolrKeys.type },
|
|
38
|
-
{ label: 'Closed date', key: SolrKeys.caseClosedDate, transform: formatDateTime },
|
|
39
|
-
];
|
|
40
|
-
const csvHeadersSFDC = [
|
|
41
|
-
{ label: 'Account number', key: SFDCKeys.accountNumber },
|
|
42
|
-
{ label: 'Case number', key: SFDCKeys.caseNumber },
|
|
43
|
-
{ label: 'Summary', key: SFDCKeys.caseSummary },
|
|
44
|
-
{ label: 'Status', key: SFDCKeys.status },
|
|
45
|
-
{ label: 'Severity', key: SFDCKeys.severity },
|
|
46
|
-
{ label: 'Escalated', key: SFDCKeys.escalation },
|
|
47
|
-
{ label: 'Owner', key: SFDCKeys.ownerName },
|
|
48
|
-
{ label: 'Product', key: SFDCKeys.product },
|
|
49
|
-
{ label: 'Version', key: SFDCKeys.version },
|
|
50
|
-
{ label: 'Created by', key: SFDCKeys.createdBy },
|
|
51
|
-
{ label: 'Created date', key: SFDCKeys.createdDate, transform: formatDateTime },
|
|
52
|
-
{ label: 'Modified by', key: SFDCKeys.lastPublicUpdateDateBy },
|
|
53
|
-
{ label: 'Modified date', key: SFDCKeys.lastPublicUpdateDate, transform: formatDateTime },
|
|
54
|
-
{ label: 'Uri', key: SFDCKeys.uri },
|
|
55
|
-
{ label: 'Personal reference number', key: SFDCKeys.alternateId },
|
|
56
|
-
{ label: 'Support type', key: SFDCKeys.caseType },
|
|
57
|
-
{ label: 'Closed date', key: SFDCKeys.caseClosedDate, transform: formatDateTime },
|
|
58
|
-
];
|
|
59
|
-
const groupHeaderSOLR = { label: 'Group', key: SolrKeys.groupName };
|
|
60
|
-
const groupHeaderSFDC = { label: 'Group', key: SFDCKeys.groupName };
|
|
8
|
+
import DownloadCSVFileModal from './DownloadCSVFileModal';
|
|
61
9
|
const MAX_LIMIT = 1000;
|
|
62
|
-
export function ExportCaseListCSV(
|
|
63
|
-
var _a
|
|
10
|
+
export function ExportCaseListCSV({ currentFilteredCaseList, selectedCases, isExportCsvDisabled }) {
|
|
11
|
+
var _a;
|
|
64
12
|
const { t } = useTranslation();
|
|
65
13
|
const btnToolTip = t('Export the current list of cases to CSV. Please note that exporting a large number of cases may take a while.');
|
|
66
14
|
const maxLengthTooltip = t('Export the current list of cases to CSV. Please note that only the top {{limit}} cases will be exported and that it may take awhile.', { limit: MAX_LIMIT });
|
|
67
|
-
const currentFilteredCaseCount = (
|
|
68
|
-
const { isFetching
|
|
69
|
-
const [
|
|
70
|
-
const isFetchingCSVData = isFetching
|
|
15
|
+
const currentFilteredCaseCount = (_a = currentFilteredCaseList === null || currentFilteredCaseList === void 0 ? void 0 : currentFilteredCaseList.numFound) !== null && _a !== void 0 ? _a : 0;
|
|
16
|
+
const { isFetching } = useFetch(getCaseListFromSolr, { propgateErrors: true });
|
|
17
|
+
const [openUpdateSeverityModal, setOpenUpdateSeverityModal] = useState(false);
|
|
18
|
+
const isFetchingCSVData = isFetching;
|
|
71
19
|
const isBtnDisabled = isFetchingCSVData || currentFilteredCaseCount === 0;
|
|
72
20
|
let btnTitle = currentFilteredCaseCount >= MAX_LIMIT ? maxLengthTooltip : btnToolTip;
|
|
73
21
|
const filterState = useContext(CaseListFilterStateContext);
|
|
74
22
|
const { globalMetadataState: { loggedInUserRights, loggedInUsersAccount }, } = useContext(GlobalMetadataStateContext);
|
|
75
|
-
const isOrgAdmin = loggedInUserRights.data.isOrgAdmin();
|
|
76
|
-
// CSV For Secure Support Users
|
|
77
|
-
const onExportCSVClickSecureSupport = () => __awaiter(this, void 0, void 0, function* () {
|
|
78
|
-
try {
|
|
79
|
-
const sfdcFilter = createQueryForCSVDownload(filterState, loggedInUserRights.data, loggedInUsersAccount.data);
|
|
80
|
-
setIsFetchingSFDC(true);
|
|
81
|
-
const sfdcResponse = yield publicApi.caseList.getCaseListFromSFDC(sfdcFilter, false, true);
|
|
82
|
-
setIsFetchingSFDC(false);
|
|
83
|
-
const headers = isOrgAdmin ? [...csvHeadersSFDC, groupHeaderSFDC] : csvHeadersSFDC;
|
|
84
|
-
// To map the values in csv to new support type
|
|
85
|
-
const updatedCsvData = sfdcResponse.cases.map((row) => (Object.assign(Object.assign({}, row), { caseType: toNewCaseTypeSwitcher(row.caseType) })));
|
|
86
|
-
downloadCSV(updatedCsvData, headers, 'CaseList.csv');
|
|
87
|
-
}
|
|
88
|
-
catch (e) {
|
|
89
|
-
setIsFetchingSFDC(false);
|
|
90
|
-
ToastNotification.addDangerMessage(t('Could not export CSV'));
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
const partnerSearch = loggedInUserRights.data.isPartner();
|
|
94
|
-
// CSV For Normal Users
|
|
95
|
-
const onExportCSVClick = () => __awaiter(this, void 0, void 0, function* () {
|
|
96
|
-
try {
|
|
97
|
-
const res = yield request(createQueryForCSVDownload(filterState, loggedInUserRights.data, loggedInUsersAccount.data), partnerSearch, null, loggedInUsersAccount.data.secureSupport);
|
|
98
|
-
const headers = isOrgAdmin ? [...csvHeadersSolr, groupHeaderSOLR] : csvHeadersSolr;
|
|
99
|
-
// To map the values in csv to new support type
|
|
100
|
-
const updatedCsvData = res.response.docs.map((row) => (Object.assign(Object.assign({}, row), { case_type: toNewCaseTypeSwitcher(row.case_type) })));
|
|
101
|
-
downloadCSV(updatedCsvData, headers, 'CaseList.csv');
|
|
102
|
-
}
|
|
103
|
-
catch (e) {
|
|
104
|
-
ToastNotification.addDangerMessage(t('Could not export CSV'));
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
23
|
// To show tooltip if export csv is disabled when SOLR is down
|
|
108
24
|
const getTooltipContent = () => {
|
|
109
25
|
let tooltipText = t('Export Cases');
|
|
110
|
-
if (
|
|
26
|
+
if (isExportCsvDisabled) {
|
|
111
27
|
tooltipText = t('Unable to export while access to search is limited');
|
|
112
28
|
}
|
|
113
29
|
return tooltipText;
|
|
114
30
|
};
|
|
115
|
-
|
|
116
|
-
|
|
31
|
+
// To check if export csv button is disabled
|
|
32
|
+
const isExportButtonDisabled = isBtnDisabled || isExportCsvDisabled;
|
|
33
|
+
// To toggle download csv modal
|
|
34
|
+
const toggleDownloadCSVModal = () => {
|
|
35
|
+
setOpenUpdateSeverityModal((openUpdateSeverityModal) => !openUpdateSeverityModal);
|
|
36
|
+
};
|
|
37
|
+
return (React.createElement("span", { title: (isExportCsvDisabled && getTooltipContent()) || '' },
|
|
38
|
+
React.createElement(Button, { variant: "tertiary", onClick: toggleDownloadCSVModal, title: btnTitle, "data-tracking-id": "case-list-toolbar-export-csv", isDisabled: isExportButtonDisabled }, isFetchingCSVData ? (React.createElement(React.Fragment, null,
|
|
117
39
|
React.createElement(Trans, null, "Exporting CSV"),
|
|
118
|
-
React.createElement(Spinner, {
|
|
40
|
+
React.createElement(Spinner, { size: "md", "aria-label": "loading", className: "export-csv-loader pf-v5-u-ml-xs" }))) : (React.createElement(Trans, null, "Export CSV"))),
|
|
41
|
+
React.createElement(DownloadCSVFileModal, { filterState: filterState, loggedInUserRights: loggedInUserRights, loggedInUsersAccount: loggedInUsersAccount, isDisabled: isExportButtonDisabled, onModalshow: openUpdateSeverityModal, onClose: toggleDownloadCSVModal, selectedCases: selectedCases, filteredCaseCount: currentFilteredCaseCount })));
|
|
119
42
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
interface IProps {
|
|
2
3
|
sevValue: string;
|
|
3
4
|
}
|
|
4
|
-
export default function SeverityLabel({ sevValue }: IProps): JSX.Element;
|
|
5
|
+
export default function SeverityLabel({ sevValue }: IProps): React.JSX.Element;
|
|
5
6
|
export {};
|
|
6
7
|
//# sourceMappingURL=SeverityLabel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SeverityLabel.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-table/SeverityLabel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SeverityLabel.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-table/SeverityLabel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,MAAM;IACZ,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,qBAmBzD"}
|
package/lib/esm/components/case-list/case-list-table/table-column-selector/TableColumnSelector.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import './TableColumnSelector.scss';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
interface IProps {
|
|
4
|
+
onColumnSelectorChange: (columns: string[]) => void;
|
|
5
|
+
cachedColumns: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function TableColumnSelector({ onColumnSelectorChange, cachedColumns }: IProps): React.JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=TableColumnSelector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableColumnSelector.d.ts","sourceRoot":"","sources":["../../../../../../src/components/case-list/case-list-table/table-column-selector/TableColumnSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,4BAA4B,CAAC;AAWpC,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,UAAU,MAAM;IACZ,sBAAsB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACpD,aAAa,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CAAC,EAAE,sBAAsB,EAAE,aAAa,EAAE,EAAE,MAAM,qBAgGpF"}
|
package/lib/esm/components/case-list/case-list-table/table-column-selector/TableColumnSelector.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import './TableColumnSelector.scss';
|
|
2
|
+
import { Checkbox, Dropdown, DropdownList, Grid, GridItem, MenuToggle, } from '@patternfly/react-core';
|
|
3
|
+
import React, { useState } from 'react';
|
|
4
|
+
import { useTranslation } from 'react-i18next';
|
|
5
|
+
export function TableColumnSelector({ onColumnSelectorChange, cachedColumns }) {
|
|
6
|
+
const { t } = useTranslation();
|
|
7
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
8
|
+
const handleCheckboxChange = (key) => {
|
|
9
|
+
const index = cachedColumns.indexOf(key);
|
|
10
|
+
if (index === -1) {
|
|
11
|
+
// selected column not found, add it to the array
|
|
12
|
+
onColumnSelectorChange([...cachedColumns, key]);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
// selected column found, remove it from the array
|
|
16
|
+
const selectedCols = [...cachedColumns];
|
|
17
|
+
selectedCols.splice(index, 1);
|
|
18
|
+
onColumnSelectorChange(selectedCols);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const onToggleClick = () => {
|
|
22
|
+
setIsOpen(!isOpen);
|
|
23
|
+
};
|
|
24
|
+
const caseListColumnHeaderOne = [
|
|
25
|
+
{ label: 'Owner', key: 'contactName' },
|
|
26
|
+
{ label: 'Severity', key: 'severity' },
|
|
27
|
+
{ label: 'Created by', key: 'createdDate' },
|
|
28
|
+
{ label: 'Account number', key: 'accountNumber' },
|
|
29
|
+
{ label: 'Support type', key: 'type' },
|
|
30
|
+
{ label: 'Group', key: 'folderName' },
|
|
31
|
+
];
|
|
32
|
+
const caseListColumnHeaderTwo = [
|
|
33
|
+
{ label: 'Modified by', key: 'lastModifiedDate' },
|
|
34
|
+
{ label: 'Status', key: 'status' },
|
|
35
|
+
{ label: 'Product and version', key: 'product' },
|
|
36
|
+
{ label: 'Personal reference number', key: 'alternateCaseId' },
|
|
37
|
+
{ label: 'Closed date', key: 'closedDate' },
|
|
38
|
+
];
|
|
39
|
+
const generateCheckboxes = (fieldDefinitions) => {
|
|
40
|
+
return fieldDefinitions === null || fieldDefinitions === void 0 ? void 0 : fieldDefinitions.map((field) => (React.createElement(Checkbox, { key: field.key, className: "case-column-selector", label: t(field.label), isChecked: cachedColumns.includes(field.key), onChange: () => {
|
|
41
|
+
handleCheckboxChange(field.key);
|
|
42
|
+
}, id: field.key, name: field.key })));
|
|
43
|
+
};
|
|
44
|
+
return (React.createElement(Dropdown, { isOpen: isOpen, onOpenChange: (isOpen) => setIsOpen(isOpen), toggle: (toggleRef) => (React.createElement(MenuToggle, { ref: toggleRef, onClick: onToggleClick, isExpanded: isOpen }, t('Columns'))), shouldFocusToggleOnSelect: true, id: "case-list-table-column-dropdown", "data-tracking-id": "case-list-table-column-dropdown", className: "column-selector" },
|
|
45
|
+
React.createElement(DropdownList, null,
|
|
46
|
+
React.createElement(Grid, { hasGutter: true },
|
|
47
|
+
React.createElement(GridItem, { span: 6 },
|
|
48
|
+
React.createElement(Checkbox, { className: "case-column-selector", label: t('Case ID'), defaultChecked: true, isDisabled: true, id: "case-id-check", name: "caseIDCheck" }),
|
|
49
|
+
generateCheckboxes(caseListColumnHeaderOne)),
|
|
50
|
+
React.createElement(GridItem, { span: 6 },
|
|
51
|
+
React.createElement(Checkbox, { className: "case-column-selector", label: t('Title'), defaultChecked: true, isDisabled: true, id: "problem-statement-check", name: "problemStatementCheck" }),
|
|
52
|
+
generateCheckboxes(caseListColumnHeaderTwo))))));
|
|
53
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
import { CaseSearchQueryType } from '../../../enums/caseSearch';
|
|
2
3
|
interface IProps {
|
|
3
4
|
onSearchValChange?: (newVal: string) => void;
|
|
@@ -7,6 +8,6 @@ interface IProps {
|
|
|
7
8
|
onAdvancedSearchValidation: (validation: boolean) => void;
|
|
8
9
|
isSearchDisabled?: boolean;
|
|
9
10
|
}
|
|
10
|
-
export declare function AdvanceSearch(props: IProps): JSX.Element;
|
|
11
|
+
export declare function AdvanceSearch(props: IProps): React.JSX.Element;
|
|
11
12
|
export {};
|
|
12
13
|
//# sourceMappingURL=AdvanceSearch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvanceSearch.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-search/AdvanceSearch.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdvanceSearch.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-search/AdvanceSearch.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAGvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAIhE,UAAU,MAAM;IACZ,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC5D,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,EAAE,CAAC,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACzE,0BAA0B,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1D,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,qBA6T1C"}
|