@rh-support/troubleshoot 2.6.301 → 2.6.302

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 (221) hide show
  1. package/lib/esm/components/AccountInfo/AccountSelector.d.ts.map +1 -1
  2. package/lib/esm/components/AccountInfo/AccountSelector.js +28 -40
  3. package/lib/esm/components/AccountInfo/OwnerSelector.d.ts.map +1 -1
  4. package/lib/esm/components/AccountInfo/OwnerSelector.js +52 -14
  5. package/lib/esm/components/CaseEditView/ActiveCustomerEscalation/RequestEscalationModal.d.ts.map +1 -1
  6. package/lib/esm/components/CaseEditView/ActiveCustomerEscalation/RequestEscalationModal.js +51 -31
  7. package/lib/esm/components/CaseEditView/Case.d.ts.map +1 -1
  8. package/lib/esm/components/CaseEditView/Case.js +50 -18
  9. package/lib/esm/components/CaseEditView/CaseDetailsAside.d.ts.map +1 -1
  10. package/lib/esm/components/CaseEditView/CaseDetailsAside.js +25 -8
  11. package/lib/esm/components/CaseEditView/CaseDetailsTabs.d.ts.map +1 -1
  12. package/lib/esm/components/CaseEditView/CaseDetailsTabs.js +57 -34
  13. package/lib/esm/components/CaseEditView/CaseOverview/CaseOwnerInfo.d.ts +2 -0
  14. package/lib/esm/components/CaseEditView/CaseOverview/CaseOwnerInfo.d.ts.map +1 -1
  15. package/lib/esm/components/CaseEditView/CaseOverview/CaseOwnerInfo.js +3 -3
  16. package/lib/esm/components/CaseEditView/CaseOverview/CaseStatus.d.ts +1 -2
  17. package/lib/esm/components/CaseEditView/CaseOverview/CaseStatus.d.ts.map +1 -1
  18. package/lib/esm/components/CaseEditView/CaseOverview/CaseStatus.js +8 -6
  19. package/lib/esm/components/CaseEditView/CaseOverview/index.d.ts.map +1 -1
  20. package/lib/esm/components/CaseEditView/CaseOverview/index.js +43 -30
  21. package/lib/esm/components/CaseEditView/CaseSolutions/CaseSolutions.d.ts.map +1 -1
  22. package/lib/esm/components/CaseEditView/CaseSolutions/CaseSolutions.js +76 -30
  23. package/lib/esm/components/CaseEditView/CaseSolutions/CaseSolutionsItem.d.ts +0 -1
  24. package/lib/esm/components/CaseEditView/CaseSolutions/CaseSolutionsItem.d.ts.map +1 -1
  25. package/lib/esm/components/CaseEditView/CaseSolutions/CaseSolutionsItem.js +3 -3
  26. package/lib/esm/components/CaseEditView/ConfirmationModals/ReopenCaseModal.d.ts +1 -3
  27. package/lib/esm/components/CaseEditView/ConfirmationModals/ReopenCaseModal.d.ts.map +1 -1
  28. package/lib/esm/components/CaseEditView/ConfirmationModals/ReopenCaseModal.js +3 -4
  29. package/lib/esm/components/CaseEditView/RequestRemoteSession/ESSRemoteSessionModal.d.ts.map +1 -1
  30. package/lib/esm/components/CaseEditView/RequestRemoteSession/ESSRemoteSessionModal.js +13 -17
  31. package/lib/esm/components/CaseEditView/RequestRemoteSession/NewEssTermsModal.d.ts.map +1 -1
  32. package/lib/esm/components/CaseEditView/RequestRemoteSession/NewEssTermsModal.js +19 -43
  33. package/lib/esm/components/CaseEditView/RequestRemoteSession/RemoteSessionAgreementModal.d.ts.map +1 -1
  34. package/lib/esm/components/CaseEditView/RequestRemoteSession/RemoteSessionAgreementModal.js +17 -40
  35. package/lib/esm/components/CaseEditView/RequestRemoteSession/remoteSessionUtils.d.ts +3 -0
  36. package/lib/esm/components/CaseEditView/RequestRemoteSession/remoteSessionUtils.d.ts.map +1 -0
  37. package/lib/esm/components/CaseEditView/RequestRemoteSession/remoteSessionUtils.js +22 -0
  38. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseContactPhoneNumber.d.ts.map +1 -1
  39. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseContactPhoneNumber.js +44 -41
  40. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseDetailsManagement.d.ts.map +1 -1
  41. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseDetailsManagement.js +8 -7
  42. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseInformation.d.ts.map +1 -1
  43. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseInformation.js +0 -2
  44. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseOpenshiftClusterId/CaseOpenshiftClusterId.d.ts.map +1 -1
  45. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseOpenshiftClusterId/CaseOpenshiftClusterId.js +38 -18
  46. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/ProductVersion.d.ts.map +1 -1
  47. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/ProductVersion.js +19 -59
  48. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/Summary.d.ts.map +1 -1
  49. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/Summary.js +16 -9
  50. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/CaseDiscussion.d.ts +4 -2
  51. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/CaseDiscussion.d.ts.map +1 -1
  52. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/CaseDiscussion.js +110 -148
  53. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/CommentSearch.d.ts.map +1 -1
  54. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/CommentSearch.js +5 -5
  55. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/DiscussionItemLink.d.ts.map +1 -1
  56. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/DiscussionItemLink.js +2 -1
  57. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/PostComment/useAttachmentUploadCompletion.d.ts +15 -0
  58. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/PostComment/useAttachmentUploadCompletion.d.ts.map +1 -0
  59. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/PostComment/useAttachmentUploadCompletion.js +19 -0
  60. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/PostComment/useCommentDrafts.d.ts +17 -0
  61. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/PostComment/useCommentDrafts.d.ts.map +1 -0
  62. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/PostComment/useCommentDrafts.js +49 -0
  63. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/PostComment.d.ts +6 -2
  64. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/PostComment.d.ts.map +1 -1
  65. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/PostComment.js +147 -241
  66. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/VerifyCaseStatusModal/VerifyCaseStatusModal.d.ts.map +1 -1
  67. package/lib/esm/components/CaseEditView/Tabs/CaseDiscussion/VerifyCaseStatusModal/VerifyCaseStatusModal.js +5 -3
  68. package/lib/esm/components/CaseEditView/Tabs/CaseHistory/CaseHistory.d.ts.map +1 -1
  69. package/lib/esm/components/CaseEditView/Tabs/CaseHistory/CaseHistory.js +3 -1
  70. package/lib/esm/components/CaseEditView/Tabs/CaseHistory/Timeline.css +4 -4
  71. package/lib/esm/components/CaseEditView/Tabs/CaseHistory/Timeline.d.ts +35 -3
  72. package/lib/esm/components/CaseEditView/Tabs/CaseHistory/Timeline.d.ts.map +1 -1
  73. package/lib/esm/components/CaseEditView/Tabs/CaseHistory/Timeline.js +63 -224
  74. package/lib/esm/components/CaseEditView/Tabs/CasePrivateNotes/CasePrivateNotes.d.ts +4 -5
  75. package/lib/esm/components/CaseEditView/Tabs/CasePrivateNotes/CasePrivateNotes.d.ts.map +1 -1
  76. package/lib/esm/components/CaseEditView/Tabs/CasePrivateNotes/CasePrivateNotes.js +18 -5
  77. package/lib/esm/components/CaseEditView/Tabs/CaseSummary/CaseSummary.d.ts.map +1 -1
  78. package/lib/esm/components/CaseEditView/Tabs/CaseSummary/CaseSummary.js +7 -2
  79. package/lib/esm/components/CaseEditView/Tabs/RMEEscalations/RMEEscalationList.d.ts.map +1 -1
  80. package/lib/esm/components/CaseEditView/Tabs/RMEEscalations/RMEEscalationList.js +30 -52
  81. package/lib/esm/components/CaseInformation/CaseGroup.d.ts.map +1 -1
  82. package/lib/esm/components/CaseInformation/CaseGroup.js +68 -46
  83. package/lib/esm/components/CaseInformation/CaseInformation.d.ts.map +1 -1
  84. package/lib/esm/components/CaseInformation/CaseInformation.js +7 -5
  85. package/lib/esm/components/CaseInformation/ContactPhoneNumber.d.ts.map +1 -1
  86. package/lib/esm/components/CaseInformation/ContactPhoneNumber.js +37 -24
  87. package/lib/esm/components/CaseInformation/SupportLevel.d.ts.map +1 -1
  88. package/lib/esm/components/CaseInformation/SupportLevel.js +32 -55
  89. package/lib/esm/components/CaseManagement/CaseLanguageSelector.js +2 -2
  90. package/lib/esm/components/CaseManagement/CaseManagement.d.ts.map +1 -1
  91. package/lib/esm/components/CaseManagement/CaseManagement.js +4 -7
  92. package/lib/esm/components/CaseManagement/Cep.d.ts.map +1 -1
  93. package/lib/esm/components/CaseManagement/Cep.js +4 -7
  94. package/lib/esm/components/CaseManagement/OpenShiftClusterId.d.ts.map +1 -1
  95. package/lib/esm/components/CaseManagement/OpenShiftClusterId.js +19 -9
  96. package/lib/esm/components/CaseManagement/OpenshiftDropdownV4.d.ts.map +1 -1
  97. package/lib/esm/components/CaseManagement/OpenshiftDropdownV4.js +16 -11
  98. package/lib/esm/components/CaseManagement/SendNotifications/NonOrgCaseNotifyeesSelector.d.ts.map +1 -1
  99. package/lib/esm/components/CaseManagement/SendNotifications/NonOrgCaseNotifyeesSelector.js +34 -40
  100. package/lib/esm/components/IdeaInformation/IdeaInformation.d.ts.map +1 -1
  101. package/lib/esm/components/IdeaInformation/IdeaInformation.js +13 -14
  102. package/lib/esm/components/OpenCase/SupportTypeSelectorPage.d.ts.map +1 -1
  103. package/lib/esm/components/OpenCase/SupportTypeSelectorPage.js +4 -2
  104. package/lib/esm/components/ProductSelector/AllProductsSelector.d.ts +0 -1
  105. package/lib/esm/components/ProductSelector/AllProductsSelector.d.ts.map +1 -1
  106. package/lib/esm/components/ProductSelector/AllProductsSelector.js +3 -15
  107. package/lib/esm/components/ProductSelector/NewProductDropdownSelector.d.ts.map +1 -1
  108. package/lib/esm/components/ProductSelector/NewProductDropdownSelector.js +13 -37
  109. package/lib/esm/components/ProductSelector/NewProductVersionSelector.d.ts.map +1 -1
  110. package/lib/esm/components/ProductSelector/NewProductVersionSelector.js +30 -50
  111. package/lib/esm/components/ProductSelector/ProductSelector.d.ts.map +1 -1
  112. package/lib/esm/components/ProductSelector/ProductSelector.js +1 -3
  113. package/lib/esm/components/Recommendations/ClusterRecommendationToast.d.ts.map +1 -1
  114. package/lib/esm/components/Recommendations/ClusterRecommendationToast.js +1 -4
  115. package/lib/esm/components/Recommendations/ClusterRecommendations.d.ts.map +1 -1
  116. package/lib/esm/components/Recommendations/ClusterRecommendations.js +1 -4
  117. package/lib/esm/components/RemoteRider/RemoteRiderAcceptanceModal.d.ts.map +1 -1
  118. package/lib/esm/components/RemoteRider/RemoteRiderAcceptanceModal.js +9 -7
  119. package/lib/esm/components/Review/Review.d.ts.map +1 -1
  120. package/lib/esm/components/Review/Review.js +16 -16
  121. package/lib/esm/components/SessionRestore/SessionRestore.d.ts.map +1 -1
  122. package/lib/esm/components/SessionRestore/SessionRestore.js +3 -1
  123. package/lib/esm/components/UpdateSeverityModal/UpdateSeverityModal.d.ts.map +1 -1
  124. package/lib/esm/components/UpdateSeverityModal/UpdateSeverityModal.js +5 -8
  125. package/lib/esm/components/shared/fileUpload/FileUploader.d.ts.map +1 -1
  126. package/lib/esm/components/shared/fileUpload/FileUploader.js +3 -1
  127. package/lib/esm/components/shared/fileUpload/reducer/AttachmentHelper.d.ts +3 -1
  128. package/lib/esm/components/shared/fileUpload/reducer/AttachmentHelper.d.ts.map +1 -1
  129. package/lib/esm/components/shared/fileUpload/reducer/AttachmentHelper.js +76 -4
  130. package/lib/esm/components/shared/useIsSectionValid.d.ts.map +1 -1
  131. package/lib/esm/components/shared/useIsSectionValid.js +50 -64
  132. package/lib/esm/components/shared/usePostComment.d.ts.map +1 -1
  133. package/lib/esm/components/shared/usePostComment.js +16 -28
  134. package/lib/esm/components/wizardLayout/GlobalTroubleshootEffects.d.ts.map +1 -1
  135. package/lib/esm/components/wizardLayout/GlobalTroubleshootEffects.js +120 -24
  136. package/lib/esm/components/wizardLayout/WizardLayout.d.ts.map +1 -1
  137. package/lib/esm/components/wizardLayout/WizardLayout.js +6 -7
  138. package/lib/esm/components/wizardLayout/WizardNavigation.d.ts.map +1 -1
  139. package/lib/esm/components/wizardLayout/WizardNavigation.js +10 -9
  140. package/lib/esm/context/CaseContext.d.ts.map +1 -1
  141. package/lib/esm/graphql/index.d.ts +4 -0
  142. package/lib/esm/graphql/index.d.ts.map +1 -0
  143. package/lib/esm/graphql/index.js +3 -0
  144. package/lib/esm/graphql/mutations/createRMECaseEscalation.d.ts +2 -0
  145. package/lib/esm/graphql/mutations/createRMECaseEscalation.d.ts.map +1 -0
  146. package/lib/esm/graphql/mutations/createRMECaseEscalation.js +24 -0
  147. package/lib/esm/graphql/mutations/index.d.ts +2 -0
  148. package/lib/esm/graphql/mutations/index.d.ts.map +1 -0
  149. package/lib/esm/graphql/mutations/index.js +1 -0
  150. package/lib/esm/graphql/queries/getEscalationDetails.d.ts +2 -0
  151. package/lib/esm/graphql/queries/getEscalationDetails.d.ts.map +1 -0
  152. package/lib/esm/graphql/queries/getEscalationDetails.js +24 -0
  153. package/lib/esm/graphql/queries/getParentId.d.ts +2 -0
  154. package/lib/esm/graphql/queries/getParentId.d.ts.map +1 -0
  155. package/lib/esm/graphql/queries/getParentId.js +16 -0
  156. package/lib/esm/graphql/queries/index.d.ts +3 -0
  157. package/lib/esm/graphql/queries/index.d.ts.map +1 -0
  158. package/lib/esm/graphql/queries/index.js +2 -0
  159. package/lib/esm/graphql/schemas/escalation.d.ts +84 -0
  160. package/lib/esm/graphql/schemas/escalation.d.ts.map +1 -0
  161. package/lib/esm/graphql/schemas/escalation.js +1 -0
  162. package/lib/esm/graphql/schemas/index.d.ts +2 -0
  163. package/lib/esm/graphql/schemas/index.d.ts.map +1 -0
  164. package/lib/esm/graphql/schemas/index.js +1 -0
  165. package/lib/esm/hooks/useCaseComments/caseCommentMutation.d.ts +4 -0
  166. package/lib/esm/hooks/useCaseComments/caseCommentMutation.d.ts.map +1 -0
  167. package/lib/esm/hooks/useCaseComments/caseCommentMutation.js +12 -0
  168. package/lib/esm/hooks/useCaseComments/caseCommentsQuery.d.ts +4 -0
  169. package/lib/esm/hooks/useCaseComments/caseCommentsQuery.d.ts.map +1 -0
  170. package/lib/esm/hooks/useCaseComments/caseCommentsQuery.js +55 -0
  171. package/lib/esm/hooks/useCaseComments/index.d.ts +7 -0
  172. package/lib/esm/hooks/useCaseComments/index.d.ts.map +1 -0
  173. package/lib/esm/hooks/useCaseComments/index.js +5 -0
  174. package/lib/esm/hooks/useCaseComments/mapCaseComment.d.ts +25 -0
  175. package/lib/esm/hooks/useCaseComments/mapCaseComment.d.ts.map +1 -0
  176. package/lib/esm/hooks/useCaseComments/mapCaseComment.js +66 -0
  177. package/lib/esm/hooks/useCaseComments/types.d.ts +80 -0
  178. package/lib/esm/hooks/useCaseComments/types.d.ts.map +1 -0
  179. package/lib/esm/hooks/useCaseComments/types.js +1 -0
  180. package/lib/esm/hooks/useCaseComments/useCaseComments.d.ts +16 -0
  181. package/lib/esm/hooks/useCaseComments/useCaseComments.d.ts.map +1 -0
  182. package/lib/esm/hooks/useCaseComments/useCaseComments.js +25 -0
  183. package/lib/esm/hooks/useCaseComments/useCreateCaseComment.d.ts +19 -0
  184. package/lib/esm/hooks/useCaseComments/useCreateCaseComment.d.ts.map +1 -0
  185. package/lib/esm/hooks/useCaseComments/useCreateCaseComment.js +33 -0
  186. package/lib/esm/hooks/useCaseHistory.d.ts +26 -0
  187. package/lib/esm/hooks/useCaseHistory.d.ts.map +1 -0
  188. package/lib/esm/hooks/useCaseHistory.js +98 -0
  189. package/lib/esm/hooks/useResetCaseCreate.d.ts.map +1 -1
  190. package/lib/esm/hooks/useResetCaseCreate.js +18 -11
  191. package/lib/esm/models/caseHistory.d.ts +80 -0
  192. package/lib/esm/models/caseHistory.d.ts.map +1 -0
  193. package/lib/esm/models/caseHistory.js +1 -0
  194. package/lib/esm/reducers/CaseConstNTypes.d.ts +91 -3
  195. package/lib/esm/reducers/CaseConstNTypes.d.ts.map +1 -1
  196. package/lib/esm/reducers/CaseConstNTypes.js +20 -2
  197. package/lib/esm/reducers/CaseDetailsPageReducer.d.ts +5 -4
  198. package/lib/esm/reducers/CaseDetailsPageReducer.d.ts.map +1 -1
  199. package/lib/esm/reducers/CaseDetailsPageReducer.js +39 -23
  200. package/lib/esm/reducers/CaseDiscussionTabReducer.d.ts +3 -5
  201. package/lib/esm/reducers/CaseDiscussionTabReducer.d.ts.map +1 -1
  202. package/lib/esm/reducers/CaseDiscussionTabReducer.js +33 -46
  203. package/lib/esm/reducers/CaseHelpers.d.ts +3 -2
  204. package/lib/esm/reducers/CaseHelpers.d.ts.map +1 -1
  205. package/lib/esm/reducers/CaseHelpers.js +108 -41
  206. package/lib/esm/reducers/CaseOverviewReducer.d.ts +3 -1
  207. package/lib/esm/reducers/CaseOverviewReducer.d.ts.map +1 -1
  208. package/lib/esm/reducers/CaseOverviewReducer.js +7 -5
  209. package/lib/esm/reducers/CaseReducer.d.ts +30 -8
  210. package/lib/esm/reducers/CaseReducer.d.ts.map +1 -1
  211. package/lib/esm/reducers/CaseReducer.js +192 -55
  212. package/lib/esm/utils/TimelineUtils.d.ts +41 -0
  213. package/lib/esm/utils/TimelineUtils.d.ts.map +1 -0
  214. package/lib/esm/utils/TimelineUtils.js +134 -0
  215. package/lib/esm/utils/caseHistoryUtils.d.ts +66 -0
  216. package/lib/esm/utils/caseHistoryUtils.d.ts.map +1 -0
  217. package/lib/esm/utils/caseHistoryUtils.js +165 -0
  218. package/lib/esm/utils/caseOpenshiftClusterIdUtils.d.ts +1 -2
  219. package/lib/esm/utils/caseOpenshiftClusterIdUtils.d.ts.map +1 -1
  220. package/lib/esm/utils/caseOpenshiftClusterIdUtils.js +4 -4
  221. package/package.json +7 -8
@@ -7,6 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
+ import { useApolloClient } from '@apollo/client/react';
10
11
  import { contacts } from '@cee-eng/hydrajs';
11
12
  import { InputGroupText, ValidatedOptions } from '@patternfly/react-core';
12
13
  import CheckIcon from '@patternfly/react-icons/dist/js/icons/check-icon';
@@ -14,6 +15,7 @@ import PencilAltIcon from '@patternfly/react-icons/dist/js/icons/pencil-alt-icon
14
15
  import TimesIcon from '@patternfly/react-icons/dist/js/icons/times-icon';
15
16
  import { getPhoneObj, PhoneInput, ToastNotification } from '@rh-support/components';
16
17
  import { GlobalMetadataStateContext, useCanEditCase } from '@rh-support/react-context';
18
+ import { GET_ACCOUNT_CONTACTS } from '@rh-support/utils';
17
19
  import isEmpty from 'lodash/isEmpty';
18
20
  import isEqual from 'lodash/isEqual';
19
21
  import React, { useContext, useEffect, useState } from 'react';
@@ -26,13 +28,34 @@ import { setCaseState, updateCaseDetails } from '../../../../reducers/CaseReduce
26
28
  import { ContactPhoneNumberPopOver } from '../../../CaseInformation/ContactPhoneNumberPopOver';
27
29
  import { removeAllChars, trimAndReplacePlus } from '../../../shared/utils';
28
30
  import { PDFContext } from '../../PDFContainer';
31
+ function fetchContactBySSO(apolloClient, accountNumber, ssoUsername) {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
34
+ const { data } = yield apolloClient.query({
35
+ query: GET_ACCOUNT_CONTACTS,
36
+ variables: {
37
+ accountNumber: { eq: accountNumber },
38
+ contactsWhere: { SSOUserName__c: { eq: ssoUsername } },
39
+ first: 1,
40
+ },
41
+ fetchPolicy: 'network-only',
42
+ });
43
+ const response = data;
44
+ const contactNode = (_j = (_h = (_g = (_f = (_e = (_d = (_c = (_b = (_a = response === null || response === void 0 ? void 0 : response.salesforce_support_uiapi) === null || _a === void 0 ? void 0 : _a.query) === null || _b === void 0 ? void 0 : _b.SalesforceSupportAccount) === null || _c === void 0 ? void 0 : _c.edges) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.node) === null || _f === void 0 ? void 0 : _f.Contacts) === null || _g === void 0 ? void 0 : _g.edges) === null || _h === void 0 ? void 0 : _h[0]) === null || _j === void 0 ? void 0 : _j.node;
45
+ return {
46
+ phone: (_l = (_k = contactNode === null || contactNode === void 0 ? void 0 : contactNode.Phone) === null || _k === void 0 ? void 0 : _k.value) !== null && _l !== void 0 ? _l : '',
47
+ };
48
+ });
49
+ }
29
50
  export function CaseContactPhoneNumber() {
30
51
  var _a;
31
- const { phoneCountryCode = '', phoneAreaCodePrefixLineNumber = '', caseNumber, contactSSOName, suppliedPhoneNumberVerified, isCaseOwnerUpdating, hasLoggedInUserConfirmedPhoneNumber, isCasePhoneUpdating, } = useCaseSelector((state) => ({
52
+ const apolloClient = useApolloClient();
53
+ const { phoneCountryCode = '', phoneAreaCodePrefixLineNumber = '', caseNumber, contactSSOName, accountNumberRef, suppliedPhoneNumberVerified, isCaseOwnerUpdating, hasLoggedInUserConfirmedPhoneNumber, isCasePhoneUpdating, } = useCaseSelector((state) => ({
32
54
  phoneCountryCode: state.caseDetails.phoneCountryCode || '',
33
55
  phoneAreaCodePrefixLineNumber: state.caseDetails.phoneAreaCodePrefixLineNumber || '',
34
56
  caseNumber: state.caseDetails.caseNumber,
35
57
  contactSSOName: state.caseDetails.contactSSOName,
58
+ accountNumberRef: state.caseDetails.accountNumberRef,
36
59
  suppliedPhoneNumberVerified: state.caseDetails.suppliedPhoneNumberVerified,
37
60
  isCaseOwnerUpdating: state.isCaseOwnerUpdating,
38
61
  hasLoggedInUserConfirmedPhoneNumber: state.hasLoggedInUserConfirmedPhoneNumber,
@@ -167,6 +190,10 @@ export function CaseContactPhoneNumber() {
167
190
  // eslint-disable-next-line react-hooks/exhaustive-deps
168
191
  }, [suppliedPhoneNumberVerified]);
169
192
  useEffect(() => {
193
+ if (!isEmpty(phoneCountryCode) || !isEmpty(phoneAreaCodePrefixLineNumber)) {
194
+ setLocalFullPhoneState(phoneCountryCode + ' ' + phoneAreaCodePrefixLineNumber);
195
+ return;
196
+ }
170
197
  if (isEmpty(contactSSOName)) {
171
198
  setLocalFullPhoneState('');
172
199
  return;
@@ -180,29 +207,17 @@ export function CaseContactPhoneNumber() {
180
207
  if (contactSSOName === loggedInUser.data.ssoUsername) {
181
208
  try {
182
209
  setIsFetchingSSO(true);
183
- const loggedInUserContact = yield (contacts === null || contacts === void 0 ? void 0 : contacts.getSFDCContactBySso(contactSSOName));
210
+ const loggedInUserContact = yield fetchContactBySSO(apolloClient, accountNumberRef, contactSSOName);
184
211
  setIsFetchingSSO(false);
185
- if (loggedInUserContact.supportPhoneAreaCodePrefixLineNumber) {
186
- // User has opened a case before and has phone and area code in her/his contact on SF
187
- _phoneAreaCodePrefixLineNumber = loggedInUserContact.supportPhoneAreaCodePrefixLineNumber;
188
- _phoneCountryCode = loggedInUserContact.supportPhoneCountryCode;
189
- _suppliedPhoneNumberVerified =
190
- isEqual(hasLoggedInUserConfirmedPhoneNumber, 'True') ||
191
- isEqual(hasLoggedInUserConfirmedPhoneNumber, 'Deferred')
192
- ? hasLoggedInUserConfirmedPhoneNumber
193
- : 'False';
194
- }
195
- else {
196
- const phoneLine = getPhoneObj(loggedInUserContact.phone).phoneLine || '';
197
- const countryCode = getPhoneObj(loggedInUserContact.phone).countryCode;
198
- _phoneAreaCodePrefixLineNumber = phoneLine;
199
- _phoneCountryCode = countryCode;
200
- _suppliedPhoneNumberVerified =
201
- isEqual(hasLoggedInUserConfirmedPhoneNumber, 'True') ||
202
- isEqual(hasLoggedInUserConfirmedPhoneNumber, 'Deferred')
203
- ? hasLoggedInUserConfirmedPhoneNumber
204
- : 'False';
205
- }
212
+ const phoneLine = getPhoneObj(loggedInUserContact.phone).phoneLine || '';
213
+ const countryCode = getPhoneObj(loggedInUserContact.phone).countryCode;
214
+ _phoneAreaCodePrefixLineNumber = phoneLine;
215
+ _phoneCountryCode = countryCode;
216
+ _suppliedPhoneNumberVerified =
217
+ isEqual(hasLoggedInUserConfirmedPhoneNumber, 'True') ||
218
+ isEqual(hasLoggedInUserConfirmedPhoneNumber, 'Deferred')
219
+ ? hasLoggedInUserConfirmedPhoneNumber
220
+ : 'False';
206
221
  }
207
222
  catch (_a) {
208
223
  _phoneAreaCodePrefixLineNumber = '';
@@ -216,18 +231,11 @@ export function CaseContactPhoneNumber() {
216
231
  // user is openning case for others (use is partner or red hatter)
217
232
  try {
218
233
  setIsFetchingSSO(true);
219
- const selectedContact = yield contacts.getSFDCContactBySso(contactSSOName);
234
+ const selectedContact = yield fetchContactBySSO(apolloClient, accountNumberRef, contactSSOName);
220
235
  setIsFetchingSSO(false);
221
- if (selectedContact.supportPhoneAreaCodePrefixLineNumber) {
222
- _phoneAreaCodePrefixLineNumber = selectedContact.supportPhoneAreaCodePrefixLineNumber;
223
- _phoneCountryCode = selectedContact.supportPhoneCountryCode;
224
- _suppliedPhoneNumberVerified = 'Deferred';
225
- }
226
- else {
227
- _phoneAreaCodePrefixLineNumber = getPhoneObj(selectedContact.phone).phoneLine || '';
228
- _phoneCountryCode = getPhoneObj(selectedContact.phone).countryCode || '';
229
- _suppliedPhoneNumberVerified = 'Deferred';
230
- }
236
+ _phoneAreaCodePrefixLineNumber = getPhoneObj(selectedContact.phone).phoneLine || '';
237
+ _phoneCountryCode = getPhoneObj(selectedContact.phone).countryCode || '';
238
+ _suppliedPhoneNumberVerified = 'Deferred';
231
239
  }
232
240
  catch (e) {
233
241
  _phoneAreaCodePrefixLineNumber = '';
@@ -252,14 +260,9 @@ export function CaseContactPhoneNumber() {
252
260
  setLocalFullPhoneState(checkingPlusInLocalFullPhone(_localFullPhone));
253
261
  setCaseState(caseDispatch, { isCasePhoneUpdating: false });
254
262
  });
255
- if (isEmpty(phoneCountryCode) && isEmpty(phoneAreaCodePrefixLineNumber)) {
256
- initContactPhoneNumber();
257
- }
258
- else {
259
- setLocalFullPhoneState(phoneCountryCode + ' ' + phoneAreaCodePrefixLineNumber);
260
- }
263
+ initContactPhoneNumber();
261
264
  // eslint-disable-next-line react-hooks/exhaustive-deps
262
- }, [contactSSOName]);
265
+ }, [contactSSOName, phoneCountryCode, phoneAreaCodePrefixLineNumber]);
263
266
  return (React.createElement("div", { className: "form-group", style: { minWidth: '200px' } },
264
267
  React.createElement("h3", { className: `subheading subheading-sm ${isExportingPDF ? 'expand-input' : ''}` },
265
268
  React.createElement(Trans, null, "Case owner's phone number"),
@@ -1 +1 @@
1
- {"version":3,"file":"CaseDetailsManagement.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseDetailsManagement.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,KAA+B,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAkBvD,UAAU,MAAO,SAAQ,gBAAgB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,mBAAmB,CAAC;IAChC,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;CAClD;AAED,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,KAAK,EAAE,MAAM,qBAgE1D"}
1
+ {"version":3,"file":"CaseDetailsManagement.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseDetailsManagement.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,KAA+B,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAkBvD,UAAU,MAAO,SAAQ,gBAAgB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,mBAAmB,CAAC;IAChC,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;CAClD;AAED,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,KAAK,EAAE,MAAM,qBAmE1D"}
@@ -6,9 +6,9 @@ import { useCaseSelector } from '../../../../context/CaseContext';
6
6
  import { OwnerSelector } from '../../../AccountInfo/OwnerSelector';
7
7
  import CaseGroup from '../../../CaseInformation/CaseGroup';
8
8
  import Fts from '../../../CaseInformation/Fts';
9
- import { Cep } from '../../../CaseManagement/Cep';
10
- import { RHAssociatesSelector } from '../../../CaseManagement/RHAssociatesSelector';
11
- import CaseContactSelector from '../../../CaseManagement/SendNotifications/CaseContactSelector';
9
+ // import { Cep } from '../../../CaseManagement/Cep';
10
+ // import { RHAssociatesSelector } from '../../../CaseManagement/RHAssociatesSelector';
11
+ // import CaseContactSelector from '../../../CaseManagement/SendNotifications/CaseContactSelector';
12
12
  import { PartnerCaseHelper } from '../../ShareCase/PartnerCaseHelper';
13
13
  import { ShareWithPartner } from '../../ShareCase/PartnerShare';
14
14
  import { CaseContactPhoneNumber } from './CaseContactPhoneNumber';
@@ -26,7 +26,11 @@ export default function CaseDetailsManagement(props) {
26
26
  }), isEqual);
27
27
  const accountNumber = caseState.caseDetails.accountNumber;
28
28
  const ability = useContext(AbilityContext);
29
- const canSeeEmailNotifications = ability.can(resourceActions.PATCH, resources.CASE_DETAILS, CaseDetailsFields.CASE_DETAILS_SEND_NOTIFICATIONS);
29
+ // const canSeeEmailNotifications = ability.can(
30
+ // resourceActions.PATCH,
31
+ // resources.CASE_DETAILS,
32
+ // CaseDetailsFields.CASE_DETAILS_SEND_NOTIFICATIONS
33
+ // );
30
34
  const canSeeInternalStatus = ability.can(resourceActions.PATCH, resources.CASE_DETAILS, CaseDetailsFields.CASE_DETAILS_INTERNAL_STATUS);
31
35
  const canSeeSBRGroups = ability.can(resourceActions.PATCH, resources.CASE_DETAILS, CaseDetailsFields.CASE_DETAILS_SBR_GROUP);
32
36
  return (React.createElement(React.Fragment, null,
@@ -43,10 +47,7 @@ export default function CaseDetailsManagement(props) {
43
47
  canSeeSBRGroups && React.createElement(CaseSbrGroups, null),
44
48
  React.createElement(CaseGroup, null),
45
49
  React.createElement(CaseReferenceNumber, null),
46
- canSeeEmailNotifications && React.createElement(CaseContactSelector, null),
47
- React.createElement(RHAssociatesSelector, null),
48
50
  React.createElement(Fts, { inlineEditable: true }),
49
- React.createElement(Cep, null),
50
51
  React.createElement(SFDCUrl, null),
51
52
  React.createElement(ShareWithPartner, { routeProps: props.routeProps, isUpdatingPartner: isUpdatingPartner, accountNumber: accountNumber })))));
52
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CaseInformation.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseInformation.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI5D,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,UAAU,MAAO,SAAQ,gBAAgB;CAAG;AAE5C,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,qBAwD5C"}
1
+ {"version":3,"file":"CaseInformation.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseInformation.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI5D,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,UAAU,MAAO,SAAQ,gBAAgB;CAAG;AAE5C,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,qBAwD5C"}
@@ -8,7 +8,6 @@ import React from 'react';
8
8
  import { Trans } from 'react-i18next';
9
9
  import { useCaseSelector } from '../../../../context/CaseContext';
10
10
  import { KtQuestionConstant } from '../../../../reducers/CaseConstNTypes';
11
- import { CaseHostname } from './CaseHostname';
12
11
  import { CaseOpenshiftClusterId } from './CaseOpenshiftClusterId/CaseOpenshiftClusterId';
13
12
  import ProductVersion from './ProductVersion';
14
13
  export function CaseInformation(props) {
@@ -40,7 +39,6 @@ export function CaseInformation(props) {
40
39
  React.createElement("form", null,
41
40
  React.createElement(ProductVersion, null),
42
41
  React.createElement(CaseOpenshiftClusterId, null),
43
- caseType !== PreviousCaseTypes.FEATURE_ENHANCEMENT && React.createElement(CaseHostname, { inlineEditable: true }),
44
42
  React.createElement("div", { className: "form-group" },
45
43
  React.createElement("label", { htmlFor: "case-description" },
46
44
  React.createElement(Trans, null, "Description")),
@@ -1 +1 @@
1
- {"version":3,"file":"CaseOpenshiftClusterId.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseOpenshiftClusterId/CaseOpenshiftClusterId.tsx"],"names":[],"mappings":"AAOA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAqB/D,wBAAgB,sBAAsB,sBA2SrC"}
1
+ {"version":3,"file":"CaseOpenshiftClusterId.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseOpenshiftClusterId/CaseOpenshiftClusterId.tsx"],"names":[],"mappings":"AAQA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAoB/D,wBAAgB,sBAAsB,sBAgUrC"}
@@ -7,6 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
+ import { useApolloClient } from '@apollo/client/react';
10
11
  import { LoadingIndicator, ToastNotification, usePrevious } from '@rh-support/components';
11
12
  import { GlobalMetadataStateContext } from '@rh-support/react-context';
12
13
  import { getVersion } from '@rh-support/utils';
@@ -17,19 +18,21 @@ import React, { useContext, useEffect, useState } from 'react';
17
18
  import { useTranslation } from 'react-i18next';
18
19
  import { useCaseDispatch, useCaseSelector } from '../../../../../context/CaseContext';
19
20
  import { useCaseUpdateErrorMessage } from '../../../../../hooks/useCaseUpdateErrorMessage';
20
- import { setCaseDetails, updateCaseDetails } from '../../../../../reducers/CaseReducer';
21
+ import { setCaseDetails, updateCaseDetailsGraphQL } from '../../../../../reducers/CaseReducer';
21
22
  import { getIsClusterIdInvalid, isClusterIdEnabledForProduct, } from '../../../../../utils/caseOpenshiftClusterIdUtils';
22
23
  import { NoClusterIDReasonSelector } from '../../../../CaseManagement/NoClusterIDReasonSelector';
23
- import { discoverV4ClusterIdLink, discoverV4ClusterIdLinkError, isInvalidErrorMessage, v3Tov4TransitionLink, } from '../../../../CaseManagement/OpenShiftClusterId';
24
+ import { discoverV4ClusterIdLink, isInvalidErrorMessage, v3Tov4TransitionLink, } from '../../../../CaseManagement/OpenShiftClusterId';
24
25
  import { OpenshiftDropdownV4 } from '../../../../CaseManagement/OpenshiftDropdownV4';
25
26
  import { PDFContext } from '../../../PDFContainer';
26
27
  export function CaseOpenshiftClusterId() {
27
28
  const caseUpdateError = useCaseUpdateErrorMessage();
28
- const { openshiftClusterID, product, version, caseNumber, openshiftClusterVersion, noClusterIdReason, noClusterIdReasonExplanation, selectedAccountDetails, description, isFetchingCaseDetails, } = useCaseSelector((state) => ({
29
+ const apolloClient = useApolloClient();
30
+ const { openshiftClusterID, product, version, caseNumber, caseId, openshiftClusterVersion, noClusterIdReason, noClusterIdReasonExplanation, selectedAccountDetails, description, isFetchingCaseDetails, } = useCaseSelector((state) => ({
29
31
  openshiftClusterID: state.caseDetails.openshiftClusterID,
30
32
  product: state.caseDetails.product,
31
33
  version: state.caseDetails.version,
32
34
  caseNumber: state.caseDetails.caseNumber,
35
+ caseId: state.caseDetails.id,
33
36
  openshiftClusterVersion: state.caseDetails.openshiftClusterVersion,
34
37
  noClusterIdReason: state.caseDetails.noClusterIdReason,
35
38
  noClusterIdReasonExplanation: state.caseDetails.noClusterIdReasonExplanation,
@@ -38,7 +41,7 @@ export function CaseOpenshiftClusterId() {
38
41
  isFetchingCaseDetails: state.isFetchingCaseDetails,
39
42
  }), isEqual);
40
43
  const caseDispatch = useCaseDispatch();
41
- const { globalMetadataState: { allProducts, loggedInUserRights }, } = useContext(GlobalMetadataStateContext);
44
+ const { globalMetadataState: { loggedInUserRights }, } = useContext(GlobalMetadataStateContext);
42
45
  const majorVersion = (version && getVersion(version).major) || '';
43
46
  const isOpenShiftV3 = product === 'OpenShift Container Platform' && majorVersion === '3';
44
47
  const isCustomer = loggedInUserRights.data.isAccountSameAsLoggedInAccount(selectedAccountDetails.data.accountNumber);
@@ -73,10 +76,8 @@ export function CaseOpenshiftClusterId() {
73
76
  setDisplayName(val);
74
77
  };
75
78
  useEffect(() => {
76
- var _a;
77
79
  const isClusterVisible = () => __awaiter(this, void 0, void 0, function* () {
78
- var _a;
79
- const hasCluster = yield isClusterIdEnabledForProduct(product, (_a = allProducts.data) === null || _a === void 0 ? void 0 : _a.productsResult);
80
+ const hasCluster = yield isClusterIdEnabledForProduct(product);
80
81
  setShowClusterId(hasCluster);
81
82
  // when product changes from a product with cluster to a product without cluster, reset the clusterId
82
83
  const hasPreviousProduct = previousProduct !== undefined;
@@ -96,11 +97,9 @@ export function CaseOpenshiftClusterId() {
96
97
  clusterStateReset();
97
98
  }
98
99
  });
99
- if ((((_a = allProducts.data) === null || _a === void 0 ? void 0 : _a.productsResult) || []).length) {
100
- isClusterVisible();
101
- }
100
+ isClusterVisible();
102
101
  // eslint-disable-next-line react-hooks/exhaustive-deps
103
- }, [product, allProducts.data]);
102
+ }, [product]);
104
103
  /**
105
104
  * Hook to make sure that if cluster id comes from session or someother source
106
105
  * we also fetch the details for the cluster id so that we can have fields like cluster version while creating the case
@@ -118,7 +117,17 @@ export function CaseOpenshiftClusterId() {
118
117
  if (showToast)
119
118
  setIsClusterIdUpdating(true);
120
119
  try {
121
- yield updateCaseDetails(caseDispatch, caseNumber, caseDetails);
120
+ const caseUpdate = {};
121
+ if (caseDetails.openshiftClusterID !== undefined) {
122
+ caseUpdate.openshiftClusterID = caseDetails.openshiftClusterID;
123
+ }
124
+ if (caseDetails.openshiftClusterVersion !== undefined) {
125
+ caseUpdate.openshiftClusterVersion = caseDetails.openshiftClusterVersion;
126
+ }
127
+ yield updateCaseDetailsGraphQL(caseDispatch, apolloClient, caseNumber, caseUpdate, false, {
128
+ salesforceCaseId: caseId,
129
+ existingCaseDetails: { product, version },
130
+ });
122
131
  if (showToast) {
123
132
  setIsClusterIdUpdating(false);
124
133
  ToastNotification.addSuccessMessage(t(`OpenShift Cluster ID has been successfully updated`));
@@ -190,11 +199,19 @@ export function CaseOpenshiftClusterId() {
190
199
  "Your Cluster Name has been added to the description below. ",
191
200
  v3Tov4TransitionLink())) : (React.createElement(React.Fragment, null, v3Tov4TransitionLink()));
192
201
  const clusterIdDropdownFormInstructions = () => {
193
- const errorMessage = isClusterIdInvalid
194
- ? isInvalidErrorMessage()
195
- : isEmpty(openshiftClusterID) && isEmpty(selectedReason)
196
- ? discoverV4ClusterIdLinkError()
197
- : null;
202
+ // TODO: Re-enable empty cluster ID check when cluster ID is made mandatory again
203
+ // const errorMessage = isClusterIdInvalid
204
+ // ? isInvalidErrorMessage()
205
+ // : isEmpty(openshiftClusterID) && isEmpty(selectedReason)
206
+ // ? discoverV4ClusterIdLinkError()
207
+ // : null;
208
+ // TODO: Re-enable empty cluster ID check when cluster ID is made mandatory again
209
+ // const errorMessage = isClusterIdInvalid
210
+ // ? isInvalidErrorMessage()
211
+ // : isEmpty(openshiftClusterID) && isEmpty(selectedReason)
212
+ // ? discoverV4ClusterIdLinkError()
213
+ // : null;
214
+ const errorMessage = isClusterIdInvalid ? isInvalidErrorMessage() : null;
198
215
  const infoMessage = isDedicatedV3() ? v3Message() : discoverV4ClusterIdLink();
199
216
  return errorMessage ? errorMessage : infoMessage;
200
217
  };
@@ -245,7 +262,10 @@ export function CaseOpenshiftClusterId() {
245
262
  }
246
263
  else {
247
264
  return (React.createElement(React.Fragment, null,
248
- React.createElement(OpenshiftDropdownV4, { openshiftDisplayName: displayName, setOpenshiftDisplayName: onDisplayNameChange, openshiftClusterIDState: localOpenshiftClusterIDState || selectedReason, onClusterIdStateUpdate: onClusterIdSave, isClusterIdInvalid: (isEmpty(localOpenshiftClusterIDState) && isEmpty(selectedReason)) || isClusterIdInvalid, clusterIdDropdownFormInstructions: !isExportingPDF ? clusterIdDropdownFormInstructions() : undefined, onClusterClear: resetClusterData, isV3: product !== 'OpenShift Container Platform', isDisabled: isClusterIdUpdating, noClusterIdReasonExplanation: noClusterIdReasonExplanation }),
265
+ React.createElement(OpenshiftDropdownV4, { openshiftDisplayName: displayName, setOpenshiftDisplayName: onDisplayNameChange, openshiftClusterIDState: localOpenshiftClusterIDState || selectedReason, onClusterIdStateUpdate: onClusterIdSave, isClusterIdInvalid:
266
+ // TODO: Re-enable empty check when cluster ID is made mandatory again
267
+ // (isEmpty(localOpenshiftClusterIDState) && isEmpty(selectedReason)) ||
268
+ isClusterIdInvalid, clusterIdDropdownFormInstructions: !isExportingPDF ? clusterIdDropdownFormInstructions() : undefined, onClusterClear: resetClusterData, isV3: product !== 'OpenShift Container Platform', isDisabled: isClusterIdUpdating, noClusterIdReasonExplanation: noClusterIdReasonExplanation }),
249
269
  noClusterIdReasonExplanation !== 'v3-cluster' &&
250
270
  (dontKnowSelected || noClusterIdReasonExplanation || noClusterIdReason) && (React.createElement(NoClusterIDReasonSelector, { noClusterIdReasonExplanation: noClusterIdReasonExplanation, noClusterIdReason: noClusterIdReason, onReasonInputBoxChanged: debounceFn, onReasonChange: onReasonChange, isInValid: isInVaidNoClusterIdReason, isCustomer: isCustomer, isDisabled: isReasonUpdating })),
251
271
  React.createElement(LoadingIndicator, { show: isClusterIdUpdating, size: "xs" })));
@@ -1 +1 @@
1
- {"version":3,"file":"ProductVersion.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/ProductVersion.tsx"],"names":[],"mappings":"AAyCA,OAAO,KAAkD,MAAM,OAAO,CAAC;AASvE,UAAU,MAAM;IACZ,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,iBAAS,eAAe,CAAC,KAAK,EAAE,MAAM,qBA4WrC;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"ProductVersion.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/ProductVersion.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAkD,MAAM,OAAO,CAAC;AASvE,UAAU,MAAM;IACZ,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,iBAAS,eAAe,CAAC,KAAK,EAAE,MAAM,qBAuUrC;AAED,eAAe,eAAe,CAAC"}
@@ -7,12 +7,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
+ import { useApolloClient } from '@apollo/client/react';
10
11
  import { Alert, AlertVariant, Button, MenuToggle, Select, SelectList, SelectOption, Spinner, TextInputGroup, TextInputGroupMain, TextInputGroupUtilities, } from '@patternfly/react-core';
11
12
  import TimesIcon from '@patternfly/react-icons/dist/js/icons/times-icon';
12
13
  import { AlertMessage, AlertType, SingleSelectDropdown, ToastNotification, useSelectKeyboardNavigator, } from '@rh-support/components';
13
14
  import { fetchProducts, GlobalMetadataDispatchContext, GlobalMetadataStateContext, useCanEditCase, } from '@rh-support/react-context';
14
- import { getUniqueSortedVersions, haventLoadedMetadata, toOption, } from '@rh-support/utils';
15
- import filter from 'lodash/filter';
15
+ import { haventLoadedMetadata, toOption } from '@rh-support/utils';
16
16
  import isEmpty from 'lodash/isEmpty';
17
17
  import isEqual from 'lodash/isEqual';
18
18
  import isUndefined from 'lodash/isUndefined';
@@ -21,7 +21,7 @@ import React, { useContext, useEffect, useRef, useState } from 'react';
21
21
  import { Trans, useTranslation } from 'react-i18next';
22
22
  import { useCaseDispatch, useCaseSelector } from '../../../../context/CaseContext';
23
23
  import { useCaseUpdateErrorMessage } from '../../../../hooks/useCaseUpdateErrorMessage';
24
- import { fetchCaseEntitlements, getVersionsDetails, updateCaseDetails } from '../../../../reducers/CaseReducer';
24
+ import { getVersionsDetails, updateCaseDetailsGraphQL } from '../../../../reducers/CaseReducer';
25
25
  import { getProductObj } from '../../../shared/utils';
26
26
  import { PDFContext } from '../../PDFContainer';
27
27
  function ProductNVersion(props) {
@@ -32,22 +32,22 @@ function ProductNVersion(props) {
32
32
  const [isVersionUpdating, setIsVersionUpdating] = useState(false);
33
33
  const [isOpen, setIsOpen] = useState(false);
34
34
  const textInputRef = useRef();
35
- const { product, version, caseNumber, contactSSOName, versionsDetails, isCaseUpdating } = useCaseSelector((state) => ({
35
+ const { product, version, caseNumber, existingCaseDetails, versionsDetails, isCaseUpdating } = useCaseSelector((state) => ({
36
36
  product: state.caseDetails.product,
37
37
  version: state.caseDetails.version,
38
- contactSSOName: state.caseDetails.contactSSOName,
39
38
  caseNumber: state.caseDetails.caseNumber,
39
+ existingCaseDetails: state.caseDetails,
40
40
  versionsDetails: state.versionsDetails,
41
41
  isCaseUpdating: state.isCaseUpdating,
42
42
  }), isEqual);
43
43
  const caseDispatch = useCaseDispatch();
44
44
  const dispatchToGlobalMetadataReducer = useContext(GlobalMetadataDispatchContext);
45
+ const apolloClient = useApolloClient();
45
46
  const { globalMetadataState: { allProducts }, } = useContext(GlobalMetadataStateContext);
46
47
  const [isProductInvalid, setIsProductInvalid] = useState(false);
47
48
  const [isVersionInvalid, setIsVersionInvalid] = useState(false);
48
49
  const [selectedProductLocal, setSelectedProductLocal] = useState(product);
49
50
  const [selectedVersionLocal, setSelectedVersionLocal] = useState(version);
50
- const [isSEProductApiIsDown, setIsSEProductApiIsDown] = useState(false);
51
51
  const [inputValue, setInputValue] = useState(product);
52
52
  const [shouldFilter, setShouldFilter] = useState(false);
53
53
  const onToggleClick = () => {
@@ -112,19 +112,10 @@ function ProductNVersion(props) {
112
112
  }
113
113
  setIsProductUpdating(true);
114
114
  setIsVersionUpdating(true);
115
- if (!onlyVersionChanged && contactSSOName && caseNumber) {
116
- yield updateCaseDetails(caseDispatch, caseNumber, {
117
- product: selectedProduct,
118
- version: selectedVersion,
119
- });
120
- yield fetchCaseEntitlements(caseDispatch, contactSSOName, selectedProduct, undefined, true, caseNumber);
121
- }
122
- else {
123
- yield updateCaseDetails(caseDispatch, caseNumber, {
124
- product: selectedProduct,
125
- version: selectedVersion,
126
- });
127
- }
115
+ yield updateCaseDetailsGraphQL(caseDispatch, apolloClient, caseNumber, {
116
+ product: selectedProduct,
117
+ version: selectedVersion,
118
+ }, false, { existingCaseDetails });
128
119
  setIsProductUpdating(false);
129
120
  setIsVersionUpdating(false);
130
121
  if (onlyVersionChanged) {
@@ -150,60 +141,29 @@ function ProductNVersion(props) {
150
141
  });
151
142
  // To check if version in invalid
152
143
  const checkIfVersionIsInvalid = isVersionInvalid && isEmpty(selectedVersionLocal);
153
- // when user changes selected product, we need to get the versions
154
144
  useEffect(() => {
155
145
  if (!selectedProductLocal)
156
146
  return;
157
- const getVersions = () => __awaiter(this, void 0, void 0, function* () {
158
- try {
159
- yield getVersionsDetails(caseDispatch, selectedProductLocal);
160
- }
161
- catch (e) {
162
- console.log(e);
163
- }
164
- });
165
- // call sfdc version api to get version flags that we only get from sfdc api
166
- // flags are used in severity components
167
- getVersions();
168
- // populate versions with SE product api versions
169
147
  const productObj = getProductObj(allProducts.data.productsResult, selectedProductLocal);
170
- if (productObj.versions) {
171
- const productVersions = productObj.hasComponentsInsteadOfVersions
172
- ? productObj.versions.sort()
173
- : productObj.versions;
174
- setVersions(productVersions);
175
- if (productVersions.length === 1 && !selectedVersionLocal) {
176
- setSelectedVersionLocal(productVersions[0]);
177
- updateProductVerstion(selectedProductLocal, productVersions[0]);
178
- }
179
- }
180
- else {
181
- setIsSEProductApiIsDown(true);
148
+ if (productObj.productId) {
149
+ getVersionsDetails(caseDispatch, apolloClient, productObj.productId, productObj.name || selectedProductLocal);
182
150
  }
183
151
  // eslint-disable-next-line react-hooks/exhaustive-deps
184
152
  }, [selectedProductLocal, caseDispatch, allProducts.data]);
185
- // observe when fetched versions are available
186
153
  useEffect(() => {
187
- if (!isSEProductApiIsDown)
154
+ var _a;
155
+ if (versionsDetails.isFetching || !((_a = versionsDetails.data) === null || _a === void 0 ? void 0 : _a.length))
188
156
  return;
189
157
  const fetchedVersions = versionsDetails.data.map(({ name }) => name);
158
+ setVersions(fetchedVersions);
190
159
  if (fetchedVersions.length === 1 && !selectedVersionLocal) {
191
- setVersions(fetchedVersions);
192
160
  setSelectedVersionLocal(fetchedVersions[0]);
193
161
  updateProductVerstion(selectedProductLocal, fetchedVersions[0]);
194
- return;
195
162
  }
196
- const productObj = getProductObj(allProducts.data.productsResult, selectedProductLocal);
197
- const sfdcVersions = getUniqueSortedVersions(fetchedVersions);
198
- const versionsForSelectedProduct = productObj.versions ? productObj.versions : sfdcVersions;
199
- const productVersions = (productObj === null || productObj === void 0 ? void 0 : productObj.hasComponentsInsteadOfVersions)
200
- ? versionsForSelectedProduct.sort()
201
- : versionsForSelectedProduct;
202
- setVersions(productVersions);
203
163
  // eslint-disable-next-line react-hooks/exhaustive-deps
204
164
  }, [versionsDetails.data]);
205
165
  const computeDropdownList = () => {
206
- const list = filter(allProducts.data.productsResult, (p) => p.isEntitledProduct);
166
+ const list = allProducts.data.productsResult;
207
167
  if (!list)
208
168
  return [];
209
169
  const options = shouldFilter && !isUndefined(inputValue) && !isEmpty(inputValue === null || inputValue === void 0 ? void 0 : inputValue.trim())
@@ -233,10 +193,10 @@ function ProductNVersion(props) {
233
193
  };
234
194
  useEffect(() => {
235
195
  if (haventLoadedMetadata(allProducts, (data) => isEmpty(data.productsResult))) {
236
- fetchProducts(dispatchToGlobalMetadataReducer, contactSSOName);
196
+ fetchProducts(dispatchToGlobalMetadataReducer, apolloClient);
237
197
  }
238
198
  // eslint-disable-next-line react-hooks/exhaustive-deps
239
- }, [allProducts, dispatchToGlobalMetadataReducer, contactSSOName]);
199
+ }, [allProducts, dispatchToGlobalMetadataReducer, apolloClient]);
240
200
  return (React.createElement(React.Fragment, null,
241
201
  React.createElement(AlertMessage, { show: !allProducts.isFetching && allProducts.isError, title: t('There was an error loading products.'), variant: AlertType.DANGER }),
242
202
  isEmpty(selectedVersionLocal) && (selectedVersionLocal === null || selectedVersionLocal === void 0 ? void 0 : selectedVersionLocal.length) < 2 && (React.createElement(Alert, { isInline: true, className: "pf-v6-u-mb-md", variant: AlertVariant.danger, title: React.createElement(Trans, null, "Please clear the errors to change the product on your case") })),
@@ -253,6 +213,6 @@ function ProductNVersion(props) {
253
213
  React.createElement(SingleSelectDropdown, { className: "open-case-version", id: "version-dropdown", placeholder: t(`Select a version`), selected: getVersionSelectedDropdownOption, options: getVersionDropdownOptions, isInvalid: checkIfVersionIsInvalid, isDisabled: isVersionUpdating ||
254
214
  (allProducts.isFetching && !allProducts.isError) ||
255
215
  isEmpty(selectedProductLocal) ||
256
- isCaseUpdating, onSelect: onVersionChange, isLoading: isVersionUpdating || (isSEProductApiIsDown && versionsDetails.isFetching), dataTrackingId: "case-details-version-selector", isScrollable: true }))))));
216
+ isCaseUpdating, onSelect: onVersionChange, isLoading: isVersionUpdating || versionsDetails.isFetching, dataTrackingId: "case-details-version-selector", isScrollable: true }))))));
257
217
  }
258
218
  export default ProductNVersion;
@@ -1 +1 @@
1
- {"version":3,"file":"Summary.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/Summary.tsx"],"names":[],"mappings":"AAQA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAS/D,UAAU,MAAM;IACZ,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAQD,iBAAS,OAAO,CAAC,KAAK,EAAE,MAAM,qBA0L7B;kBA1LQ,OAAO;;;AA6LhB,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"Summary.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/Summary.tsx"],"names":[],"mappings":"AASA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAS/D,UAAU,MAAM;IACZ,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAQD,iBAAS,OAAO,CAAC,KAAK,EAAE,MAAM,qBAiM7B;kBAjMQ,OAAO;;;AAoMhB,eAAe,OAAO,CAAC"}
@@ -7,6 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
+ import { useApolloClient } from '@apollo/client/react';
10
11
  import { InputGroupText, Spinner, TextInput, ValidatedOptions } from '@patternfly/react-core';
11
12
  import CheckIcon from '@patternfly/react-icons/dist/js/icons/check-icon';
12
13
  import TimesIcon from '@patternfly/react-icons/dist/js/icons/times-icon';
@@ -19,7 +20,7 @@ import { Trans, useTranslation } from 'react-i18next';
19
20
  import { useCaseDispatch, useCaseSelector } from '../../../../context/CaseContext';
20
21
  import { useCaseUpdateErrorMessage } from '../../../../hooks/useCaseUpdateErrorMessage';
21
22
  import { SUMMARY_LENGTH_LIMIT } from '../../../../reducers/CaseConstNTypes';
22
- import { setCaseDetails, updateCaseDetails } from '../../../../reducers/CaseReducer';
23
+ import { setCaseDetails, updateCaseDetailsGraphQL } from '../../../../reducers/CaseReducer';
23
24
  import { PDFContext } from '../../PDFContainer';
24
25
  const defaultProps = {
25
26
  inlineEditable: true,
@@ -29,11 +30,13 @@ const defaultProps = {
29
30
  function Summary(props) {
30
31
  const { t } = useTranslation();
31
32
  const caseUpdateError = useCaseUpdateErrorMessage();
32
- const { summary, caseNumber } = useCaseSelector((state) => ({
33
+ const { summary, caseNumber, existingCaseDetails } = useCaseSelector((state) => ({
33
34
  summary: state.caseDetails.summary,
34
35
  caseNumber: state.caseDetails.caseNumber,
36
+ existingCaseDetails: state.caseDetails,
35
37
  }), isEqual);
36
38
  const caseDispatch = useCaseDispatch();
39
+ const apolloClient = useApolloClient();
37
40
  const { isExportingPDF } = useContext(PDFContext);
38
41
  const [summaryState, setSummaryState] = useState(summary);
39
42
  const [isSummaryUpdating, setIsSummaryUpdating] = useState(false);
@@ -41,9 +44,11 @@ function Summary(props) {
41
44
  // value changed logic to show a none local severity change
42
45
  const [localSummaryChange, setLocalSummaryChange] = useState(false);
43
46
  // To keep track of Cancel button state to close InlineEdit input mode
44
- const [isCancelClicked, setIsCancelClicked] = useState(false);
47
+ const [cancelToggleKey, setCancelToggleKey] = useState(0);
45
48
  // To keep track of Save button state to close InlineEdit input mode
46
- const [isSaveClicked, setIsSaveClicked] = useState(false);
49
+ const [saveToggleKey, setSaveToggleKey] = useState(0);
50
+ const closeInlineEdit = () => setSaveToggleKey((key) => key + 1);
51
+ const cancelInlineEdit = () => setCancelToggleKey((key) => key + 1);
47
52
  const afterLocalChange = () => setLocalSummaryChange(false);
48
53
  const getSummaryChangedTT = () => React.createElement(Trans, null, "Summary has been updated");
49
54
  // Function to handle when summary changes
@@ -55,7 +60,9 @@ function Summary(props) {
55
60
  const onSummaryUpdate = (caseDetails) => __awaiter(this, void 0, void 0, function* () {
56
61
  setIsSummaryUpdating(true);
57
62
  try {
58
- yield updateCaseDetails(caseDispatch, caseNumber, caseDetails);
63
+ yield updateCaseDetailsGraphQL(caseDispatch, apolloClient, caseNumber, caseDetails, false, {
64
+ existingCaseDetails,
65
+ });
59
66
  setIsSummaryUpdating(false);
60
67
  ToastNotification.addSuccessMessage(t(`Title has been successfully updated`));
61
68
  }
@@ -81,11 +88,11 @@ function Summary(props) {
81
88
  setCaseDetails(caseDispatch, caseDetails);
82
89
  }
83
90
  setLocalSummaryChange(true);
84
- setIsSaveClicked(!isSaveClicked);
91
+ closeInlineEdit();
85
92
  });
86
93
  const onCancel = () => {
87
94
  setSummaryState(summary);
88
- setIsCancelClicked(!isCancelClicked);
95
+ cancelInlineEdit();
89
96
  };
90
97
  useEffect(() => {
91
98
  setSummaryState(summary);
@@ -119,14 +126,14 @@ function Summary(props) {
119
126
  setCaseDetails(caseDispatch, caseDetails);
120
127
  }
121
128
  setLocalSummaryChange(true);
122
- setIsSaveClicked(!isSaveClicked);
129
+ closeInlineEdit();
123
130
  }
124
131
  });
125
132
  return (React.createElement(React.Fragment, null,
126
133
  React.createElement(NewInlineEdit, { labelProps: { htmlFor: 'case-details-summary' }, labelContent: React.createElement(React.Fragment, null,
127
134
  React.createElement(Trans, null, "Title"),
128
135
  React.createElement(ValueChangedIcon, { afterLocalChange: afterLocalChange, isLocalChange: localSummaryChange, value: summary, getTooltipContent: getSummaryChangedTT }),
129
- React.createElement("span", { className: "form-required", "aria-hidden": true }, "*")), allowInlineEdit: props.inlineEditable, content: summary ? summary : t('No summary to display.'), saveDisabled: saveDisabled, hideLabel: props.hideLabel, hideSaveCancel: props.hideSaveCancel, charCount: (summaryState === null || summaryState === void 0 ? void 0 : summaryState.length) || 0, charTotal: SUMMARY_LENGTH_LIMIT, cancelToggleState: isCancelClicked, saveToggleState: isSaveClicked, isExportingPDF: isExportingPDF },
136
+ React.createElement("span", { className: "form-required", "aria-hidden": true }, "*")), allowInlineEdit: props.inlineEditable, content: summary ? summary : t('No summary to display.'), saveDisabled: saveDisabled, hideLabel: props.hideLabel, hideSaveCancel: props.hideSaveCancel, charCount: (summaryState === null || summaryState === void 0 ? void 0 : summaryState.length) || 0, charTotal: SUMMARY_LENGTH_LIMIT, cancelToggleState: cancelToggleKey % 2 === 1, saveToggleState: saveToggleKey % 2 === 1, isExportingPDF: isExportingPDF },
130
137
  React.createElement("div", { className: "pf-v6-u-display-flex pf-v6-u-flex-direction-row pf-v6-u-align-items-center" },
131
138
  React.createElement(TextInput, { type: "text", id: "case-details-summary", "aria-required": true, required: true, name: "case-details-summary", value: summaryState, onChange: (_event, value) => onSummaryChange(value), isDisabled: isSummaryUpdating, "data-tracking-id": "case-details-summary", onKeyDown: handleKeyDown, validated: (summaryState === null || summaryState === void 0 ? void 0 : summaryState.length) > SUMMARY_LENGTH_LIMIT || isSummaryEmpty
132
139
  ? ValidatedOptions.error
@@ -1,12 +1,14 @@
1
- import { ICaseChat, ICaseComment } from '@cee-eng/hydrajs/@types/api/public/case';
1
+ import { ICaseComment } from '@cee-eng/hydrajs/@types/api/public/case';
2
2
  import React from 'react';
3
3
  interface IProps {
4
4
  caseNumber: string;
5
5
  caseComments: ICaseComment[];
6
- caseChats: ICaseChat[];
6
+ commentsLoading?: boolean;
7
+ commentsError?: unknown;
7
8
  accountNumber: string;
8
9
  tabRef: React.MutableRefObject<HTMLDivElement>;
9
10
  isDiscussionTab: boolean;
11
+ refetchComments: () => Promise<unknown> | void;
10
12
  }
11
13
  export default function CaseDiscussion(props: IProps): React.JSX.Element;
12
14
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"CaseDiscussion.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/CaseDiscussion.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,YAAY,EAA0B,MAAM,yCAAyC,CAAC;AAkB1G,OAAO,KAAoE,MAAM,OAAO,CAAC;AAyCzF,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,SAAS,EAAE,SAAS,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAC/C,eAAe,EAAE,OAAO,CAAC;CAC5B;AAOD,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,KAAK,EAAE,MAAM,qBA4oBnD"}
1
+ {"version":3,"file":"CaseDiscussion.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDiscussion/CaseDiscussion.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAcvE,OAAO,KAAoE,MAAM,OAAO,CAAC;AAwCzF,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IAGxB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAC/C,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CAClD;AAOD,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,KAAK,EAAE,MAAM,qBAmhBnD"}