@rh-support/cases 2.1.35 → 2.1.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/lib/esm/components/case-list/CaseList.d.ts.map +1 -1
  2. package/lib/esm/components/case-list/CaseList.js +1 -2
  3. package/lib/esm/components/case-list/CaseListFilterReducer.d.ts +3 -0
  4. package/lib/esm/components/case-list/CaseListFilterReducer.d.ts.map +1 -1
  5. package/lib/esm/components/case-list/CaseListFilterReducer.js +3 -0
  6. package/lib/esm/components/case-list/case-list-table/CaseListTable.d.ts +0 -1
  7. package/lib/esm/components/case-list/case-list-table/CaseListTable.d.ts.map +1 -1
  8. package/lib/esm/components/case-list/case-list-table/CaseListTable.js +186 -93
  9. package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.d.ts +16 -0
  10. package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.d.ts.map +1 -0
  11. package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.js +273 -0
  12. package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.scss +27 -0
  13. package/lib/esm/components/case-list/case-list-table/ExportCaseListCSV.d.ts.map +1 -1
  14. package/lib/esm/components/case-list/case-list-table/ExportCaseListCSV.js +14 -91
  15. package/lib/esm/components/case-list/case-search/SaveCaseSearchModal.js +1 -1
  16. package/lib/esm/components/case-list/case-search/useAdvanceSearchParser.d.ts +1 -0
  17. package/lib/esm/components/case-list/case-search/useAdvanceSearchParser.d.ts.map +1 -1
  18. package/lib/esm/components/index.d.ts +0 -7
  19. package/lib/esm/components/index.d.ts.map +1 -1
  20. package/lib/esm/components/index.js +0 -7
  21. package/lib/esm/css/caseList.css +33 -39
  22. package/lib/esm/models/caseList.d.ts +3 -0
  23. package/lib/esm/models/caseList.d.ts.map +1 -1
  24. package/lib/esm/utils/caseListUtils.js +2 -2
  25. package/package.json +6 -9
@@ -0,0 +1,273 @@
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, } 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 React, { useEffect, useMemo, useState } from 'react';
18
+ import { useTranslation } from 'react-i18next';
19
+ import { SFDCKeys, SolrKeys } from '../../../enums/filters';
20
+ import { getCaseListFromSolr } from '../../../utils/caseListUtils';
21
+ import { createQueryForCSVDownload } from '../../../utils/caseSearchUtils';
22
+ const csvHeadersSolr = [
23
+ { label: 'Case number', key: SolrKeys.caseNumber },
24
+ { label: 'Summary', key: SolrKeys.caseSummary },
25
+ ];
26
+ const csvHeadersSFDC = [
27
+ { label: 'Case number', key: SFDCKeys.caseNumber },
28
+ { label: 'Summary', key: SFDCKeys.caseSummary },
29
+ ];
30
+ export default function DownloadCSVFileModal(props) {
31
+ const { onClose, onModalshow, isDisabled, loggedInUserRights, loggedInUsersAccount, filterState } = props;
32
+ const { t } = useTranslation();
33
+ const { isFetching, request } = useFetch(getCaseListFromSolr, { propgateErrors: true });
34
+ const [downloadCSVFileName, setDownloadCSVFileName] = useState('');
35
+ const [isFetchingSFDC, setIsFetchingSFDC] = useState(false);
36
+ const [generatedCsvHeaders, setGeneratedCsvHeaders] = useState([]);
37
+ const [checkboxes, setCheckboxes] = useState({
38
+ selectAll: false,
39
+ ownerName: false,
40
+ modifiedBy: false,
41
+ severity: false,
42
+ status: false,
43
+ createdBy: false,
44
+ productVersion: false,
45
+ accountNumber: false,
46
+ alternateId: false,
47
+ type: false,
48
+ caseClosedDate: false,
49
+ });
50
+ function getKey(key, isSecureSupport) {
51
+ return isSecureSupport ? SFDCKeys[key] : SolrKeys[key];
52
+ }
53
+ const headerDefinitions = useMemo(() => [
54
+ {
55
+ checkbox: checkboxes.ownerName,
56
+ key: getKey('ownerName', loggedInUsersAccount.data.secureSupport),
57
+ label: 'Owner name',
58
+ },
59
+ {
60
+ checkbox: checkboxes.severity,
61
+ key: getKey('severity', loggedInUsersAccount.data.secureSupport),
62
+ label: 'Severity',
63
+ },
64
+ {
65
+ checkbox: checkboxes.createdBy,
66
+ key: getKey('createdBy', loggedInUsersAccount.data.secureSupport),
67
+ label: 'Created by',
68
+ },
69
+ {
70
+ checkbox: checkboxes.createdBy,
71
+ key: getKey('createdDate', loggedInUsersAccount.data.secureSupport),
72
+ label: 'Created date',
73
+ transform: formatDateTime,
74
+ },
75
+ {
76
+ checkbox: checkboxes.accountNumber,
77
+ key: getKey('accountNumber', loggedInUsersAccount.data.secureSupport),
78
+ label: 'Account number',
79
+ },
80
+ {
81
+ checkbox: checkboxes.type,
82
+ key: getKey('type', loggedInUsersAccount.data.secureSupport),
83
+ label: 'Case type',
84
+ },
85
+ {
86
+ checkbox: checkboxes.modifiedBy,
87
+ key: getKey('modifiedBy', loggedInUsersAccount.data.secureSupport),
88
+ label: 'Modified by',
89
+ },
90
+ {
91
+ checkbox: checkboxes.modifiedBy,
92
+ key: getKey('modifiedDate', loggedInUsersAccount.data.secureSupport),
93
+ label: 'Modified date',
94
+ transform: formatDateTime,
95
+ },
96
+ {
97
+ checkbox: checkboxes.status,
98
+ key: getKey('status', loggedInUsersAccount.data.secureSupport),
99
+ label: 'Status',
100
+ },
101
+ {
102
+ checkbox: checkboxes.productVersion,
103
+ key: getKey('product', loggedInUsersAccount.data.secureSupport),
104
+ label: 'Product',
105
+ },
106
+ {
107
+ checkbox: checkboxes.productVersion,
108
+ key: getKey('version', loggedInUsersAccount.data.secureSupport),
109
+ label: 'Version',
110
+ },
111
+ {
112
+ checkbox: checkboxes.alternateId,
113
+ key: getKey('alternateId', loggedInUsersAccount.data.secureSupport),
114
+ label: 'Alternate ID',
115
+ },
116
+ {
117
+ checkbox: checkboxes.caseClosedDate,
118
+ key: getKey('caseClosedDate', loggedInUsersAccount.data.secureSupport),
119
+ label: 'Closed date',
120
+ transform: formatDateTime,
121
+ },
122
+ ], [checkboxes, loggedInUsersAccount.data.secureSupport]);
123
+ useEffect(() => {
124
+ const updatedCsvHeaders = loggedInUsersAccount.data.secureSupport
125
+ ? csvHeadersSFDC
126
+ : csvHeadersSolr;
127
+ headerDefinitions.forEach((headerDefinition) => {
128
+ const { checkbox, key, label, transform } = headerDefinition;
129
+ const index = updatedCsvHeaders.findIndex((header) => header.key === key);
130
+ if (checkbox) {
131
+ if (index === -1) {
132
+ updatedCsvHeaders.push({ key, label, transform });
133
+ }
134
+ }
135
+ else {
136
+ if (index !== -1) {
137
+ updatedCsvHeaders.splice(index, 1);
138
+ }
139
+ }
140
+ });
141
+ setGeneratedCsvHeaders(updatedCsvHeaders);
142
+ }, [loggedInUsersAccount.data.secureSupport, checkboxes, headerDefinitions]);
143
+ const isFetchingCSVData = isFetching || isFetchingSFDC;
144
+ const isOrgAdmin = loggedInUserRights.data.isOrgAdmin();
145
+ const partnerSearch = loggedInUserRights.data.hasManagedAccounts();
146
+ const splitExtensionName = downloadCSVFileName.split('.')[0];
147
+ const onCancel = () => {
148
+ onClose && onClose();
149
+ };
150
+ const handleCSVFileNameChange = (value) => {
151
+ setDownloadCSVFileName(value);
152
+ };
153
+ const clearDownloadCSVFileName = () => {
154
+ setDownloadCSVFileName('');
155
+ };
156
+ const handleCheckboxChange = (key) => {
157
+ setCheckboxes((prevCheckboxes) => (Object.assign(Object.assign({}, prevCheckboxes), { [key]: !prevCheckboxes[key] })));
158
+ };
159
+ // Group header for SOLR
160
+ const groupHeaderSOLR = { label: 'Group', key: SolrKeys.groupName };
161
+ // For SOLR
162
+ const onExportCSVClick = () => __awaiter(this, void 0, void 0, function* () {
163
+ try {
164
+ const res = yield request(createQueryForCSVDownload(filterState, loggedInUserRights.data, loggedInUsersAccount.data), partnerSearch, null, loggedInUsersAccount.data.secureSupport);
165
+ const headers = isOrgAdmin ? [...csvHeadersSolr, groupHeaderSOLR] : generatedCsvHeaders;
166
+ // To map the values in csv to new support type
167
+ const updatedCsvData = res.response.docs.map((row) => (Object.assign(Object.assign({}, row), { case_type: toNewCaseTypeSwitcher(row.case_type) })));
168
+ downloadCSV(updatedCsvData, headers, splitExtensionName ? `${splitExtensionName}.csv` : 'CaseList.csv');
169
+ onCancel();
170
+ ToastNotification.addSuccessMessage(t('File downloaded successfully!'));
171
+ }
172
+ catch (e) {
173
+ onCancel();
174
+ ToastNotification.addDangerMessage(t('File could not be downloaded. Please try again! '));
175
+ }
176
+ });
177
+ // Group header for SFDC
178
+ const groupHeaderSFDC = { label: 'Group', key: SFDCKeys.groupName };
179
+ // For SFDC
180
+ const onExportCSVClickSecureSupport = () => __awaiter(this, void 0, void 0, function* () {
181
+ try {
182
+ const sfdcFilter = createQueryForCSVDownload(filterState, loggedInUserRights.data, loggedInUsersAccount.data);
183
+ setIsFetchingSFDC(true);
184
+ const sfdcResponse = yield publicApi.caseList.getCaseListFromSFDC(sfdcFilter, false, true);
185
+ setIsFetchingSFDC(false);
186
+ const headers = isOrgAdmin ? [...csvHeadersSFDC, groupHeaderSFDC] : csvHeadersSFDC;
187
+ // To map the values in csv to new support type
188
+ const updatedCsvData = sfdcResponse.cases.map((row) => (Object.assign(Object.assign({}, row), { caseType: toNewCaseTypeSwitcher(row.caseType) })));
189
+ downloadCSV(updatedCsvData, headers, splitExtensionName ? `${splitExtensionName}.csv` : 'CaseList.csv');
190
+ onCancel();
191
+ ToastNotification.addSuccessMessage(t('File downloaded successfully!'));
192
+ }
193
+ catch (e) {
194
+ setIsFetchingSFDC(false);
195
+ onCancel();
196
+ ToastNotification.addDangerMessage(t('Could not export CSV'));
197
+ }
198
+ });
199
+ useEffect(() => {
200
+ const commonState = checkboxes.selectAll;
201
+ const updatedCheckboxes = {
202
+ ownerName: commonState,
203
+ modifiedBy: commonState,
204
+ severity: commonState,
205
+ status: commonState,
206
+ createdBy: commonState,
207
+ productVersion: commonState,
208
+ accountNumber: commonState,
209
+ alternateId: commonState,
210
+ type: commonState,
211
+ caseClosedDate: commonState,
212
+ };
213
+ setCheckboxes((prevCheckboxes) => (Object.assign(Object.assign({}, prevCheckboxes), updatedCheckboxes)));
214
+ }, [checkboxes.selectAll]);
215
+ const handleSelectAll = () => {
216
+ setCheckboxes((prevCheckboxes) => (Object.assign(Object.assign({}, prevCheckboxes), { selectAll: !prevCheckboxes.selectAll })));
217
+ };
218
+ const csvHeadersOne = [
219
+ { label: 'Owner', key: 'ownerName' },
220
+ { label: 'Severity', key: 'severity' },
221
+ { label: 'Created by', key: 'createdBy' },
222
+ { label: 'Account number', key: 'accountNumber' },
223
+ { label: 'Case type', key: 'type' },
224
+ ];
225
+ const csvHeadersTwo = [
226
+ { label: 'Modified by', key: 'modifiedBy' },
227
+ { label: 'Status', key: 'status' },
228
+ { label: 'Product and version', key: 'productVersion' },
229
+ { label: 'Alternate case ID', key: 'alternateId' },
230
+ { label: 'Closed date', key: 'caseClosedDate' },
231
+ ];
232
+ const generateCheckboxes = (fieldDefinitions) => {
233
+ return fieldDefinitions.map((field) => (React.createElement(Checkbox, { key: field.key, className: "nested", label: t(field.label), isChecked: checkboxes[field.key], onChange: () => {
234
+ handleCheckboxChange(field.key);
235
+ }, id: field.key, name: field.key })));
236
+ };
237
+ // CSV Modal Body
238
+ const downloadCSVModalBody = () => {
239
+ return (React.createElement(Form, { className: "download-csv-modal-body" },
240
+ React.createElement(FormGroup, { label: t('File name'), fieldId: "download-csv-file-name" },
241
+ React.createElement(InputGroup, null,
242
+ React.createElement(TextInput, { type: "text", id: "csv-file-name", name: "download-csv-file-name", value: downloadCSVFileName, onChange: (_event, value) => handleCSVFileNameChange(value) }),
243
+ React.createElement(Button, { variant: "plain", onClick: clearDownloadCSVFileName, icon: React.createElement(TimesCircleIcon, null) }))),
244
+ React.createElement(FormGroup, { label: t('Please select the fields you want included in your download.'), fieldId: "download-csv-file-fields-select" },
245
+ React.createElement(Grid, null,
246
+ React.createElement(Checkbox, { label: t('Select all'), isChecked: checkboxes.selectAll, onChange: handleSelectAll, id: "selectAll", name: "selectAll" }),
247
+ React.createElement(GridItem, { span: 6 },
248
+ React.createElement(Checkbox, { className: "nested", label: t('Case ID'), defaultChecked: true, isDisabled: true, id: "controlled-check-2", name: "check2" }),
249
+ generateCheckboxes(csvHeadersOne)),
250
+ React.createElement(GridItem, { span: 6 },
251
+ React.createElement(Checkbox, { className: "nested", label: t('Issue summary'), defaultChecked: true, isDisabled: true, id: "controlled-check-3", name: "check3" }),
252
+ generateCheckboxes(csvHeadersTwo))))));
253
+ };
254
+ const downloadCSVModalDescription = () => {
255
+ const numberOfCases = 1 | 2 | 3;
256
+ switch (numberOfCases) {
257
+ case 1:
258
+ return t('Your download will include 100 cases. ');
259
+ case 2:
260
+ return t('Your download will include 512 cases.');
261
+ case 3:
262
+ return t('Only the first 1000 cases will be included in your download. Please note this may take a while. ');
263
+ default:
264
+ return '';
265
+ }
266
+ };
267
+ // Download CSV modal buttons
268
+ const modalActions = [
269
+ 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: loggedInUsersAccount.data.secureSupport ? onExportCSVClickSecureSupport : onExportCSVClick, isDisabled: isDisabled || isFetchingCSVData }, t('Download')),
270
+ React.createElement(Button, { key: "back", variant: "secondary", onClick: onCancel, isDisabled: isDisabled || isFetchingCSVData, "data-tracking-id": "download-csv-modal-cancel" }, t('Cancel')),
271
+ ];
272
+ return (React.createElement(Modal, { title: t('Download CSV file'), description: downloadCSVModalDescription(), className: "download-csv-modal", variant: ModalVariant.large, isOpen: onModalshow, onClose: onCancel, actions: modalActions }, downloadCSVModalBody()));
273
+ }
@@ -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 +1 @@
1
- {"version":3,"file":"ExportCaseListCSV.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-table/ExportCaseListCSV.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAgD7D,UAAU,MAAM;IACZ,uBAAuB,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAC1D,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACjC;AAID,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,eAoG9C"}
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;AAIzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAK7D,UAAU,MAAM;IACZ,uBAAuB,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAC1D,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACjC;AAID,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,eAmE9C"}
@@ -1,63 +1,11 @@
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 { ToastNotification, useFetch } from '@rh-support/components';
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
- const csvHeadersSolr = [
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
10
  export function ExportCaseListCSV(props) {
63
11
  var _a, _b;
@@ -65,45 +13,13 @@ export function ExportCaseListCSV(props) {
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
15
  const currentFilteredCaseCount = (_b = (_a = props.currentFilteredCaseList) === null || _a === void 0 ? void 0 : _a.numFound) !== null && _b !== void 0 ? _b : 0;
68
- const { isFetching, request } = useFetch(getCaseListFromSolr, { propgateErrors: true });
69
- const [isFetchingSFDC, setIsFetchingSFDC] = useState(false);
70
- const isFetchingCSVData = isFetching || isFetchingSFDC;
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');
@@ -112,8 +28,15 @@ export function ExportCaseListCSV(props) {
112
28
  }
113
29
  return tooltipText;
114
30
  };
31
+ // To check if export csv button is disabled
32
+ const isExportButtonDisabled = isBtnDisabled || props.isExportCsvDisabled;
33
+ // To toggle download csv modal
34
+ const toggleDownloadCSVModal = () => {
35
+ setOpenUpdateSeverityModal((openUpdateSeverityModal) => !openUpdateSeverityModal);
36
+ };
115
37
  return (React.createElement("span", { title: (props.isExportCsvDisabled && getTooltipContent()) || '' },
116
- React.createElement(Button, { variant: "tertiary", isDisabled: isBtnDisabled || props.isExportCsvDisabled, onClick: loggedInUsersAccount.data.secureSupport ? onExportCSVClickSecureSupport : onExportCSVClick, title: btnTitle, "data-tracking-id": "case-list-toolbar-export-csv" }, isFetchingCSVData ? (React.createElement(React.Fragment, null,
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, { size: "md", "aria-label": "loading", className: "export-csv-loader pf-v5-u-ml-xs" }))) : (React.createElement(Trans, null, "Export CSV")))));
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 })));
119
42
  }
@@ -202,5 +202,5 @@ export function SaveCaseSearchModal({ isModalOpen, modalToggle, isAdding, select
202
202
  ? 'error'
203
203
  : 'default' })),
204
204
  React.createElement(FormGroup, { label: React.createElement("span", { className: "save-for-later-label-query" }, t('Search and filter query')), isRequired: true, fieldId: "filter-query", className: "form-group pf-v5-u-mt-lg save-for-later-query" },
205
- React.createElement(TextArea, { isRequired: true, validated: saveButtonIsClicked ? 'error' : 'default', type: "text", id: "filter-query", name: "filter-query", "aria-describedby": "filter-query-helper", value: getQueryStr(), isDisabled: true, resizeOrientation: "vertical" })))));
205
+ React.createElement(TextArea, { isRequired: true, validated: saveButtonIsClicked && isEmpty(getQueryStr()) ? 'error' : 'default', type: "text", id: "filter-query", name: "filter-query", "aria-describedby": "filter-query-helper", value: getQueryStr(), isDisabled: true, resizeOrientation: "vertical" })))));
206
206
  }
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  export default function useAdvanceSearchParser({ onInit }: {
2
3
  onInit: any;
3
4
  }): {
@@ -1 +1 @@
1
- {"version":3,"file":"useAdvanceSearchParser.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-search/useAdvanceSearchParser.tsx"],"names":[],"mappings":"AASA,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAAE,MAAM,EAAE;;CAAA;yBASzB,MAAM;6BAIF,MAAM;;EA6LzC"}
1
+ {"version":3,"file":"useAdvanceSearchParser.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-search/useAdvanceSearchParser.tsx"],"names":[],"mappings":";AASA,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAAE,MAAM,EAAE;;CAAA;yBASzB,MAAM;6BAIF,MAAM;;EA6LzC"}
@@ -1,4 +1,3 @@
1
- import { IPfeCollapse } from '@rh-support/types/pfe/pfe-collapse';
2
1
  import { RouteComponentProps } from 'react-router-dom';
3
2
  export interface ICasesRouteURLParams {
4
3
  }
@@ -10,19 +9,13 @@ declare global {
10
9
  interface Window {
11
10
  sessionjs: any;
12
11
  MSInputMethodContext: any;
13
- chrometwo_require: (component: string[], callback: (...params: any[]) => any) => any;
14
12
  portal: any;
15
13
  Raven: any;
16
- chrometwo_ready: any;
17
14
  seVersionInfo: {
18
15
  packageVersion: string;
19
16
  hydrajs: string;
20
17
  };
21
18
  }
22
- namespace JSX {
23
- interface IntrinsicElements extends IPfeCollapse {
24
- }
25
- }
26
19
  interface Document {
27
20
  documentMode: any;
28
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAGlE,OAAO,EAAmB,mBAAmB,EAAU,MAAM,kBAAkB,CAAC;AAMhF,MAAM,WAAW,oBAAoB;CAAG;AACxC,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;IACtD,QAAQ,EAAE,MAAM,CAAC;CACpB;AAQD,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,SAAS,EAAE,GAAG,CAAC;QACf,oBAAoB,EAAE,GAAG,CAAC;QAC1B,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,OAAA,KAAK,GAAG,KAAK,GAAG,CAAC;QAC9E,MAAM,EAAE,GAAG,CAAC;QACZ,KAAK,EAAE,GAAG,CAAC;QACX,eAAe,EAAE,GAAG,CAAC;QACrB,aAAa,EAAE;YACX,cAAc,EAAE,MAAM,CAAC;YACvB,OAAO,EAAE,MAAM,CAAC;SACnB,CAAC;KACL;IAED,UAAU,GAAG,CAAC;QACV,UAAU,iBAAkB,SAAQ,YAAY;SAAG;KACtD;IAED,UAAU,QAAQ;QACd,YAAY,EAAE,GAAG,CAAC;KACrB;CACJ;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,eAiBlC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAmB,mBAAmB,EAAU,MAAM,kBAAkB,CAAC;AAMhF,MAAM,WAAW,oBAAoB;CAAG;AACxC,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;IACtD,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,SAAS,EAAE,GAAG,CAAC;QACf,oBAAoB,EAAE,GAAG,CAAC;QAC1B,MAAM,EAAE,GAAG,CAAC;QACZ,KAAK,EAAE,GAAG,CAAC;QACX,aAAa,EAAE;YACX,cAAc,EAAE,MAAM,CAAC;YACvB,OAAO,EAAE,MAAM,CAAC;SACnB,CAAC;KACL;IAED,UAAU,QAAQ;QACd,YAAY,EAAE,GAAG,CAAC;KACrB;CACJ;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,eAiBlC"}
@@ -1,15 +1,8 @@
1
- import { CustomElements, requireCustomElement } from '@rh-support/utils';
2
1
  import React, { useEffect } from 'react';
3
2
  import { Redirect, Route, Switch } from 'react-router-dom';
4
3
  import RouteUtils from '../utils/routeUtils';
5
4
  import { CaseList } from './case-list/CaseList';
6
5
  import { PartnerEscalation } from './escalations/PartnerEscalation';
7
- requireCustomElement([
8
- {
9
- element: CustomElements.pfeCollapse,
10
- requireCb: () => require('@patternfly/pfe-collapse'),
11
- },
12
- ]);
13
6
  export function Cases(props) {
14
7
  RouteUtils.casesBasePath = props.basePath || '';
15
8
  // Loading app metadata
@@ -112,10 +112,6 @@
112
112
  margin: 0.4rem 1rem 0.4rem 0;
113
113
  }
114
114
 
115
- /* .cases-main .case-search-top .filter-chip-wrapper .filter-chip:last-of-type {
116
- margin-right: 0 !important;
117
- } */
118
-
119
115
  .cases-main .case-search-top .filter-chip-wrapper .filter-chip .filter-chip__heading {
120
116
  font-size: 14px;
121
117
  font-weight: 500;
@@ -235,10 +231,6 @@
235
231
  min-width: 80px;
236
232
  }
237
233
 
238
- /* .case-search-bottom .case-list-table tr td.pf-v5-c-table__check {
239
- padding: 2rem 1rem 1.5rem 2rem !important;
240
- } */
241
-
242
234
  .case-search-bottom .case-list-table .case-number,
243
235
  .case-search-bottom .case-list-table .modified-name,
244
236
  .case-search-bottom .case-list-table .created-name,
@@ -246,6 +238,13 @@
246
238
  font-weight: 500;
247
239
  }
248
240
 
241
+ .case-search-bottom .case-list-table th.pf-v5-c-table__th {
242
+ padding: 16px 24px !important;
243
+ word-break: inherit;
244
+ vertical-align: middle;
245
+ }
246
+
247
+ .case-search-bottom .case-list-table .case-number,
249
248
  .case-search-bottom .case-list-table .modified-name,
250
249
  .case-search-bottom .case-list-table .created-name {
251
250
  display: block;
@@ -337,11 +336,6 @@
337
336
  margin-right: 0;
338
337
  }
339
338
 
340
- /* .filter-wrapper .filter-group > .pf-v5-c-select .pf-v5-c-select__toggle,
341
- .filter-wrapper .filter-group > .pf-v5-c-select .pf-v5-c-select__toggle .pf-v5-c-select__toggle-typeahead {
342
- font-size: 15px;
343
- } */
344
-
345
339
  #rh-support-cases .pf-v5-c-select .pf-v5-c-select__menu li label,
346
340
  .filter-wrapper .filter-group > .additional-filters label {
347
341
  margin-bottom: 0;
@@ -483,23 +477,23 @@
483
477
  .case-list-table tbody > tr > :nth-child(2) {
484
478
  position: sticky;
485
479
  background-color: white;
486
- left: 87px;
480
+ left: 50px;
487
481
  z-index: 1;
488
482
  background-clip: padding-box;
489
483
  }
490
484
 
491
485
  /* Case ID Header */
492
- th.pf-v5-c-table__sort[data-label='Case ID'] {
486
+ th#number.pf-v5-c-table__th {
493
487
  position: sticky;
494
488
  background-color: white;
495
- left: 87px;
489
+ left: 50px;
496
490
  z-index: 1;
497
491
  background-clip: padding-box;
498
492
  }
499
493
 
500
494
  /* Vertical border to divide sticky columns and other columns*/
501
495
  .case-list-table tbody > tr > :nth-child(2):before,
502
- th.pf-v5-c-table__sort[data-label='Case ID']:before {
496
+ th#number.pf-v5-c-table__th:before {
503
497
  position: absolute;
504
498
  content: '';
505
499
  top: 0px;
@@ -509,51 +503,51 @@
509
503
  }
510
504
 
511
505
  /* Issue Summary Header */
512
- th.pf-v5-c-table__sort[data-label='Issue summary'],
506
+ th#summary.pf-v5-c-table__th,
513
507
  .case-list-table tbody > tr > :nth-child(3) {
514
- min-width: 270px;
508
+ min-width: 270px !important;
515
509
  }
516
510
 
517
- th.pf-v5-c-table__sort[data-label='Owner'],
518
- th.pf-v5-c-table__sort[data-label='Status'],
519
- th.pf-v5-c-table__sort[data-label='Group'] {
520
- min-width: 140px;
511
+ th#contactName.pf-v5-c-table__th,
512
+ th#status.pf-v5-c-table__th,
513
+ th#folderName.pf-v5-c-table__th {
514
+ min-width: 140px !important;
521
515
  }
522
516
 
523
- th.pf-v5-c-table__sort[data-label='Severity'],
524
- th.pf-v5-c-table__sort[data-label='Case ID'] {
525
- min-width: 150px;
517
+ th#severity.pf-v5-c-table__th,
518
+ th#number.pf-v5-c-table__th {
519
+ min-width: 150px !important;
526
520
  }
527
521
 
528
- th.pf-v5-c-table__sort[data-label='Modified by'],
529
- th.pf-v5-c-table__sort[data-label='Created by'] {
530
- min-width: 170px;
522
+ th#lastModifiedDate.pf-v5-c-table__th,
523
+ th#createdDate.pf-v5-c-table__th {
524
+ min-width: 180px !important;
531
525
  }
532
526
 
533
- th.pf-m-width-15[data-label='Product and version'],
534
- th.pf-v5-c-table__sort[data-label='Support type'] {
535
- min-width: 180px;
527
+ th#product.pf-v5-c-table__th,
528
+ th#type.pf-v5-c-table__th {
529
+ min-width: 190px !important;
536
530
  }
537
531
 
538
- th.pf-v5-c-table__sort[data-label='Account number'] {
532
+ th#accountNumber.pf-v5-c-table__th {
539
533
  min-width: 205px;
540
534
  }
541
535
 
542
- th.pf-v5-c-table__sort[data-label='Personal reference number'] {
543
- min-width: 232px;
536
+ th#alternateCaseId.pf-v5-c-table__th {
537
+ min-width: 242px !important;
544
538
  }
545
539
 
546
540
  /* Closed Date Header */
547
- th.pf-v5-c-table__sort.pf-m-width-10[data-label='Closed date'],
541
+ th#closedDate.pf-v5-c-table__th,
548
542
  th.pf-v5-c-table__sort[data-label='Case type'] {
549
- min-width: 200px;
543
+ min-width: 200px !important;
550
544
  }
551
545
  }
552
546
 
553
547
  @media (min-width: 1800px) {
554
548
  /* Issue Summary */
555
- th.pf-v5-c-table__sort[data-label='Issue summary'],
549
+ th#summary.pf-v5-c-table__th,
556
550
  .case-list-table tbody > tr > :nth-child(3) {
557
- min-width: 450px;
551
+ min-width: 450px !important;
558
552
  }
559
553
  }