@rh-support/cases 2.1.38 → 2.1.39

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.
@@ -1 +1 @@
1
- {"version":3,"file":"CaseList.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseList.tsx"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,CAAC;AAChC,OAAO,0BAA0B,CAAC;AA+BlC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAKH,0BAA0B,EAI7B,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EAAE,mBAAmB,EAAe,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,IAAI,CAAC;AAK1C,OAAO,EAAgB,WAAW,EAA2B,MAAM,uBAAuB,CAAC;AAmC3F,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,uBAAwB,SAAQ,cAAc;IAC3D,YAAY,EAAE,cAAc,EAAE,CAAC;CAClC;AAED,oBAAY,YAAY,GAAG,0BAA0B,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;AAM5F,MAAM,WAAW,gBAAgB;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,eAghBrC"}
1
+ {"version":3,"file":"CaseList.d.ts","sourceRoot":"","sources":["../../../../src/components/case-list/CaseList.tsx"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,CAAC;AAChC,OAAO,0BAA0B,CAAC;AA4BlC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAKH,0BAA0B,EAI7B,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EAAE,mBAAmB,EAAe,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,IAAI,CAAC;AAK1C,OAAO,EAAgB,WAAW,EAA2B,MAAM,uBAAuB,CAAC;AAmC3F,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,uBAAwB,SAAQ,cAAc;IAC3D,YAAY,EAAE,cAAc,EAAE,CAAC;CAClC;AAED,oBAAY,YAAY,GAAG,0BAA0B,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;AAM5F,MAAM,WAAW,gBAAgB;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,eA6frC"}
@@ -15,7 +15,7 @@ import AngleDoubleLeftIcon from '@patternfly/react-icons/dist/js/icons/angle-dou
15
15
  import AngleDoubleRightIcon from '@patternfly/react-icons/dist/js/icons/angle-double-right-icon';
16
16
  import AngleDoubleUpIcon from '@patternfly/react-icons/dist/js/icons/angle-double-up-icon';
17
17
  import { ErrorBoundary, ToastNotification, useBreakpoint, useDocumentTitle, useForceUpdate, usePrevious, } from '@rh-support/components';
18
- import { CSSUserModal, fetchAllStatuses, fetchCaseGroupsForSSO, fetchCaseSeverities, fetchCaseTypes, fetchProducts, GlobalMetadataDispatchContext, GlobalMetadataStateContext, setUserPreferences, updateCaseListTraditionalSupportAgreed, updateUserPreferences, useGlobalDispatchContext, UserPreferencesKeys, } from '@rh-support/react-context';
18
+ import { fetchAllStatuses, fetchCaseGroupsForSSO, fetchCaseSeverities, fetchCaseTypes, fetchProducts, GlobalMetadataDispatchContext, GlobalMetadataStateContext, setUserPreferences, updateUserPreferences, UserPreferencesKeys, } from '@rh-support/react-context';
19
19
  import { getStringifiedParams, getUrlParsedParams, haventLoadedMetadata, haventLoadedProductsMetadata, pendoTrackEvent, solrResponseToFacetFields, solrResponseToPivotFields, } from '@rh-support/utils';
20
20
  import get from 'lodash/get';
21
21
  import isEmpty from 'lodash/isEmpty';
@@ -49,8 +49,7 @@ export function CaseList(props) {
49
49
  const { caseList, pivotValues, isFetching, filterValuesFromFacetResponse, currentQuery } = useCaseListStateContext();
50
50
  const CaseListDispatch = useCaseListDispatchContext();
51
51
  const breakPoint = useBreakpoint();
52
- const { globalMetadataState, globalMetadataState: { caseGroups, loggedInUserJwtToken, loggedInUserRights, loggedInUsersAccount, userPreferences, managedAccounts, bookmarkedAccounts, bookmarkedGroupAccounts, allCaseTypes, allCaseSeverities, allCaseStatuses, allProducts, caseListTraditionalSupportAgreed, }, } = useContext(GlobalMetadataStateContext);
53
- const globalDispatchContext = useGlobalDispatchContext();
52
+ const { globalMetadataState, globalMetadataState: { caseGroups, loggedInUserJwtToken, loggedInUserRights, loggedInUsersAccount, userPreferences, managedAccounts, bookmarkedAccounts, bookmarkedGroupAccounts, allCaseTypes, allCaseSeverities, allCaseStatuses, allProducts, }, } = useContext(GlobalMetadataStateContext);
54
53
  const location = useLocation();
55
54
  const searchParams = getUrlParsedParams(location.search);
56
55
  const queryFromUrl = searchParams[FILTER_URL_QUERY_SEARCH_PARAM];
@@ -309,9 +308,6 @@ export function CaseList(props) {
309
308
  isCaseListFilterPanelExanded && isXLScreen && isBasicSearchMode && toggleFilterSection(true);
310
309
  // eslint-disable-next-line react-hooks/exhaustive-deps
311
310
  }, [isBasicSearchMode]);
312
- const onConfirmTraditionalSupportAgreement = () => {
313
- updateCaseListTraditionalSupportAgreed(globalDispatchContext, true);
314
- };
315
311
  const displayRHCDAlert = () => {
316
312
  const openClosedCopy = `Only showing cases that were ${RHCDValue} during the selected time range specified in
317
313
  Customer Dashboard. Case counts may vary slightly based on data retention and availability
@@ -331,36 +327,34 @@ export function CaseList(props) {
331
327
  isCaseListFilterPanelExanded && (isXLScreen ? toggleFilterSection(true) : toggleFilterSection(false));
332
328
  // eslint-disable-next-line react-hooks/exhaustive-deps
333
329
  }, [breakPoint]);
334
- return (React.createElement(React.Fragment, null,
335
- React.createElement(CSSUserModal, { onConfirmTraditionalSupportAgreement: onConfirmTraditionalSupportAgreement, display: !caseListTraditionalSupportAgreed }),
336
- React.createElement("article", { id: "rh-support-cases", className: "cases-main" },
337
- isSolrSearchDown && (React.createElement("div", null,
338
- React.createElement(Alert, { isInline: true, variant: AlertVariant.warning, title: React.createElement(Trans, null,
339
- "Case search is working with limited functionality. Please check",
340
- ' ',
341
- React.createElement("a", { href: "https://status.redhat.com", target: "_blank", rel: "noreferrer", "data-tracking-id": "caselist-redirect-status-page" }, "status page"),
342
- ' ',
343
- "for details.") }))),
344
- React.createElement("section", { className: "case-search-top" },
345
- !isEmpty(RHCDValue) && isRHCDAlertShown && React.createElement("div", { className: "push-bottom" }, displayRHCDAlert()),
346
- React.createElement("div", { className: "search-wrapper" },
347
- React.createElement("div", { className: "open-case" },
348
- React.createElement(NewCaseButton, { routeProps: props.routeProps })),
349
- React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading case search input') } },
350
- React.createElement(CaseSearch, { defaultSavedSearchName: defaultSavedSearchName }))),
351
- isBasicSearchMode && (React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading filter chips') } },
352
- React.createElement(CaseListFilterChips, { productVersionPivotValues: get(pivotValues, SolrPivotKeys.product_version, []), isSolrSearchDown: isSolrSearchDown })))),
353
- React.createElement("section", { className: "case-search-bottom" },
354
- isBasicSearchMode && (React.createElement("aside", { className: `case-search-filters ${((_a = filterSectionRef.current) === null || _a === void 0 ? void 0 : _a.expanded) ? '' : 'collapsed'}` },
355
- React.createElement("h2", { className: "filter-header" }, ((_b = filterSectionRef.current) === null || _b === void 0 ? void 0 : _b.expanded) ? (React.createElement(React.Fragment, null,
356
- React.createElement(Button, { variant: "link", isActive: true, title: t('Collapse filter section'), onClick: onToggleFilterBtnClick, iconPosition: "right", icon: isXLScreen ? React.createElement(AngleDoubleLeftIcon, null) : React.createElement(AngleDoubleUpIcon, null) },
357
- React.createElement("span", null,
358
- React.createElement(Trans, null, "Filters"))))) : (React.createElement(Button, { variant: "link", isActive: false, title: t('Expand filter section'), onClick: onToggleFilterBtnClick, iconPosition: "right", icon: isXLScreen ? React.createElement(AngleDoubleRightIcon, null) : React.createElement(AngleDoubleDownIcon, null) }, isXLScreen ? null : (React.createElement("span", null,
359
- React.createElement(Trans, null, "Filters")))))),
360
- React.createElement("div", { className: "filter-wrapper" },
361
- React.createElement("pfe-collapse-panel", { id: "case-filters-panel", "pfe-animation": "false", ref: filterSectionRef },
362
- React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading filters') } },
363
- React.createElement(CaseListFilters, { filterValues: filterValuesFromFacetResponse, allCaseTypes: allCaseTypes, allCaseStatuses: allCaseStatuses, allCaseSeverities: allCaseSeverities, allProducts: allProducts, isSolrSearchDown: isSolrSearchDown })))))),
364
- React.createElement("section", { className: "case-search-table" },
365
- React.createElement(CaseListTable, { caseList: caseList, caseGroups: caseGroups.data || [], loggedInUserRights: loggedInUserRights.data, sortInfo: filterState.sortInfo, paginationInfo: filterState.paginationInfo, isCaseListPageLoading: isFetching, hasError: hasError, isSolrDown: isSolrSearchDown }))))));
330
+ return (React.createElement("article", { id: "rh-support-cases", className: "cases-main" },
331
+ isSolrSearchDown && (React.createElement("div", null,
332
+ React.createElement(Alert, { isInline: true, variant: AlertVariant.warning, title: React.createElement(Trans, null,
333
+ "Case search is working with limited functionality. Please check",
334
+ ' ',
335
+ React.createElement("a", { href: "https://status.redhat.com", target: "_blank", rel: "noreferrer", "data-tracking-id": "caselist-redirect-status-page" }, "status page"),
336
+ ' ',
337
+ "for details.") }))),
338
+ React.createElement("section", { className: "case-search-top" },
339
+ !isEmpty(RHCDValue) && isRHCDAlertShown && React.createElement("div", { className: "push-bottom" }, displayRHCDAlert()),
340
+ React.createElement("div", { className: "search-wrapper" },
341
+ React.createElement("div", { className: "open-case" },
342
+ React.createElement(NewCaseButton, { routeProps: props.routeProps })),
343
+ React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading case search input') } },
344
+ React.createElement(CaseSearch, { defaultSavedSearchName: defaultSavedSearchName }))),
345
+ isBasicSearchMode && (React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading filter chips') } },
346
+ React.createElement(CaseListFilterChips, { productVersionPivotValues: get(pivotValues, SolrPivotKeys.product_version, []), isSolrSearchDown: isSolrSearchDown })))),
347
+ React.createElement("section", { className: "case-search-bottom" },
348
+ isBasicSearchMode && (React.createElement("aside", { className: `case-search-filters ${((_a = filterSectionRef.current) === null || _a === void 0 ? void 0 : _a.expanded) ? '' : 'collapsed'}` },
349
+ React.createElement("h2", { className: "filter-header" }, ((_b = filterSectionRef.current) === null || _b === void 0 ? void 0 : _b.expanded) ? (React.createElement(React.Fragment, null,
350
+ React.createElement(Button, { variant: "link", isActive: true, title: t('Collapse filter section'), onClick: onToggleFilterBtnClick, iconPosition: "right", icon: isXLScreen ? React.createElement(AngleDoubleLeftIcon, null) : React.createElement(AngleDoubleUpIcon, null) },
351
+ React.createElement("span", null,
352
+ React.createElement(Trans, null, "Filters"))))) : (React.createElement(Button, { variant: "link", isActive: false, title: t('Expand filter section'), onClick: onToggleFilterBtnClick, iconPosition: "right", icon: isXLScreen ? React.createElement(AngleDoubleRightIcon, null) : React.createElement(AngleDoubleDownIcon, null) }, isXLScreen ? null : (React.createElement("span", null,
353
+ React.createElement(Trans, null, "Filters")))))),
354
+ React.createElement("div", { className: "filter-wrapper" },
355
+ React.createElement("pfe-collapse-panel", { id: "case-filters-panel", "pfe-animation": "false", ref: filterSectionRef },
356
+ React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading filters') } },
357
+ React.createElement(CaseListFilters, { filterValues: filterValuesFromFacetResponse, allCaseTypes: allCaseTypes, allCaseStatuses: allCaseStatuses, allCaseSeverities: allCaseSeverities, allProducts: allProducts, isSolrSearchDown: isSolrSearchDown })))))),
358
+ React.createElement("section", { className: "case-search-table" },
359
+ React.createElement(CaseListTable, { caseList: caseList, caseGroups: caseGroups.data || [], loggedInUserRights: loggedInUserRights.data, sortInfo: filterState.sortInfo, paginationInfo: filterState.paginationInfo, isCaseListPageLoading: isFetching, hasError: hasError, isSolrDown: isSolrSearchDown })))));
366
360
  }
@@ -136,7 +136,7 @@ export function CaseListTable(props) {
136
136
  show: isColumnVisible(CaseListColumnIds.group),
137
137
  },
138
138
  ];
139
- const visibleCaseListColumns = columns.filter((column) => { var _a; return (_a = visibleColumns.includes(column.id)) !== null && _a !== void 0 ? _a : column.id; });
139
+ const visibleCaseListColumns = columns.filter((column) => visibleColumns.includes(column.id));
140
140
  const allRows = caseListData.map((row, index) => row.case_number);
141
141
  const selectAllRows = () => {
142
142
  !isEqual(selectedCases, allRows) ? setSelectedCases(allRows) : setSelectedCases([]);
@@ -1 +1 @@
1
- {"version":3,"file":"DownloadCSVFileModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-table/DownloadCSVFileModal.tsx"],"names":[],"mappings":"AAAA,OAAO,6BAA6B,CAAC;AAGrC,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAiBlE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAQxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,UAAU,MAAM;IACZ,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,kBAAkB,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAClD,oBAAoB,EAAE,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7D,WAAW,EAAE,oBAAoB,CAAC;CACrC;AAYD,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,KAAK,EAAE,MAAM,eAuXzD"}
1
+ {"version":3,"file":"DownloadCSVFileModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-table/DownloadCSVFileModal.tsx"],"names":[],"mappings":"AAAA,OAAO,6BAA6B,CAAC;AAGrC,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAiBlE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAQxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,UAAU,MAAM;IACZ,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,kBAAkB,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAClD,oBAAoB,EAAE,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7D,WAAW,EAAE,oBAAoB,CAAC;CACrC;AAYD,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,KAAK,EAAE,MAAM,eA2YzD"}
@@ -46,6 +46,7 @@ export default function DownloadCSVFileModal(props) {
46
46
  alternateId: false,
47
47
  type: false,
48
48
  caseClosedDate: false,
49
+ group: false,
49
50
  });
50
51
  function getKey(key, isSecureSupport) {
51
52
  return isSecureSupport ? SFDCKeys[key] : SolrKeys[key];
@@ -119,6 +120,11 @@ export default function DownloadCSVFileModal(props) {
119
120
  label: 'Closed date',
120
121
  transform: formatDateTime,
121
122
  },
123
+ {
124
+ checkbox: checkboxes.group,
125
+ key: getKey('groupName', loggedInUsersAccount.data.secureSupport),
126
+ label: 'Group',
127
+ },
122
128
  ], [checkboxes, loggedInUsersAccount.data.secureSupport]);
123
129
  useEffect(() => {
124
130
  const updatedCsvHeaders = loggedInUsersAccount.data.secureSupport
@@ -141,9 +147,8 @@ export default function DownloadCSVFileModal(props) {
141
147
  setGeneratedCsvHeaders(updatedCsvHeaders);
142
148
  }, [loggedInUsersAccount.data.secureSupport, checkboxes, headerDefinitions]);
143
149
  const isFetchingCSVData = isFetching || isFetchingSFDC;
144
- const isOrgAdmin = loggedInUserRights.data.isOrgAdmin();
145
150
  const partnerSearch = loggedInUserRights.data.hasManagedAccounts();
146
- const splitExtensionName = downloadCSVFileName.split('.')[0];
151
+ const splitExtensionName = downloadCSVFileName.split('.')[0].replace(/ +/g, ''); // To split and trim value before saving PDF
147
152
  const onCancel = () => {
148
153
  onClose && onClose();
149
154
  };
@@ -156,16 +161,15 @@ export default function DownloadCSVFileModal(props) {
156
161
  const handleCheckboxChange = (key) => {
157
162
  setCheckboxes((prevCheckboxes) => (Object.assign(Object.assign({}, prevCheckboxes), { [key]: !prevCheckboxes[key] })));
158
163
  };
159
- // Group header for SOLR
160
- const groupHeaderSOLR = { label: 'Group', key: SolrKeys.groupName };
164
+ const checkboxValues = Object.values(checkboxes).slice(1); // as we don't want selectAll value
165
+ const allCheckBoxNotSelected = checkboxValues.includes(false);
161
166
  // For SOLR
162
167
  const onExportCSVClick = () => __awaiter(this, void 0, void 0, function* () {
163
168
  try {
164
169
  const res = yield request(createQueryForCSVDownload(filterState, loggedInUserRights.data, loggedInUsersAccount.data), partnerSearch, null, loggedInUsersAccount.data.secureSupport);
165
- const headers = isOrgAdmin ? [...csvHeadersSolr, groupHeaderSOLR] : generatedCsvHeaders;
166
170
  // To map the values in csv to new support type
167
171
  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');
172
+ downloadCSV(updatedCsvData, generatedCsvHeaders, splitExtensionName ? `${splitExtensionName}.csv` : 'CaseList.csv');
169
173
  onCancel();
170
174
  ToastNotification.addSuccessMessage(t('File downloaded successfully!'));
171
175
  }
@@ -174,8 +178,6 @@ export default function DownloadCSVFileModal(props) {
174
178
  ToastNotification.addDangerMessage(t('File could not be downloaded. Please try again! '));
175
179
  }
176
180
  });
177
- // Group header for SFDC
178
- const groupHeaderSFDC = { label: 'Group', key: SFDCKeys.groupName };
179
181
  // For SFDC
180
182
  const onExportCSVClickSecureSupport = () => __awaiter(this, void 0, void 0, function* () {
181
183
  try {
@@ -183,10 +185,9 @@ export default function DownloadCSVFileModal(props) {
183
185
  setIsFetchingSFDC(true);
184
186
  const sfdcResponse = yield publicApi.caseList.getCaseListFromSFDC(sfdcFilter, false, true);
185
187
  setIsFetchingSFDC(false);
186
- const headers = isOrgAdmin ? [...csvHeadersSFDC, groupHeaderSFDC] : csvHeadersSFDC;
187
188
  // To map the values in csv to new support type
188
189
  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
+ downloadCSV(updatedCsvData, csvHeadersSFDC, splitExtensionName ? `${splitExtensionName}.csv` : 'CaseList.csv');
190
191
  onCancel();
191
192
  ToastNotification.addSuccessMessage(t('File downloaded successfully!'));
192
193
  }
@@ -196,24 +197,22 @@ export default function DownloadCSVFileModal(props) {
196
197
  ToastNotification.addDangerMessage(t('Could not export CSV'));
197
198
  }
198
199
  });
199
- useEffect(() => {
200
- const commonState = checkboxes.selectAll;
200
+ const handleSelectAll = () => {
201
+ const newSelectAllState = !checkboxes.selectAll;
201
202
  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,
203
+ ownerName: newSelectAllState,
204
+ modifiedBy: newSelectAllState,
205
+ severity: newSelectAllState,
206
+ status: newSelectAllState,
207
+ createdBy: newSelectAllState,
208
+ productVersion: newSelectAllState,
209
+ accountNumber: newSelectAllState,
210
+ alternateId: newSelectAllState,
211
+ type: newSelectAllState,
212
+ caseClosedDate: newSelectAllState,
213
+ group: newSelectAllState,
212
214
  };
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 })));
215
+ setCheckboxes((prevCheckboxes) => (Object.assign({ selectAll: !prevCheckboxes.selectAll }, updatedCheckboxes)));
217
216
  };
218
217
  const csvHeadersOne = [
219
218
  { label: 'Owner', key: 'ownerName' },
@@ -221,6 +220,7 @@ export default function DownloadCSVFileModal(props) {
221
220
  { label: 'Created by', key: 'createdBy' },
222
221
  { label: 'Account number', key: 'accountNumber' },
223
222
  { label: 'Case type', key: 'type' },
223
+ { label: 'Group', key: 'group' },
224
224
  ];
225
225
  const csvHeadersTwo = [
226
226
  { label: 'Modified by', key: 'modifiedBy' },
@@ -269,5 +269,15 @@ export default function DownloadCSVFileModal(props) {
269
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
270
  React.createElement(Button, { key: "back", variant: "secondary", onClick: onCancel, isDisabled: isDisabled || isFetchingCSVData, "data-tracking-id": "download-csv-modal-cancel" }, t('Cancel')),
271
271
  ];
272
+ // To handle select all checkbox when any of the column checkbox is checked or unchecked
273
+ useEffect(() => {
274
+ allCheckBoxNotSelected
275
+ ? setCheckboxes((prevCheckboxes) => (Object.assign(Object.assign({}, prevCheckboxes), { selectAll: false })))
276
+ : setCheckboxes((prevCheckboxes) => (Object.assign({}, prevCheckboxes)));
277
+ if (!checkboxes.selectAll && !allCheckBoxNotSelected) {
278
+ handleSelectAll(); // To check select all checkbox
279
+ }
280
+ // eslint-disable-next-line react-hooks/exhaustive-deps
281
+ }, [allCheckBoxNotSelected, checkboxes.selectAll]);
272
282
  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
283
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SaveCaseSearchModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-search/SaveCaseSearchModal.tsx"],"names":[],"mappings":"AAgCA,UAAU,MAAM;IACZ,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,wBAAwB,EAAE,MAAM,CAAC;IACjC,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,IAAI,CAAC;CAC/B;AAOD,wBAAgB,mBAAmB,CAAC,EAChC,WAAW,EACX,WAAW,EACX,QAAQ,EACR,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,GAClB,EAAE,MAAM,eAmSR"}
1
+ {"version":3,"file":"SaveCaseSearchModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-search/SaveCaseSearchModal.tsx"],"names":[],"mappings":"AAgCA,UAAU,MAAM;IACZ,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,wBAAwB,EAAE,MAAM,CAAC;IACjC,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,IAAI,CAAC;CAC/B;AAOD,wBAAgB,mBAAmB,CAAC,EAChC,WAAW,EACX,WAAW,EACX,QAAQ,EACR,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,GAClB,EAAE,MAAM,eA4SR"}
@@ -31,6 +31,7 @@ export function SaveCaseSearchModal({ isModalOpen, modalToggle, isAdding, select
31
31
  const [isUpdating, setIsUpdating] = useState(false);
32
32
  const [isDuplicateNameError, setIsDuplicateNameError] = useState(false);
33
33
  const [saveButtonIsClicked, setSaveButtonIsClicked] = useState(false);
34
+ const [queryStr, setQueryStr] = useState('');
34
35
  const filterState = useContext(CaseListFilterStateContext);
35
36
  const { filterQueryInfo, filterInfo, sortInfo } = filterState;
36
37
  const { globalMetadataState } = useContext(GlobalMetadataStateContext);
@@ -137,39 +138,45 @@ export function SaveCaseSearchModal({ isModalOpen, modalToggle, isAdding, select
137
138
  let queryStr = '';
138
139
  let sort = '';
139
140
  let dir = '';
140
- if (isAdding) {
141
- // new saved search
142
- queryStr =
143
- currentSearchType === CaseSearchQueryType.BASIC
144
- ? createUserFriendlyQueryFromFilterState(filterInfo, currentCaseSearchString)
145
- : currentCaseSearchString;
146
- const sortInfo = filterState.sortInfo;
147
- const sortField = sortInfo === null || sortInfo === void 0 ? void 0 : sortInfo.column;
148
- sort = (caseTableColumSortNamesMap === null || caseTableColumSortNamesMap === void 0 ? void 0 : caseTableColumSortNamesMap[sortField]) || sortField || '';
149
- dir = directionMap[sortInfo === null || sortInfo === void 0 ? void 0 : sortInfo.direction] || '';
150
- }
151
- else if (selectedSearchNameToEdit && previousBookmarkedSearchesObj[selectedSearchNameToEdit]) {
152
- // already saved seach
153
- queryStr =
154
- currentSearchType === CaseSearchQueryType.BASIC
155
- ? createUserFriendlyQueryFromFilterState(previousBookmarkedSearchesObj[selectedSearchNameToEdit].filterState, previousBookmarkedSearchesObj[selectedSearchNameToEdit].queryString)
156
- : previousBookmarkedSearchesObj[selectedSearchNameToEdit].queryString;
157
- const sortInfo = (_a = previousBookmarkedSearchesObj[selectedSearchNameToEdit]) === null || _a === void 0 ? void 0 : _a.sortState;
158
- const sortField = sortInfo === null || sortInfo === void 0 ? void 0 : sortInfo.column;
159
- sort = (caseTableColumSortNamesMap === null || caseTableColumSortNamesMap === void 0 ? void 0 : caseTableColumSortNamesMap[sortField]) || sortField || '';
160
- dir = directionMap[sortInfo === null || sortInfo === void 0 ? void 0 : sortInfo.direction] || '';
161
- }
162
- else {
163
- // while saving search name is in progress and modal is open,
164
- // localSavedSearchName in previousBookmarkedSearchesObj is used to populate query inputbox
165
- queryStr = previousBookmarkedSearchesObj[localSavedSearchName] || '';
166
- const sortInfo = (_b = previousBookmarkedSearchesObj[localSavedSearchName]) === null || _b === void 0 ? void 0 : _b.sortState;
167
- const sortField = sortInfo === null || sortInfo === void 0 ? void 0 : sortInfo.column;
168
- sort = (caseTableColumSortNamesMap === null || caseTableColumSortNamesMap === void 0 ? void 0 : caseTableColumSortNamesMap[sortField]) || sortField || '';
169
- dir = directionMap[sortInfo === null || sortInfo === void 0 ? void 0 : sortInfo.direction] || '';
141
+ if (!hydraUserPreferences.isFetching) {
142
+ if (isAdding) {
143
+ // new saved search
144
+ queryStr =
145
+ currentSearchType === CaseSearchQueryType.BASIC
146
+ ? createUserFriendlyQueryFromFilterState(filterInfo, currentCaseSearchString)
147
+ : currentCaseSearchString;
148
+ const sortInfo = filterState.sortInfo;
149
+ const sortField = sortInfo === null || sortInfo === void 0 ? void 0 : sortInfo.column;
150
+ sort = (caseTableColumSortNamesMap === null || caseTableColumSortNamesMap === void 0 ? void 0 : caseTableColumSortNamesMap[sortField]) || sortField || '';
151
+ dir = directionMap[sortInfo === null || sortInfo === void 0 ? void 0 : sortInfo.direction] || '';
152
+ }
153
+ else if (selectedSearchNameToEdit && previousBookmarkedSearchesObj[selectedSearchNameToEdit]) {
154
+ // already saved seach
155
+ queryStr =
156
+ currentSearchType === CaseSearchQueryType.BASIC
157
+ ? createUserFriendlyQueryFromFilterState(previousBookmarkedSearchesObj[selectedSearchNameToEdit].filterState, previousBookmarkedSearchesObj[selectedSearchNameToEdit].queryString)
158
+ : previousBookmarkedSearchesObj[selectedSearchNameToEdit].queryString;
159
+ const sortInfo = (_a = previousBookmarkedSearchesObj[selectedSearchNameToEdit]) === null || _a === void 0 ? void 0 : _a.sortState;
160
+ const sortField = sortInfo === null || sortInfo === void 0 ? void 0 : sortInfo.column;
161
+ sort = (caseTableColumSortNamesMap === null || caseTableColumSortNamesMap === void 0 ? void 0 : caseTableColumSortNamesMap[sortField]) || sortField || '';
162
+ dir = directionMap[sortInfo === null || sortInfo === void 0 ? void 0 : sortInfo.direction] || '';
163
+ }
164
+ else {
165
+ // while saving search name is in progress and modal is open,
166
+ // localSavedSearchName in previousBookmarkedSearchesObj is used to populate query inputbox
167
+ queryStr = previousBookmarkedSearchesObj[localSavedSearchName] || '';
168
+ const sortInfo = (_b = previousBookmarkedSearchesObj[localSavedSearchName]) === null || _b === void 0 ? void 0 : _b.sortState;
169
+ const sortField = sortInfo === null || sortInfo === void 0 ? void 0 : sortInfo.column;
170
+ sort = (caseTableColumSortNamesMap === null || caseTableColumSortNamesMap === void 0 ? void 0 : caseTableColumSortNamesMap[sortField]) || sortField || '';
171
+ dir = directionMap[sortInfo === null || sortInfo === void 0 ? void 0 : sortInfo.direction] || '';
172
+ }
173
+ setQueryStr(queryStr ? `${queryStr} Sort by: ${sort}, ${dir}` : '');
170
174
  }
171
- return queryStr ? `${queryStr} Sort by: ${sort}, ${dir}` : '';
172
175
  };
176
+ useEffect(() => {
177
+ getQueryStr();
178
+ // eslint-disable-next-line react-hooks/exhaustive-deps
179
+ }, [hydraUserPreferences]);
173
180
  useEffect(() => {
174
181
  var _a;
175
182
  setLocalSavedSearchName(selectedSearchNameToEdit);
@@ -187,7 +194,6 @@ export function SaveCaseSearchModal({ isModalOpen, modalToggle, isAdding, select
187
194
  e.stopPropagation();
188
195
  setLocalDefaultChecked(!localDefaultChecked);
189
196
  } }),
190
- ' ',
191
197
  "Set as default"),
192
198
  React.createElement(React.Fragment, null, !isAdding && (React.createElement(Button, { key: "delete", variant: ButtonVariant.link, isDanger: true, "data-tracking-id": "case-list-bookmark-search-deleted", onClick: deleteSavedSearch, style: { marginLeft: 'auto' } },
193
199
  React.createElement(Trans, null, "Remove")))),
@@ -202,5 +208,5 @@ export function SaveCaseSearchModal({ isModalOpen, modalToggle, isAdding, select
202
208
  ? 'error'
203
209
  : 'default' })),
204
210
  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 && isEmpty(getQueryStr()) ? 'error' : 'default', type: "text", id: "filter-query", name: "filter-query", "aria-describedby": "filter-query-helper", value: getQueryStr(), isDisabled: true, resizeOrientation: "vertical" })))));
211
+ React.createElement(TextArea, { isRequired: true, type: "text", id: "filter-query", name: "filter-query", "aria-describedby": "filter-query-helper", value: queryStr, isDisabled: true, resizeOrientation: "vertical" })))));
206
212
  }
@@ -6,7 +6,9 @@
6
6
  color: #ccc;
7
7
  background-color: #fff;
8
8
  }
9
- z-index: 9;
9
+ .pf-v5-c-select__menu {
10
+ z-index: 1;
11
+ }
10
12
  }
11
13
 
12
14
  .pf-v5-c-menu__group-title {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rh-support/cases",
3
- "version": "2.1.38",
3
+ "version": "2.1.39",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org"
@@ -44,11 +44,11 @@
44
44
  "@patternfly/patternfly": "5.1.0",
45
45
  "@patternfly/react-core": "5.1.1",
46
46
  "@patternfly/react-table": "5.1.1",
47
- "@rh-support/components": "2.1.32",
48
- "@rh-support/react-context": "2.1.35",
47
+ "@rh-support/components": "2.1.33",
48
+ "@rh-support/react-context": "2.1.36",
49
49
  "@rh-support/types": "2.0.2",
50
- "@rh-support/user-permissions": "2.1.22",
51
- "@rh-support/utils": "2.1.15",
50
+ "@rh-support/user-permissions": "2.1.23",
51
+ "@rh-support/utils": "2.1.16",
52
52
  "i18next": "^19.0.1",
53
53
  "localforage": "^1.10.0",
54
54
  "lodash": "^4.17.21",
@@ -90,5 +90,5 @@
90
90
  "defaults and supports es6-module",
91
91
  "maintained node versions"
92
92
  ],
93
- "gitHead": "d52b9ccf062855933cbb1da3dac7f4c6a2694671"
93
+ "gitHead": "6f4a93926c86b6af2df3f900f199261c5c3656f5"
94
94
  }