@rh-support/troubleshoot 2.6.296 → 2.6.300

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 (106) hide show
  1. package/lib/esm/components/AccountInfo/AccountSelector.d.ts.map +1 -1
  2. package/lib/esm/components/AccountInfo/AccountSelector.js +40 -28
  3. package/lib/esm/components/CaseEditView/ActiveCustomerEscalation/RequestEscalationModal.d.ts.map +1 -1
  4. package/lib/esm/components/CaseEditView/ActiveCustomerEscalation/RequestEscalationModal.js +12 -42
  5. package/lib/esm/components/CaseEditView/Case.d.ts.map +1 -1
  6. package/lib/esm/components/CaseEditView/Case.js +5 -7
  7. package/lib/esm/components/CaseEditView/CaseDetailsAside.d.ts.map +1 -1
  8. package/lib/esm/components/CaseEditView/CaseDetailsAside.js +8 -25
  9. package/lib/esm/components/CaseEditView/CaseDetailsTabs.d.ts.map +1 -1
  10. package/lib/esm/components/CaseEditView/CaseDetailsTabs.js +10 -14
  11. package/lib/esm/components/CaseEditView/CaseOverview/index.d.ts.map +1 -1
  12. package/lib/esm/components/CaseEditView/CaseOverview/index.js +18 -24
  13. package/lib/esm/components/CaseEditView/RequestRemoteSession/NewEssTermsModal.d.ts.map +1 -1
  14. package/lib/esm/components/CaseEditView/RequestRemoteSession/NewEssTermsModal.js +6 -9
  15. package/lib/esm/components/CaseEditView/RequestRemoteSession/RemoteSessionAgreementModal.d.ts.map +1 -1
  16. package/lib/esm/components/CaseEditView/RequestRemoteSession/RemoteSessionAgreementModal.js +3 -7
  17. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseContactPhoneNumber.d.ts.map +1 -1
  18. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseContactPhoneNumber.js +34 -38
  19. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseDetailsManagement.d.ts.map +1 -1
  20. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseDetailsManagement.js +9 -9
  21. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/ProductVersion.d.ts.map +1 -1
  22. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/ProductVersion.js +59 -19
  23. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/Summary.d.ts.map +1 -1
  24. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/Summary.js +9 -16
  25. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/VerifyCaseStatusModal/VerifyCaseStatusModal.d.ts.map +1 -1
  26. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/VerifyCaseStatusModal/VerifyCaseStatusModal.js +3 -5
  27. package/lib/esm/components/CaseEditView/Tabs/RMEEscalations/RMEEscalationList.d.ts.map +1 -1
  28. package/lib/esm/components/CaseEditView/Tabs/RMEEscalations/RMEEscalationList.js +2 -3
  29. package/lib/esm/components/CaseInformation/CaseInformation.d.ts.map +1 -1
  30. package/lib/esm/components/CaseInformation/CaseInformation.js +5 -7
  31. package/lib/esm/components/CaseInformation/ContactPhoneNumber.d.ts.map +1 -1
  32. package/lib/esm/components/CaseInformation/ContactPhoneNumber.js +24 -37
  33. package/lib/esm/components/CaseInformation/SupportLevel.d.ts.map +1 -1
  34. package/lib/esm/components/CaseInformation/SupportLevel.js +55 -32
  35. package/lib/esm/components/CaseManagement/CaseLanguageSelector.js +2 -2
  36. package/lib/esm/components/CaseManagement/CaseManagement.d.ts.map +1 -1
  37. package/lib/esm/components/CaseManagement/CaseManagement.js +9 -4
  38. package/lib/esm/components/IdeaInformation/IdeaInformation.d.ts.map +1 -1
  39. package/lib/esm/components/IdeaInformation/IdeaInformation.js +12 -11
  40. package/lib/esm/components/OpenCase/SupportTypeSelectorPage.d.ts.map +1 -1
  41. package/lib/esm/components/OpenCase/SupportTypeSelectorPage.js +2 -4
  42. package/lib/esm/components/ProductSelector/AllProductsSelector.d.ts +1 -0
  43. package/lib/esm/components/ProductSelector/AllProductsSelector.d.ts.map +1 -1
  44. package/lib/esm/components/ProductSelector/AllProductsSelector.js +15 -3
  45. package/lib/esm/components/ProductSelector/NewProductDropdownSelector.d.ts.map +1 -1
  46. package/lib/esm/components/ProductSelector/NewProductDropdownSelector.js +37 -13
  47. package/lib/esm/components/ProductSelector/NewProductVersionSelector.d.ts.map +1 -1
  48. package/lib/esm/components/ProductSelector/NewProductVersionSelector.js +53 -19
  49. package/lib/esm/components/ProductSelector/ProductSelector.d.ts.map +1 -1
  50. package/lib/esm/components/ProductSelector/ProductSelector.js +3 -1
  51. package/lib/esm/components/Review/Review.d.ts.map +1 -1
  52. package/lib/esm/components/Review/Review.js +18 -16
  53. package/lib/esm/components/SessionRestore/SessionRestore.d.ts.map +1 -1
  54. package/lib/esm/components/SessionRestore/SessionRestore.js +1 -3
  55. package/lib/esm/components/UpdateSeverityModal/UpdateSeverityModal.js +1 -1
  56. package/lib/esm/components/shared/useIsSectionValid.d.ts.map +1 -1
  57. package/lib/esm/components/shared/useIsSectionValid.js +64 -50
  58. package/lib/esm/components/wizardLayout/GlobalTroubleshootEffects.d.ts.map +1 -1
  59. package/lib/esm/components/wizardLayout/GlobalTroubleshootEffects.js +23 -106
  60. package/lib/esm/components/wizardLayout/WizardLayout.d.ts.map +1 -1
  61. package/lib/esm/components/wizardLayout/WizardLayout.js +7 -6
  62. package/lib/esm/components/wizardLayout/WizardNavigation.d.ts.map +1 -1
  63. package/lib/esm/components/wizardLayout/WizardNavigation.js +10 -10
  64. package/lib/esm/context/CaseContext.d.ts.map +1 -1
  65. package/lib/esm/hooks/useResetCaseCreate.d.ts.map +1 -1
  66. package/lib/esm/hooks/useResetCaseCreate.js +11 -18
  67. package/lib/esm/reducers/CaseConstNTypes.d.ts +2 -86
  68. package/lib/esm/reducers/CaseConstNTypes.d.ts.map +1 -1
  69. package/lib/esm/reducers/CaseConstNTypes.js +0 -5
  70. package/lib/esm/reducers/CaseDetailsPageReducer.d.ts +1 -3
  71. package/lib/esm/reducers/CaseDetailsPageReducer.d.ts.map +1 -1
  72. package/lib/esm/reducers/CaseDetailsPageReducer.js +5 -22
  73. package/lib/esm/reducers/CaseHelpers.d.ts +1 -2
  74. package/lib/esm/reducers/CaseHelpers.d.ts.map +1 -1
  75. package/lib/esm/reducers/CaseHelpers.js +2 -34
  76. package/lib/esm/reducers/CaseOverviewReducer.d.ts +1 -3
  77. package/lib/esm/reducers/CaseOverviewReducer.d.ts.map +1 -1
  78. package/lib/esm/reducers/CaseOverviewReducer.js +5 -7
  79. package/lib/esm/reducers/CaseReducer.d.ts +8 -27
  80. package/lib/esm/reducers/CaseReducer.d.ts.map +1 -1
  81. package/lib/esm/reducers/CaseReducer.js +29 -113
  82. package/package.json +6 -6
  83. package/lib/esm/graphql/index.d.ts +0 -4
  84. package/lib/esm/graphql/index.d.ts.map +0 -1
  85. package/lib/esm/graphql/index.js +0 -3
  86. package/lib/esm/graphql/mutations/createRMECaseEscalation.d.ts +0 -2
  87. package/lib/esm/graphql/mutations/createRMECaseEscalation.d.ts.map +0 -1
  88. package/lib/esm/graphql/mutations/createRMECaseEscalation.js +0 -24
  89. package/lib/esm/graphql/mutations/index.d.ts +0 -2
  90. package/lib/esm/graphql/mutations/index.d.ts.map +0 -1
  91. package/lib/esm/graphql/mutations/index.js +0 -1
  92. package/lib/esm/graphql/queries/getEscalationDetails.d.ts +0 -2
  93. package/lib/esm/graphql/queries/getEscalationDetails.d.ts.map +0 -1
  94. package/lib/esm/graphql/queries/getEscalationDetails.js +0 -24
  95. package/lib/esm/graphql/queries/getParentId.d.ts +0 -2
  96. package/lib/esm/graphql/queries/getParentId.d.ts.map +0 -1
  97. package/lib/esm/graphql/queries/getParentId.js +0 -16
  98. package/lib/esm/graphql/queries/index.d.ts +0 -3
  99. package/lib/esm/graphql/queries/index.d.ts.map +0 -1
  100. package/lib/esm/graphql/queries/index.js +0 -2
  101. package/lib/esm/graphql/schemas/escalation.d.ts +0 -84
  102. package/lib/esm/graphql/schemas/escalation.d.ts.map +0 -1
  103. package/lib/esm/graphql/schemas/escalation.js +0 -1
  104. package/lib/esm/graphql/schemas/index.d.ts +0 -2
  105. package/lib/esm/graphql/schemas/index.d.ts.map +0 -1
  106. package/lib/esm/graphql/schemas/index.js +0 -1
@@ -1,4 +1,3 @@
1
- import { useApolloClient } from '@apollo/client/react';
2
1
  import { Bullseye, Card, CardBody, Gallery, GalleryItem, Split, SplitItem } from '@patternfly/react-core';
3
2
  import { LoadingIndicator } from '@rh-support/components';
4
3
  import { fetchCaseTypes, useGlobalDispatchContext, useGlobalStateContext } from '@rh-support/react-context';
@@ -12,9 +11,8 @@ import { getUpdatedDescription } from '../../reducers/CaseHelpers';
12
11
  import { setCaseDetails } from '../../reducers/CaseReducer';
13
12
  import { BugIcon, CertificationIcon, CustomerServiceIcon, DocumentationIcon, GearIcon, IdeaIcon, RcaIcon, } from './SupportTypeIcons';
14
13
  export default function SupportTypeSelectorPage() {
15
- const { globalMetadataState: { allCaseTypes }, } = useGlobalStateContext();
14
+ const { globalMetadataState: { allCaseTypes, loggedInUsersAccount }, } = useGlobalStateContext();
16
15
  const globalDispatch = useGlobalDispatchContext();
17
- const apolloClient = useApolloClient();
18
16
  const [selectedSupportType, setSelectedSupportType] = useState('');
19
17
  const { routeState: { isNextBtnClickedToShowValidationError }, } = useContext(RouteContext);
20
18
  const { caseType, isFetchingSelectedAccountDetails, issue, timeFramesAndUrgency, v3ClusterName } = useCaseSelector((state) => ({
@@ -29,7 +27,7 @@ export default function SupportTypeSelectorPage() {
29
27
  useEffect(() => {
30
28
  if (haventLoadedMetadata(allCaseTypes)) {
31
29
  // Load support types.
32
- fetchCaseTypes(globalDispatch, apolloClient);
30
+ fetchCaseTypes(globalDispatch, loggedInUsersAccount.data.secureSupport);
33
31
  }
34
32
  // eslint-disable-next-line react-hooks/exhaustive-deps
35
33
  }, []);
@@ -6,6 +6,7 @@ interface IProps {
6
6
  routeProps: RouteComponentProps<IRouteUrlParams>;
7
7
  loadTCOnChange?: boolean;
8
8
  showTCAfterButtonClicked?: boolean;
9
+ checkEntitledProduct?: boolean;
9
10
  isOnSummaryPage?: boolean;
10
11
  isOnGetSupportPage?: boolean;
11
12
  isOnReviewPage?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"AllProductsSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/ProductSelector/AllProductsSelector.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAsD,MAAM,OAAO,CAAC;AAE3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAMvD,OAAO,EAAuC,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAMvG,UAAU,MAAM;IACZ,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACjD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAClC;AAOD;;;;;;;GAOG;AACH,QAAA,MAAM,mBAAmB,4EAoJvB,CAAC;AAGH,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"AllProductsSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/ProductSelector/AllProductsSelector.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAsD,MAAM,OAAO,CAAC;AAE3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAMvD,OAAO,EAAuC,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAMvG,UAAU,MAAM;IACZ,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACjD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAClC;AAQD;;;;;;;GAOG;AACH,QAAA,MAAM,mBAAmB,4EAuKvB,CAAC;AAGH,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1,5 +1,8 @@
1
1
  import { Modal, ModalBody, ModalFooter, ModalHeader, ModalVariant } from '@patternfly/react-core';
2
+ import { AlertMessage, AlertType } from '@rh-support/components';
2
3
  import { GlobalMetadataStateContext } from '@rh-support/react-context';
4
+ import filter from 'lodash/filter';
5
+ import find from 'lodash/find';
3
6
  import isEmpty from 'lodash/isEmpty';
4
7
  import isEqual from 'lodash/isEqual';
5
8
  import React, { forwardRef, useContext, useEffect, useState } from 'react';
@@ -16,6 +19,7 @@ import { ProductVersionDropdownSelector } from './ProductVersionDropdownSelector
16
19
  const defaultProps = {
17
20
  loadTCOnChange: false,
18
21
  showTCAfterButtonClicked: false,
22
+ checkEntitledProduct: false,
19
23
  };
20
24
  /**
21
25
  * Renders a dropdown list to select all products.
@@ -26,12 +30,15 @@ const defaultProps = {
26
30
  * @param props
27
31
  */
28
32
  const AllProductsSelector = forwardRef((props, ref) => {
29
- const { globalMetadataState: { allProducts }, } = useContext(GlobalMetadataStateContext);
33
+ var _a, _b;
34
+ const { globalMetadataState: { allProducts, loggedInUserRights }, } = useContext(GlobalMetadataStateContext);
30
35
  const caseDispatch = useCaseDispatch();
31
- const { product, version } = useCaseSelector((state) => ({
36
+ const { product, version, contactSSOName } = useCaseSelector((state) => ({
32
37
  product: state.caseDetails.product,
33
38
  version: state.caseDetails.version,
39
+ contactSSOName: state.caseDetails.contactSSOName,
34
40
  }), isEqual);
41
+ //test
35
42
  const { topContentState: { topContent }, } = useContext(TCStateContext);
36
43
  const { routeState: { activeSection, isCaseCreate }, } = useContext(RouteContext);
37
44
  const [isModalOpen, setIsModalOpen] = useState(false);
@@ -39,6 +46,7 @@ const AllProductsSelector = forwardRef((props, ref) => {
39
46
  const [showModalButton, setShowModalButton] = useState(false);
40
47
  const [isProductChanged, setProductChanged] = useState(false);
41
48
  const { t } = useTranslation();
49
+ const isEntitledProduct = (_b = find((_a = allProducts === null || allProducts === void 0 ? void 0 : allProducts.data) === null || _a === void 0 ? void 0 : _a.productsResult, (p) => p.product === product)) === null || _b === void 0 ? void 0 : _b.isEntitledProduct;
42
50
  useEffect(() => {
43
51
  // after TC data is loaded we open the modal
44
52
  const showTCPopUpModalOnProductChange = props.loadTCOnChange && !props.showTCAfterButtonClicked && showModal;
@@ -71,6 +79,7 @@ const AllProductsSelector = forwardRef((props, ref) => {
71
79
  };
72
80
  RouteUtils.updateQueryParams(props.routeProps, newParams);
73
81
  }
82
+ const entitledProducts = filter(allProducts.data.productsResult, (p) => p.isEntitledProduct);
74
83
  const renderProductVersionDropdownSelector = (activeSection === (isCaseCreate ? AppRouteSections.SUMMARIZE : AppRouteSections.TROUBLESHOOT) &&
75
84
  !props.caseCreateExperience) ||
76
85
  activeSection === AppRouteSections.GET_SUPPORT ||
@@ -82,9 +91,12 @@ const AllProductsSelector = forwardRef((props, ref) => {
82
91
  return (React.createElement(React.Fragment, null,
83
92
  renderProductVersionDropdownSelector && (React.createElement("div", { className: "form-group product-selector-wrapper" },
84
93
  React.createElement("div", { className: "all-product-selector-dropdown" },
85
- React.createElement(ProductVersionDropdownSelector, { isLoading: allProducts.isFetching, products: allProducts.data.productsResult, onProductChange: onProductChange, onVersionChange: onVersionChange, ref: ref, isOnSummaryPage: props.isOnSummaryPage, loadTCOnChange: props.loadTCOnChange, isFetching: topContent.isFetching })))),
94
+ React.createElement(ProductVersionDropdownSelector, { isLoading: allProducts.isFetching, products: props.checkEntitledProduct ? entitledProducts : allProducts.data.productsResult, onProductChange: onProductChange, onVersionChange: onVersionChange, ref: ref, isOnSummaryPage: props.isOnSummaryPage, loadTCOnChange: props.loadTCOnChange, isFetching: topContent.isFetching })))),
86
95
  renderOpenCaseIssue && (React.createElement("div", { className: "case-details-summary" },
87
96
  React.createElement(OpenCaseIssue, { inlineEditable: false, required: true, isOnSummaryPage: props.isOnSummaryPage, isOnGetSupportPage: props.isOnGetSupportPage }))),
97
+ React.createElement(AlertMessage, { isInline: true, variant: AlertType.DANGER, className: "pf-v6-u-mt-lg", title: t(`${loggedInUserRights.data.isSSOUsernameSameAsLoggedInUser(contactSSOName)
98
+ ? 'You are'
99
+ : 'Selected owner is'} not allowed to create case on this product.`), show: !allProducts.isFetching && props.checkEntitledProduct && !isEntitledProduct && !isEmpty(product) }),
88
100
  showModalButton &&
89
101
  !isEmpty(product) &&
90
102
  !isEmpty(version) &&
@@ -1 +1 @@
1
- {"version":3,"file":"NewProductDropdownSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/ProductSelector/NewProductDropdownSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAiBpE,OAAO,KAAsC,MAAM,OAAO,CAAC;AAK3D,UAAU,MAAM;IACZ,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;IAChC,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,GAAG,CAAC;IAC1C,qCAAqC,EAAE,OAAO,CAAC;IAC/C,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,0BAA0B,GAAI,OAAO,MAAM,sBA+JvD,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
1
+ {"version":3,"file":"NewProductDropdownSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/ProductSelector/NewProductDropdownSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAoBpE,OAAO,KAAkD,MAAM,OAAO,CAAC;AAUvE,UAAU,MAAM;IACZ,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;IAChC,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,GAAG,CAAC;IAC1C,qCAAqC,EAAE,OAAO,CAAC;IAC/C,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,0BAA0B,GAAI,OAAO,MAAM,sBA2MvD,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
@@ -1,15 +1,21 @@
1
- import { Button, MenuToggle, Select, SelectList, SelectOption, Spinner, TextInputGroup, TextInputGroupMain, TextInputGroupUtilities, } from '@patternfly/react-core';
1
+ import { Button, Divider, MenuToggle, Select, SelectGroup, SelectList, SelectOption, Spinner, TextInputGroup, TextInputGroupMain, TextInputGroupUtilities, } from '@patternfly/react-core';
2
2
  import TimesIcon from '@patternfly/react-icons/dist/js/icons/times-icon';
3
3
  import { useSelectKeyboardNavigator } from '@rh-support/components';
4
+ import { GlobalMetadataStateContext } from '@rh-support/react-context';
4
5
  import isEmpty from 'lodash/isEmpty';
5
6
  import isEqual from 'lodash/isEqual';
6
- import React, { useEffect, useRef, useState } from 'react';
7
- import { useTranslation } from 'react-i18next';
7
+ import React, { useContext, useEffect, useRef, useState } from 'react';
8
+ import { Trans, useTranslation } from 'react-i18next';
8
9
  import { useCaseSelector } from '../../context/CaseContext';
10
+ const isProductSupportedForCustomer = (productName, productResults) => {
11
+ const foundItem = productResults.filter((item) => item.name === productName)[0];
12
+ return foundItem ? foundItem.supportedForCustomer : false;
13
+ };
9
14
  export const NewProductDropdownSelector = (props) => {
10
15
  const { t } = useTranslation();
11
16
  const [isOpen, setIsOpen] = useState(false);
12
17
  const [showValidationLocal, setShowValidationLocal] = useState(props.isNextBtnClickedToShowValidationError);
18
+ const [isSelectedProductSupportedForCustomer, setIsSelectedProductSupportedForCustomer] = useState(true);
13
19
  const [filteredProducts, setFilteredProducts] = useState(props.products);
14
20
  const [shouldFilter, setShouldFilter] = useState(false);
15
21
  const textInputRef = useRef();
@@ -17,6 +23,7 @@ export const NewProductDropdownSelector = (props) => {
17
23
  product: state.caseDetails.product,
18
24
  }), isEqual);
19
25
  const [inputValue, setInputValue] = useState('');
26
+ const { globalMetadataState: { allProducts }, } = useContext(GlobalMetadataStateContext);
20
27
  useEffect(() => {
21
28
  setShowValidationLocal(props.isNextBtnClickedToShowValidationError);
22
29
  }, [props.isNextBtnClickedToShowValidationError]);
@@ -26,15 +33,22 @@ export const NewProductDropdownSelector = (props) => {
26
33
  }
27
34
  // eslint-disable-next-line react-hooks/exhaustive-deps
28
35
  }, [product]);
36
+ // Update filtered products whenever input changes
29
37
  useEffect(() => {
38
+ const productsToFilter = props.isCaseCreate ? props.products : allProducts.data.productsResult;
30
39
  if (!isEmpty(inputValue === null || inputValue === void 0 ? void 0 : inputValue.trim())) {
31
- const filtered = props.products.filter((p) => { var _a; return (_a = p.name) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(inputValue.toLowerCase()); });
40
+ const filtered = productsToFilter.filter((p) => { var _a; return (_a = p.name) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(inputValue.toLowerCase()); });
32
41
  setFilteredProducts(filtered);
33
42
  }
34
43
  else {
35
- setFilteredProducts(props.products);
44
+ setFilteredProducts(productsToFilter);
36
45
  }
37
- }, [inputValue, props.products]);
46
+ }, [inputValue, props.products, props.isCaseCreate, allProducts.data.productsResult]);
47
+ useEffect(() => {
48
+ product &&
49
+ props.isOnSummaryPage &&
50
+ setIsSelectedProductSupportedForCustomer(isProductSupportedForCustomer(product, allProducts.data.productsResult));
51
+ }, [allProducts.data.productsResult, product, props.isOnSummaryPage]);
38
52
  const onToggleClick = () => {
39
53
  var _a;
40
54
  setIsOpen(!isOpen);
@@ -69,12 +83,14 @@ export const NewProductDropdownSelector = (props) => {
69
83
  setIsOpen(false);
70
84
  },
71
85
  });
72
- const renderProductOptions = () => {
73
- const productsToShow = shouldFilter ? filteredProducts : props.products;
74
- return productsToShow.length > 0 ? (React.createElement(React.Fragment, null, productsToShow.map((prod, index) => {
75
- var _a;
76
- return (React.createElement(SelectOption, { key: `product-${index}`, value: prod, isFocused: focusedItemIndex === index, className: "pf-v6-c-select__menu-wrapper", "data-tracking-id": `${(_a = prod.name) === null || _a === void 0 ? void 0 : _a.replace(/\s+/g, '')}-product-dropdown`, isSelected: prod.name === product }, prod.name));
77
- }))) : (React.createElement(SelectOption, { key: '', value: '', className: "pf-v6-c-select__menu-wrapper", isDisabled: true }, "No Results Found"));
86
+ const createProductGroup = (products, label, type, shouldFilter = false) => {
87
+ const productsToShow = shouldFilter ? filteredProducts : products;
88
+ return productsToShow.length > 0 ? (React.createElement(React.Fragment, null,
89
+ !shouldFilter && (React.createElement(SelectGroup, { label: label, key: type, value: '', className: "product-selector-group", children: '' })),
90
+ productsToShow.map((prod, index) => {
91
+ var _a;
92
+ return (React.createElement(SelectOption, { key: `${type}-${index}`, value: prod, isFocused: focusedItemIndex === index, className: "pf-v6-c-select__menu-wrapper", "data-tracking-id": `${(_a = prod.name) === null || _a === void 0 ? void 0 : _a.replace(/\s+/g, '')}-${type}-dropdown`, isSelected: prod.name === product }, prod.name));
93
+ }))) : (React.createElement(SelectOption, { key: '', value: '', className: "pf-v6-c-select__menu-wrapper", isDisabled: true }, "No Results Found"));
78
94
  };
79
95
  const toggle = (toggleRef) => (React.createElement(MenuToggle, { ref: toggleRef, variant: "typeahead", onClick: onToggleClick, isExpanded: isOpen, isFullWidth: true, isDisabled: props.isLoading, status: isEmpty(inputValue) && showValidationLocal ? 'danger' : undefined },
80
96
  React.createElement(TextInputGroup, { isPlain: true },
@@ -82,8 +98,16 @@ export const NewProductDropdownSelector = (props) => {
82
98
  props.isLoading ? (React.createElement(TextInputGroupUtilities, null,
83
99
  React.createElement(Spinner, { size: "md" }))) : (React.createElement(TextInputGroupUtilities, Object.assign({}, (!inputValue ? { style: { display: 'none' } } : {})),
84
100
  React.createElement(Button, { icon: React.createElement(TimesIcon, { "aria-hidden": true }), variant: "plain", onClick: onClear, "aria-label": "Clear input value" }))))));
101
+ const topProducts = allProducts.data.topProducts.filter((p) => p.isEntitledProduct).slice(0, 3);
85
102
  return (React.createElement("div", null,
86
103
  React.createElement(Select, { id: "product-selector", isOpen: isOpen, onSelect: (e, selection) => onSelect(selection), onOpenChange: (isOpen) => setIsOpen(isOpen), toggle: toggle, selected: product, shouldFocusFirstItemOnOpen: false, isScrollable: true, "data-tracking-id": "get-support-product-dropdown-selector" },
87
- React.createElement(SelectList, { id: "product-selector-listbox" }, renderProductOptions()))));
104
+ React.createElement(SelectList, { id: "product-selector-listbox" },
105
+ !shouldFilter && createProductGroup(topProducts, t('Top products'), 'topProduct'),
106
+ !shouldFilter && React.createElement(Divider, null),
107
+ createProductGroup(props.isCaseCreate ? props.products : allProducts.data.productsResult, t('All products'), 'product', shouldFilter))),
108
+ !props.isLoading && !isSelectedProductSupportedForCustomer && (React.createElement("div", { className: "pf-v6-u-ml-xs pf-v6-u-mt-sm form-instructions" },
109
+ React.createElement(Trans, null, "Red Hat must confirm your subscription status before providing support."),
110
+ React.createElement("br", null),
111
+ React.createElement(Trans, null, "We'll contact you if we have any questions.")))));
88
112
  };
89
113
  export default NewProductDropdownSelector;
@@ -1 +1 @@
1
- {"version":3,"file":"NewProductVersionSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/ProductSelector/NewProductVersionSelector.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAO/D,UAAU,MAAM;IACZ,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,qCAAqC,EAAE,OAAO,CAAC;CAClD;AAED,eAAO,MAAM,yBAAyB,GAAI,OAAO,MAAM,sBAoFtD,CAAC"}
1
+ {"version":3,"file":"NewProductVersionSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/ProductSelector/NewProductVersionSelector.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAM/D,UAAU,MAAM;IACZ,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,qCAAqC,EAAE,OAAO,CAAC;CAClD;AAED,eAAO,MAAM,yBAAyB,GAAI,OAAO,MAAM,sBAmItD,CAAC"}
@@ -1,18 +1,19 @@
1
- import { useApolloClient } from '@apollo/client/react';
2
1
  import { SingleSelectDropdown } from '@rh-support/components';
3
2
  import { GlobalMetadataStateContext } from '@rh-support/react-context';
3
+ import { getUniqueSortedVersions } from '@rh-support/utils';
4
4
  import isEmpty from 'lodash/isEmpty';
5
5
  import isEqual from 'lodash/isEqual';
6
6
  import React, { useContext, useEffect, useState } from 'react';
7
7
  import { useTranslation } from 'react-i18next';
8
8
  import { useCaseDispatch, useCaseSelector } from '../../context/CaseContext';
9
- import { getVersionsDetails, setCaseState } from '../../reducers/CaseReducer';
9
+ import { getVersionsDetails } from '../../reducers/CaseReducer';
10
10
  import { getProductObj } from '../shared/utils';
11
11
  export const NewProductVersionSelector = (props) => {
12
12
  const { t } = useTranslation();
13
+ const [selectVersionOptions, setSelectVersionOptions] = useState([]);
13
14
  const [showValidationLocal, setShowValidationLocal] = useState(props.isNextBtnClickedToShowValidationError);
15
+ const [isSEProductApiIsDown, setIsSEProductApiIsDown] = useState(false);
14
16
  const caseDispatch = useCaseDispatch();
15
- const apolloClient = useApolloClient();
16
17
  const { versionsDetails, product, version } = useCaseSelector((state) => ({
17
18
  product: state.caseDetails.product,
18
19
  version: state.caseDetails.version,
@@ -23,43 +24,76 @@ export const NewProductVersionSelector = (props) => {
23
24
  setShowValidationLocal(props.isNextBtnClickedToShowValidationError);
24
25
  // eslint-disable-next-line react-hooks/exhaustive-deps
25
26
  }, [props.isNextBtnClickedToShowValidationError]);
27
+ // when user selects a product, we need to fetch versions
26
28
  useEffect(() => {
27
29
  if (isEmpty(product))
28
30
  return;
29
31
  const productObj = getProductObj(allProducts.data.productsResult, product);
30
- if (productObj.productId) {
31
- getVersionsDetails(caseDispatch, apolloClient, productObj.productId, productObj.name || product);
32
+ if (productObj.versions) {
33
+ const productVersions = productObj.hasComponentsInsteadOfVersions
34
+ ? productObj.versions.sort()
35
+ : productObj.versions;
36
+ // if versions array has one value set that value as selected
37
+ if (productVersions.length === 1) {
38
+ props.onVersionChange(productVersions[0]);
39
+ }
40
+ setSelectVersionOptions(productObj.versions);
32
41
  }
42
+ else {
43
+ setIsSEProductApiIsDown(true);
44
+ }
45
+ const getVersions = () => getVersionsDetails(caseDispatch, product);
46
+ // call sfdc version api version flags that is used in severity and submit components
47
+ getVersions();
33
48
  // eslint-disable-next-line react-hooks/exhaustive-deps
34
49
  }, [product]);
35
50
  useEffect(() => {
36
- var _a;
37
- if (versionsDetails.isFetching || !((_a = versionsDetails.data) === null || _a === void 0 ? void 0 : _a.length))
51
+ if (!product)
52
+ return;
53
+ const productObj = getProductObj(allProducts.data.productsResult, product);
54
+ if (productObj.versions) {
55
+ const productVersions = productObj.hasComponentsInsteadOfVersions
56
+ ? productObj.versions.sort()
57
+ : productObj.versions;
58
+ setSelectVersionOptions(productVersions);
59
+ }
60
+ else {
61
+ setIsSEProductApiIsDown(true);
62
+ }
63
+ // eslint-disable-next-line react-hooks/exhaustive-deps
64
+ }, [version]);
65
+ // observe when fetched versions are available
66
+ useEffect(() => {
67
+ if (!isSEProductApiIsDown)
38
68
  return;
39
- if (versionsDetails.data.length === 1) {
40
- props.onVersionChange(versionsDetails.data[0].name);
41
- setCaseState(caseDispatch, { selectedVersionId: versionsDetails.data[0].id });
69
+ const fetchedVersions = versionsDetails.data.map(({ name }) => name);
70
+ // if versions array has one value set that value as selected
71
+ if (fetchedVersions.length === 1) {
72
+ props.onVersionChange(fetchedVersions[0]);
42
73
  }
74
+ const productObj = getProductObj(allProducts.data.productsResult, product);
75
+ const sfdcVersions = getUniqueSortedVersions(fetchedVersions);
76
+ const productVersions = (productObj === null || productObj === void 0 ? void 0 : productObj.hasComponentsInsteadOfVersions) ? sfdcVersions.sort() : sfdcVersions;
77
+ setSelectVersionOptions(productVersions);
43
78
  // eslint-disable-next-line react-hooks/exhaustive-deps
44
- }, [versionsDetails.data]);
79
+ }, [versionsDetails.data, isSEProductApiIsDown]);
45
80
  const onSelect = (selectedOption) => {
46
81
  const selection = selectedOption.value;
47
82
  if (isEqual(selection, version)) {
48
- props.onVersionChange('');
49
- setCaseState(caseDispatch, { selectedVersionId: undefined });
83
+ props.onVersionChange(''); // To unselect a version when user clicks on the same selected product version
50
84
  return;
51
85
  }
52
86
  props.onVersionChange(selection);
53
- const versionObj = versionsDetails.data.find((v) => v.name === selection);
54
- setCaseState(caseDispatch, { selectedVersionId: versionObj === null || versionObj === void 0 ? void 0 : versionObj.id });
55
87
  };
88
+ // Create selected option for SingleSelectDropdown
56
89
  const getSelectedOption = () => ({
57
90
  label: version || '',
58
91
  value: version || '',
59
92
  });
60
- const getDropdownOptions = () => versionsDetails.data.map((v) => ({
61
- label: v.name,
62
- value: v.name,
93
+ // Create options array for SingleSelectDropdown
94
+ const getDropdownOptions = () => selectVersionOptions.map((versionOption) => ({
95
+ label: versionOption,
96
+ value: versionOption,
63
97
  }));
64
- return (React.createElement(SingleSelectDropdown, { onSelect: onSelect, selected: getSelectedOption(), options: getDropdownOptions(), placeholder: t('Select a version'), ariaLabel: t('Select a version'), isInvalid: isEmpty(version) && showValidationLocal, isDisabled: isEmpty(product) || allProducts.isFetching, dataTrackingId: "get-support-version-dropdown-selector", isLoading: versionsDetails.isFetching }));
98
+ return (React.createElement(SingleSelectDropdown, { onSelect: onSelect, selected: getSelectedOption(), options: getDropdownOptions(), placeholder: t('Select a version'), ariaLabel: t('Select a version'), isInvalid: isEmpty(version) && showValidationLocal, isDisabled: isEmpty(product) || allProducts.isFetching, dataTrackingId: "get-support-version-dropdown-selector", isLoading: isSEProductApiIsDown && versionsDetails.isFetching }));
65
99
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ProductSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/ProductSelector/ProductSelector.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAwC,MAAM,OAAO,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAMvD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAKlE,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACjD,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACzE,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAC3C,aAAa,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC9D,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,KAAK,EAAE,MAAM,qBAiGpD"}
1
+ {"version":3,"file":"ProductSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/ProductSelector/ProductSelector.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAwC,MAAM,OAAO,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAOvD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAKlE,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACjD,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACzE,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAC3C,aAAa,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC9D,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,KAAK,EAAE,MAAM,qBAqGpD"}
@@ -7,6 +7,7 @@ import isEqual from 'lodash/isEqual';
7
7
  import React, { useContext, useEffect, useRef } from 'react';
8
8
  import { Trans, useTranslation } from 'react-i18next';
9
9
  import { useCaseDispatch, useCaseSelector } from '../../context/CaseContext';
10
+ import { RouteContext } from '../../context/RouteContext';
10
11
  import { useAB } from '../../hooks/useAB';
11
12
  import { useFetchCVEData } from '../../hooks/useFetchCVEData';
12
13
  import { setCaseState } from '../../reducers/CaseReducer';
@@ -30,6 +31,7 @@ export default function ProductSelector(props) {
30
31
  product: state.caseDetails.product,
31
32
  version: state.caseDetails.version,
32
33
  }), isEqual);
34
+ const { routeState: { isCaseCreate }, } = useContext(RouteContext);
33
35
  const caseDispatch = useCaseDispatch();
34
36
  const cveModalEnabledConfig = getConfigField(pcmConfig.data, 'isCVEModalEnabled', PCM_CONFIG_FIELD_TYPE.STRING);
35
37
  const isCVEModalEnabled = cveModalEnabledConfig === '1';
@@ -49,7 +51,7 @@ export default function ProductSelector(props) {
49
51
  const productSelectorRef = useRef(null);
50
52
  const rederProductSelect = (React.createElement("form", null,
51
53
  (cveRecommendation === null || cveRecommendation === void 0 ? void 0 : cveRecommendation.length) !== 0 && isCVEModalEnabled && React.createElement(CveModal, null),
52
- React.createElement(AllProductsSelector, { routeProps: props.routeProps, ref: productSelectorRef, isOnSummaryPage: true, isOnGetSupportPage: props === null || props === void 0 ? void 0 : props.isOnGetSupportPage, caseCreateExperience: props.caseCreateExperience })));
54
+ React.createElement(AllProductsSelector, { routeProps: props.routeProps, checkEntitledProduct: isCaseCreate ? true : false, ref: productSelectorRef, isOnSummaryPage: true, isOnGetSupportPage: props === null || props === void 0 ? void 0 : props.isOnGetSupportPage, caseCreateExperience: props.caseCreateExperience })));
53
55
  return (React.createElement(React.Fragment, null,
54
56
  React.createElement(AlertMessage, { variant: AlertType.DANGER, className: "pf-v6-u-mt-lg", title: t('There was an error loading products.'), show: allProducts.isError }),
55
57
  rederProductSelect,
@@ -1 +1 @@
1
- {"version":3,"file":"Review.d.ts","sourceRoot":"","sources":["../../../../src/components/Review/Review.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA4B,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAIvD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAoBlE,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;CACpD;AACD,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAK,EAAE,MAAM,qBA4F3C"}
1
+ {"version":3,"file":"Review.d.ts","sourceRoot":"","sources":["../../../../src/components/Review/Review.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAwC,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAIvD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAoBlE,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;CACpD;AACD,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAK,EAAE,MAAM,qBAqF3C"}
@@ -1,14 +1,14 @@
1
1
  import { Grid, GridItem } from '@patternfly/react-core';
2
- // import { AbilityContext, CaseDetailsFields, resourceActions, resources } from '@rh-support/user-permissions';
2
+ import { AbilityContext, CaseDetailsFields, resourceActions, resources } from '@rh-support/user-permissions';
3
3
  import { PreviousCaseTypes } from '@rh-support/utils';
4
4
  import isEmpty from 'lodash/isEmpty';
5
5
  import isEqual from 'lodash/isEqual';
6
- import React, { useEffect, useRef } from 'react';
6
+ import React, { useContext, useEffect, useRef } from 'react';
7
7
  import { useCaseDispatch, useCaseSelector } from '../../context/CaseContext';
8
8
  import { setCaseDetails } from '../../reducers/CaseReducer';
9
9
  import { AccountSelector } from '../AccountInfo/AccountSelector';
10
10
  import { OwnerSelector } from '../AccountInfo/OwnerSelector';
11
- // import CaseGroup from '../CaseInformation/CaseGroup';
11
+ import CaseGroup from '../CaseInformation/CaseGroup';
12
12
  import CaseType from '../CaseInformation/CaseType';
13
13
  import { ContactPhoneNumber } from '../CaseInformation/ContactPhoneNumber';
14
14
  import { ContactPhoneNumberAlert } from '../CaseInformation/ContactPhoneNumberAlert';
@@ -16,12 +16,12 @@ import Fts from '../CaseInformation/Fts';
16
16
  import Severity from '../CaseInformation/Severity';
17
17
  import SupportLevel from '../CaseInformation/SupportLevel';
18
18
  import CaseLanguageSelector from '../CaseManagement/CaseLanguageSelector';
19
- // import { Cep } from '../CaseManagement/Cep';
19
+ import { Cep } from '../CaseManagement/Cep';
20
20
  import OpenReferenceNumber from '../CaseManagement/OpenReferenceNumber';
21
21
  import { OpenShiftClusterId } from '../CaseManagement/OpenShiftClusterId';
22
- // import { RHAssociatesSelector } from '../CaseManagement/RHAssociatesSelector';
23
- // import CaseContactSelector from '../CaseManagement/SendNotifications/CaseContactSelector';
24
- // import { Hostname } from '../ImproveCase/Hostname';
22
+ import { RHAssociatesSelector } from '../CaseManagement/RHAssociatesSelector';
23
+ import CaseContactSelector from '../CaseManagement/SendNotifications/CaseContactSelector';
24
+ import { Hostname } from '../ImproveCase/Hostname';
25
25
  import KtQuestions from '../ImproveCase/KtQuestions';
26
26
  import { AllProductsSelector } from '../ProductSelector/AllProductsSelector';
27
27
  export default function Review(props) {
@@ -41,12 +41,8 @@ export default function Review(props) {
41
41
  }
42
42
  previousCaseTypeRef.current = caseType;
43
43
  }, [caseType, caseDispatch]);
44
- // const ability = useContext(AbilityContext);
45
- // const canSeeEmailNotifications = ability.can(
46
- // resourceActions.PATCH,
47
- // resources.CASE_DETAILS,
48
- // CaseDetailsFields.CASE_DETAILS_SEND_NOTIFICATIONS
49
- // );
44
+ const ability = useContext(AbilityContext);
45
+ const canSeeEmailNotifications = ability.can(resourceActions.PATCH, resources.CASE_DETAILS, CaseDetailsFields.CASE_DETAILS_SEND_NOTIFICATIONS);
50
46
  const onSeverityChange = (payload) => {
51
47
  setCaseDetails(caseDispatch, payload);
52
48
  };
@@ -54,8 +50,9 @@ export default function Review(props) {
54
50
  React.createElement("form", { className: "review-form card card-light push-bottom" },
55
51
  React.createElement(AccountSelector, null),
56
52
  React.createElement(OwnerSelector, null),
57
- React.createElement(AllProductsSelector, { routeProps: props.routeProps, loadTCOnChange: true, showTCAfterButtonClicked: true, isOnReviewPage: true }),
53
+ React.createElement(AllProductsSelector, { routeProps: props.routeProps, loadTCOnChange: true, showTCAfterButtonClicked: true, checkEntitledProduct: true, isOnReviewPage: true }),
58
54
  React.createElement(OpenShiftClusterId, null),
55
+ caseType !== PreviousCaseTypes.FEATURE_ENHANCEMENT && React.createElement(Hostname, null),
59
56
  React.createElement(KtQuestions, { inlineEditable: true, hideSaveCancel: true, onlyShowKT4: caseType === PreviousCaseTypes.FEATURE_ENHANCEMENT }),
60
57
  React.createElement(CaseType, null),
61
58
  React.createElement(SupportLevel, null),
@@ -68,6 +65,11 @@ export default function Review(props) {
68
65
  React.createElement(Fts, { inlineEditable: true, initialIsEditing: isEmpty(contactInfo24x7), hideSaveCancel: true }),
69
66
  React.createElement(Grid, { hasGutter: true },
70
67
  React.createElement(GridItem, { span: 12, xl2: 6, className: "pf-v6-u-mb-xs" },
71
- React.createElement(CaseLanguageSelector, null))),
72
- React.createElement(OpenReferenceNumber, { inlineEditable: false, hideSaveCancel: true }))));
68
+ React.createElement(CaseLanguageSelector, null)),
69
+ React.createElement(GridItem, { span: 12, xl2: 6, className: "pf-v6-u-mb-xs" },
70
+ React.createElement(CaseGroup, null))),
71
+ canSeeEmailNotifications && React.createElement(CaseContactSelector, null),
72
+ React.createElement(RHAssociatesSelector, null),
73
+ React.createElement(OpenReferenceNumber, { inlineEditable: false, hideSaveCancel: true }),
74
+ React.createElement(Cep, null))));
73
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SessionRestore.d.ts","sourceRoot":"","sources":["../../../../src/components/SessionRestore/SessionRestore.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAgC,YAAY,EAAE,MAAM,qDAAqD,CAAC;AAQjH,OAAO,KAAkD,MAAM,OAAO,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAQvD,OAAO,EAGH,eAAe,EAElB,MAAM,iCAAiC,CAAC;AAmBzC,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;CACpD;AAED,eAAO,MAAM,6BAA6B,GAAI,aAAa,YAAY,GAAG,SAAS,EAAE,uBAAuB,MAAM,YAKjH,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,qBAwX3C"}
1
+ {"version":3,"file":"SessionRestore.d.ts","sourceRoot":"","sources":["../../../../src/components/SessionRestore/SessionRestore.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAgC,YAAY,EAAE,MAAM,qDAAqD,CAAC;AAQjH,OAAO,KAAkD,MAAM,OAAO,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAQvD,OAAO,EAGH,eAAe,EAElB,MAAM,iCAAiC,CAAC;AAmBzC,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;CACpD;AAED,eAAO,MAAM,6BAA6B,GAAI,aAAa,YAAY,GAAG,SAAS,EAAE,uBAAuB,MAAM,YAKjH,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,qBAsX3C"}
@@ -8,7 +8,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  /* eslint-disable @typescript-eslint/no-unused-vars */
11
- import { useApolloClient } from '@apollo/client/react';
12
11
  import { pcm } from '@cee-eng/hydrajs';
13
12
  import { useDebounce, useDeepCompareDebounce, usePrevious } from '@rh-support/components';
14
13
  import { GlobalMetadataStateContext } from '@rh-support/react-context';
@@ -44,7 +43,6 @@ export const isSessionFromCurrentAuthCycle = (sessionItem, currentLoginStartTime
44
43
  };
45
44
  export function SessionRestore(props) {
46
45
  var _a;
47
- const apolloClient = useApolloClient();
48
46
  const sessionRestoreDispatch = useContext(SessionRestoreDispatchContext);
49
47
  const dispatchToAttachmentReducer = useContext(AttachmentDispatchContext);
50
48
  const { sessionRestore } = useContext(SessionRestoreStateContext);
@@ -241,7 +239,7 @@ export function SessionRestore(props) {
241
239
  const reg = new RegExp('Cluster Name: (.*) ');
242
240
  const v3ClusterName = reg.exec(sessionDetails.description) ? reg.exec(sessionDetails.description)[1] : '';
243
241
  setCaseState(caseDispatch, { v3ClusterName });
244
- yield updateCaseWithSession(caseDispatch, sessionItem, loggedInUserRights.data.getAccountNumber(), loggedInUserRights.data.getHydraContactFromLoggedInUser(), loggedInUsersAccount.data, apolloClient);
242
+ yield updateCaseWithSession(caseDispatch, sessionItem, loggedInUserRights.data.getAccountNumber(), loggedInUserRights.data.getHydraContactFromLoggedInUser(), loggedInUsersAccount.data);
245
243
  if (!isAISureSession(sessionItem)) {
246
244
  restoreFilesFromSession(dispatchToAttachmentReducer, sessionItem.session.id);
247
245
  }
@@ -223,7 +223,7 @@ export default function UpdateSeverityModal(props) {
223
223
  });
224
224
  onClose();
225
225
  caseUpdateError.showError(e, t(`Failed to update case status. Please try again`));
226
- yield updateCaseDetails(caseDispatch, caseDetails.caseNumber, Object.assign({ status: 'Waiting on Customer' }, updatedCaseDetails));
226
+ yield updateCaseDetails(caseDispatch, caseDetails.caseNumber, Object.assign({ status: 'Waiting on Customer' }, updateCaseDetails));
227
227
  }
228
228
  }
229
229
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"useIsSectionValid.d.ts","sourceRoot":"","sources":["../../../../src/components/shared/useIsSectionValid.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAyB1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAKnE,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,gBAAgB;;;;;EAuQ9D"}
1
+ {"version":3,"file":"useIsSectionValid.d.ts","sourceRoot":"","sources":["../../../../src/components/shared/useIsSectionValid.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAuB/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAMnE,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,gBAAgB;;;;;EAkR9D"}