@rh-support/troubleshoot 2.6.84 → 2.6.86

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 (20) hide show
  1. package/lib/esm/components/CaseEditView/ActiveCustomerEscalation/RequestEscalationModal.d.ts.map +1 -1
  2. package/lib/esm/components/CaseEditView/ActiveCustomerEscalation/RequestEscalationModal.js +32 -7
  3. package/lib/esm/components/CaseEditView/RequestRemoteSession/NewEssTermsModal.d.ts.map +1 -1
  4. package/lib/esm/components/CaseEditView/RequestRemoteSession/NewEssTermsModal.js +9 -1
  5. package/lib/esm/components/CaseEditView/RequestRemoteSession/RemoteSessionAgreementModal.d.ts.map +1 -1
  6. package/lib/esm/components/CaseEditView/RequestRemoteSession/RemoteSessionAgreementModal.js +9 -1
  7. package/lib/esm/components/CaseEditView/Tabs/CaseHistory/Timeline.css +7 -0
  8. package/lib/esm/components/CaseEditView/Tabs/CaseHistory/Timeline.d.ts.map +1 -1
  9. package/lib/esm/components/CaseEditView/Tabs/CaseHistory/Timeline.js +24 -8
  10. package/lib/esm/components/CaseEditView/Tabs/CaseSummary/CaseSummary.d.ts.map +1 -1
  11. package/lib/esm/components/CaseEditView/Tabs/CaseSummary/CaseSummary.js +15 -6
  12. package/lib/esm/components/CaseInformation/Fts.js +1 -1
  13. package/lib/esm/components/CaseManagement/SendNotifications/CaseContactSelector.js +1 -1
  14. package/lib/esm/components/CaseManagement/SendNotifications/NonOrgCaseNotifyeesSelector.js +3 -3
  15. package/lib/esm/components/Review/Review.d.ts.map +1 -1
  16. package/lib/esm/components/Review/Review.js +6 -4
  17. package/lib/esm/components/wizardLayout/WizardNavigation.d.ts.map +1 -1
  18. package/lib/esm/components/wizardLayout/WizardNavigation.js +1 -2
  19. package/lib/esm/css/app.css +8 -0
  20. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"RequestEscalationModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/ActiveCustomerEscalation/RequestEscalationModal.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAqBnD,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAID,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,qBA4zBnD"}
1
+ {"version":3,"file":"RequestEscalationModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/ActiveCustomerEscalation/RequestEscalationModal.tsx"],"names":[],"mappings":"AAuCA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAqBnD,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAID,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,qBAk3BnD"}
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import { escalations, publicApi } from '@cee-eng/hydrajs';
11
- import { Button, Form, FormGroup, FormHelperText, Grid, GridItem, HelperText, HelperTextItem, Modal, ModalBody, ModalHeader, ModalVariant, Radio, TextArea, TextInput, TimePicker, Title, ValidatedOptions, Wizard, WizardStep, } from '@patternfly/react-core';
11
+ import { Button, Form, FormGroup, FormHelperText, Grid, GridItem, HelperText, HelperTextItem, Modal, ModalBody, ModalHeader, ModalVariant, Radio, TextArea, TextInput, TimePicker, Title, ValidatedOptions, Wizard, WizardNav, WizardNavItem, WizardStep, } from '@patternfly/react-core';
12
12
  import { AlertMessage, AlertType, PhoneInput, SingleSelectDropdown, ToastNotification, useFetch, } from '@rh-support/components';
13
13
  import { useGlobalStateContext } from '@rh-support/react-context';
14
14
  import isEmpty from 'lodash/isEmpty';
@@ -47,6 +47,7 @@ export function RequestEscalationModal(props) {
47
47
  const [formState, setFormState] = useState(initialState);
48
48
  const [hasLargeSubject, setHasLargeSubject] = useState(false);
49
49
  const [submitButtonIsClicked, setSubmitSaveButtonIsClicked] = useState(false);
50
+ const [isPhoneInvalid, setIsPhoneInvalid] = useState(false);
50
51
  // Function to check if "to" time is after "from" time
51
52
  const isValidTimeRange = (fromTime, toTime) => {
52
53
  if (!fromTime || !toTime)
@@ -80,7 +81,9 @@ export function RequestEscalationModal(props) {
80
81
  if ((formState.contactPreference === 'call-me' || formState.contactPreference === 'call-if-necessary') &&
81
82
  formState.preferredTimeFrom &&
82
83
  formState.preferredTimeTo) {
83
- return hasAllFields && isValidTimeRange(formState.preferredTimeFrom, formState.preferredTimeTo);
84
+ return (hasAllFields &&
85
+ isValidTimeRange(formState.preferredTimeFrom, formState.preferredTimeTo) &&
86
+ !isPhoneInvalid);
84
87
  }
85
88
  return hasAllFields;
86
89
  };
@@ -126,6 +129,7 @@ export function RequestEscalationModal(props) {
126
129
  setSubmitSaveButtonIsClicked(false);
127
130
  setFormState(initialState);
128
131
  setHasLargeSubject(false);
132
+ setIsPhoneInvalid(false);
129
133
  props.onClose();
130
134
  };
131
135
  const onSubmit = () => __awaiter(this, void 0, void 0, function* () {
@@ -210,6 +214,7 @@ export function RequestEscalationModal(props) {
210
214
  setFormState(initialState);
211
215
  setSubmitSaveButtonIsClicked(false);
212
216
  setHasLargeSubject(false);
217
+ setIsPhoneInvalid(false);
213
218
  setCreationError(false);
214
219
  props.onClose();
215
220
  }
@@ -280,6 +285,7 @@ export function RequestEscalationModal(props) {
280
285
  if (formState.contactPreference === 'call-me' || formState.contactPreference === 'call-if-necessary') {
281
286
  return (baseValidation &&
282
287
  !isEmpty(formState.phoneNumber) &&
288
+ !isPhoneInvalid &&
283
289
  !isEmpty(formState.preferredTimeFrom) &&
284
290
  !isEmpty(formState.preferredTimeTo));
285
291
  }
@@ -344,6 +350,21 @@ export function RequestEscalationModal(props) {
344
350
  React.createElement(TextArea, { onChange: (e, value) => setFormStateValue('businessImpactDescription', value), isRequired: true, validated: submitButtonIsClicked && isEmpty(formState.businessImpactDescription)
345
351
  ? ValidatedOptions.error
346
352
  : ValidatedOptions.default, placeholder: t('Does your business impact change with this escalation? Please describe how it changed.'), id: "business-impact-input", value: formState.businessImpactDescription, "aria-label": t('Business impact'), resizeOrientation: "vertical" }))))))));
353
+ // Check if first step is completed
354
+ const isFirstStepComplete = () => {
355
+ return (!isEmpty(formState.rmeCategory) &&
356
+ !isEmpty(formState.geo) &&
357
+ !isEmpty(formState.subject) &&
358
+ !hasLargeSubject &&
359
+ !isEmpty(formState.description) &&
360
+ !isEmpty(formState.expectations) &&
361
+ !isEmpty(formState.businessImpactDescription));
362
+ };
363
+ const customNav = (isExpanded, steps, activeStep, goToStepByIndex) => (React.createElement(WizardNav, { isExpanded: isExpanded }, steps.map((step, index) => {
364
+ // Disable the second step if first step is not complete
365
+ const isDisabled = step.id === 'contact-details' && !isFirstStepComplete();
366
+ return (React.createElement(WizardNavItem, { key: step.id, id: step.id, content: step.name, isCurrent: activeStep.id === step.id, isDisabled: isDisabled, stepIndex: step.index, onClick: () => !isDisabled && goToStepByIndex(step.index) }));
367
+ })));
347
368
  const contactDetailsStep = (React.createElement(WizardStep, { id: "contact-details", name: t('Contact details') },
348
369
  React.createElement("div", { className: "wizard-step-content" },
349
370
  React.createElement(Title, { headingLevel: "h2", size: "2xl", className: "pf-v6-u-mb-lg" }, t('Contact details')),
@@ -386,15 +407,19 @@ export function RequestEscalationModal(props) {
386
407
  React.createElement(FormGroup, { label: React.createElement(React.Fragment, null,
387
408
  t("Case owner's phone number"),
388
409
  " "), isRequired: true, fieldId: "phone-number" },
389
- React.createElement(PhoneInput, { phoneValue: formState.phoneNumber || '', countryCode: ((_a = formState.countryCode) === null || _a === void 0 ? void 0 : _a.replace('+', '')) || '', onPhoneValueChange: (phone) => setFormState(Object.assign(Object.assign({}, formState), { phoneNumber: phone })), onCountryCodeChange: (code) => setFormState(Object.assign(Object.assign({}, formState), { countryCode: code })), validations: submitButtonIsClicked && isEmpty(formState.phoneNumber)
410
+ React.createElement(PhoneInput, { phoneValue: formState.phoneNumber || '', countryCode: ((_a = formState.countryCode) === null || _a === void 0 ? void 0 : _a.replace('+', '')) || '', onPhoneValueChange: (phone) => setFormState(Object.assign(Object.assign({}, formState), { phoneNumber: phone })), onCountryCodeChange: (code) => setFormState(Object.assign(Object.assign({}, formState), { countryCode: code })), validations: (submitButtonIsClicked && isEmpty(formState.phoneNumber)) ||
411
+ isPhoneInvalid
390
412
  ? 'error'
391
- : 'default', isDisabled: false }),
413
+ : 'default', isDisabled: false, invalid: isPhoneInvalid, setInvalid: setIsPhoneInvalid }),
392
414
  React.createElement(FormHelperText, null,
393
415
  React.createElement(HelperText, null,
394
416
  React.createElement(HelperTextItem, { variant: "default" }, t('Note: A current phone/mobile number with the country code helps us support you better. Phone number will be stored in case comments for escalation only – not used for marketing.')))),
395
- submitButtonIsClicked && isEmpty(formState.phoneNumber) && (React.createElement(FormHelperText, null,
417
+ submitButtonIsClicked && isEmpty(formState.phoneNumber) && !isPhoneInvalid && (React.createElement(FormHelperText, null,
418
+ React.createElement(HelperText, null,
419
+ React.createElement(HelperTextItem, { variant: ValidatedOptions.error }, t('Phone number is required'))))),
420
+ isPhoneInvalid && (React.createElement(FormHelperText, null,
396
421
  React.createElement(HelperText, null,
397
- React.createElement(HelperTextItem, { variant: ValidatedOptions.error }, t('Phone number is required'))))))),
422
+ React.createElement(HelperTextItem, { variant: ValidatedOptions.error }, t('Phone number can only have digits.'))))))),
398
423
  React.createElement(GridItem, { span: 12 },
399
424
  React.createElement(FormGroup, { label: React.createElement(React.Fragment, null,
400
425
  t('Timezone'),
@@ -444,7 +469,7 @@ export function RequestEscalationModal(props) {
444
469
  React.createElement(Trans, null, "Learn more about escalation cases."))),
445
470
  React.createElement(ModalBody, null,
446
471
  creationError && (React.createElement(AlertMessage, { variant: AlertType.DANGER, title: t('Could not create case escalation'), show: creationError, onClose: onErrorClose, isInline: true, className: "pf-v6-u-mb-md", "aria-label": t('Could not create case escalation') })),
447
- React.createElement(Wizard, { navAriaLabel: t('Escalation request steps'), footer: CustomFooter },
472
+ React.createElement(Wizard, { navAriaLabel: t('Escalation request steps'), footer: CustomFooter, nav: customNav },
448
473
  escalationDetailsStep,
449
474
  contactDetailsStep))));
450
475
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NewEssTermsModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/RequestRemoteSession/NewEssTermsModal.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,KAA8B,MAAM,OAAO,CAAC;AAYnD,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,kBAAkB,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAClD,QAAQ,EAAE,OAAO,CAAC;CACrB;AAiBD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,qBAmY7C"}
1
+ {"version":3,"file":"NewEssTermsModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/RequestRemoteSession/NewEssTermsModal.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,KAA8B,MAAM,OAAO,CAAC;AAYnD,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,kBAAkB,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAClD,QAAQ,EAAE,OAAO,CAAC;CACrB;AA4BD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,qBAmY7C"}
@@ -35,6 +35,14 @@ const getLocaleNameFromLocalCode = (localeCode) => {
35
35
  }
36
36
  return localeCode;
37
37
  };
38
+ const formatSessionLinks = (sessionLink) => {
39
+ const links = sessionLink
40
+ .split(/[;,| \n\r\t]+/)
41
+ .map((link) => link.trim())
42
+ .filter(Boolean);
43
+ const formattedLinks = links.map((link) => `[${link}](${link})`).join('\n');
44
+ return formattedLinks;
45
+ };
38
46
  export function NewEssTermsModal(props) {
39
47
  const { t } = useTranslation();
40
48
  const { remoteSessionTermsAcked } = useCaseSelector((state) => ({
@@ -119,7 +127,7 @@ export function NewEssTermsModal(props) {
119
127
  };
120
128
  // Function to ack remote session terms and post comment
121
129
  const submitRemoteSessionAgreement = (pdfId) => __awaiter(this, void 0, void 0, function* () {
122
- const requestComment = t(`\n**Thank you for submitting the request for a remote session. A support manager will review the request, and updates will be provided in the support case. Please continue to provide any data requested by the support engineers in the case prior to the remote session (if applicable).**\n\nSubmitted a remote session request with following details:\n\n**Preferred Time and Expectations of remote session**\n${sessionExpectations}\n\n**Describe the impact to you or the business**\n${impact}\n\n${sessionLink ? `**Remote session link**\n${sessionLink}\n\n` : ''}This action does not initiate a remote session. A Red Hat Associate will get back to you soon.`);
130
+ const requestComment = t(`\n**Thank you for submitting the request for a remote session. A support manager will review the request, and updates will be provided in the support case. Please continue to provide any data requested by the support engineers in the case prior to the remote session (if applicable).**\n\nSubmitted a remote session request with following details:\n\n**Preferred Time and Expectations of remote session**\n${sessionExpectations}\n\n**Describe the impact to you or the business**\n${impact}\n\n${sessionLink ? `**Remote session link**\n${formatSessionLinks(sessionLink)}\n\n` : ''}This action does not initiate a remote session. A Red Hat Associate will get back to you soon.`);
123
131
  try {
124
132
  yield updateCaseDetails(caseDispatch, props.caseNumber, {
125
133
  remoteSessionTermsAcked: true,
@@ -1 +1 @@
1
- {"version":3,"file":"RemoteSessionAgreementModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/RequestRemoteSession/RemoteSessionAgreementModal.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,KAA8B,MAAM,OAAO,CAAC;AAgBnD,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,kBAAkB,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAClD,QAAQ,EAAE,OAAO,CAAC;CACrB;AAiBD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,qBA0XxD"}
1
+ {"version":3,"file":"RemoteSessionAgreementModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseEditView/RequestRemoteSession/RemoteSessionAgreementModal.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,KAA8B,MAAM,OAAO,CAAC;AAgBnD,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,kBAAkB,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAClD,QAAQ,EAAE,OAAO,CAAC;CACrB;AA4BD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,qBA0XxD"}
@@ -35,6 +35,14 @@ const getLocaleNameFromLocalCode = (localeCode) => {
35
35
  }
36
36
  return localeCode;
37
37
  };
38
+ const formatSessionLinks = (sessionLink) => {
39
+ const links = sessionLink
40
+ .split(/[;,| \n\r\t]+/)
41
+ .map((link) => link.trim())
42
+ .filter(Boolean);
43
+ const formattedLinks = links.map((link) => `[${link}](${link})`).join('\n');
44
+ return formattedLinks;
45
+ };
38
46
  export function RemoteSessionAgreementModal(props) {
39
47
  const { t } = useTranslation();
40
48
  const { remoteSessionTermsAcked } = useCaseSelector((state) => ({
@@ -109,7 +117,7 @@ export function RemoteSessionAgreementModal(props) {
109
117
  const toggleRemoteSessionForm = () => setIsRemoteSessionForm(true);
110
118
  // Function to ack remote session terms and post comment
111
119
  const submitRemoteSessionAgreement = (pdfId) => __awaiter(this, void 0, void 0, function* () {
112
- const requestComment = t(`\n**Thank you for submitting the request for a remote session. A support manager will review the request, and updates will be provided in the support case. Please continue to provide any data requested by the support engineers in the case prior to the remote session (if applicable).**\n\nSubmitted a remote session request with following details:\n\n**Preferred Time and Expectations of remote session**\n${sessionExpectations}\n\n**Describe the impact to you or the business**\n${impact}\n\n${sessionLink ? `**Remote session link**\n${sessionLink}\n\n` : ''}This action does not initiate a remote session. A Red Hat Associate will get back to you soon.`);
120
+ const requestComment = t(`\n**Thank you for submitting the request for a remote session. A support manager will review the request, and updates will be provided in the support case. Please continue to provide any data requested by the support engineers in the case prior to the remote session (if applicable).**\n\nSubmitted a remote session request with following details:\n\n**Preferred Time and Expectations of remote session**\n${sessionExpectations}\n\n**Describe the impact to you or the business**\n${impact}\n\n${sessionLink ? `**Remote session link**\n${formatSessionLinks(sessionLink)}\n\n` : ''}This action does not initiate a remote session. A Red Hat Associate will get back to you soon.`);
113
121
  try {
114
122
  yield updateCaseDetails(caseDispatch, props.caseNumber, {
115
123
  remoteSessionTermsAcked: true,
@@ -319,6 +319,13 @@ ul#case-history-paginated-timeline {
319
319
  }
320
320
  }
321
321
 
322
+ .timeline-highlight {
323
+ background-color: #fff3cd;
324
+ padding: 0;
325
+ margin: 0;
326
+ border-radius: 2px;
327
+ }
328
+
322
329
  @media screen and (max-width: 768px) {
323
330
  .timeline::after {
324
331
  left: 20px;
@@ -1 +1 @@
1
- {"version":3,"file":"Timeline.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseHistory/Timeline.tsx"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC;AAwBxB,OAAO,KAAsC,MAAM,OAAO,CAAC;AA4T3D,QAAA,MAAM,QAAQ;;uBAuUb,CAAC;AAEF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"Timeline.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseHistory/Timeline.tsx"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC;AAwBxB,OAAO,KAAsC,MAAM,OAAO,CAAC;AA8W3D,QAAA,MAAM,QAAQ;;uBAyUb,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -18,13 +18,27 @@ import debounce from 'lodash/debounce';
18
18
  import isEmpty from 'lodash/isEmpty';
19
19
  import React, { useEffect, useRef, useState } from 'react';
20
20
  import { Trans, useTranslation } from 'react-i18next';
21
- const TimelineEvent = ({ date, text, side, user, useAvatar }) => {
21
+ const CustomHighlighter = ({ search, children, highlightDate, }) => {
22
+ const createHighlight = (text) => React.createElement("mark", { className: "timeline-highlight" }, text);
23
+ if (highlightDate) {
24
+ return createHighlight(children);
25
+ }
26
+ if (search) {
27
+ const escapedSearch = search.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
28
+ const regex = new RegExp(`(${escapedSearch})`, 'gi');
29
+ const parts = children.split(regex);
30
+ return React.createElement(React.Fragment, null, parts.map((part, index) => (regex.test(part) ? createHighlight(part) : part)));
31
+ }
32
+ return React.createElement(React.Fragment, null, children);
33
+ };
34
+ const TimelineEvent = ({ date, text, side, user, useAvatar, searchValue, highlightDate, }) => {
22
35
  if (side === 'left') {
23
36
  if (useAvatar) {
24
37
  // we render the main date if the user changes or if the date changes
25
38
  return (React.createElement("div", { className: `${side}-node ${user}`, role: "complementary", "aria-label": `${user}'s timeline Event Time` },
26
39
  React.createElement("div", { className: `contentTimeline content-${side}-history content-${side}-${user}` },
27
- React.createElement("h2", { className: `content-date-${side}-history` }, date),
40
+ React.createElement("h2", { className: `content-date-${side}-history` },
41
+ React.createElement(CustomHighlighter, { highlightDate: highlightDate }, date)),
28
42
  React.createElement("p", { className: `content-time-${side}-history` }, text))));
29
43
  }
30
44
  return (React.createElement("div", { className: `${side}-node ${user}`, role: "complementary", "aria-label": `${user}'s timeline Event Time` },
@@ -33,14 +47,16 @@ const TimelineEvent = ({ date, text, side, user, useAvatar }) => {
33
47
  }
34
48
  return (React.createElement("div", { className: `${side}-node ${user}`, role: "complementary", "aria-label": `${user}'s timeline event content` },
35
49
  React.createElement("div", { className: `contentTimeline content-${side}-history content-${side}-${user}` },
36
- React.createElement("h2", { className: `content-date-${side}-history` }, date),
37
- text && React.createElement("p", { className: `content-time-${side}-history` }, text))));
50
+ React.createElement("h2", { className: `content-date-${side}-history` },
51
+ React.createElement(CustomHighlighter, { search: searchValue || '' }, date)),
52
+ text && (React.createElement("p", { className: `content-time-${side}-history` },
53
+ React.createElement(CustomHighlighter, { search: searchValue || '' }, text))))));
38
54
  };
39
- const TimelineNode = React.forwardRef(({ leftEvent, rightEvent, user, useAvatar }, ref) => {
55
+ const TimelineNode = React.forwardRef(({ leftEvent, rightEvent, user, useAvatar, searchValue, highlightDate }, ref) => {
40
56
  return (React.createElement("div", { className: "timeline-node", role: "region", "aria-label": "Timeline node" },
41
- leftEvent && React.createElement(TimelineEvent, Object.assign({}, leftEvent, { side: "left", useAvatar: useAvatar })),
57
+ leftEvent && (React.createElement(TimelineEvent, Object.assign({}, leftEvent, { side: "left", useAvatar: useAvatar, searchValue: searchValue, highlightDate: highlightDate }))),
42
58
  React.createElement("div", { ref: ref, "aria-label": `${useAvatar ? 'User profile picture' : 'Timeline marker'}`, tabIndex: -1 }, useAvatar ? (React.createElement(Avatar, { src: 'https://www.patternfly.org/images/668560cd.svg', className: `timeline-avatar timeline-avatar-${user}`, alt: `${user}'s avatar` })) : (React.createElement("div", { className: `timeline-marker timeline-${user}` }))),
43
- rightEvent && React.createElement(TimelineEvent, Object.assign({}, rightEvent, { side: "right" }))));
59
+ rightEvent && React.createElement(TimelineEvent, Object.assign({}, rightEvent, { side: "right", searchValue: searchValue }))));
44
60
  });
45
61
  /**
46
62
  *
@@ -436,7 +452,7 @@ const Timeline = ({ caseNumber }) => {
436
452
  React.createElement(Trans, null, "Try modifying your search query or changing the date range and try again."))));
437
453
  }
438
454
  const paginatedEvents = filteredEvents.slice((page - 1) * perPage, page * perPage);
439
- return (React.createElement(React.Fragment, null, paginatedEvents.map((node, index) => (React.createElement(TimelineNode, { key: index, leftEvent: node.left, rightEvent: node.right, user: node.right.user, useAvatar: node.right.useAvatar, ref: index === paginatedEvents.length - 1 ? lastNodeRef : null })))));
455
+ return (React.createElement(React.Fragment, null, paginatedEvents.map((node, index) => (React.createElement(TimelineNode, { key: index, leftEvent: node.left, rightEvent: node.right, user: node.right.user, useAvatar: node.right.useAvatar, searchValue: searchValue, highlightDate: !!dateValue, ref: index === paginatedEvents.length - 1 ? lastNodeRef : null })))));
440
456
  };
441
457
  return (React.createElement(React.Fragment, null,
442
458
  React.createElement("div", { className: "timelineMenu" },
@@ -1 +1 @@
1
- {"version":3,"file":"CaseSummary.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseSummary/CaseSummary.tsx"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAC;AAsB3B,OAAO,KAA8B,MAAM,OAAO,CAAC;AAOnD,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,UAAW,MAAM,sBA4KxC,CAAC"}
1
+ {"version":3,"file":"CaseSummary.d.ts","sourceRoot":"","sources":["../../../../../../src/components/CaseEditView/Tabs/CaseSummary/CaseSummary.tsx"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAC;AAuB3B,OAAO,KAA0C,MAAM,OAAO,CAAC;AAO/D,UAAU,MAAM;IACZ,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,UAAW,MAAM,sBAwLxC,CAAC"}
@@ -13,17 +13,18 @@ import { parseCommentMarkdown } from '@cee-eng/ui-toolkit';
13
13
  import { Alert, AlertActionLink, AlertVariant, Content, EmptyState, EmptyStateBody, EmptyStateVariant, Spinner, } from '@patternfly/react-core';
14
14
  import CubesIcon from '@patternfly/react-icons/dist/js/icons/cubes-icon';
15
15
  import { SupportFeedbackModal } from '@rh-support/components';
16
+ import { GlobalMetadataStateContext } from '@rh-support/react-context';
16
17
  import { getApiResourceObject } from '@rh-support/utils';
17
18
  import { formatDate } from '@rh-support/utils/lib/esm/dateUtils';
18
19
  import DOMPurify from 'dompurify';
19
20
  import isEqual from 'lodash/isEqual';
20
- import React, { useEffect, useState } from 'react';
21
+ import React, { useContext, useEffect, useState } from 'react';
21
22
  import { Trans } from 'react-i18next';
22
23
  import { CaseSummaryStates } from '../../../../constants/caseDetailsConstants';
23
24
  import { useCaseSelector } from '../../../../context/CaseContext';
24
25
  import { CaseSummaryErrorMessage } from './CaseSummaryErrorMessage';
25
26
  export const CaseSummary = (props) => {
26
- var _a, _b, _c, _d;
27
+ var _a, _b, _c, _d, _e, _f;
27
28
  const [isFeedbackModalOpen, setIsFeedbackModalOpen] = useState(false);
28
29
  const [caseSummaryData, setCaseSummaryData] = useState(getApiResourceObject(null, true));
29
30
  const [caseSummaryState, setCaseSummaryState] = useState();
@@ -32,6 +33,8 @@ export const CaseSummary = (props) => {
32
33
  caseLanguage: state.caseDetails.caseLanguage,
33
34
  caseComments: state.caseDetails.comments,
34
35
  }), isEqual);
36
+ const { globalMetadataState: { loggedInUserRights }, } = useContext(GlobalMetadataStateContext);
37
+ const isInternal = (_b = (_a = loggedInUserRights === null || loggedInUserRights === void 0 ? void 0 : loggedInUserRights.data) === null || _a === void 0 ? void 0 : _a.isInternal) === null || _b === void 0 ? void 0 : _b.call(_a);
35
38
  const onCloseFeedbackModal = () => {
36
39
  setIsFeedbackModalOpen(false);
37
40
  };
@@ -49,6 +52,12 @@ export const CaseSummary = (props) => {
49
52
  setErrorMessage('Due to its recent creation and lack of comments, a case summary cannot be generated for this case.');
50
53
  return;
51
54
  }
55
+ const publicComments = (caseComments === null || caseComments === void 0 ? void 0 : caseComments.filter((comment) => comment.isPublic)) || [];
56
+ if (!publicComments.length && isInternal) {
57
+ setCaseSummaryState(CaseSummaryStates.NEW_CASE);
58
+ setErrorMessage('Due to its recent creation and lack of comments, a case summary cannot be generated for this case.');
59
+ return;
60
+ }
52
61
  else {
53
62
  const fetchCaseSummary = () => __awaiter(void 0, void 0, void 0, function* () {
54
63
  try {
@@ -91,10 +100,10 @@ export const CaseSummary = (props) => {
91
100
  React.createElement("p", { className: "push-top-narrow" },
92
101
  React.createElement(Trans, null, errorMessage))))) : caseSummaryState === CaseSummaryStates.FAILED ||
93
102
  caseSummaryState === CaseSummaryStates.CASE_LANGUAGE_NOT_SUPPORTED ||
94
- caseSummaryState === CaseSummaryStates.INPUT_COMMENTS_TOO_LARGE ? (React.createElement(CaseSummaryErrorMessage, { caseSummaryState: caseSummaryState, caseNumber: props.caseNumber, caseSummaryId: (_a = caseSummaryData.data) === null || _a === void 0 ? void 0 : _a.id, errorMessage: errorMessage, setErrorMessage: setErrorMessage })) : caseSummaryState === CaseSummaryStates.SUCCESS ? (React.createElement(React.Fragment, null,
103
+ caseSummaryState === CaseSummaryStates.INPUT_COMMENTS_TOO_LARGE ? (React.createElement(CaseSummaryErrorMessage, { caseSummaryState: caseSummaryState, caseNumber: props.caseNumber, caseSummaryId: (_c = caseSummaryData.data) === null || _c === void 0 ? void 0 : _c.id, errorMessage: errorMessage, setErrorMessage: setErrorMessage })) : caseSummaryState === CaseSummaryStates.SUCCESS ? (React.createElement(React.Fragment, null,
95
104
  React.createElement("div", { className: "ai-case-summary-container" },
96
105
  React.createElement("h2", { className: "ai-summary-title" }, "AI Case summary"),
97
- React.createElement("p", { className: "ai-summary-date" }, formatDate((_b = caseSummaryData.data) === null || _b === void 0 ? void 0 : _b.created_date, 'en-US', {
106
+ React.createElement("p", { className: "ai-summary-date" }, formatDate((_d = caseSummaryData.data) === null || _d === void 0 ? void 0 : _d.created_date, 'en-US', {
98
107
  month: 'short',
99
108
  day: 'numeric',
100
109
  year: 'numeric',
@@ -103,9 +112,9 @@ export const CaseSummary = (props) => {
103
112
  second: '2-digit',
104
113
  hour12: true,
105
114
  })),
106
- React.createElement("div", { className: "case-summary-content" }, formatSummary((_c = caseSummaryData.data) === null || _c === void 0 ? void 0 : _c.generated_summary))))) : (React.createElement(EmptyState, { headingLevel: "h2", icon: Spinner, titleText: React.createElement(Trans, null, "Generating case summary using AI"), variant: EmptyStateVariant.lg },
115
+ React.createElement("div", { className: "case-summary-content" }, formatSummary((_e = caseSummaryData.data) === null || _e === void 0 ? void 0 : _e.generated_summary))))) : (React.createElement(EmptyState, { headingLevel: "h2", icon: Spinner, titleText: React.createElement(Trans, null, "Generating case summary using AI"), variant: EmptyStateVariant.lg },
107
116
  React.createElement(EmptyStateBody, null,
108
117
  React.createElement("p", { className: "push-top-narrow" },
109
118
  React.createElement(Trans, null, "Almost there! case summary will be ready in approximately 30 seconds."))))),
110
- React.createElement(SupportFeedbackModal, { isModalOpen: isFeedbackModalOpen, onClose: onCloseFeedbackModal, caseSummaryId: ((_d = caseSummaryData.data) === null || _d === void 0 ? void 0 : _d.id) || null, errorMessage: errorMessage, isCaseSummary: true })));
119
+ React.createElement(SupportFeedbackModal, { isModalOpen: isFeedbackModalOpen, onClose: onCloseFeedbackModal, caseSummaryId: ((_f = caseSummaryData.data) === null || _f === void 0 ? void 0 : _f.id) || null, errorMessage: errorMessage, isCaseSummary: true })));
111
120
  };
@@ -154,7 +154,7 @@ function Fts(props) {
154
154
  const maxLengthErrorMessage = t('Contact information cannot be more than {{limit}} characters.', {
155
155
  limit: CONTACT_INFO_24X7_LIMIT,
156
156
  });
157
- if (isEmpty(caseNumber) && !showFtsOnCreateCasePage(entitlementSla, severity))
157
+ if (isEmpty(caseNumber) && (!showFtsOnCreateCasePage(entitlementSla, severity) || isIdea))
158
158
  return React.createElement(React.Fragment, null);
159
159
  if (!isEmpty(caseNumber) && (isIdea || !showFtsOnCaseViewEditPage(entitlementSla, severity)))
160
160
  return React.createElement(React.Fragment, null);
@@ -203,7 +203,7 @@ function CaseContactSelector(props) {
203
203
  if (canEditCase.alert())
204
204
  return;
205
205
  const allSelectedContacts = [...selectedContacts];
206
- const selectedCustomEmails = remove(allSelectedContacts, (item) => item.customOption || item.email || item.emailAddress).map((item) => item.label || item.email || item.emailAddress || item.ssoUsername);
206
+ const selectedCustomEmails = remove(allSelectedContacts, (item) => item.customOption || item.emailAddress).map((item) => item.label || item.emailAddress || item.ssoUsername);
207
207
  yield processCustomEmails(selectedCustomEmails);
208
208
  yield processCaseContacts(allSelectedContacts);
209
209
  if (throwTrackEvent) {
@@ -82,13 +82,13 @@ export function NonOrgCaseNotifyeesSelector(props) {
82
82
  const { ssoName } = c, rest = __rest(c, ["ssoName"]);
83
83
  return Object.assign({ ssoUsername: ssoName }, rest);
84
84
  });
85
- (_b = props.onChange) === null || _b === void 0 ? void 0 : _b.call(props, [...props.selectedItems, ...mappedContacts]);
85
+ (_b = props.onChange) === null || _b === void 0 ? void 0 : _b.call(props, [...mappedContacts]);
86
86
  setInputVal('');
87
87
  setNotifyeesList([...mappedContacts, { emailAddress: notificationAddress.email }]);
88
88
  }
89
89
  else {
90
90
  if (notificationAddress === null || notificationAddress === void 0 ? void 0 : notificationAddress.email) {
91
- (_c = props.onChange) === null || _c === void 0 ? void 0 : _c.call(props, [...props.selectedItems, { emailAddress: notificationAddress.email, caseNumber: '' }]);
91
+ (_c = props.onChange) === null || _c === void 0 ? void 0 : _c.call(props, [{ emailAddress: notificationAddress.email, caseNumber: '' }]);
92
92
  setInputVal('');
93
93
  }
94
94
  else if (contacts === null || contacts === void 0 ? void 0 : contacts.length) {
@@ -98,7 +98,7 @@ export function NonOrgCaseNotifyeesSelector(props) {
98
98
  const { ssoName } = c, rest = __rest(c, ["ssoName"]);
99
99
  return Object.assign({ ssoUsername: ssoName }, rest);
100
100
  });
101
- (_d = props.onChange) === null || _d === void 0 ? void 0 : _d.call(props, [...props.selectedItems, ...mappedContacts]);
101
+ (_d = props.onChange) === null || _d === void 0 ? void 0 : _d.call(props, [...mappedContacts]);
102
102
  setInputVal('');
103
103
  }
104
104
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"Review.d.ts","sourceRoot":"","sources":["../../../../src/components/Review/Review.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAIvD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAqBlE,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;CACpD;AACD,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAK,EAAE,MAAM,qBAsE3C"}
1
+ {"version":3,"file":"Review.d.ts","sourceRoot":"","sources":["../../../../src/components/Review/Review.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAIvD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAqBlE,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;CACpD;AACD,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAK,EAAE,MAAM,qBA2E3C"}
@@ -1,5 +1,6 @@
1
1
  import { Grid, GridItem } from '@patternfly/react-core';
2
2
  import { AbilityContext, CaseDetailsFields, resourceActions, resources } from '@rh-support/user-permissions';
3
+ import { PreviousCaseTypes } from '@rh-support/utils';
3
4
  import isEmpty from 'lodash/isEmpty';
4
5
  import isEqual from 'lodash/isEqual';
5
6
  import React, { useContext } from 'react';
@@ -26,9 +27,10 @@ import { AllProductsSelector } from '../ProductSelector/AllProductsSelector';
26
27
  import { EARuleWidget } from '../Recommendations/EARules/EARuleWidget';
27
28
  export default function Review(props) {
28
29
  const caseDispatch = useCaseDispatch();
29
- const { contactInfo24x7, ABTestVariation } = useCaseSelector((state) => ({
30
+ const { contactInfo24x7, ABTestVariation, caseType } = useCaseSelector((state) => ({
30
31
  contactInfo24x7: state.caseDetails.contactInfo24x7,
31
32
  ABTestVariation: state.ABTestVariation,
33
+ caseType: state.caseDetails.caseType,
32
34
  }), isEqual);
33
35
  const ability = useContext(AbilityContext);
34
36
  const canSeeEmailNotifications = ability.can(resourceActions.PATCH, resources.CASE_DETAILS, CaseDetailsFields.CASE_DETAILS_SEND_NOTIFICATIONS);
@@ -43,9 +45,9 @@ export default function Review(props) {
43
45
  React.createElement(OwnerSelector, null),
44
46
  React.createElement(AllProductsSelector, { routeProps: props.routeProps, loadTCOnChange: true, showTCAfterButtonClicked: true, checkEntitledProduct: true, isOnReviewPage: true }),
45
47
  React.createElement(OpenShiftClusterId, null),
46
- React.createElement(Hostname, null),
47
- React.createElement(KtQuestions, { inlineEditable: true, hideSaveCancel: true }),
48
- React.createElement(CaseType, { hideIdea: true }),
48
+ caseType !== PreviousCaseTypes.FEATURE_ENHANCEMENT && React.createElement(Hostname, null),
49
+ React.createElement(KtQuestions, { inlineEditable: true, hideSaveCancel: true, onlyShowKT4: caseType === PreviousCaseTypes.FEATURE_ENHANCEMENT }),
50
+ React.createElement(CaseType, null),
49
51
  React.createElement(SupportLevel, null),
50
52
  React.createElement(Grid, { hasGutter: true },
51
53
  React.createElement(GridItem, { span: 12, xl2: 6, className: "pf-v6-u-mb-xl" },
@@ -1 +1 @@
1
- {"version":3,"file":"WizardNavigation.d.ts","sourceRoot":"","sources":["../../../../src/components/wizardLayout/WizardNavigation.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAEvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAQvD,OAAO,EAAoB,eAAe,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAM3G,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACjD,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACzD,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACzD,UAAU,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC3C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,mBAAmB,EAAE,CAAC,gCAAgC,EAAE,OAAO,KAAK,IAAI,CAAC;IACzE,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAC5E,kCAAkC,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACpF,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD,gCAAgC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACjF,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,oBAAoB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACrE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AAGD,iBAAS,gBAAgB,CAAC,KAAK,EAAE,MAAM,qBA4XtC;kBA5XQ,gBAAgB;;;AA8XzB,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"WizardNavigation.d.ts","sourceRoot":"","sources":["../../../../src/components/wizardLayout/WizardNavigation.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAEvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAQvD,OAAO,EAAoB,eAAe,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAM3G,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACjD,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACzD,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACzD,UAAU,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC3C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,mBAAmB,EAAE,CAAC,gCAAgC,EAAE,OAAO,KAAK,IAAI,CAAC;IACzE,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAC5E,kCAAkC,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACpF,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD,gCAAgC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACjF,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,oBAAoB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACrE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AAGD,iBAAS,gBAAgB,CAAC,KAAK,EAAE,MAAM,qBAyXtC;kBAzXQ,gBAAgB;;;AA2XzB,eAAe,gBAAgB,CAAC"}
@@ -88,8 +88,7 @@ function WizardNavigation(props) {
88
88
  // eslint-disable-next-line react-hooks/exhaustive-deps
89
89
  }, [activeSection]);
90
90
  useEffect(() => {
91
- if (props.activeStep.id !== (isCaseCreate ? AppRouteSections.SUMMARIZE : AppRouteSections.TROUBLESHOOT) ||
92
- recommendationState.numFound <= 2) {
91
+ if (props.activeStep.id !== (isCaseCreate ? AppRouteSections.SUMMARIZE : AppRouteSections.TROUBLESHOOT)) {
93
92
  return;
94
93
  }
95
94
  const observer = new IntersectionObserver(([entry]) => {
@@ -446,6 +446,14 @@ input[type='checkbox'] {
446
446
  line-height: 2px;
447
447
  }
448
448
 
449
+ .comment-plaintext.reset-pre-text {
450
+ font-family: 'Red Hat Display', 'RedHatDisplay', 'Helvetica Neue', 'Arial', 'sans-serif';
451
+ text-rendering: auto;
452
+ font-weight: 500;
453
+ font-size: 1.12rem;
454
+ line-height: 1.5em;
455
+ }
456
+
449
457
  #additional-information-section textarea {
450
458
  resize: none !important;
451
459
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rh-support/troubleshoot",
3
- "version": "2.6.84",
3
+ "version": "2.6.86",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org"
@@ -59,8 +59,8 @@
59
59
  "@progress/kendo-licensing": "1.3.5",
60
60
  "@progress/kendo-react-pdf": "^5.16.0",
61
61
  "@redux-devtools/extension": "^3.3.0",
62
- "@rh-support/components": "2.5.58",
63
- "@rh-support/react-context": "2.5.73",
62
+ "@rh-support/components": "2.5.59",
63
+ "@rh-support/react-context": "2.5.74",
64
64
  "@rh-support/types": "2.0.5",
65
65
  "@rh-support/user-permissions": "2.5.29",
66
66
  "@rh-support/utils": "2.5.26",
@@ -133,5 +133,5 @@
133
133
  "defaults and supports es6-module",
134
134
  "maintained node versions"
135
135
  ],
136
- "gitHead": "485757d89fa53d8c57a8f798fa5977f9f40ab68a"
136
+ "gitHead": "836dabccddb3dee8d78da2cb88f51f1120596bf6"
137
137
  }