@rh-support/cases 2.6.186 → 2.6.187

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/lib/esm/components/case-list/CaseList.d.ts +0 -7
  2. package/lib/esm/components/case-list/CaseList.d.ts.map +1 -1
  3. package/lib/esm/components/case-list/CaseList.js +195 -113
  4. package/lib/esm/components/case-list/CaseListContext.d.ts.map +1 -1
  5. package/lib/esm/components/case-list/CaseListContext.js +5 -2
  6. package/lib/esm/components/case-list/CaseListFilterContext.d.ts.map +1 -1
  7. package/lib/esm/components/case-list/CaseListFilterContext.js +2 -1
  8. package/lib/esm/components/case-list/CaseListFilterHelpers.d.ts +3 -2
  9. package/lib/esm/components/case-list/CaseListFilterHelpers.d.ts.map +1 -1
  10. package/lib/esm/components/case-list/CaseListFilterHelpers.js +19 -6
  11. package/lib/esm/components/case-list/CaseListFilterReducer.d.ts +35 -4
  12. package/lib/esm/components/case-list/CaseListFilterReducer.d.ts.map +1 -1
  13. package/lib/esm/components/case-list/CaseListFilterReducer.js +4 -12
  14. package/lib/esm/components/case-list/CaseListReducer.d.ts +22 -10
  15. package/lib/esm/components/case-list/CaseListReducer.d.ts.map +1 -1
  16. package/lib/esm/components/case-list/CaseListReducer.js +25 -7
  17. package/lib/esm/components/case-list/case-list-filters/AccountsFilter.d.ts.map +1 -1
  18. package/lib/esm/components/case-list/case-list-filters/AccountsFilter.js +18 -11
  19. package/lib/esm/components/case-list/case-list-filters/AdditionalFilters.d.ts.map +1 -1
  20. package/lib/esm/components/case-list/case-list-filters/AdditionalFilters.js +6 -2
  21. package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.d.ts +1 -7
  22. package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.d.ts.map +1 -1
  23. package/lib/esm/components/case-list/case-list-filters/CaseListFilterChips.js +12 -16
  24. package/lib/esm/components/case-list/case-list-filters/CaseListFilters.d.ts +2 -5
  25. package/lib/esm/components/case-list/case-list-filters/CaseListFilters.d.ts.map +1 -1
  26. package/lib/esm/components/case-list/case-list-filters/CaseListFilters.js +12 -13
  27. package/lib/esm/components/case-list/case-list-filters/CreatorSsoNameFilterChip.d.ts.map +1 -1
  28. package/lib/esm/components/case-list/case-list-filters/CreatorSsoNameFilterChip.js +3 -0
  29. package/lib/esm/components/case-list/case-list-filters/GroupsFilter.d.ts +11 -1
  30. package/lib/esm/components/case-list/case-list-filters/GroupsFilter.d.ts.map +1 -1
  31. package/lib/esm/components/case-list/case-list-filters/GroupsFilter.js +116 -71
  32. package/lib/esm/components/case-list/case-list-filters/ProductFilterChip.d.ts +1 -3
  33. package/lib/esm/components/case-list/case-list-filters/ProductFilterChip.d.ts.map +1 -1
  34. package/lib/esm/components/case-list/case-list-filters/ProductFilterChip.js +2 -2
  35. package/lib/esm/components/case-list/case-list-filters/ProductsFilter.d.ts +5 -4
  36. package/lib/esm/components/case-list/case-list-filters/ProductsFilter.d.ts.map +1 -1
  37. package/lib/esm/components/case-list/case-list-filters/ProductsFilter.js +15 -54
  38. package/lib/esm/components/case-list/case-list-filters/SeverityFilter.d.ts +0 -3
  39. package/lib/esm/components/case-list/case-list-filters/SeverityFilter.d.ts.map +1 -1
  40. package/lib/esm/components/case-list/case-list-filters/SeverityFilter.js +18 -44
  41. package/lib/esm/components/case-list/case-list-filters/StatusFilter.d.ts +0 -3
  42. package/lib/esm/components/case-list/case-list-filters/StatusFilter.d.ts.map +1 -1
  43. package/lib/esm/components/case-list/case-list-filters/StatusFilter.js +14 -44
  44. package/lib/esm/components/case-list/case-list-filters/VersionsFilter.d.ts +1 -3
  45. package/lib/esm/components/case-list/case-list-filters/VersionsFilter.d.ts.map +1 -1
  46. package/lib/esm/components/case-list/case-list-filters/VersionsFilter.js +60 -59
  47. package/lib/esm/components/case-list/case-list-table/CaseListTable.d.ts +7 -3
  48. package/lib/esm/components/case-list/case-list-table/CaseListTable.d.ts.map +1 -1
  49. package/lib/esm/components/case-list/case-list-table/CaseListTable.js +77 -60
  50. package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.d.ts +0 -5
  51. package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.d.ts.map +1 -1
  52. package/lib/esm/components/case-list/case-list-table/DownloadCSVFileModal.js +38 -68
  53. package/lib/esm/components/case-list/case-list-table/ExportCaseListCSV.d.ts.map +1 -1
  54. package/lib/esm/components/case-list/case-list-table/ExportCaseListCSV.js +5 -15
  55. package/lib/esm/components/case-list/case-list-table/SeverityLabel.js +1 -1
  56. package/lib/esm/components/case-list/case-list-table/TableActionsDropdown.d.ts.map +1 -1
  57. package/lib/esm/components/case-list/case-list-table/TableActionsDropdown.js +2 -3
  58. package/lib/esm/components/case-list/case-search/AdvanceSearchToggleButton.d.ts +8 -0
  59. package/lib/esm/components/case-list/case-search/AdvanceSearchToggleButton.d.ts.map +1 -0
  60. package/lib/esm/components/case-list/case-search/AdvanceSearchToggleButton.js +8 -0
  61. package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.d.ts.map +1 -1
  62. package/lib/esm/components/case-list/case-search/BookmarkedSearchesSelector.js +1 -0
  63. package/lib/esm/components/case-list/case-search/CaseSearch.d.ts.map +1 -1
  64. package/lib/esm/components/case-list/case-search/CaseSearch.js +55 -24
  65. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAccountSection.d.ts +10 -0
  66. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAccountSection.d.ts.map +1 -0
  67. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAccountSection.js +29 -0
  68. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAuditsSection.d.ts +10 -0
  69. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAuditsSection.d.ts.map +1 -0
  70. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchAuditsSection.js +16 -0
  71. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchCaseSection.d.ts +9 -0
  72. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchCaseSection.d.ts.map +1 -0
  73. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchCaseSection.js +21 -0
  74. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchDateRangeField.d.ts +12 -0
  75. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchDateRangeField.d.ts.map +1 -0
  76. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchDateRangeField.js +31 -0
  77. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchFieldBlock.d.ts +10 -0
  78. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchFieldBlock.d.ts.map +1 -0
  79. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchFieldBlock.js +10 -0
  80. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchModal.d.ts +10 -0
  81. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchModal.d.ts.map +1 -0
  82. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchModal.js +92 -0
  83. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchOwnerSection.d.ts +9 -0
  84. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchOwnerSection.d.ts.map +1 -0
  85. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchOwnerSection.js +20 -0
  86. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchProductSection.d.ts +9 -0
  87. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchProductSection.d.ts.map +1 -0
  88. package/lib/esm/components/case-list/case-search/advance-search-modal/AdvanceSearchProductSection.js +28 -0
  89. package/lib/esm/components/case-list/case-search/advance-search-modal/ProductVersionDrilldownSelect.d.ts +9 -0
  90. package/lib/esm/components/case-list/case-search/advance-search-modal/ProductVersionDrilldownSelect.d.ts.map +1 -0
  91. package/lib/esm/components/case-list/case-search/advance-search-modal/ProductVersionDrilldownSelect.js +241 -0
  92. package/lib/esm/components/case-list/case-search/advance-search-modal/SelectableLabelFilter.d.ts +11 -0
  93. package/lib/esm/components/case-list/case-search/advance-search-modal/SelectableLabelFilter.d.ts.map +1 -0
  94. package/lib/esm/components/case-list/case-search/advance-search-modal/SelectableLabelFilter.js +23 -0
  95. package/lib/esm/components/case-list/case-search/useAdvanceSearchParser.d.ts.map +1 -1
  96. package/lib/esm/components/case-list/case-search/useAdvanceSearchParser.js +2 -1
  97. package/lib/esm/css/caseList.css +111 -22
  98. package/lib/esm/css/caseSearch.css +114 -0
  99. package/lib/esm/enums/case.d.ts +2 -1
  100. package/lib/esm/enums/case.d.ts.map +1 -1
  101. package/lib/esm/enums/case.js +14 -1
  102. package/lib/esm/enums/caseSearch.d.ts +1 -0
  103. package/lib/esm/enums/caseSearch.d.ts.map +1 -1
  104. package/lib/esm/enums/caseSearch.js +1 -1
  105. package/lib/esm/hooks/useExportCaseListCSV.d.ts.map +1 -1
  106. package/lib/esm/hooks/useExportCaseListCSV.js +1 -9
  107. package/lib/esm/hooks/useFilterStateOnLoad.d.ts +1 -1
  108. package/lib/esm/hooks/useFilterStateOnLoad.d.ts.map +1 -1
  109. package/lib/esm/test-utils/mockData.js +1 -1
  110. package/lib/esm/utils/advanceSearchFormMapper.d.ts +11 -0
  111. package/lib/esm/utils/advanceSearchFormMapper.d.ts.map +1 -0
  112. package/lib/esm/utils/advanceSearchFormMapper.js +71 -0
  113. package/lib/esm/utils/advanceSearchUtils.d.ts +24 -0
  114. package/lib/esm/utils/advanceSearchUtils.d.ts.map +1 -0
  115. package/lib/esm/utils/advanceSearchUtils.js +149 -0
  116. package/lib/esm/utils/caseListGraphQLUtils.d.ts +28 -0
  117. package/lib/esm/utils/caseListGraphQLUtils.d.ts.map +1 -0
  118. package/lib/esm/utils/caseListGraphQLUtils.js +280 -0
  119. package/lib/esm/utils/caseListMapper.d.ts +6 -0
  120. package/lib/esm/utils/caseListMapper.d.ts.map +1 -0
  121. package/lib/esm/utils/caseListMapper.js +36 -0
  122. package/lib/esm/utils/caseListVariablesBuilder.d.ts +15 -0
  123. package/lib/esm/utils/caseListVariablesBuilder.d.ts.map +1 -0
  124. package/lib/esm/utils/caseListVariablesBuilder.js +399 -0
  125. package/lib/esm/utils/caseSearchUtils.d.ts.map +1 -1
  126. package/lib/esm/utils/caseSearchUtils.js +26 -1
  127. package/lib/esm/utils/constants.d.ts +4 -1
  128. package/lib/esm/utils/constants.d.ts.map +1 -1
  129. package/lib/esm/utils/constants.js +20 -2
  130. package/lib/esm/utils/mockSolrResponse.js +1 -1
  131. package/lib/esm/utils/statusUtils.d.ts +4 -0
  132. package/lib/esm/utils/statusUtils.d.ts.map +1 -0
  133. package/lib/esm/utils/statusUtils.js +36 -0
  134. package/package.json +8 -8
@@ -1,43 +1,23 @@
1
1
  import { Button, MenuToggle, Select, SelectList, SelectOption, } from '@patternfly/react-core';
2
- import { SingleSelectDropdown, useSelectKeyboardNavigator } from '@rh-support/components';
2
+ import { useSelectKeyboardNavigator } from '@rh-support/components';
3
3
  import isEmpty from 'lodash/isEmpty';
4
4
  import React, { useContext, useEffect, useState } from 'react';
5
5
  import { useTranslation } from 'react-i18next';
6
6
  import { SolrKeys } from '../../../enums/filters';
7
- import { filterNamesMap } from '../../../utils/constants';
7
+ import { filterNamesMap, PORTAL_DISPLAY_STATUSES } from '../../../utils/constants';
8
8
  import { CaseListFilterDispatchContext, CaseListFilterStateContext } from '../CaseListFilterContext';
9
9
  import { updateFilter } from '../CaseListFilterReducer';
10
10
  export function StatusFilter(props) {
11
- var _a;
12
11
  const dispatch = useContext(CaseListFilterDispatchContext);
13
12
  const { t } = useTranslation();
14
13
  const { filterInfo } = useContext(CaseListFilterStateContext);
15
14
  const [isOpen, setIsOpen] = useState(false);
16
15
  const [selectedItems, setSelectedItems] = useState({});
17
- const list = props.isSolrSearchDown
18
- ? props.allCaseStatuses.map((status) => ({ value: status, key: status }))
19
- : props.filterValues.map((filterValue) => ({ value: filterValue.value, key: filterValue.value }));
20
- const singleSelectOptions = list.map((item) => ({
21
- value: item.value,
22
- label: item.value,
23
- }));
24
- const selectedStatus = ((_a = filterInfo === null || filterInfo === void 0 ? void 0 : filterInfo[SolrKeys.status]) === null || _a === void 0 ? void 0 : _a[0]) || '';
25
- const selectedOption = {
26
- value: selectedStatus,
27
- label: selectedStatus,
28
- };
16
+ const list = PORTAL_DISPLAY_STATUSES.map((status) => ({ value: status, key: status }));
29
17
  const onToggleClick = (e) => {
30
18
  setIsOpen(!isOpen);
31
19
  };
32
20
  const onSelect = (option) => {
33
- if (props.isSolrSearchDown) {
34
- updateFilter(dispatch, {
35
- filterKey: SolrKeys.status,
36
- values: [option.value],
37
- });
38
- setIsOpen(false);
39
- return;
40
- }
41
21
  const prevSelectedStatuses = Object.keys(selectedItems).filter((item) => selectedItems[item] && item);
42
22
  if (selectedItems[option.value]) {
43
23
  setSelectedItems((prevData) => (Object.assign(Object.assign({}, prevData), { [option.value]: false })));
@@ -75,42 +55,32 @@ export function StatusFilter(props) {
75
55
  else if (selectedValues && selectedValues.length === 1) {
76
56
  return selectedValues[0];
77
57
  }
78
- else if (selectedValues && selectedValues.length === 3) {
58
+ else if (selectedValues && totalLength && selectedValues.length === totalLength) {
79
59
  return t('All cases');
80
60
  }
81
61
  else {
82
- if (selectedValues &&
83
- selectedValues.length === 2 &&
84
- selectedValues.every((item) => item.includes('Waiting'))) {
62
+ const hasAllOpenSelected = selectedValues.includes('In Progress') &&
63
+ selectedValues.includes('Waiting on Customer') &&
64
+ !selectedValues.includes('Closed');
65
+ if (hasAllOpenSelected) {
85
66
  return t('All open cases');
86
67
  }
87
- else if (selectedValues && totalLength && selectedValues.length === totalLength) {
88
- return totalLengthString || btnPlaceholder;
89
- }
90
68
  else {
91
69
  return `${selectedValues.length} ${type} selected`;
92
70
  }
93
71
  }
94
72
  };
95
- const placeholder = props.isSolrSearchDown
96
- ? t('Select a status')
97
- : getBtnPlaceholder(t('Select a status'), (filterInfo === null || filterInfo === void 0 ? void 0 : filterInfo[SolrKeys.status]) || [], ' ', list.length, t('All selected'));
73
+ const placeholder = getBtnPlaceholder(t('Select a status'), (filterInfo === null || filterInfo === void 0 ? void 0 : filterInfo[SolrKeys.status]) || [], ' ', list.length, t('All selected'));
98
74
  const toggle = (toggleRef) => (React.createElement(MenuToggle, { variant: "default", onClick: onToggleClick, innerRef: toggleRef, isExpanded: isOpen, isFullWidth: true, onKeyDown: onInputKeyDown },
99
75
  placeholder,
100
76
  Object.keys(selectedItems).filter((key) => selectedItems[key] === true).length > 0 && (React.createElement(Button, { icon: "", variant: "plain", onClick: onClick, "aria-label": "Clear selection", className: "pf-v6-c-select__toggle-clear" }))));
101
- const dropdownOptions = list.map((option, index) => !isEmpty(option.value) && (React.createElement(SelectOption, { key: option.key, value: option, hasCheckbox: !props.isSolrSearchDown, isSelected: selectedItems[option.value], isFocused: focusedItemIndex !== null && focusedItemIndex === index, id: `select-status-${option.value.replace(' ', '-')}` }, option.value)));
102
- const onSingleSelectChange = (option) => {
103
- updateFilter(dispatch, {
104
- filterKey: SolrKeys.status,
105
- values: [option.value],
106
- });
107
- };
77
+ const dropdownOptions = list.map((option, index) => !isEmpty(option.value) && (React.createElement(SelectOption, { key: option.key, value: option, hasCheckbox: true, isSelected: selectedItems[option.value], isFocused: focusedItemIndex !== null && focusedItemIndex === index, id: `select-status-${option.value.replace(' ', '-')}` }, option.value)));
108
78
  useEffect(() => {
109
79
  var _a;
110
80
  if (isEmpty(filterInfo === null || filterInfo === void 0 ? void 0 : filterInfo[SolrKeys.status])) {
111
81
  setSelectedItems({});
112
82
  }
113
- else if (!props.isSolrSearchDown) {
83
+ else {
114
84
  const selectedStatuses = (_a = filterInfo === null || filterInfo === void 0 ? void 0 : filterInfo[SolrKeys.status]) === null || _a === void 0 ? void 0 : _a.reduce((selection, status) => {
115
85
  selection[status] = true;
116
86
  return selection;
@@ -118,10 +88,10 @@ export function StatusFilter(props) {
118
88
  setSelectedItems(selectedStatuses || {});
119
89
  }
120
90
  // eslint-disable-next-line react-hooks/exhaustive-deps
121
- }, [filterInfo === null || filterInfo === void 0 ? void 0 : filterInfo[SolrKeys.status], props.isSolrSearchDown]);
91
+ }, [filterInfo === null || filterInfo === void 0 ? void 0 : filterInfo[SolrKeys.status]]);
122
92
  const titleId = 'case-list-status-filter';
123
93
  return (React.createElement("div", { className: "status-filter" },
124
94
  React.createElement("label", { htmlFor: titleId, className: "pf-v6-u-mb-sm status-filter-label" }, t(filterNamesMap[SolrKeys.status])),
125
- props.isSolrSearchDown ? (React.createElement(SingleSelectDropdown, { id: titleId, selected: selectedOption, options: singleSelectOptions, placeholder: t('Select a status'), onSelect: onSingleSelectChange, dataTrackingId: "status-filter", isScrollable: true })) : (React.createElement(Select, { shouldFocusToggleOnSelect: true, shouldPreventScrollOnItemFocus: true, id: titleId, "data-tracking-id": "status-filter", isOpen: isOpen, selected: selectedItems, onSelect: (_e, v) => onSelect(v), onOpenChange: (nextOpen) => setIsOpen(nextOpen), toggle: toggle, isScrollable: true, popperProps: { direction: 'down', enableFlip: false } },
126
- React.createElement(SelectList, null, dropdownOptions)))));
95
+ React.createElement(Select, { shouldFocusToggleOnSelect: true, shouldPreventScrollOnItemFocus: true, id: titleId, "data-tracking-id": "status-filter", isOpen: isOpen, selected: selectedItems, onSelect: (_e, v) => onSelect(v), onOpenChange: (nextOpen) => setIsOpen(nextOpen), toggle: toggle, isScrollable: true, popperProps: { direction: 'down', enableFlip: false } },
96
+ React.createElement(SelectList, null, dropdownOptions))));
127
97
  }
@@ -1,10 +1,8 @@
1
1
  import React from 'react';
2
- import { IProductVersionPivotMap } from '../CaseList';
3
2
  import { IProductFilter } from '../CaseListFilterReducer';
4
3
  interface IProps {
5
4
  productInfo: IProductFilter;
6
- productVersionPivot: IProductVersionPivotMap[];
7
5
  }
8
- export declare function VersionsFilter({ productInfo, productVersionPivot }: IProps): React.JSX.Element;
6
+ export declare function VersionsFilter({ productInfo }: IProps): React.JSX.Element;
9
7
  export {};
10
8
  //# sourceMappingURL=VersionsFilter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VersionsFilter.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-filters/VersionsFilter.tsx"],"names":[],"mappings":"AAeA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAIhF,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAgB,MAAM,0BAA0B,CAAC;AAoCxE,UAAU,MAAM;IACZ,WAAW,EAAE,cAAc,CAAC;IAC5B,mBAAmB,EAAE,uBAAuB,EAAE,CAAC;CAClD;AAED,wBAAgB,cAAc,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,EAAE,MAAM,qBAkO1E"}
1
+ {"version":3,"file":"VersionsFilter.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-filters/VersionsFilter.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAKhF,OAAO,EAAE,cAAc,EAAgB,MAAM,0BAA0B,CAAC;AAExE,UAAU,MAAM;IACZ,WAAW,EAAE,cAAc,CAAC;CAC/B;AAED,wBAAgB,cAAc,CAAC,EAAE,WAAW,EAAE,EAAE,MAAM,qBAiQrD"}
@@ -1,64 +1,66 @@
1
+ import { useApolloClient } from '@apollo/client/react';
1
2
  import { Button, MenuToggle, Select, SelectList, SelectOption, TextInputGroup, TextInputGroupMain, TextInputGroupUtilities, } from '@patternfly/react-core';
2
3
  import TimesIcon from '@patternfly/react-icons/dist/js/icons/times-icon';
3
4
  import { useSelectKeyboardNavigator } from '@rh-support/components';
5
+ import { GlobalMetadataStateContext } from '@rh-support/react-context';
6
+ import { compareVersions, GET_PRODUCTS, handleGraphQLVersionsResponse } from '@rh-support/utils';
4
7
  import isEmpty from 'lodash/isEmpty';
5
8
  import React, { useContext, useEffect, useMemo, useRef, useState } from 'react';
6
9
  import { useTranslation } from 'react-i18next';
7
10
  import { SolrKeys, SolrPivotKeys } from '../../../enums/filters';
8
11
  import { CaseListFilterDispatchContext, CaseListFilterStateContext } from '../CaseListFilterContext';
9
12
  import { updateFilter } from '../CaseListFilterReducer';
10
- function getVersionValuesForProduct(productPivot = [], productName) {
11
- return (productPivot.find((item) => item.value === productName) || {}).case_version;
12
- }
13
- //split version into parts
14
- function parseVersionIntoParts(version) {
15
- //keep unknown version at last
16
- if (version === 'Unknown')
17
- return [Infinity];
18
- //split dots and spaces
19
- return version.split(/[.\s]/).map((p) => (isNaN(Number(p)) ? p : Number(p)));
20
- }
21
- function compareVersions(versionA, versionB) {
22
- var _a, _b;
23
- const pA = parseVersionIntoParts(versionA), pB = parseVersionIntoParts(versionB);
24
- //compare each part
25
- for (let i = 0; i < Math.max(pA.length, pB.length); i++) {
26
- const a = (_a = pA[i]) !== null && _a !== void 0 ? _a : 0, b = (_b = pB[i]) !== null && _b !== void 0 ? _b : 0; //undefined as 0
27
- if (a == b)
28
- continue;
29
- if (typeof a === 'number' && typeof b === 'number')
30
- return a - b;
31
- if (typeof a === 'string' && typeof b === 'string')
32
- return a.localeCompare(b);
33
- //one is string and other is number => string takes precendence
34
- if (typeof a === 'string')
35
- return -1;
36
- if (typeof b == 'string')
37
- return 1;
38
- }
39
- return 0;
40
- }
41
- export function VersionsFilter({ productInfo, productVersionPivot }) {
13
+ export function VersionsFilter({ productInfo }) {
42
14
  const { t } = useTranslation();
43
15
  const { filterInfo } = useContext(CaseListFilterStateContext);
44
16
  const dispatch = useContext(CaseListFilterDispatchContext);
17
+ const apolloClient = useApolloClient();
18
+ const { globalMetadataState: { allProducts }, } = useContext(GlobalMetadataStateContext);
45
19
  const [inputValue, setInputValue] = useState('');
46
20
  const [activeItem, setActiveItem] = useState(null);
47
21
  const [isOpen, setIsOpen] = useState(false);
48
22
  const [selectedItems, setSelectedItems] = useState({});
23
+ const [fetchedVersions, setFetchedVersions] = useState([]);
24
+ const [isLoading, setIsLoading] = useState(false);
49
25
  const textInputRef = useRef();
50
- // Memoize versions to prevent unnecessary recalculations
51
- const versions = useMemo(() => {
52
- const versionValues = getVersionValuesForProduct(productVersionPivot, productInfo.value);
53
- return versionValues === null || versionValues === void 0 ? void 0 : versionValues.sort((a, b) => compareVersions(a.value, b.value));
54
- }, [productVersionPivot, productInfo.value]);
55
- // Memoize list to prevent unnecessary recreations
56
- const list = useMemo(() => (versions === null || versions === void 0 ? void 0 : versions.map((version) => ({
57
- value: version.value,
58
- key: version.value,
59
- }))) || [], [versions]);
26
+ useEffect(() => {
27
+ const productObj = allProducts.data.productsResult.find((p) => p.name === productInfo.value || p.product === productInfo.value);
28
+ if (!(productObj === null || productObj === void 0 ? void 0 : productObj.productId))
29
+ return;
30
+ setIsLoading(true);
31
+ apolloClient
32
+ .query({
33
+ query: GET_PRODUCTS,
34
+ variables: {
35
+ where: { ParentProduct__c: { eq: productObj.productId }, IsActive: { eq: true } },
36
+ first: 200,
37
+ orderBy: { Name: { order: 'ASC' } },
38
+ },
39
+ fetchPolicy: 'cache-first',
40
+ })
41
+ .then(({ data }) => {
42
+ var _a, _b, _c, _d;
43
+ const edges = (_d = (_c = (_b = (_a = data === null || data === void 0 ? void 0 : data.salesforce_support_uiapi) === null || _a === void 0 ? void 0 : _a.query) === null || _b === void 0 ? void 0 : _b.SalesforceSupportProduct2) === null || _c === void 0 ? void 0 : _c.edges) !== null && _d !== void 0 ? _d : [];
44
+ const versionData = handleGraphQLVersionsResponse(edges, productObj.name || productInfo.value);
45
+ setFetchedVersions(versionData);
46
+ })
47
+ .catch((err) => {
48
+ console.error('[VersionsFilter] Failed to fetch versions:', err);
49
+ setFetchedVersions([]);
50
+ })
51
+ .finally(() => setIsLoading(false));
52
+ // eslint-disable-next-line react-hooks/exhaustive-deps
53
+ }, [productInfo.value, allProducts.data]);
54
+ const list = useMemo(() => {
55
+ const sorted = [...fetchedVersions].sort((a, b) => compareVersions(a.name, b.name));
56
+ return sorted.map((version) => ({
57
+ value: version.name,
58
+ key: version.name,
59
+ id: version.id,
60
+ }));
61
+ }, [fetchedVersions]);
60
62
  const [selectOptions, setSelectOptions] = useState(list);
61
- const onToggleClick = (e) => {
63
+ const onToggleClick = () => {
62
64
  setIsOpen(!isOpen);
63
65
  };
64
66
  const onSelect = (option) => {
@@ -72,18 +74,17 @@ export function VersionsFilter({ productInfo, productVersionPivot }) {
72
74
  setSelectedItems((prevData) => (Object.assign(Object.assign({}, prevData), { [option.value]: true })));
73
75
  prevSelectedVersions.push(option.value);
74
76
  }
75
- const newVersionState = prevSelectedVersions.map((version) => ({
76
- field: SolrKeys.version,
77
- value: version,
78
- }));
79
- const productNewState = [...filterInfo[SolrPivotKeys.product_version]];
77
+ const newVersionState = prevSelectedVersions.map((version) => {
78
+ const versionOption = list.find((item) => item.value === version);
79
+ return {
80
+ field: SolrKeys.version,
81
+ value: version,
82
+ productId: (versionOption === null || versionOption === void 0 ? void 0 : versionOption.id) || '',
83
+ };
84
+ });
85
+ const productNewState = [...((filterInfo === null || filterInfo === void 0 ? void 0 : filterInfo[SolrPivotKeys.product_version]) || [])];
80
86
  const objIndex = productNewState.findIndex((item) => item.value === productInfo.value);
81
- // replace product with updated versions
82
- productNewState[objIndex] = {
83
- field: SolrKeys.product,
84
- value: productInfo.value,
85
- [SolrKeys.version]: newVersionState,
86
- };
87
+ productNewState[objIndex] = Object.assign(Object.assign({}, productNewState[objIndex]), { field: SolrKeys.product, value: productInfo.value, [SolrKeys.version]: newVersionState });
87
88
  updateFilter(dispatch, { filterKey: SolrPivotKeys.product_version, values: productNewState });
88
89
  };
89
90
  // Use the keyboard navigator hook
@@ -103,7 +104,7 @@ export function VersionsFilter({ productInfo, productVersionPivot }) {
103
104
  var _a;
104
105
  setInputValue('');
105
106
  setSelectedItems({});
106
- const productNewState = [...filterInfo[SolrPivotKeys.product_version]];
107
+ const productNewState = [...((filterInfo === null || filterInfo === void 0 ? void 0 : filterInfo[SolrPivotKeys.product_version]) || [])];
107
108
  const objIndex = productNewState.findIndex((item) => item.value === productInfo.value);
108
109
  productNewState[objIndex] = {
109
110
  field: SolrKeys.product,
@@ -117,7 +118,7 @@ export function VersionsFilter({ productInfo, productVersionPivot }) {
117
118
  useEffect(() => {
118
119
  if (focusedItemIndex !== null && list[focusedItemIndex]) {
119
120
  const focusedItem = list[focusedItemIndex];
120
- setActiveItem(`select-multi-typeahead-checkbox-${focusedItem === null || focusedItem === void 0 ? void 0 : focusedItem.value.replace(' ', '-')}`);
121
+ setActiveItem(`select-multi-typeahead-checkbox-${String(focusedItem === null || focusedItem === void 0 ? void 0 : focusedItem.value).replace(' ', '-')}`);
121
122
  }
122
123
  else {
123
124
  setActiveItem(null);
@@ -131,7 +132,7 @@ export function VersionsFilter({ productInfo, productVersionPivot }) {
131
132
  // Memoize dropdownOptions to prevent unnecessary rerenders
132
133
  const dropdownOptions = useMemo(() => {
133
134
  const optionsToRender = !isEmpty(selectOptions) ? selectOptions : list;
134
- return optionsToRender.map((option, index) => option.value && (React.createElement(SelectOption, { key: option.key, value: option, hasCheckbox: true, isSelected: selectedItems[option.value], isFocused: focusedItemIndex !== null && focusedItemIndex === index, id: `select-multi-typeahead-${option.value.replace(' ', '-')}` }, option.value)));
135
+ return optionsToRender.map((option, index) => option.value && (React.createElement(SelectOption, { key: option.key, value: option, hasCheckbox: true, isSelected: selectedItems[String(option.value)], isFocused: focusedItemIndex !== null && focusedItemIndex === index, id: `select-multi-typeahead-${String(option.value).replace(' ', '-')}` }, option.value)));
135
136
  }, [selectOptions, list, selectedItems, focusedItemIndex]);
136
137
  // Update selectOptions when input value changes
137
138
  useEffect(() => {
@@ -156,9 +157,9 @@ export function VersionsFilter({ productInfo, productVersionPivot }) {
156
157
  setSelectedItems(selectedVersions);
157
158
  }, [productInfo.case_version]);
158
159
  const titleId = 'case-list-versions-filter';
159
- return (React.createElement(React.Fragment, null, (!isEmpty(versions) || true) && (React.createElement("div", { className: "version-filter-chip" },
160
+ return (React.createElement("div", { className: "version-filter-chip" },
160
161
  React.createElement("label", { hidden: true, htmlFor: titleId }, t('Open versions dropdown')),
161
162
  React.createElement("div", { className: "pf-v6-c-select" },
162
163
  React.createElement(Select, { shouldFocusToggleOnSelect: true, shouldPreventScrollOnItemFocus: true, "data-tracking-id": "versions-filter", id: titleId, title: t('Version'), isOpen: isOpen, selected: selectedItems, onSelect: (_e, v) => onSelect(v), onOpenChange: (nextOpen) => setIsOpen(nextOpen), popperProps: { direction: 'down', enableFlip: false }, toggle: toggle, isScrollable: true },
163
- React.createElement(SelectList, null, dropdownOptions)))))));
164
+ React.createElement(SelectList, null, isLoading ? React.createElement(SelectOption, { isDisabled: true }, t('Loading...')) : dropdownOptions)))));
164
165
  }
@@ -3,16 +3,20 @@ import { ISolrResponse } from '@rh-support/types/shared';
3
3
  import { UserAuth } from '@rh-support/user-permissions';
4
4
  import React from 'react';
5
5
  import { ICaseListResponse } from '../../../models/caseList';
6
- import { IPaginationInfo, ISortInfo } from '../CaseListFilterReducer';
6
+ import { ISortInfo } from '../CaseListFilterReducer';
7
7
  interface IProps {
8
8
  caseList: ISolrResponse<ICaseListResponse>;
9
9
  caseGroups: ICaseGroup[];
10
10
  loggedInUserRights: UserAuth;
11
11
  sortInfo?: ISortInfo;
12
- paginationInfo?: IPaginationInfo;
13
12
  isCaseListPageLoading: boolean;
14
13
  hasError: boolean;
15
- isSolrDown?: boolean;
14
+ hasNextPage: boolean;
15
+ isLoadingMore: boolean;
16
+ loadMoreError: boolean;
17
+ loadMoreRetryCount: number;
18
+ onRetryLoadMore: () => void;
19
+ sentinelRef?: (node?: Element | null) => void;
16
20
  }
17
21
  export declare function CaseListTable(props: IProps): React.JSX.Element;
18
22
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"CaseListTable.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-table/CaseListTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;AAqB3E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAQxD,OAAO,KAAkD,MAAM,OAAO,CAAC;AAKvE,OAAO,EAAE,iBAAiB,EAAyB,MAAM,0BAA0B,CAAC;AAEpF,OAAO,EAEH,eAAe,EACf,SAAS,EAIZ,MAAM,0BAA0B,CAAC;AA4BlC,UAAU,MAAM;IACZ,QAAQ,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAC3C,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,kBAAkB,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAsBD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,qBA6kB1C"}
1
+ {"version":3,"file":"CaseListTable.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-table/CaseListTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;AAsB3E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAQxD,OAAO,KAAkD,MAAM,OAAO,CAAC;AAKvE,OAAO,EAAE,iBAAiB,EAAyB,MAAM,0BAA0B,CAAC;AAGpF,OAAO,EAAgB,SAAS,EAAyC,MAAM,0BAA0B,CAAC;AA4B1G,UAAU,MAAM;IACZ,QAAQ,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAC3C,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,kBAAkB,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC;CACjD;AAsBD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,qBA0oB1C"}
@@ -1,9 +1,9 @@
1
- import { Bullseye, Button, EmptyState, EmptyStateBody, EmptyStateFooter, EmptyStateVariant, PaginationVariant, Spinner, } from '@patternfly/react-core';
1
+ import { Alert, AlertVariant, Bullseye, Button, EmptyState, EmptyStateBody, EmptyStateFooter, EmptyStateVariant, Spinner, } from '@patternfly/react-core';
2
2
  import SearchIcon from '@patternfly/react-icons/dist/js/icons/search-icon';
3
3
  import { Table, TableVariant, Tbody, Td, Th, Thead, Tr, Visibility } from '@patternfly/react-table';
4
- import { TableComponent, TablePagination } from '@rh-support/components';
4
+ import { TableComponent } from '@rh-support/components';
5
5
  import { GlobalMetadataDispatchContext, updateUserPreferences, useGlobalStateContext, UserPreferencesKeys, } from '@rh-support/react-context';
6
- import { dtmTrackEventCaseStepEncountered, formatDate, scrollIntoView, toNewCaseTypeSwitcher } from '@rh-support/utils';
6
+ import { dtmTrackEventCaseStepEncountered, formatDate, toNewCaseTypeSwitcher } from '@rh-support/utils';
7
7
  import find from 'lodash/find';
8
8
  import flatMap from 'lodash/flatMap';
9
9
  import includes from 'lodash/includes';
@@ -14,8 +14,9 @@ import React, { useContext, useEffect, useRef, useState } from 'react';
14
14
  import { Trans, useTranslation } from 'react-i18next';
15
15
  import { Link } from 'react-router-dom';
16
16
  import { CaseListColumnIds } from '../../../enums/case';
17
+ import { mapSfdcStatusToPortalStatus } from '../../../utils/statusUtils';
17
18
  import { CaseListFilterDispatchContext, CaseListFilterStateContext } from '../CaseListFilterContext';
18
- import { clearFilters, resetFilterToDefaultState, updatePagination, updateSort, } from '../CaseListFilterReducer';
19
+ import { clearFilters, resetFilterToDefaultState, updateSort } from '../CaseListFilterReducer';
19
20
  import SeverityLabel from './SeverityLabel';
20
21
  import { TableColumnSelector } from './table-column-selector/TableColumnSelector';
21
22
  import { TableActionsDropdown } from './TableActionsDropdown';
@@ -36,7 +37,7 @@ const EMPTY_STATE_NO_FILTERS_ERROR = (React.createElement(React.Fragment, null,
36
37
  React.createElement("a", { href: "https://status.redhat.com/", target: "_blank", rel: "noopener noreferrer" }, "status page"),
37
38
  "to see if there are any known issues"));
38
39
  export function CaseListTable(props) {
39
- var _a, _b, _c, _d, _e, _f;
40
+ var _a, _b;
40
41
  const [selectedColumns, setSelectedColumns] = useState([]);
41
42
  const { t } = useTranslation();
42
43
  const [selectedCases, setSelectedCases] = useState([]);
@@ -49,10 +50,10 @@ export function CaseListTable(props) {
49
50
  const [activeSortIndex, setActiveSortIndex] = useState();
50
51
  const [activeSortDirection, setActiveSortDirection] = useState();
51
52
  const [sortedCaseListData, setSortedCaseListData] = useState(caseListData);
52
- const { globalMetadataState: { navBarRef, hydraUserPreferences, loggedInUserRights }, } = useGlobalStateContext();
53
+ const { globalMetadataState: { hydraUserPreferences, loggedInUserRights }, } = useGlobalStateContext();
53
54
  const dispatch = useContext(CaseListFilterDispatchContext);
54
55
  const dispatchToGlobalMetadataReducer = useContext(GlobalMetadataDispatchContext);
55
- const { filterInfo, filterQueryInfo } = useContext(CaseListFilterStateContext);
56
+ const { filterInfo, filterQueryInfo, paginationInfo } = useContext(CaseListFilterStateContext);
56
57
  const currentFilterLength = flatMap(filterInfo).length;
57
58
  const showingFilter = currentFilterLength > 0;
58
59
  const hasSearchQuery = !((filterQueryInfo === null || filterQueryInfo === void 0 ? void 0 : filterQueryInfo.queryString) === '');
@@ -155,12 +156,6 @@ export function CaseListTable(props) {
155
156
  console.error('Could not save selected columns in cache');
156
157
  }
157
158
  };
158
- const onPerPageSelect = (paginationInfo) => {
159
- updatePagination(dispatch, paginationInfo);
160
- };
161
- const onSetPage = (paginationInfo) => {
162
- updatePagination(dispatch, paginationInfo);
163
- };
164
159
  const onRowClick = (ev, row) => {
165
160
  // we dont want to call onRowClick if user changes the checkbox value
166
161
  if (ev.target.tagName === 'INPUT') {
@@ -219,15 +214,11 @@ export function CaseListTable(props) {
219
214
  if (props.isCaseListPageLoading)
220
215
  return 0;
221
216
  let paginationCount = (_b = (_a = props.caseList) === null || _a === void 0 ? void 0 : _a.numFound) !== null && _b !== void 0 ? _b : 0;
222
- // solr return 400 if we fetch the elements after 10000 limit
223
- // so we need to restrict the user from FE too
224
- paginationCount = paginationCount > 10000 ? 10000 : paginationCount;
217
+ // Salesforce has a limit of 4000 cases per page
218
+ // So we need to limit the number of cases returned to 4000
219
+ paginationCount = paginationCount > 4000 ? 4000 : paginationCount;
225
220
  return paginationCount;
226
221
  };
227
- const onBottomPaginationSetPage = (paginationInfo) => {
228
- onSetPage(paginationInfo);
229
- scrollIntoView(tableToolbarRef, { navBarRef, timeout: 0, onlyIfNotInViewport: true, offset: 30 });
230
- };
231
222
  const getSortableRowValues = (row) => {
232
223
  const { case_number, case_summary, case_contactName, case_lastModifiedDate, case_severity, case_status, case_createdDate, case_accountNumber, case_alternate_id, case_type, case_closedDate, case_folderName, case_lastModifiedByName, case_createdByName, case_version, id, case_customer_escalation, case_product, } = row;
233
224
  return [
@@ -278,7 +269,7 @@ export function CaseListTable(props) {
278
269
  ? formatDate(row.case_last_public_update_date)
279
270
  : '',
280
271
  case_severity: row.case_severity ? row.case_severity : '',
281
- case_status: row.case_status,
272
+ case_status: mapSfdcStatusToPortalStatus(row.case_status),
282
273
  case_createdDate: formatDate(row.case_createdDate),
283
274
  case_accountNumber: row.case_accountNumber,
284
275
  case_alternate_id: row.case_alternate_id ? row.case_alternate_id : '',
@@ -349,8 +340,15 @@ export function CaseListTable(props) {
349
340
  React.createElement("div", { className: "toolbar-actions pf-v6-l-flex" },
350
341
  React.createElement(TableColumnSelector, { onColumnSelectorChange: onColumnSelectorChange, cachedColumns: selectedColumns }),
351
342
  React.createElement(TableActionsDropdown, { caseList: caseListData, selectedCases: selectedCases, onCasesCloseSuccess: onCasesCloseSuccess, currentFilteredCaseList: props.caseList })),
352
- React.createElement("span", { className: "toolbar-pagination" },
353
- React.createElement(TablePagination, { perPage: (_c = props.paginationInfo) === null || _c === void 0 ? void 0 : _c.pageSize, currentPage: (_d = props.paginationInfo) === null || _d === void 0 ? void 0 : _d.currentPage, onPerPageSelect: onPerPageSelect, onSetPage: onSetPage, variant: PaginationVariant.top, itemCount: getItemCount() }))),
343
+ !props.isCaseListPageLoading && caseListData.length > 0 && (React.createElement("span", { className: "case-count-indicator" },
344
+ React.createElement("strong", null, caseListData.length),
345
+ " ",
346
+ React.createElement(Trans, null, "of"),
347
+ ' ',
348
+ React.createElement("strong", null,
349
+ getItemCount(),
350
+ " ",
351
+ React.createElement(Trans, null, "loaded"))))),
354
352
  React.createElement("div", { className: "pf-v6-c-scroll-inner-wrapper" },
355
353
  React.createElement(Table, { variant: TableVariant.compact, "aria-label": "case-list", className: "case-list-table" },
356
354
  React.createElement(Thead, null,
@@ -367,41 +365,60 @@ export function CaseListTable(props) {
367
365
  ? '0px'
368
366
  : undefined,
369
367
  }, id: column.id, sort: column.sortable ? onSort(index) : undefined, key: column.id }, column.title))))),
370
- React.createElement(Tbody, null, !props.isCaseListPageLoading && (caseListData || []).length < 1
371
- ? noResultFoundRow
372
- : props.isCaseListPageLoading
373
- ? loadingRowDefault
374
- : sortedCaseListData === null || sortedCaseListData === void 0 ? void 0 : sortedCaseListData.map((row, index) => (React.createElement(Tr, { onRowClick: (event) => (onRowClick ? onRowClick(event, row) : ''), key: row === null || row === void 0 ? void 0 : row.case_number },
375
- React.createElement(Td, { className: "pf-v6-u-pl-md", select: {
376
- rowIndex: index,
377
- onSelect: (_event, index) => onRowSelect(_event, row === null || row === void 0 ? void 0 : row.case_number),
378
- isSelected: selectedCases.includes(row === null || row === void 0 ? void 0 : row.case_number),
379
- } }),
380
- React.createElement(Td, { dataLabel: "Case ID", id: row.case_number, scope: "row" },
381
- React.createElement("div", { className: "case-number-section" },
382
- React.createElement(Link, { to: `/case/${row.case_number}`, onClick: () => dtmTrackEventCaseStepEncountered('review', row.case_number, row.case_product, row.case_version) },
383
- React.createElement("span", { className: "case-number" }, row.case_number)),
384
- row.case_customer_escalation ? (React.createElement("div", { className: "escalation-label" },
385
- React.createElement(Trans, null, "Escalated"))) : (''))),
386
- React.createElement(Td, { dataLabel: "Title" }, row.case_summary),
387
- React.createElement(Td, { className: !isColumnVisible('contactName') ? Visibility.hidden : '', dataLabel: "Owner" }, row.case_contactName),
388
- React.createElement(Td, { className: !isColumnVisible('lastModifiedDate') ? Visibility.hidden : '', dataLabel: "Modified by" },
389
- React.createElement("span", { className: "modified-name" }, row.case_lastModifiedByName),
390
- row.case_lastModifiedDate ? formatDate(row.case_lastModifiedDate) : ''),
391
- React.createElement(Td, { className: !isColumnVisible('severity') ? Visibility.hidden : '', dataLabel: "Severity" },
392
- React.createElement(SeverityLabel, { sevValue: row.case_severity })),
393
- React.createElement(Td, { className: !isColumnVisible('status') ? Visibility.hidden : '', dataLabel: "Status" }, row.case_status),
394
- React.createElement(Td, { className: !isColumnVisible('createdDate') ? Visibility.hidden : '', dataLabel: "Created by" },
395
- React.createElement("span", { className: "created-name" }, row.case_createdByName),
396
- row.case_createdDate ? formatDate(row.case_createdDate) : ''),
397
- React.createElement(Td, { className: !isColumnVisible('product') ? Visibility.hidden : '', dataLabel: "Product and Version" },
398
- row.case_product,
399
- React.createElement("span", { style: { display: 'block' } }, row.case_version)),
400
- React.createElement(Td, { className: !isColumnVisible('accountNumber') ? Visibility.hidden : '', dataLabel: "Account number" }, row.case_accountNumber),
401
- React.createElement(Td, { className: !isColumnVisible('alternateCaseId') ? Visibility.hidden : '', "data-label": "Personal reference number" }, row.case_alternate_id ? row.case_alternate_id : ''),
402
- React.createElement(Td, { className: !isColumnVisible('type') ? Visibility.hidden : '', "data-label": "Support type" }, row.case_type),
403
- React.createElement(Td, { className: !isColumnVisible('closedDate') ? Visibility.hidden : '', "data-label": "Closed date" }, row.case_closedDate ? formatDate(row.case_closedDate) : ''),
404
- React.createElement(Td, { className: !isColumnVisible('folderName') ? Visibility.hidden : '', "data-label": "Group" }, row.case_folderName ? row.case_folderName : ''))))))),
405
- React.createElement("footer", { className: "toolbar-pagination", "data-tracking-id": "case-list-table-pagination" },
406
- React.createElement(TablePagination, { perPage: (_e = props === null || props === void 0 ? void 0 : props.paginationInfo) === null || _e === void 0 ? void 0 : _e.pageSize, currentPage: (_f = props === null || props === void 0 ? void 0 : props.paginationInfo) === null || _f === void 0 ? void 0 : _f.currentPage, onPerPageSelect: onPerPageSelect, onSetPage: onBottomPaginationSetPage, variant: PaginationVariant.bottom, itemCount: getItemCount() })))));
368
+ React.createElement(Tbody, null, !props.isCaseListPageLoading && (caseListData || []).length < 1 ? (noResultFoundRow) : props.isCaseListPageLoading ? (loadingRowDefault) : (React.createElement(React.Fragment, null, sortedCaseListData === null || sortedCaseListData === void 0 ? void 0 :
369
+ sortedCaseListData.map((row, rowIndex) => (React.createElement(Tr, { onRowClick: (event) => (onRowClick ? onRowClick(event, row) : ''), key: row === null || row === void 0 ? void 0 : row.case_number },
370
+ React.createElement(Td, { className: "pf-v6-u-pl-md", select: {
371
+ rowIndex: rowIndex,
372
+ onSelect: (_event, _idx) => onRowSelect(_event, row === null || row === void 0 ? void 0 : row.case_number),
373
+ isSelected: selectedCases.includes(row === null || row === void 0 ? void 0 : row.case_number),
374
+ } }),
375
+ React.createElement(Td, { dataLabel: "Case ID", id: row.case_number, scope: "row" },
376
+ React.createElement("div", { className: "case-number-section" },
377
+ React.createElement(Link, { to: `/case/${row.case_number}`, onClick: () => dtmTrackEventCaseStepEncountered('review', row.case_number, row.case_product, row.case_version) },
378
+ React.createElement("span", { className: "case-number" }, row.case_number)),
379
+ row.case_customer_escalation ? (React.createElement("div", { className: "escalation-label" },
380
+ React.createElement(Trans, null, "Escalated"))) : (''))),
381
+ React.createElement(Td, { dataLabel: "Title" }, row.case_summary),
382
+ React.createElement(Td, { className: !isColumnVisible('contactName') ? Visibility.hidden : '', dataLabel: "Owner" }, row.case_contactName),
383
+ React.createElement(Td, { className: !isColumnVisible('lastModifiedDate') ? Visibility.hidden : '', dataLabel: "Modified by" },
384
+ React.createElement("span", { className: "modified-name" }, row.case_lastModifiedByName),
385
+ row.case_lastModifiedDate ? formatDate(row.case_lastModifiedDate) : ''),
386
+ React.createElement(Td, { className: !isColumnVisible('severity') ? Visibility.hidden : '', dataLabel: "Severity" },
387
+ React.createElement(SeverityLabel, { sevValue: row.case_severity })),
388
+ React.createElement(Td, { className: !isColumnVisible('status') ? Visibility.hidden : '', dataLabel: "Status" }, row.case_status),
389
+ React.createElement(Td, { className: !isColumnVisible('createdDate') ? Visibility.hidden : '', dataLabel: "Created by" },
390
+ React.createElement("span", { className: "created-name" }, row.case_createdByName),
391
+ row.case_createdDate ? formatDate(row.case_createdDate) : ''),
392
+ React.createElement(Td, { className: !isColumnVisible('product') ? Visibility.hidden : '', dataLabel: "Product and Version" },
393
+ row.case_product,
394
+ React.createElement("span", { style: { display: 'block' } }, row.case_version)),
395
+ React.createElement(Td, { className: !isColumnVisible('accountNumber') ? Visibility.hidden : '', dataLabel: "Account number" }, row.case_accountNumber),
396
+ React.createElement(Td, { className: !isColumnVisible('alternateCaseId') ? Visibility.hidden : '', "data-label": "Personal reference number" }, row.case_alternate_id ? row.case_alternate_id : ''),
397
+ React.createElement(Td, { className: !isColumnVisible('type') ? Visibility.hidden : '', "data-label": "Support type" }, row.case_type),
398
+ React.createElement(Td, { className: !isColumnVisible('closedDate') ? Visibility.hidden : '', "data-label": "Closed date" }, row.case_closedDate ? formatDate(row.case_closedDate) : ''),
399
+ React.createElement(Td, { className: !isColumnVisible('folderName') ? Visibility.hidden : '', "data-label": "Group" }, row.case_folderName ? row.case_folderName : '')))),
400
+ (props.hasNextPage || props.isLoadingMore || props.loadMoreError) && (React.createElement(Tr, { key: "skeleton-loader-row", className: "skeleton-loader-row" },
401
+ React.createElement(Td, { className: "pf-v6-u-pl-md" },
402
+ React.createElement("div", { ref: props.sentinelRef, className: "skeleton-sentinel" },
403
+ React.createElement("span", { className: "skeleton-bar skeleton-bar--checkbox" }))),
404
+ visibleCaseListColumns.map((col) => (React.createElement(Td, { key: `skeleton-${col.id}` },
405
+ React.createElement("span", { className: "skeleton-bar" }))))))))))),
406
+ props.loadMoreError && props.loadMoreRetryCount <= 1 && (React.createElement("div", { className: "infinite-scroll-footer-message" },
407
+ React.createElement(Button, { className: "infinite-scroll-retry-btn", variant: "secondary", onClick: props.onRetryLoadMore, icon: React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", width: "14", height: "14", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" },
408
+ React.createElement("polyline", { points: "23 4 23 10 17 10" }),
409
+ React.createElement("path", { d: "M20.49 15a9 9 0 1 1-2.12-9.36L23 10" })) },
410
+ React.createElement(Trans, null, "try loading again")))),
411
+ props.loadMoreError && props.loadMoreRetryCount > 1 && (React.createElement("div", { className: "infinite-scroll-footer-message" },
412
+ React.createElement(Alert, { className: "infinite-scroll-alert pf-v6-u-font-weight-bold", variant: AlertVariant.danger, isInline: true, isPlain: true, title: React.createElement("span", null,
413
+ React.createElement(Trans, null, "We're having trouble loading your cases. Please refresh or"),
414
+ ' ',
415
+ React.createElement(Button, { variant: "link", isInline: true, onClick: props.onRetryLoadMore },
416
+ React.createElement(Trans, null, "try again")),
417
+ ".") }))),
418
+ !props.hasNextPage &&
419
+ !props.isLoadingMore &&
420
+ !props.loadMoreError &&
421
+ caseListData.length > 0 &&
422
+ getItemCount() > ((paginationInfo === null || paginationInfo === void 0 ? void 0 : paginationInfo.pageSize) || 10) && (React.createElement("div", { className: "infinite-scroll-footer-message infinite-scroll-footer-text pf-v6-u-font-weight-bold pf-v6-u-color-200" },
423
+ React.createElement(Trans, null, "No more cases to load"))))));
407
424
  }
@@ -1,15 +1,10 @@
1
1
  import './DownloadCSVFileModal.scss';
2
- import { IAccount } from '@cee-eng/hydrajs/@types/models/account';
3
- import { IApiResponseDetails } from '@rh-support/types/shared';
4
- import { UserAuth } from '@rh-support/user-permissions';
5
2
  import React from 'react';
6
3
  import { ICaseListFilterState } from '../CaseListFilterReducer';
7
4
  interface IProps {
8
5
  isDisabled?: boolean;
9
6
  onModalshow: boolean;
10
7
  onClose: () => void;
11
- loggedInUserRights: IApiResponseDetails<UserAuth>;
12
- loggedInUsersAccount: IApiResponseDetails<Partial<IAccount>>;
13
8
  filterState: ICaseListFilterState;
14
9
  selectedCases: string[];
15
10
  filteredCaseCount: number;
@@ -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;AAqBlE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAGxD,OAAO,KAAuC,MAAM,OAAO,CAAC;AAM5D,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;IAClC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC7B;AAoBD,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,KAAK,EAAE,MAAM,qBA4ZzD"}
1
+ {"version":3,"file":"DownloadCSVFileModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/case-list/case-list-table/DownloadCSVFileModal.tsx"],"names":[],"mappings":"AAAA,OAAO,6BAA6B,CAAC;AAyBrC,OAAO,KAAuC,MAAM,OAAO,CAAC;AAM5D,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,WAAW,EAAE,oBAAoB,CAAC;IAClC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC7B;AAWD,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,KAAK,EAAE,MAAM,qBA8WzD"}