@rh-support/troubleshoot 1.0.46 → 1.0.47-beta.33

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 (140) hide show
  1. package/lib/esm/components/CaseEditView/CaseOverview/CaseType.d.ts.map +1 -1
  2. package/lib/esm/components/CaseEditView/CaseOverview/CaseType.js +6 -5
  3. package/lib/esm/components/CaseEditView/CaseOverview/index.d.ts.map +1 -1
  4. package/lib/esm/components/CaseEditView/CaseOverview/index.js +8 -8
  5. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseAlternateId.d.ts.map +1 -1
  6. package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseAlternateId.js +6 -4
  7. package/lib/esm/components/CaseInformation/CaseInformation.d.ts.map +1 -1
  8. package/lib/esm/components/CaseInformation/CaseInformation.js +2 -4
  9. package/lib/esm/components/CaseInformation/CaseType.js +3 -3
  10. package/lib/esm/components/CaseInformation/Description.d.ts.map +1 -1
  11. package/lib/esm/components/CaseInformation/Description.js +1 -1
  12. package/lib/esm/components/CaseInformation/OpenCaseIssue.js +2 -2
  13. package/lib/esm/components/CaseInformation/Severity.d.ts +1 -2
  14. package/lib/esm/components/CaseInformation/Severity.d.ts.map +1 -1
  15. package/lib/esm/components/CaseInformation/Severity.js +14 -8
  16. package/lib/esm/components/CaseInformation/SupportLevel.d.ts.map +1 -1
  17. package/lib/esm/components/CaseInformation/SupportLevel.js +27 -23
  18. package/lib/esm/components/CaseManagement/CaseLanguageSelector.d.ts +1 -0
  19. package/lib/esm/components/CaseManagement/CaseLanguageSelector.d.ts.map +1 -1
  20. package/lib/esm/components/CaseManagement/CaseLanguageSelector.js +37 -17
  21. package/lib/esm/components/CaseManagement/CaseManagement.d.ts.map +1 -1
  22. package/lib/esm/components/CaseManagement/CaseManagement.js +4 -42
  23. package/lib/esm/components/CaseManagement/SendNotifications/CaseContactSelector.d.ts.map +1 -1
  24. package/lib/esm/components/CaseManagement/SendNotifications/CaseContactSelector.js +5 -0
  25. package/lib/esm/components/ImproveCase/Hostname.d.ts.map +1 -1
  26. package/lib/esm/components/ImproveCase/Hostname.js +9 -5
  27. package/lib/esm/components/ImproveCase/KtQuestions.d.ts.map +1 -1
  28. package/lib/esm/components/ImproveCase/KtQuestions.js +7 -6
  29. package/lib/esm/components/Issue/Issue.js +1 -1
  30. package/lib/esm/components/OpenCase/CaseTypeIcons/BugIcon.d.ts +8 -0
  31. package/lib/esm/components/OpenCase/CaseTypeIcons/BugIcon.d.ts.map +1 -0
  32. package/lib/esm/components/OpenCase/CaseTypeIcons/BugIcon.js +7 -0
  33. package/lib/esm/components/OpenCase/CaseTypeIcons/CertificationIcon.d.ts +8 -0
  34. package/lib/esm/components/OpenCase/CaseTypeIcons/CertificationIcon.d.ts.map +1 -0
  35. package/lib/esm/components/OpenCase/CaseTypeIcons/CertificationIcon.js +10 -0
  36. package/lib/esm/components/OpenCase/CaseTypeIcons/CustomerServiceIcon.d.ts +8 -0
  37. package/lib/esm/components/OpenCase/CaseTypeIcons/CustomerServiceIcon.d.ts.map +1 -0
  38. package/lib/esm/components/OpenCase/CaseTypeIcons/CustomerServiceIcon.js +9 -0
  39. package/lib/esm/components/OpenCase/CaseTypeIcons/DocumentationIcon.d.ts +8 -0
  40. package/lib/esm/components/OpenCase/CaseTypeIcons/DocumentationIcon.d.ts.map +1 -0
  41. package/lib/esm/components/OpenCase/CaseTypeIcons/DocumentationIcon.js +7 -0
  42. package/lib/esm/components/OpenCase/CaseTypeIcons/GearIcon.d.ts +8 -0
  43. package/lib/esm/components/OpenCase/CaseTypeIcons/GearIcon.d.ts.map +1 -0
  44. package/lib/esm/components/OpenCase/CaseTypeIcons/GearIcon.js +8 -0
  45. package/lib/esm/components/OpenCase/CaseTypeIcons/IdeaIcon.d.ts +8 -0
  46. package/lib/esm/components/OpenCase/CaseTypeIcons/IdeaIcon.d.ts.map +1 -0
  47. package/lib/esm/components/OpenCase/CaseTypeIcons/IdeaIcon.js +8 -0
  48. package/lib/esm/components/OpenCase/CaseTypeIcons/RcaIcon.d.ts +8 -0
  49. package/lib/esm/components/OpenCase/CaseTypeIcons/RcaIcon.d.ts.map +1 -0
  50. package/lib/esm/components/OpenCase/CaseTypeIcons/RcaIcon.js +8 -0
  51. package/lib/esm/components/OpenCase/CaseTypeIcons/index.d.ts +8 -0
  52. package/lib/esm/components/OpenCase/CaseTypeIcons/index.d.ts.map +1 -0
  53. package/lib/esm/components/OpenCase/CaseTypeIcons/index.js +7 -0
  54. package/lib/esm/components/OpenCase/OpenCase.js +2 -2
  55. package/lib/esm/components/OpenCase/SupportTypeIcons/BugIcon.d.ts +8 -0
  56. package/lib/esm/components/OpenCase/SupportTypeIcons/BugIcon.d.ts.map +1 -0
  57. package/lib/esm/components/OpenCase/SupportTypeIcons/BugIcon.js +7 -0
  58. package/lib/esm/components/OpenCase/SupportTypeIcons/CertificationIcon.d.ts +8 -0
  59. package/lib/esm/components/OpenCase/SupportTypeIcons/CertificationIcon.d.ts.map +1 -0
  60. package/lib/esm/components/OpenCase/SupportTypeIcons/CertificationIcon.js +10 -0
  61. package/lib/esm/components/OpenCase/SupportTypeIcons/CustomerServiceIcon.d.ts +8 -0
  62. package/lib/esm/components/OpenCase/SupportTypeIcons/CustomerServiceIcon.d.ts.map +1 -0
  63. package/lib/esm/components/OpenCase/SupportTypeIcons/CustomerServiceIcon.js +9 -0
  64. package/lib/esm/components/OpenCase/SupportTypeIcons/DocumentationIcon.d.ts +8 -0
  65. package/lib/esm/components/OpenCase/SupportTypeIcons/DocumentationIcon.d.ts.map +1 -0
  66. package/lib/esm/components/OpenCase/SupportTypeIcons/DocumentationIcon.js +7 -0
  67. package/lib/esm/components/OpenCase/SupportTypeIcons/GearIcon.d.ts +8 -0
  68. package/lib/esm/components/OpenCase/SupportTypeIcons/GearIcon.d.ts.map +1 -0
  69. package/lib/esm/components/OpenCase/SupportTypeIcons/GearIcon.js +8 -0
  70. package/lib/esm/components/OpenCase/SupportTypeIcons/IdeaIcon.d.ts +8 -0
  71. package/lib/esm/components/OpenCase/SupportTypeIcons/IdeaIcon.d.ts.map +1 -0
  72. package/lib/esm/components/OpenCase/SupportTypeIcons/IdeaIcon.js +8 -0
  73. package/lib/esm/components/OpenCase/SupportTypeIcons/RcaIcon.d.ts +8 -0
  74. package/lib/esm/components/OpenCase/SupportTypeIcons/RcaIcon.d.ts.map +1 -0
  75. package/lib/esm/components/OpenCase/SupportTypeIcons/RcaIcon.js +8 -0
  76. package/lib/esm/components/OpenCase/SupportTypeIcons/index.d.ts +8 -0
  77. package/lib/esm/components/OpenCase/SupportTypeIcons/index.d.ts.map +1 -0
  78. package/lib/esm/components/OpenCase/SupportTypeIcons/index.js +7 -0
  79. package/lib/esm/components/OpenCase/SupportTypeSelectorPage.d.ts +2 -0
  80. package/lib/esm/components/OpenCase/SupportTypeSelectorPage.d.ts.map +1 -0
  81. package/lib/esm/components/OpenCase/SupportTypeSelectorPage.js +133 -0
  82. package/lib/esm/components/ProductSelector/AllProductsSelector.d.ts.map +1 -1
  83. package/lib/esm/components/ProductSelector/AllProductsSelector.js +3 -0
  84. package/lib/esm/components/ProductSelector/NewProductDropdownSelector.d.ts +14 -0
  85. package/lib/esm/components/ProductSelector/NewProductDropdownSelector.d.ts.map +1 -0
  86. package/lib/esm/components/ProductSelector/NewProductDropdownSelector.js +82 -0
  87. package/lib/esm/components/ProductSelector/NewProductVersionSelector.d.ts +10 -0
  88. package/lib/esm/components/ProductSelector/NewProductVersionSelector.d.ts.map +1 -0
  89. package/lib/esm/components/ProductSelector/NewProductVersionSelector.js +57 -0
  90. package/lib/esm/components/ProductSelector/ProductSelector.d.ts.map +1 -1
  91. package/lib/esm/components/ProductSelector/ProductSelector.js +6 -20
  92. package/lib/esm/components/ProductSelector/ProductVersionDropdownSelector.d.ts.map +1 -1
  93. package/lib/esm/components/ProductSelector/ProductVersionDropdownSelector.js +8 -73
  94. package/lib/esm/components/ProductSelector/TopProductsSelector.d.ts.map +1 -1
  95. package/lib/esm/components/Recommendations/AsideResults.d.ts.map +1 -1
  96. package/lib/esm/components/Recommendations/AsideResults.js +3 -2
  97. package/lib/esm/components/Recommendations/InsightsResults.d.ts +1 -0
  98. package/lib/esm/components/Recommendations/InsightsResults.d.ts.map +1 -1
  99. package/lib/esm/components/Recommendations/InsightsResults.js +4 -0
  100. package/lib/esm/components/Recommendations/Recommendations.d.ts +5 -1
  101. package/lib/esm/components/Recommendations/Recommendations.d.ts.map +1 -1
  102. package/lib/esm/components/Recommendations/Recommendations.js +20 -18
  103. package/lib/esm/components/Recommendations/RulesModal.d.ts +1 -0
  104. package/lib/esm/components/Recommendations/RulesModal.d.ts.map +1 -1
  105. package/lib/esm/components/Recommendations/RulesModal.js +11 -1
  106. package/lib/esm/components/Review/Review.js +1 -1
  107. package/lib/esm/components/Suggestions/Suggestions.d.ts.map +1 -1
  108. package/lib/esm/components/Suggestions/Suggestions.js +5 -3
  109. package/lib/esm/components/TroubleshootSection/TroubleshootSection.d.ts +14 -0
  110. package/lib/esm/components/TroubleshootSection/TroubleshootSection.d.ts.map +1 -0
  111. package/lib/esm/components/TroubleshootSection/TroubleshootSection.js +59 -0
  112. package/lib/esm/components/shared/Constants.d.ts +2 -2
  113. package/lib/esm/components/shared/Constants.d.ts.map +1 -1
  114. package/lib/esm/components/shared/Constants.js +2 -2
  115. package/lib/esm/components/shared/useIsSectionValid.d.ts.map +1 -1
  116. package/lib/esm/components/shared/useIsSectionValid.js +16 -15
  117. package/lib/esm/components/wizardLayout/WizardAside.d.ts.map +1 -1
  118. package/lib/esm/components/wizardLayout/WizardAside.js +15 -4
  119. package/lib/esm/components/wizardLayout/WizardMain.js +19 -19
  120. package/lib/esm/components/wizardLayout/WizardNavigation.js +7 -7
  121. package/lib/esm/enums/pageTitle.d.ts +1 -1
  122. package/lib/esm/enums/pageTitle.js +1 -1
  123. package/lib/esm/reducers/CaseConstNTypes.d.ts +4 -4
  124. package/lib/esm/reducers/CaseConstNTypes.d.ts.map +1 -1
  125. package/lib/esm/reducers/CaseConstNTypes.js +3 -3
  126. package/lib/esm/reducers/RouteConstNTypes.d.ts +6 -5
  127. package/lib/esm/reducers/RouteConstNTypes.d.ts.map +1 -1
  128. package/lib/esm/reducers/RouteConstNTypes.js +23 -16
  129. package/lib/esm/reducers/RouteReducer.d.ts +3 -1
  130. package/lib/esm/reducers/RouteReducer.d.ts.map +1 -1
  131. package/lib/esm/reducers/RouteReducer.js +32 -33
  132. package/lib/esm/reducers/RulesReducer.d.ts +2 -2
  133. package/lib/esm/reducers/RulesReducer.d.ts.map +1 -1
  134. package/lib/esm/reducers/RulesReducer.js +3 -7
  135. package/lib/esm/scss/_main.scss +11 -27
  136. package/lib/esm/scss/_pf4-overrides.scss +23 -0
  137. package/package.json +7 -7
  138. package/lib/esm/components/OpenCase/CaseTypeSelectorPage.d.ts +0 -2
  139. package/lib/esm/components/OpenCase/CaseTypeSelectorPage.d.ts.map +0 -1
  140. package/lib/esm/components/OpenCase/CaseTypeSelectorPage.js +0 -40
@@ -1 +1 @@
1
- {"version":3,"file":"CaseType.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/CaseOverview/CaseType.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAW,MAAM,0BAA0B,CAAC;AASrE,UAAU,MAAO,SAAQ,gBAAgB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,GAAG,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAOD,iBAAS,QAAQ,CAAC,KAAK,EAAE,MAAM,eAmD9B;kBAnDQ,QAAQ;;;AAsDjB,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"CaseType.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/CaseOverview/CaseType.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAW,MAAM,0BAA0B,CAAC;AASrE,UAAU,MAAO,SAAQ,gBAAgB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,GAAG,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAOD,iBAAS,QAAQ,CAAC,KAAK,EAAE,MAAM,eAoD9B;kBApDQ,QAAQ;;;AAuDjB,eAAe,QAAQ,CAAC"}
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import { Dropdown, ValueChangedIcon } from '@rh-support/components';
11
- import { toOption, toOptions } from '@rh-support/utils';
11
+ import { toOldCaseTypeSwitcher, toOption, toOptions } from '@rh-support/utils';
12
12
  import isEmpty from 'lodash/isEmpty';
13
13
  import React, { useState } from 'react';
14
14
  import { Trans, useTranslation } from 'react-i18next';
@@ -25,10 +25,11 @@ function CaseType(props) {
25
25
  setIsCaseTypeInValid(isEmpty(selectedItem));
26
26
  };
27
27
  const onCaseTypeChange = (option) => __awaiter(this, void 0, void 0, function* () {
28
- if (option.value === props.selectedType) {
28
+ const switchedCaseType = toOldCaseTypeSwitcher(option.value);
29
+ if (switchedCaseType === props.selectedType) {
29
30
  return;
30
31
  }
31
- yield props.onTypeChange(option.value);
32
+ yield props.onTypeChange(switchedCaseType);
32
33
  setLocalTypeChange(true);
33
34
  validateCaseType(option);
34
35
  });
@@ -37,10 +38,10 @@ function CaseType(props) {
37
38
  const afterLocalChange = () => setLocalTypeChange(false);
38
39
  return (React.createElement("div", { className: `form-group ${props.className}`, id: `${props.id}` },
39
40
  React.createElement("h3", { className: "subheading subheading-sm" },
40
- React.createElement(Trans, null, "Case type"),
41
+ React.createElement(Trans, null, "Support type"),
41
42
  React.createElement(ValueChangedIcon, { afterLocalChange: afterLocalChange, isLocalChange: localTypeChange, value: props.selectedType, getTooltipContent: getChangedValueTooltip(() => CaseValuesToWatch.type) }),
42
43
  React.createElement("span", { className: "form-required", "aria-hidden": true }, "*")),
43
- React.createElement(Dropdown, { name: "open-case-type", placeholder: t(`Select`), title: t(`Select a category`), list: props.allTypes ? toOptions(props.allTypes) : [], selectedItem: toOption(props.selectedType), disabled: props.hasError || props.isDisabled, isLoadingList: props.isFetching, isInValid: isCaseTypeInValid, required: true, onChange: onCaseTypeChange, onOuterClick: validateCaseType, "data-tracking-id": "case-details-type-selector" })));
44
+ React.createElement(Dropdown, { name: "open-support-type", placeholder: t(`Select`), title: t(`Select a category`), list: props.allTypes ? toOptions(props.allTypes) : [], selectedItem: toOption(props.selectedType), disabled: props.hasError || props.isDisabled, isLoadingList: props.isFetching, isInValid: isCaseTypeInValid, required: true, onChange: onCaseTypeChange, onOuterClick: validateCaseType, "data-tracking-id": "case-details-type-selector" })));
44
45
  }
45
46
  CaseType.defaultProps = defaultProps;
46
47
  export default CaseType;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/CaseOverview/index.tsx"],"names":[],"mappings":"AAyCA,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,KAAK,EAAE,MAAM,eAoejD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/CaseOverview/index.tsx"],"names":[],"mappings":"AA6CA,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,KAAK,EAAE,MAAM,eAqejD"}
@@ -11,7 +11,7 @@ import { Alert, AlertVariant, Button, ButtonVariant, ExpandableSection, Label }
11
11
  import { ToastNotification, useConfirmation } from '@rh-support/components';
12
12
  import { CloseCaseModal, fetchCaseSeverities, fetchCaseTypes, GlobalMetadataDispatchContext, GlobalMetadataStateContext, useCanEditCase, } from '@rh-support/react-context';
13
13
  import { AbilityContext, CaseDetailsFields, resourceActions, resources } from '@rh-support/user-permissions';
14
- import { haventLoadedMetadata, isOpenShiftOnlineProduct } from '@rh-support/utils';
14
+ import { haventLoadedMetadata, isOpenShiftOnlineProduct, toNewCaseTypeMapper, toNewCaseTypeSwitcher, } from '@rh-support/utils';
15
15
  import isEqual from 'lodash/isEqual';
16
16
  import React, { useContext, useEffect, useReducer, useRef, useState } from 'react';
17
17
  import { Trans, useTranslation } from 'react-i18next';
@@ -26,7 +26,6 @@ import { usePostComment } from '../../shared/usePostComment';
26
26
  import { ReopenCaseModal } from '../ConfirmationModals/ReopenCaseModal';
27
27
  import { PDFContext } from '../PDFContainer';
28
28
  import { CaseInformation } from '../Tabs/CaseDetails/CaseInformation';
29
- import Summary from '../Tabs/CaseDetails/Summary';
30
29
  import CaseOwnerInfo from './CaseOwnerInfo';
31
30
  import CaseStatus from './CaseStatus';
32
31
  import CaseType from './CaseType';
@@ -73,6 +72,7 @@ export default function CaseOverview(props) {
73
72
  const { isCaseUpdating, contactIsPartner, hotfixRequested, hotfixDelivered, selectedAccountDetails, caseDetails: { firstCaseInactivityWarningSentAt, secondCaseInactivityWarningSentAt }, } = caseState;
74
73
  const globalMetadataDispatchContext = useContext(GlobalMetadataDispatchContext);
75
74
  const { globalMetadataState: { allCaseTypes, allCaseSeverities, viewAsCustomer, loggedInUsersAccount, loggedInUserRights, }, } = useContext(GlobalMetadataStateContext);
75
+ const switchedCaseType = toNewCaseTypeSwitcher(caseType);
76
76
  const updatingUser = loggedInUsersAccount.data.name;
77
77
  const canSeeManagedByPartnerFlag = contactIsPartner &&
78
78
  ability.can(resourceActions.PATCH, resources.CASE_DETAILS, CaseDetailsFields.CASE_DETAILS_MANAGED_BY_PARTNER_FLAG);
@@ -110,11 +110,11 @@ export default function CaseOverview(props) {
110
110
  try {
111
111
  yield updateCaseDetails(caseDispatch, props.caseNumber, { caseType: type });
112
112
  setTypeUpdating(caseOverviewDispatch, false);
113
- ToastNotification.addSuccessMessage(t('Case type has been successfully updated'));
113
+ ToastNotification.addSuccessMessage(t('Support type has been successfully updated'));
114
114
  }
115
115
  catch (e) {
116
116
  setTypeUpdating(caseOverviewDispatch, false);
117
- caseUpdateError.showError(e, t('Case type failed to update'));
117
+ caseUpdateError.showError(e, t('Support type failed to update'));
118
118
  }
119
119
  });
120
120
  const onSeverityChange = (payLoad) => __awaiter(this, void 0, void 0, function* () {
@@ -209,6 +209,8 @@ export default function CaseOverview(props) {
209
209
  return (React.createElement("a", { href: link, target: "_blank", className: "show-target", rel: "noopener noreferrer", "data-tracking-id": "case-details-support-level-info" }, linkText));
210
210
  };
211
211
  const isCaseInOpenState = status !== CaseStatusEnum.CLOSED;
212
+ // To switch from old case type to new support type
213
+ const newCaseTypesArray = toNewCaseTypeMapper(allCaseTypes.data).sort();
212
214
  return (React.createElement(React.Fragment, null,
213
215
  React.createElement("div", { className: "case-overview push-bottom-wide" },
214
216
  React.createElement("div", { className: "case-overview-header" },
@@ -240,8 +242,6 @@ export default function CaseOverview(props) {
240
242
  React.createElement(Trans, null, isCaseInOpenState ? 'Close case' : 'Reopen case')))),
241
243
  React.createElement("div", { className: `case-details-header-secondary push-bottom-narrow ${isExportingPDF && !viewAsCustomer ? 'hide-in-pdf' : ''}` },
242
244
  React.createElement("span", { className: "case-support-level" }, computeSupportLink())),
243
- React.createElement("div", { className: "case-details-summary push-bottom-narrow" },
244
- React.createElement(Summary, { inlineEditable: true, hideLabel: true })),
245
245
  canSeeManagedByPartnerFlag && (React.createElement(Label, { className: "push-right-narrow", color: "green" },
246
246
  React.createElement(Trans, null, "Managed by a partner"))),
247
247
  canSeeInternalFlags && (React.createElement(React.Fragment, null,
@@ -275,9 +275,9 @@ export default function CaseOverview(props) {
275
275
  React.createElement("div", { className: "form-wrapper" },
276
276
  React.createElement(CaseStatus, { selectedStatus: status, onStatusChange: onStatusChange, isDisabled: !canManageCase || caseOverviewState.allCaseStatuses.isFetching, allStatuses: caseOverviewState.allCaseStatuses.data, isFetching: caseOverviewState.caseStatusUpdating && isCaseUpdating, hasError: caseOverviewState.allCaseStatuses.isError })),
277
277
  React.createElement("div", { className: "form-wrapper" },
278
- React.createElement(CaseType, { selectedType: caseType, onTypeChange: onTypeChange, isDisabled: !canManageCase || allCaseTypes.isFetching, allTypes: allCaseTypes.data, isFetching: caseOverviewState.caseTypeUpdating && isCaseUpdating, hasError: allCaseTypes.isError })),
278
+ React.createElement(CaseType, { selectedType: switchedCaseType, onTypeChange: onTypeChange, isDisabled: !canManageCase || allCaseTypes.isFetching, allTypes: newCaseTypesArray, isFetching: caseOverviewState.caseTypeUpdating && isCaseUpdating, hasError: allCaseTypes.isError })),
279
279
  React.createElement("div", { className: "form-wrapper" },
280
- React.createElement(Severity, { onCaseDetailsPage: true, onSeverityChange: onSeverityChange, isDisabled: !canManageCase, isFetching: caseOverviewState.caseSeverityUpdating && isCaseUpdating })))),
280
+ React.createElement(Severity, { onSeverityChange: onSeverityChange, isDisabled: !canManageCase, isFetching: caseOverviewState.caseSeverityUpdating && isCaseUpdating })))),
281
281
  React.createElement(ExpandableSection, { className: "case-details-main", toggleText: t('Case information'), isExpanded: isDetailsExpanded, onToggle: onToggleDetails },
282
282
  React.createElement(CaseInformation, null))),
283
283
  showCloseCaseModal && (React.createElement(CloseCaseModal, { onConfirm: (commentBody) => __awaiter(this, void 0, void 0, function* () {
@@ -1 +1 @@
1
- {"version":3,"file":"CaseAlternateId.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseAlternateId.tsx"],"names":[],"mappings":"AA2BA,UAAU,MAAM;IACZ,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAOD,iBAAS,eAAe,CAAC,KAAK,EAAE,MAAM,eA0KrC;kBA1KQ,eAAe;;;AA6KxB,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"CaseAlternateId.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseDetails/CaseAlternateId.tsx"],"names":[],"mappings":"AA2BA,UAAU,MAAM;IACZ,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAOD,iBAAS,eAAe,CAAC,KAAK,EAAE,MAAM,eA+KrC;kBA/KQ,eAAe;;;AAkLxB,eAAe,eAAe,CAAC"}
@@ -66,7 +66,7 @@ function CaseAlternateId(props) {
66
66
  setIsUpdating(false);
67
67
  }
68
68
  catch (e) {
69
- caseUpdateError.showError(e, t('Alternate case ID failed to update'));
69
+ caseUpdateError.showError(e, t('Personal reference number failed to update'));
70
70
  setIsUpdating(false);
71
71
  throw e;
72
72
  }
@@ -82,7 +82,7 @@ function CaseAlternateId(props) {
82
82
  setAlternateIdState(alternateId);
83
83
  setIsCancelClicked(!isCancelClicked);
84
84
  };
85
- const maxLengthErrorMessage = t('Alternate case ID cannot be more than {{limit}} characters.', {
85
+ const maxLengthErrorMessage = t('Personal reference number cannot be more than {{limit}} characters.', {
86
86
  limit: ALTERNATE_CASE_ID_LIMIT,
87
87
  });
88
88
  // Conditions to disable save button
@@ -100,7 +100,7 @@ function CaseAlternateId(props) {
100
100
  });
101
101
  return (React.createElement(React.Fragment, null,
102
102
  React.createElement(NewInlineEdit, { labelProps: { htmlFor: 'case-details-alternate-id' }, labelContent: React.createElement(React.Fragment, null,
103
- React.createElement(Trans, null, "Alternate case ID"),
103
+ React.createElement(Trans, null, "Personal reference number"),
104
104
  React.createElement(ValueChangedIcon, { afterLocalChange: afterLocalChange, isLocalChange: localAltIDChange, value: alternateId, getTooltipContent: getChangedValueTooltip(() => CaseValuesToWatch.altID) }),
105
105
  ' ',
106
106
  React.createElement(Tooltip, { trigger: 'mouseenter focus', position: TooltipPosition.top, content: React.createElement(Trans, null, "Add your internal tracking ID to better identify and organize support issues.") },
@@ -117,7 +117,9 @@ function CaseAlternateId(props) {
117
117
  React.createElement(Spinner, { isSVG: true, size: "lg", className: "pf-u-ml-2xl pf-u-mr-xl" }))))),
118
118
  (alternateIdState === null || alternateIdState === void 0 ? void 0 : alternateIdState.length) > ALTERNATE_CASE_ID_LIMIT && (React.createElement("div", { className: "pull-top" },
119
119
  React.createElement("p", { className: "form-instructions form-invalid" },
120
- React.createElement(Trans, null, maxLengthErrorMessage))))));
120
+ React.createElement(Trans, null, maxLengthErrorMessage)))),
121
+ React.createElement("p", { className: "form-instructions" },
122
+ React.createElement(Trans, null, "Add a personal or company reference number to help you connect, organize, and track cases."))));
121
123
  }
122
124
  CaseAlternateId.defaultProps = defaultProps;
123
125
  export default CaseAlternateId;
@@ -1 +1 @@
1
- {"version":3,"file":"CaseInformation.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/CaseInformation.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAavD,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC;CACnC;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,KAAK,EAAE,MAAM,eA6HpD"}
1
+ {"version":3,"file":"CaseInformation.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/CaseInformation.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAYvD,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC;CACnC;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,KAAK,EAAE,MAAM,eA4HpD"}
@@ -13,7 +13,6 @@ import { Hostname } from '../ImproveCase/Hostname';
13
13
  import KtQuestions from '../ImproveCase/KtQuestions';
14
14
  import { AllProductsSelector } from '../ProductSelector/AllProductsSelector';
15
15
  import Description from './Description';
16
- import { FileDiag } from './FileDiag';
17
16
  import OpenCaseIssue from './OpenCaseIssue';
18
17
  export default function CaseInformation(props) {
19
18
  const { t } = useTranslation();
@@ -90,10 +89,9 @@ export default function CaseInformation(props) {
90
89
  canManageCase(loggedInUserJwtToken) && (React.createElement(React.Fragment, null,
91
90
  React.createElement("form", { onSubmit: handleFormSubmit },
92
91
  skippedTroubleshooting && (React.createElement(AllProductsSelector, { isDropdownSelected: true, routeProps: props.routeProps, loadTCOnChange: true, checkEntitledProduct: true })),
93
- React.createElement(OpenShiftClusterId, null),
94
92
  React.createElement(Hostname, null),
93
+ React.createElement(OpenShiftClusterId, null),
95
94
  skippedTroubleshooting && React.createElement(OpenCaseIssue, { inlineEditable: false, required: true }),
96
95
  React.createElement(Description, { inlineEditable: false }),
97
- React.createElement(KtQuestions, null),
98
- React.createElement(FileDiag, null))))));
96
+ React.createElement(KtQuestions, null))))));
99
97
  }
@@ -24,11 +24,11 @@ export default function CaseType(props) {
24
24
  validateCaseType(option);
25
25
  };
26
26
  return (React.createElement("div", { className: "form-group" },
27
- React.createElement("label", { htmlFor: "open-case-type" },
28
- React.createElement(Trans, null, "Case type"),
27
+ React.createElement("label", { htmlFor: "open-support-type" },
28
+ React.createElement(Trans, null, "Support type"),
29
29
  ' ',
30
30
  React.createElement("span", { className: "form-required", "aria-hidden": true }, "*")),
31
- React.createElement(Dropdown, { id: "open-case-type", name: "open-case-type", placeholder: t(`Select a category`), title: t(`Select a category`), list: allCaseTypes.data ? toOptions(allCaseTypes.data) : [], selectedItem: toOption(caseType), disabled: allCaseTypes.isError, isLoadingList: allCaseTypes.isFetching, isInValid: isCaseTypeInValid, required: true, onChange: onCaseTypeChange, onOuterClick: validateCaseType, "data-tracking-id": "open-case-type" })));
31
+ React.createElement(Dropdown, { id: "open-support-type", name: "open-support-type", placeholder: t(`Select a category`), title: t(`Select a category`), list: allCaseTypes.data ? toOptions(allCaseTypes.data) : [], selectedItem: toOption(caseType), disabled: allCaseTypes.isError, isLoadingList: allCaseTypes.isFetching, isInValid: isCaseTypeInValid, required: true, onChange: onCaseTypeChange, onOuterClick: validateCaseType, "data-tracking-id": "open-support-type" })));
32
32
  }, [
33
33
  allCaseTypes.data,
34
34
  allCaseTypes.isError,
@@ -1 +1 @@
1
- {"version":3,"file":"Description.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/Description.tsx"],"names":[],"mappings":"AAkBA,UAAU,MAAM;IACZ,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAK,EAAE,MAAM,eAiGhD"}
1
+ {"version":3,"file":"Description.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/Description.tsx"],"names":[],"mappings":"AAkBA,UAAU,MAAM;IACZ,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAK,EAAE,MAAM,eAkGhD"}
@@ -46,7 +46,7 @@ export default function Description(props) {
46
46
  React.createElement(Trans, null, "What are you experiencing? What are you expecting to happen?"),
47
47
  ' ',
48
48
  isKT1Required && (React.createElement("span", { className: "form-required", "aria-hidden": true }, "*"))), labelProps: { htmlFor: 'open-case-ktQ1-issue' }, content: issue, allowInlineEdit: !!props.inlineEditable, hideSaveCancel: !!props.hideSaveCancel, initialIsEditing: isEmpty(issue), usePreformattedTag: true, saveOnBlur: true },
49
- React.createElement(TextArea, { id: "open-case-ktQ1-issue", name: "open-case-ktQ1-issue", className: `form-control${isDescriptionInvalid(issue) || (showValidationErrorAlert && isEmpty(issue)) ? ' form-invalid' : ''}`, "aria-invalid": (issue === null || issue === void 0 ? void 0 : issue.length) > CASE_DEATILS_ISSUE_LIMIT ? 'true' : 'false', "aria-required": isKT1Required, isRequired: isKT1Required, value: issue, isDisabled: isEmpty(issue) && hasLargeCaseDescription && !setIssueTextAreaFocused, onChange: onKTQ1IssueChange, onFocus: onKTQ1IssueFocusChange, onBlur: onKTQ1IssueFocusChange, "data-tracking-id": "open-case-ktQ1-issue" }),
49
+ React.createElement(TextArea, { id: "open-case-ktQ1-issue", name: "open-case-ktQ1-issue", className: `form-control${isDescriptionInvalid(issue) || (showValidationErrorAlert && isEmpty(issue)) ? ' form-invalid' : ''}`, "aria-invalid": (issue === null || issue === void 0 ? void 0 : issue.length) > CASE_DEATILS_ISSUE_LIMIT ? 'true' : 'false', "aria-required": isKT1Required, isRequired: isKT1Required, value: issue, isDisabled: isEmpty(issue) && hasLargeCaseDescription && !setIssueTextAreaFocused, onChange: onKTQ1IssueChange, onFocus: onKTQ1IssueFocusChange, onBlur: onKTQ1IssueFocusChange, "data-tracking-id": "open-case-ktQ1-issue", placeholder: t('Please enter an elaborate description') }),
50
50
  React.createElement("p", { className: "form-instructions", "data-tracking-id": "large-20k-warning-ktQ1-environment" }, `${(issue === null || issue === void 0 ? void 0 : issue.length) > CASE_DEATILS_ISSUE_LIMIT
51
51
  ? `Description cannot be more than ${CASE_DEATILS_ISSUE_LIMIT} characters`
52
52
  : ''}`),
@@ -39,12 +39,12 @@ function OpenCaseIssue(props) {
39
39
  });
40
40
  return (React.createElement(React.Fragment, null,
41
41
  React.createElement(InlineEdit, { labelProps: { htmlFor: 'open-case-summary' }, labelContent: React.createElement(React.Fragment, null,
42
- React.createElement(Trans, null, "Issue summary"),
42
+ React.createElement(Trans, null, "Summary"),
43
43
  ' ',
44
44
  !!props.required && (React.createElement("span", { className: "form-required", "aria-hidden": true }, "*"))), allowInlineEdit: props.inlineEditable, hideSaveCancel: !!props.hideSaveCancel, initialIsEditing: !!props.initialIsEditing, saveOnBlur: true, collapseOnBlur: !!props.collapseOnBlur && !isSummaryInValid, content: summary },
45
45
  React.createElement("input", { type: "text", id: "open-case-summary", className: `form-control${isSummaryInValid || hasLargeSummary || (showValidationErrorAlert && !summary)
46
46
  ? ' form-invalid'
47
- : ''}`, "aria-invalid": isSummaryInValid, "aria-required": !!props.required, required: !!props.required, name: "open-case-summary", placeholder: t('Enter a description'), value: summary, onChange: onSummaryChange, onBlur: onSummaryBlur, autoFocus: !!props.autoFocus, "data-tracking-id": "open-case-summary" })),
47
+ : ''}`, "aria-invalid": isSummaryInValid, "aria-required": !!props.required, required: !!props.required, name: "open-case-summary", placeholder: t("Summarize what you're experiencing today"), value: summary, onChange: onSummaryChange, onBlur: onSummaryBlur, autoFocus: !!props.autoFocus, "data-tracking-id": "open-case-summary" })),
48
48
  (summary === null || summary === void 0 ? void 0 : summary.length) > SUMMARY_LENGTH_LIMIT && (React.createElement("div", { className: "pull-top" },
49
49
  React.createElement("p", { className: "form-instructions form-invalid" },
50
50
  React.createElement(Trans, null, maxLengthErrorMessage))))));
@@ -3,9 +3,8 @@ import { IDClassNameProps } from '@rh-support/types/shared';
3
3
  interface IProps extends IDClassNameProps {
4
4
  isDisabled?: boolean;
5
5
  isFetching?: boolean;
6
- onSeverityChange: (casePayload: Partial<ICasePayload>) => void;
6
+ onSeverityChange?: (casePayload: Partial<ICasePayload>) => void;
7
7
  showSeverityInfoIcon: boolean;
8
- onCaseDetailsPage?: boolean;
9
8
  }
10
9
  export interface ISeverityOptions {
11
10
  disabled: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"Severity.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/Severity.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAKvE,OAAO,EAAE,gBAAgB,EAAW,MAAM,0BAA0B,CAAC;AAuBrE,UAAU,MAAO,SAAQ,gBAAgB;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IAC/D,oBAAoB,EAAE,OAAO,CAAC;IAC9B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AASD,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;CACxD;AAED,iBAAS,QAAQ,CAAC,KAAK,EAAE,MAAM,eA8Q9B;kBA9QQ,QAAQ;;;AAgRjB,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"Severity.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/Severity.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAKvE,OAAO,EAAE,gBAAgB,EAAW,MAAM,0BAA0B,CAAC;AAwBrE,UAAU,MAAO,SAAQ,gBAAgB;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IAChE,oBAAoB,EAAE,OAAO,CAAC;CACjC;AASD,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;CACxD;AAED,iBAAS,QAAQ,CAAC,KAAK,EAAE,MAAM,eAoR9B;kBApRQ,QAAQ;;;AAsRjB,eAAe,QAAQ,CAAC"}
@@ -11,8 +11,9 @@ import isEqual from 'lodash/isEqual';
11
11
  import map from 'lodash/map';
12
12
  import React, { useContext, useEffect, useState } from 'react';
13
13
  import { Trans, useTranslation } from 'react-i18next';
14
- import { useCaseSelector } from '../../context/CaseContext';
14
+ import { useCaseDispatch, useCaseSelector } from '../../context/CaseContext';
15
15
  import { getIrtForSLAAndSeverity, getOrtForSLAAndSeverity, getSeverityDescription } from '../../reducers/CaseHelpers';
16
+ import { setCaseDetails } from '../../reducers/CaseReducer';
16
17
  import { CaseValuesToWatch } from '../shared/Constants';
17
18
  import { getChangedValueTooltip } from '../shared/utils';
18
19
  import UpdateSeverityModal from '../UpdateSeverityModal/UpdateSeverityModal';
@@ -38,13 +39,18 @@ function Severity(props) {
38
39
  const [seviritiesOptions, setSeveritiesOptions] = useState([]);
39
40
  const [doNotShowIRT, setDoNotShowIRT] = useState(false);
40
41
  const [openUpdateSeverityModal, setOpenUpdateSeverityModal] = useState(false);
42
+ const caseDispatch = useCaseDispatch();
43
+ const isOnCaseDetailsPage = !isEmpty(caseNumber);
41
44
  const updateState = (value) => {
42
45
  const casePayload = { severity: value };
43
- // .. change fts on sev change only while creating case or wchen we change to sev1
44
- isEmpty(caseNumber) && (casePayload.fts = showFtsOnCreateCasePage(entitlementSla, value));
45
- !isEmpty(caseNumber) && autoEnableFtsOnCaseViewEditPage(entitlementSla, value) && (casePayload.fts = true);
46
- if (props.onSeverityChange) {
47
- props.onSeverityChange(casePayload);
46
+ // .. change fts on sev change only while creating case or when we change to sev1
47
+ !isOnCaseDetailsPage && (casePayload.fts = showFtsOnCreateCasePage(entitlementSla, value));
48
+ isOnCaseDetailsPage && autoEnableFtsOnCaseViewEditPage(entitlementSla, value) && (casePayload.fts = true);
49
+ if (isOnCaseDetailsPage) {
50
+ props.onSeverityChange && props.onSeverityChange(casePayload);
51
+ }
52
+ else {
53
+ setCaseDetails(caseDispatch, casePayload);
48
54
  }
49
55
  };
50
56
  const onSeverityChange = (option) => {
@@ -134,7 +140,7 @@ function Severity(props) {
134
140
  availableSeverities = (_c = allCaseSeverities.data) !== null && _c !== void 0 ? _c : [];
135
141
  }
136
142
  setSeveritiesOptions(availableSeverities.sort((sevA, sevB) => severitySort(sevA, sevB)));
137
- const shouldUpdateSeverityOnCaseCreate = !caseNumber && (!severity || !includes(availableSeverities, severity));
143
+ const shouldUpdateSeverityOnCaseCreate = !isOnCaseDetailsPage && (!severity || !includes(availableSeverities, severity));
138
144
  if (shouldUpdateSeverityOnCaseCreate) {
139
145
  updateState(availableSeverities[0]);
140
146
  }
@@ -154,7 +160,7 @@ function Severity(props) {
154
160
  "\u00A0",
155
161
  filteredSeverities.filter((s) => s.disabled).length !== 0 && (React.createElement(Tooltip, { position: TooltipPosition.top, content: React.createElement(Trans, null, "Only the enabled severity levels are supported for selected product and version.") },
156
162
  React.createElement(WarningTriangleIcon, { color: "#ec7a08", size: "sm", title: "Support Severity Level warning" })))),
157
- !props.isDisabled && props.onCaseDetailsPage === true ? (React.createElement(React.Fragment, null,
163
+ !props.isDisabled && isOnCaseDetailsPage ? (React.createElement(React.Fragment, null,
158
164
  React.createElement("div", { onClick: toggleModal },
159
165
  React.createElement(Dropdown, { name: "open-case-severity", placeholder: t(`Select a severity`), title: t(`Select a severity`), list: allCaseSeverities.data
160
166
  ? toOptions(filteredSeverities, {
@@ -1 +1 @@
1
- {"version":3,"file":"SupportLevel.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/SupportLevel.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAW,MAAM,0BAA0B,CAAC;AAUrE,UAAU,MAAO,SAAQ,gBAAgB;CAAG;AAO5C,iBAAS,YAAY,CAAC,KAAK,EAAE,MAAM,eAuHlC;kBAvHQ,YAAY;;;AAyHrB,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"SupportLevel.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/SupportLevel.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAU5D,UAAU,MAAO,SAAQ,gBAAgB;CAAG;AAO5C,iBAAS,YAAY,CAAC,KAAK,EAAE,MAAM,eA4HlC;kBA5HQ,YAAY;;;AA8HrB,eAAe,YAAY,CAAC"}
@@ -1,10 +1,9 @@
1
- import { Popover, PopoverPosition } from '@patternfly/react-core';
2
- import { Dropdown } from '@rh-support/components';
1
+ import { Popover, PopoverPosition, Select, SelectOption, SelectVariant, ValidatedOptions, } from '@patternfly/react-core';
3
2
  import { GlobalMetadataStateContext } from '@rh-support/react-context';
4
- import { showFtsOnCaseViewEditPage, showFtsOnCreateCasePage, toOption, toOptions } from '@rh-support/utils';
3
+ import { showFtsOnCaseViewEditPage, showFtsOnCreateCasePage } from '@rh-support/utils';
5
4
  import isEmpty from 'lodash/isEmpty';
6
5
  import isEqual from 'lodash/isEqual';
7
- import React, { useContext, useState } from 'react';
6
+ import React, { useContext, useEffect, useState } from 'react';
8
7
  import { Trans, useTranslation } from 'react-i18next';
9
8
  import { useCaseDispatch, useCaseSelector } from '../../context/CaseContext';
10
9
  import { setCaseDetails } from '../../reducers/CaseReducer';
@@ -24,49 +23,54 @@ function SupportLevel(props) {
24
23
  const { globalMetadataState: { allProducts }, } = useContext(GlobalMetadataStateContext);
25
24
  const { t } = useTranslation();
26
25
  const [isSupportLevelInValid, setIsSupportLevelInValid] = useState(false);
26
+ const [isOpen, setIsOpen] = useState(false);
27
+ const onToggle = (isOpen) => {
28
+ setIsOpen(isOpen);
29
+ };
27
30
  const onCaseDetailsChange = (caseDetails) => {
28
31
  setCaseDetails(caseDispatch, caseDetails);
29
32
  };
30
- const onEntitlementChange = (option) => {
31
- const casePayload = { entitlementSla: option.value.slaProcessId };
33
+ const onEntitlementChange = (event, selected) => {
34
+ setIsOpen(false);
35
+ const casePayload = { entitlementSla: selected };
32
36
  casePayload.fts = caseNumber
33
- ? showFtsOnCaseViewEditPage(option.value.slaProcessId, severity)
34
- : showFtsOnCreateCasePage(option.value.slaProcessId, severity);
35
- validateSupportLevel(option);
37
+ ? showFtsOnCaseViewEditPage(selected, severity)
38
+ : showFtsOnCreateCasePage(selected, severity);
39
+ setIsSupportLevelInValid(isEmpty(selected));
36
40
  onCaseDetailsChange(casePayload);
37
41
  };
38
- const validateSupportLevel = (selectedItem) => {
39
- const isInvalid = isEmpty(selectedItem) || isEmpty(selectedItem.label);
40
- setIsSupportLevelInValid(isInvalid);
41
- };
42
42
  const getSlaList = () => {
43
43
  var _a, _b;
44
44
  const entitledProduct = ((_b = (_a = allProducts.data) === null || _a === void 0 ? void 0 : _a.productsResult) !== null && _b !== void 0 ? _b : []).find((entitledProduct) => entitledProduct.product === product);
45
45
  if (entitledProduct && entitledProduct.serviceLevels) {
46
- return toOptions(entitledProduct.serviceLevels.split(';').map((serviceLevel) => ({ slaProcessId: serviceLevel })), { labelKey: 'slaProcessId' });
46
+ return entitledProduct.serviceLevels.split(';') || [];
47
47
  }
48
48
  else {
49
- return ownersEntitlements.data ? toOptions(ownersEntitlements.data, { labelKey: 'slaProcessId' }) : [];
49
+ return ownersEntitlements.data ? ownersEntitlements.data.map((sla) => sla.slaProcessId) : [];
50
50
  }
51
51
  };
52
- const slaProcessId = entitlementSla;
53
52
  const getSelectedSla = () => {
54
53
  var _a, _b;
55
54
  const entitledProduct = ((_b = (_a = allProducts.data) === null || _a === void 0 ? void 0 : _a.productsResult) !== null && _b !== void 0 ? _b : []).find((entitledProduct) => entitledProduct.product === product);
56
55
  // if sla is empty then it means either first time this component is rendered or product has changed.
57
- if (isEmpty(slaProcessId) && entitledProduct && entitledProduct.preferredServiceLevel) {
56
+ if (isEmpty(entitlementSla) && entitledProduct && entitledProduct.preferredServiceLevel) {
58
57
  return entitledProduct.preferredServiceLevel;
59
58
  }
60
59
  else {
61
- return isEmpty(slaProcessId) && !isEmpty(ownersEntitlements.data)
60
+ return isEmpty(entitlementSla) && !isEmpty(ownersEntitlements.data)
62
61
  ? ownersEntitlements.data[0].slaProcessId
63
- : slaProcessId;
62
+ : entitlementSla;
64
63
  }
65
64
  };
66
65
  const selectedSla = getSelectedSla();
67
- if (slaProcessId !== selectedSla) {
68
- onCaseDetailsChange({ entitlementSla: selectedSla });
69
- }
66
+ useEffect(() => {
67
+ if (!selectedSla || entitlementSla)
68
+ return;
69
+ if (entitlementSla !== selectedSla) {
70
+ onCaseDetailsChange({ entitlementSla: selectedSla });
71
+ }
72
+ // eslint-disable-next-line react-hooks/exhaustive-deps
73
+ }, [selectedSla, entitlementSla]);
70
74
  return (React.createElement("div", { className: `form-group ${props.className}`, id: `${props.id}` },
71
75
  React.createElement("label", { htmlFor: "open-case-support-level" },
72
76
  React.createElement(Trans, null, "Support level"),
@@ -78,7 +82,7 @@ function SupportLevel(props) {
78
82
  ' ',
79
83
  React.createElement("a", { href: "/support/offerings/production/sla", target: "_blank" }, "production support service level agreement"))), closeBtnAriaLabel: "Close" },
80
84
  React.createElement("i", { "aria-label": "Support Level info", className: "fa fa-question-circle" })),
81
- React.createElement(Dropdown, { id: "open-case-support-level", name: "open-case-support-level", placeholder: "Select", title: `Select Support Level`, list: getSlaList(), selectedItem: toOption({ slaProcessId: selectedSla }, { labelKey: 'slaProcessId' }), disabled: ownersEntitlements.isError || isEmpty(ownersEntitlements.data), isLoadingList: ownersEntitlements.isFetching, isInValid: isSupportLevelInValid, required: true, onChange: onEntitlementChange, onOuterClick: validateSupportLevel, "data-tracking-id": "open-case-support-level" }),
85
+ React.createElement(Select, { variant: SelectVariant.single, "aria-label": t('Select Support Level'), onToggle: onToggle, onSelect: onEntitlementChange, selections: selectedSla, isOpen: isOpen, "aria-labelledby": 'open-case-support-level', isDisabled: ownersEntitlements.isError || isEmpty(ownersEntitlements.data), validated: isSupportLevelInValid ? ValidatedOptions.error : ValidatedOptions.default, "data-tracking-id": "open-case-support-level" }, [getSlaList(), ''].map((sla, index) => (React.createElement(SelectOption, { value: sla, key: index })))),
82
86
  isEmpty(ownersEntitlements.data) && (React.createElement("p", { className: "form-instructions" }, ownersEntitlements.isError ? t('Error loading support levels') : t('No active subscriptions')))));
83
87
  }
84
88
  SupportLevel.defaultProps = defaultProps;
@@ -1,4 +1,5 @@
1
1
  export interface IProps {
2
+ isManageStep?: boolean;
2
3
  }
3
4
  export default function CaseLanguageSelector(props: IProps): JSX.Element;
4
5
  //# sourceMappingURL=CaseLanguageSelector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CaseLanguageSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/CaseLanguageSelector.tsx"],"names":[],"mappings":"AAaA,MAAM,WAAW,MAAM;CAAG;AAE1B,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,KAAK,EAAE,MAAM,eAmDzD"}
1
+ {"version":3,"file":"CaseLanguageSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/CaseLanguageSelector.tsx"],"names":[],"mappings":"AAaA,MAAM,WAAW,MAAM;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,KAAK,EAAE,MAAM,eAuFzD"}
@@ -1,38 +1,58 @@
1
- import { Dropdown } from '@rh-support/components';
1
+ import { Select, SelectOption, SelectVariant, ValidatedOptions } from '@patternfly/react-core';
2
2
  import { GlobalMetadataStateContext } from '@rh-support/react-context';
3
+ import { ability, CaseDetailsFields, resourceActions, resources } from '@rh-support/user-permissions';
4
+ import isEmpty from 'lodash/isEmpty';
3
5
  import isEqual from 'lodash/isEqual';
4
- import map from 'lodash/map';
5
- import React, { useContext } from 'react';
6
+ import React, { useContext, useEffect, useState } from 'react';
6
7
  import { Trans, useTranslation } from 'react-i18next';
7
8
  import { useCaseDispatch, useCaseSelector } from '../../context/CaseContext';
8
- import { setCaseDetails } from '../../reducers/CaseReducer';
9
- import Constants from '../shared/Constants';
9
+ import { getDescriptionWOQues } from '../../reducers/CaseHelpers';
10
+ import { setCaseDetails, setDetectedLanguage } from '../../reducers/CaseReducer';
10
11
  export default function CaseLanguageSelector(props) {
11
12
  const { t } = useTranslation();
12
- const { caseLanguage, isLoadingLang } = useCaseSelector((state) => ({
13
+ const { summary, issue, environment, periodicityOfIssue, timeFramesAndUrgency, caseLanguage, isLoadingLang } = useCaseSelector((state) => ({
14
+ summary: state.caseDetails.summary,
15
+ issue: state.caseDetails.issue,
16
+ environment: state.caseDetails.environment,
17
+ periodicityOfIssue: state.caseDetails.periodicityOfIssue,
18
+ timeFramesAndUrgency: state.caseDetails.timeFramesAndUrgency,
13
19
  caseLanguage: state.caseDetails.caseLanguage,
14
20
  isLoadingLang: state.isLoadingLang,
15
21
  }), isEqual);
22
+ const [isOpen, setIsOpen] = useState(false);
23
+ const onToggle = (isOpen) => {
24
+ setIsOpen(isOpen);
25
+ };
26
+ const canUseLanguageDetection = ability.can(resourceActions.PATCH, resources.CASE_CREATE, CaseDetailsFields.CASE_LANGUAGE_DETECTION);
16
27
  const caseDispatch = useCaseDispatch();
17
28
  const { globalMetadataState: { caseLanguages }, } = useContext(GlobalMetadataStateContext);
18
29
  const onCaseDetailsChange = (caseDetails) => {
19
30
  setCaseDetails(caseDispatch, caseDetails);
20
31
  };
21
- const onLanguageChange = (selection) => {
22
- onCaseDetailsChange({ caseLanguage: selection.value });
23
- };
24
- const languagesList = map(caseLanguages.data, (cl) => ({
25
- label: Constants.languagesMap[cl] || cl,
26
- value: cl,
27
- }));
28
- const selectedLanguage = {
29
- label: Constants.languagesMap[caseLanguage] || caseLanguage,
30
- value: caseLanguage,
32
+ const onLanguageChange = (event, selection) => {
33
+ setIsOpen(false);
34
+ onCaseDetailsChange({ caseLanguage: selection });
31
35
  };
36
+ useEffect(() => {
37
+ if (!props.isManageStep || !isEmpty(caseLanguage) || isLoadingLang || !canUseLanguageDetection)
38
+ return;
39
+ setDetectedLanguage(caseDispatch, summary, getDescriptionWOQues(issue, environment, periodicityOfIssue, timeFramesAndUrgency));
40
+ }, [
41
+ caseDispatch,
42
+ environment,
43
+ issue,
44
+ caseLanguage,
45
+ periodicityOfIssue,
46
+ summary,
47
+ timeFramesAndUrgency,
48
+ isLoadingLang,
49
+ canUseLanguageDetection,
50
+ props.isManageStep,
51
+ ]);
32
52
  return (React.createElement("div", { className: "form-group" },
33
53
  React.createElement("label", { htmlFor: "open-case-language" },
34
54
  React.createElement(Trans, null, "Preferred language")),
35
- React.createElement(Dropdown, { id: "open-case-language", name: "open-case-language", placeholder: "Select a language", title: t(`Select a language`), list: languagesList, selectedItem: selectedLanguage, disabled: caseLanguages.isError, isLoadingList: caseLanguages.isFetching || isLoadingLang, onChange: onLanguageChange, isInValid: caseLanguages.isError, "data-tracking-id": "open-case-language-selector" }),
55
+ React.createElement(Select, { variant: SelectVariant.single, "aria-label": t(`Select a language`), onToggle: onToggle, onSelect: onLanguageChange, selections: caseLanguage, isOpen: isOpen, "aria-labelledby": 'open-case-language', isDisabled: caseLanguages.isError, validated: caseLanguages.isError ? ValidatedOptions.error : ValidatedOptions.default }, caseLanguages.data.map((sla, index) => (React.createElement(SelectOption, { value: sla, key: index })))),
36
56
  React.createElement("p", { className: "form-instructions" },
37
57
  React.createElement(Trans, null, "Select a language for communicating with our support engineers"))));
38
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CaseManagement.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/CaseManagement.tsx"],"names":[],"mappings":"AAmBA,MAAM,WAAW,MAAM;CAAG;AAC1B,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,KAAK,EAAE,MAAM,eAyEnD"}
1
+ {"version":3,"file":"CaseManagement.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/CaseManagement.tsx"],"names":[],"mappings":"AAaA,MAAM,WAAW,MAAM;CAAG;AAC1B,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,KAAK,EAAE,MAAM,eAwBnD"}
@@ -1,11 +1,5 @@
1
- import { AbilityContext, CaseDetailsFields, resourceActions, resources } from '@rh-support/user-permissions';
2
- import isEmpty from 'lodash/isEmpty';
3
- import isEqual from 'lodash/isEqual';
4
- import React, { useContext, useEffect } from 'react';
1
+ import React, { useContext } from 'react';
5
2
  import { AppMetadataStateContext } from '../../context/AppMetadataContext';
6
- import { useCaseDispatch, useCaseSelector } from '../../context/CaseContext';
7
- import { getDescriptionWOQues } from '../../reducers/CaseHelpers';
8
- import { setCaseDetails, setDetectedLanguage } from '../../reducers/CaseReducer';
9
3
  import CaseGroup from '../CaseInformation/CaseGroup';
10
4
  import Fts from '../CaseInformation/Fts';
11
5
  import Severity from '../CaseInformation/Severity';
@@ -16,51 +10,19 @@ import OpenAlternateID from './OpenAlternateID';
16
10
  import { RHAssociatesSelector } from './RHAssociatesSelector';
17
11
  import CaseContactSelector from './SendNotifications/CaseContactSelector';
18
12
  export default function CaseManagement(props) {
19
- const { summary, issue, environment, periodicityOfIssue, timeFramesAndUrgency, caseLanguage, isLoadingLang } = useCaseSelector((state) => ({
20
- summary: state.caseDetails.summary,
21
- issue: state.caseDetails.issue,
22
- environment: state.caseDetails.environment,
23
- periodicityOfIssue: state.caseDetails.periodicityOfIssue,
24
- timeFramesAndUrgency: state.caseDetails.timeFramesAndUrgency,
25
- caseLanguage: state.caseDetails.caseLanguage,
26
- isLoadingLang: state.isLoadingLang,
27
- }), isEqual);
28
- const caseDispatch = useCaseDispatch();
29
13
  const { appMetadataState: { nextButtonRef }, } = useContext(AppMetadataStateContext);
30
- const ability = useContext(AbilityContext);
31
- const canSeeEmailNotifications = ability.can(resourceActions.PATCH, resources.CASE_DETAILS, CaseDetailsFields.CASE_DETAILS_SEND_NOTIFICATIONS);
32
- const canUseLanguageDetection = ability.can(resourceActions.PATCH, resources.CASE_CREATE, CaseDetailsFields.CASE_LANGUAGE_DETECTION);
33
- /** One time on section load */
34
- useEffect(() => {
35
- if (!isEmpty(caseLanguage) || isLoadingLang || !canUseLanguageDetection)
36
- return;
37
- setDetectedLanguage(caseDispatch, summary, getDescriptionWOQues(issue, environment, periodicityOfIssue, timeFramesAndUrgency));
38
- }, [
39
- caseDispatch,
40
- environment,
41
- issue,
42
- caseLanguage,
43
- periodicityOfIssue,
44
- summary,
45
- timeFramesAndUrgency,
46
- isLoadingLang,
47
- canUseLanguageDetection,
48
- ]);
49
14
  const handleFormSubmit = (e) => {
50
15
  e.preventDefault();
51
16
  // simulating click
52
17
  nextButtonRef.current.click();
53
18
  };
54
- const onSeverityChange = (payload) => {
55
- setCaseDetails(caseDispatch, payload);
56
- };
57
19
  return (React.createElement("form", { onSubmit: handleFormSubmit },
58
20
  React.createElement(SupportLevel, null),
59
- React.createElement(Severity, { showSeverityInfoIcon: true, onSeverityChange: onSeverityChange }),
21
+ React.createElement(Severity, { showSeverityInfoIcon: true }),
60
22
  React.createElement(Fts, { inlineEditable: false }),
23
+ React.createElement(CaseLanguageSelector, { isManageStep: true }),
61
24
  React.createElement(CaseGroup, { init: true }),
62
- React.createElement(CaseLanguageSelector, null),
63
- canSeeEmailNotifications && React.createElement(CaseContactSelector, null),
25
+ React.createElement(CaseContactSelector, null),
64
26
  React.createElement(RHAssociatesSelector, null),
65
27
  React.createElement(OpenAlternateID, { inlineEditable: false, hideSaveCancel: true }),
66
28
  React.createElement(Cep, null)));
@@ -1 +1 @@
1
- {"version":3,"file":"CaseContactSelector.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseManagement/SendNotifications/CaseContactSelector.tsx"],"names":[],"mappings":"AA4CA,MAAM,WAAW,MAAM;CAAG;AAG1B,iBAAS,mBAAmB,CAAC,KAAK,EAAE,MAAM,eA8bzC;AAED,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"CaseContactSelector.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseManagement/SendNotifications/CaseContactSelector.tsx"],"names":[],"mappings":"AA6CA,MAAM,WAAW,MAAM;CAAG;AAG1B,iBAAS,mBAAmB,CAAC,KAAK,EAAE,MAAM,eAuczC;AAED,eAAe,mBAAmB,CAAC"}