@rh-support/troubleshoot 2.6.21 → 2.6.23
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.
- package/lib/esm/components/CaseEditView/ActiveCustomerEscalation/ActiveCustomerEscalation.d.ts +1 -0
- package/lib/esm/components/CaseEditView/ActiveCustomerEscalation/ActiveCustomerEscalation.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/ActiveCustomerEscalation/ActiveCustomerEscalation.js +31 -5
- package/lib/esm/components/CaseEditView/ActiveCustomerEscalation/RequestEscalationModal.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/ActiveCustomerEscalation/RequestEscalationModal.js +33 -34
- package/lib/esm/components/CaseEditView/CaseDetailsAside.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/CaseDetailsAside.js +2 -1
- package/lib/esm/components/CaseEditView/CaseDetailsTabs.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/CaseDetailsTabs.js +1 -0
- package/lib/esm/components/CaseEditView/ConfirmationModals/ReopenCaseModal.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/ConfirmationModals/ReopenCaseModal.js +16 -22
- package/lib/esm/components/CaseEditView/RequestRemoteSession/NewEssTermsModal.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/RequestRemoteSession/NewEssTermsModal.js +52 -95
- package/lib/esm/components/CaseEditView/RequestRemoteSession/RemoteSessionAgreementModal.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/RequestRemoteSession/RemoteSessionAgreementModal.js +15 -19
- package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseHostname.js +1 -1
- package/lib/esm/components/CaseEditView/Tabs/CaseHistory/Timeline.css +0 -8
- package/lib/esm/components/CaseInformation/Fts.d.ts.map +1 -1
- package/lib/esm/components/CaseInformation/Fts.js +6 -2
- package/lib/esm/components/CaseManagement/RHAssociatesSelector.d.ts.map +1 -1
- package/lib/esm/components/CaseManagement/RHAssociatesSelector.js +5 -8
- package/lib/esm/components/CaseManagement/SendNotifications/CaseContactSelector.d.ts.map +1 -1
- package/lib/esm/components/CaseManagement/SendNotifications/CaseContactSelector.js +7 -7
- package/lib/esm/components/CaseManagement/SendNotifications/NonOrgCaseNotifyeesSelector.d.ts.map +1 -1
- package/lib/esm/components/CaseManagement/SendNotifications/NonOrgCaseNotifyeesSelector.js +1 -1
- package/lib/esm/components/TroubleshootSection/AskRedHat.d.ts +7 -0
- package/lib/esm/components/TroubleshootSection/AskRedHat.d.ts.map +1 -0
- package/lib/esm/components/TroubleshootSection/AskRedHat.js +73 -0
- package/lib/esm/components/TroubleshootSection/TroubleshootSection.d.ts +5 -0
- package/lib/esm/components/TroubleshootSection/TroubleshootSection.d.ts.map +1 -1
- package/lib/esm/components/TroubleshootSection/TroubleshootSection.js +86 -13
- package/lib/esm/components/TroubleshootSection/icons/CollapseIcon.d.ts +9 -0
- package/lib/esm/components/TroubleshootSection/icons/CollapseIcon.d.ts.map +1 -0
- package/lib/esm/components/TroubleshootSection/icons/CollapseIcon.js +9 -0
- package/lib/esm/components/TroubleshootSection/icons/StarIcon.d.ts +9 -0
- package/lib/esm/components/TroubleshootSection/icons/StarIcon.d.ts.map +1 -0
- package/lib/esm/components/TroubleshootSection/icons/StarIcon.js +17 -0
- package/lib/esm/components/shared/input/ContactSelectorInternal.d.ts +0 -1
- package/lib/esm/components/shared/input/ContactSelectorInternal.d.ts.map +1 -1
- package/lib/esm/components/shared/input/ContactSelectorInternal.js +1 -6
- package/lib/esm/components/wizardLayout/WizardLayout.d.ts.map +1 -1
- package/lib/esm/components/wizardLayout/WizardLayout.js +5 -4
- package/lib/esm/components/wizardLayout/WizardMain.d.ts +3 -1
- package/lib/esm/components/wizardLayout/WizardMain.d.ts.map +1 -1
- package/lib/esm/components/wizardLayout/WizardMain.js +116 -9
- package/lib/esm/components/wizardLayout/WizardNavigation.d.ts +2 -0
- package/lib/esm/components/wizardLayout/WizardNavigation.d.ts.map +1 -1
- package/lib/esm/components/wizardLayout/WizardNavigation.js +4 -3
- package/lib/esm/components/wizardLayout/index.d.ts +1 -0
- package/lib/esm/components/wizardLayout/index.d.ts.map +1 -1
- package/lib/esm/components/wizardLayout/index.js +1 -0
- package/lib/esm/context/AIResponseContext.d.ts +10 -0
- package/lib/esm/context/AIResponseContext.d.ts.map +1 -0
- package/lib/esm/context/AIResponseContext.js +26 -0
- package/lib/esm/context/RootTroubleshootProvider.d.ts.map +1 -1
- package/lib/esm/context/RootTroubleshootProvider.js +8 -6
- package/lib/esm/css/AskRedHat.css +333 -0
- package/lib/esm/css/case.css +0 -12
- package/lib/esm/hooks/useWizard.d.ts +4 -0
- package/lib/esm/hooks/useWizard.d.ts.map +1 -1
- package/lib/esm/hooks/useWizard.js +1 -1
- package/lib/esm/reducers/AIResponseConstNTypes.d.ts +48 -0
- package/lib/esm/reducers/AIResponseConstNTypes.d.ts.map +1 -0
- package/lib/esm/reducers/AIResponseConstNTypes.js +16 -0
- package/lib/esm/reducers/AIResponseReducer.d.ts +9 -0
- package/lib/esm/reducers/AIResponseReducer.d.ts.map +1 -0
- package/lib/esm/reducers/AIResponseReducer.js +43 -0
- package/lib/esm/reducers/CaseConstNTypes.d.ts +2 -0
- package/lib/esm/reducers/CaseConstNTypes.d.ts.map +1 -1
- package/lib/esm/reducers/CaseConstNTypes.js +2 -0
- package/lib/esm/scss/_main.scss +0 -13
- package/lib/esm/scss/_pf-overrides.scss +0 -5
- package/package.json +7 -6
|
@@ -103,7 +103,7 @@ function CaseHostname(props) {
|
|
|
103
103
|
React.createElement("p", null, "You can share this information at any time to improve your support experience."),
|
|
104
104
|
React.createElement(Switch, { label: shareHostnameLabel, isChecked: isShareHostNamesChecked, onChange: onShareHostnameCheck }),
|
|
105
105
|
isHostnamesLoading && (React.createElement(Spinner, { size: "lg", className: "pf-v6-u-ml-sm hostnameSpinner", "aria-label": "Hostname loading" }))));
|
|
106
|
-
if (!canUseHostName) {
|
|
106
|
+
if (!canUseHostName && canUseHostName) {
|
|
107
107
|
return React.createElement(React.Fragment, null);
|
|
108
108
|
}
|
|
109
109
|
const lengthError = (hostnameState === null || hostnameState === void 0 ? void 0 : hostnameState.length) > HOSTNAME_LENGTH_LIMIT;
|
|
@@ -81,14 +81,11 @@
|
|
|
81
81
|
display: flex;
|
|
82
82
|
align-items: center;
|
|
83
83
|
}
|
|
84
|
-
|
|
85
84
|
#options-menu-top-pagination {
|
|
86
85
|
display: flex !important;
|
|
87
86
|
flex-wrap: nowrap !important;
|
|
88
87
|
justify-content: flex-start;
|
|
89
|
-
margin-left: 1rem;
|
|
90
88
|
}
|
|
91
|
-
|
|
92
89
|
.timeline-sort-order-select {
|
|
93
90
|
width: auto;
|
|
94
91
|
margin-left: 1rem;
|
|
@@ -285,11 +282,6 @@ ul#case-history-paginated-timeline {
|
|
|
285
282
|
height: 100% !important;
|
|
286
283
|
}
|
|
287
284
|
|
|
288
|
-
.case-history-timeline-datepicker .pf-v6-c-calendar-month__header-year input {
|
|
289
|
-
font-size: var(--pf-t--global--font--size--body--default);
|
|
290
|
-
line-height: var(--pf-t--global--font--line-height--body);
|
|
291
|
-
}
|
|
292
|
-
|
|
293
285
|
.empty-state-date-picker {
|
|
294
286
|
margin-left: 82%;
|
|
295
287
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fts.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/Fts.tsx"],"names":[],"mappings":"AAWA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAS/D,UAAU,MAAM;IACZ,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAQD,iBAAS,GAAG,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"Fts.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseInformation/Fts.tsx"],"names":[],"mappings":"AAWA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAS/D,UAAU,MAAM;IACZ,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAQD,iBAAS,GAAG,CAAC,KAAK,EAAE,MAAM,qBA2OzB;kBA3OQ,GAAG;;;AA8OZ,eAAe,GAAG,CAAC"}
|
|
@@ -7,7 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import { InlineEdit, LoadingIndicator,
|
|
10
|
+
import { InlineEdit, LoadingIndicator, PhoneInput, ToastNotification, usePrevious } from '@rh-support/components';
|
|
11
11
|
import { useCanEditCase } from '@rh-support/react-context';
|
|
12
12
|
import { isFtsEditableOnEditPage, PreviousCaseTypes, showFtsOnCaseViewEditPage, showFtsOnCreateCasePage, } from '@rh-support/utils';
|
|
13
13
|
import isEmpty from 'lodash/isEmpty';
|
|
@@ -171,7 +171,11 @@ function Fts(props) {
|
|
|
171
171
|
React.createElement("input", { type: "checkbox", id: "same-as-case-owner-phone", name: "same-as-case-owner-phone", "data-tracking-id": "same-as-case-owner-phone", checked: ftsContactSameAsOwner, onChange: onSetContactSameAsOwner }),
|
|
172
172
|
React.createElement("label", { htmlFor: "same-as-case-owner-phone", className: "pf-v6-u-font-weight-normal pf-v6-u-font-size-md" },
|
|
173
173
|
React.createElement(Trans, null, "Same as case owner's phone number")),
|
|
174
|
-
React.createElement(
|
|
174
|
+
React.createElement(PhoneInput
|
|
175
|
+
// id="get-support-24-7-contact"
|
|
176
|
+
, {
|
|
177
|
+
// id="get-support-24-7-contact"
|
|
178
|
+
isDisabled: disableFtsNContact || ftsContactSameAsOwner, "data-tracking-id": "get-support-24-7-contact", phoneValue: contactInfo24X7State || '', onPhoneValueChange: onFtsContactChange }),
|
|
175
179
|
React.createElement("p", { className: "form-instructions" },
|
|
176
180
|
React.createElement(Trans, null, "Please provide contact information where you can be reached at any time to help you with your case."))),
|
|
177
181
|
(contactInfo24X7State === null || contactInfo24X7State === void 0 ? void 0 : contactInfo24X7State.length) > CONTACT_INFO_24X7_LIMIT && (React.createElement("div", { className: "pull-top" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RHAssociatesSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/RHAssociatesSelector.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAS5D,MAAM,WAAW,MAAM;CAAG;AAG1B,iBAAS,oBAAoB,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"RHAssociatesSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseManagement/RHAssociatesSelector.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAS5D,MAAM,WAAW,MAAM;CAAG;AAG1B,iBAAS,oBAAoB,CAAC,KAAK,EAAE,MAAM,qBA+M1C;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -100,7 +100,6 @@ function RHAssociatesSelector(props) {
|
|
|
100
100
|
onNotifiedUserChange([Object.assign(Object.assign({}, loggedInUser.data), { accountNumber: loggedInUserRights.data.getAccountNumber() })], true);
|
|
101
101
|
});
|
|
102
102
|
const removeCurrentUser = () => {
|
|
103
|
-
console.log(isCurrentUserSelectedInternalNotifiedUser());
|
|
104
103
|
if (isCurrentUserSelectedInternalNotifiedUser()) {
|
|
105
104
|
onNotifiedUserChange(filter(selectedNotificationContacts, (contact) => contact.ssoUsername !== loggedInUser.data.ssoUsername));
|
|
106
105
|
}
|
|
@@ -111,23 +110,21 @@ function RHAssociatesSelector(props) {
|
|
|
111
110
|
};
|
|
112
111
|
const canNotifyRHAssociates = ability.can(resourceActions.PATCH, resources.CASE_CREATE, CaseListFields.NOTIFY_RH_ASSOCIATES);
|
|
113
112
|
const toolTipRef = useRef();
|
|
114
|
-
const contactsToExclude = !isEmpty(selectedOwner.data) ? [{ ssoUsername: selectedOwner.data.ssoUsername }] : [];
|
|
115
113
|
if (!canNotifyRHAssociates)
|
|
116
114
|
return React.createElement(React.Fragment, null);
|
|
117
115
|
return (React.createElement(React.Fragment, null, canNotifyRHAssociates && (React.createElement("div", { className: "form-group" },
|
|
118
116
|
React.createElement("label", { className: "react-typeahead-label-wrapper", htmlFor: "get-support-notifications" },
|
|
119
117
|
React.createElement(Trans, null, "Internal Contacts"),
|
|
120
|
-
React.createElement(ContactSelectorInternal, { className: "push-bottom-narrow", selectedContacts: filter(selectedNotificationContacts, (c) => c.isInternal), showSelectedContacts: true, contactsToExclude:
|
|
118
|
+
React.createElement(ContactSelectorInternal, { className: "push-bottom-narrow", selectedContacts: filter(selectedNotificationContacts, (c) => c.isInternal), showSelectedContacts: true, contactsToExclude: !isEmpty(selectedOwner.data) ? [{ ssoUsername: selectedOwner.data.ssoUsername }] : [], id: "open-case-rh-notifications", name: "open-case-rh-notifications", multiple: true, contactListParams: {
|
|
121
119
|
internal: false, // to get non-ldap contacts only
|
|
122
120
|
isInternalContact: true,
|
|
123
121
|
}, placeholder: t(`Add an internal associate to watch this case`), onSelect: onNotifiedUserChange, renderToken: renderToken, isUpdating: isRHAssociatesUpdating, "data-tracking-id": "case-contact-select-rh-watcher" })),
|
|
124
|
-
caseNumber && showAddWatchButton() && !isExportingPDF && (React.createElement(Button, {
|
|
122
|
+
caseNumber && showAddWatchButton() && !isExportingPDF && (React.createElement(Button, { variant: "secondary", onClick: addCurrentUser, type: "button", "data-tracking-id": "case-add-me-rh-watcher" },
|
|
125
123
|
React.createElement(Trans, null, "Add me as a watcher"))),
|
|
126
|
-
caseNumber && showRemoveWatchButton() && !isExportingPDF && (React.createElement("div", { className: "remove-me-as-watcher pf-v6-u-display-inline-block" }, isCurrentUserCaseContact ? (React.createElement(React.Fragment, null,
|
|
124
|
+
caseNumber && showRemoveWatchButton() && !isExportingPDF && (React.createElement("div", { ref: toolTipRef, className: "remove-me-as-watcher pf-v6-u-display-inline-block" }, isCurrentUserCaseContact ? (React.createElement(React.Fragment, null,
|
|
127
125
|
React.createElement(Tooltip, { trigger: 'mouseenter focus', triggerRef: toolTipRef, position: TooltipPosition.top, content: React.createElement(Trans, null, "You are case contact and therefore you cannot be removed as watcher") }),
|
|
128
|
-
React.createElement("
|
|
129
|
-
React.createElement(
|
|
130
|
-
React.createElement(Trans, null, "Remove me as a watcher"))))) : (React.createElement(Button, { className: "remove-watcher-button", variant: "secondary", onClick: removeCurrentUser, "data-tracking-id": "case-remove-me-rh-watcher", isDisabled: isRHAssociatesUpdating },
|
|
126
|
+
React.createElement(Button, { variant: "tertiary", onClick: removeCurrentUser, type: "button", isDisabled: true, "data-tracking-id": "case-remove-me-rh-watcher-case-contact" },
|
|
127
|
+
React.createElement(Trans, null, "Remove me as a watcher")))) : (React.createElement(Button, { variant: "secondary", onClick: removeCurrentUser, type: "button", "data-tracking-id": "case-remove-me-rh-watcher" },
|
|
131
128
|
React.createElement(Trans, null, "Remove me as a watcher")))))))));
|
|
132
129
|
}
|
|
133
130
|
export { RHAssociatesSelector };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaseContactSelector.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseManagement/SendNotifications/CaseContactSelector.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CaseContactSelector.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseManagement/SendNotifications/CaseContactSelector.tsx"],"names":[],"mappings":"AA2BA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAgBvE,MAAM,WAAW,MAAM;CAAG;AAG1B,iBAAS,mBAAmB,CAAC,KAAK,EAAE,MAAM,qBA4czC;AAED,eAAe,mBAAmB,CAAC"}
|
|
@@ -17,6 +17,7 @@ import differenceBy from 'lodash/differenceBy';
|
|
|
17
17
|
import filter from 'lodash/filter';
|
|
18
18
|
import find from 'lodash/find';
|
|
19
19
|
import intersection from 'lodash/intersection';
|
|
20
|
+
import intersectionBy from 'lodash/intersectionBy';
|
|
20
21
|
import isEmpty from 'lodash/isEmpty';
|
|
21
22
|
import isEqual from 'lodash/isEqual';
|
|
22
23
|
import map from 'lodash/map';
|
|
@@ -111,7 +112,7 @@ function CaseContactSelector(props) {
|
|
|
111
112
|
});
|
|
112
113
|
const processCaseContacts = (selectedContacts) => __awaiter(this, void 0, void 0, function* () {
|
|
113
114
|
const toAdd = filter(differenceBy(selectedContacts, selectedNotificationContacts, 'ssoUsername'), (item) => item.ssoUsername !== contactSsoUsername);
|
|
114
|
-
const toRemove = filter(
|
|
115
|
+
const toRemove = filter(intersectionBy(selectedContacts, selectedNotificationContacts, 'ssoUsername'), (item) => !item.isInternal && item.ssoUsername !== contactSsoUsername);
|
|
115
116
|
(toAdd.length || toRemove.length) && clearErrorState();
|
|
116
117
|
if ((toAdd || []).length > 0) {
|
|
117
118
|
if (loggedInUserRights.data.isOrgAdmin()) {
|
|
@@ -266,7 +267,7 @@ function CaseContactSelector(props) {
|
|
|
266
267
|
React.createElement(CaseContactsSelectorExternal, { isDisabled: isUpdatingCustomEmails || isAssociatesUpdating, groupContactsAndEmails: true, allowCustomEmailAdd: true, contactSsoUsername: contactSsoUsername !== null && contactSsoUsername !== void 0 ? contactSsoUsername : '', loggedInUserRights: loggedInUserRights.data, selectedAccountNumber: accountNumber, selected: [
|
|
267
268
|
...customEmailsList.data,
|
|
268
269
|
...filter(selectedNotificationContacts, (c) => !c.isInternal),
|
|
269
|
-
], contactsToExclude: !isEmpty(selectedOwner.data) ? [selectedOwner.data] : [], onChange: onNotifiedUserChange, clearButton: true, multiple: true, placeholder: t(
|
|
270
|
+
], contactsToExclude: !isEmpty(selectedOwner.data) ? [selectedOwner.data] : [], onChange: onNotifiedUserChange, clearButton: true, multiple: true, placeholder: t(`Search for an email address or username of the person you want to notify`), id: "open-case-notifications", name: "open-case-notifications", className: "react-select-custom", renderToken: renderToken, isUpdating: isAssociatesUpdating ||
|
|
270
271
|
customEmailsList.isFetching ||
|
|
271
272
|
isUpdatingCustomEmails ||
|
|
272
273
|
isCaseOwnerUpdating, isExportingPDF: isExportingPDF, customEmails: accountCustomEmails.data || [], canAddNew: onAddNew, getCreateNewText: getCreateNewText })),
|
|
@@ -283,13 +284,12 @@ function CaseContactSelector(props) {
|
|
|
283
284
|
" is not listed under your account. You can always",
|
|
284
285
|
' ',
|
|
285
286
|
React.createElement(Button, { variant: "link", isInline: true, component: "span", onClick: onAddEmailToAccountBtnClick }, "add them at the account level"))))),
|
|
286
|
-
caseNumber && showAddWatchButton() && !isExportingPDF && (React.createElement(Button, {
|
|
287
|
+
caseNumber && showAddWatchButton() && !isExportingPDF && (React.createElement(Button, { variant: "secondary", onClick: addCurrentUser, type: "button", "data-tracking-id": "case-add-me-watcher" },
|
|
287
288
|
React.createElement(Trans, null, "Add me as a watcher"))),
|
|
288
|
-
caseNumber && showRemoveWatchButton() && !isExportingPDF && (React.createElement("div", { className: "remove-me-as-watcher pf-v6-u-display-inline-block" }, isCurrentUserCaseContact ? (React.createElement(React.Fragment, null,
|
|
289
|
+
caseNumber && showRemoveWatchButton() && !isExportingPDF && (React.createElement("div", { ref: toolTipRef, className: "remove-me-as-watcher pf-v6-u-display-inline-block" }, isCurrentUserCaseContact ? (React.createElement(React.Fragment, null,
|
|
289
290
|
React.createElement(Tooltip, { trigger: 'mouseenter focus', triggerRef: toolTipRef, position: TooltipPosition.top, content: React.createElement(Trans, null, "You are case contact and therefore you cannot be removed as watcher") }),
|
|
290
|
-
React.createElement("
|
|
291
|
-
React.createElement(
|
|
292
|
-
React.createElement(Trans, null, "Remove me as a watcher"))))) : (React.createElement(Button, { className: "remove-watcher-button", variant: "secondary", onClick: removeCurrentUser, isDisabled: isUpdatingCustomEmails || isAssociatesUpdating, type: "button", "data-tracking-id": "case-remove-me-watcher" },
|
|
291
|
+
React.createElement(Button, { variant: "tertiary", onClick: removeCurrentUser, type: "button", isDisabled: true, "data-tracking-id": "case-remove-me-watcher" },
|
|
292
|
+
React.createElement(Trans, null, "Remove me as a watcher")))) : (React.createElement(Button, { variant: "secondary", onClick: removeCurrentUser, type: "button", "data-tracking-id": "case-remove-me-watcher" },
|
|
293
293
|
React.createElement(Trans, null, "Remove me as a watcher"))))))) : (React.createElement(NonOrgCaseNotifyeesSelector, { id: "open-case-notifications", placeholder: t('Enter an email address or username for the person you want to notify'), isDisabled: isAssociatesUpdating || customEmailsList.isFetching || isUpdatingCustomEmails, selectedItems: [
|
|
294
294
|
...customEmailsList.data,
|
|
295
295
|
...filter(selectedNotificationContacts, (c) => !c.isInternal),
|
package/lib/esm/components/CaseManagement/SendNotifications/NonOrgCaseNotifyeesSelector.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NonOrgCaseNotifyeesSelector.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseManagement/SendNotifications/NonOrgCaseNotifyeesSelector.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAwB,oBAAoB,EAAY,MAAM,wBAAwB,CAAC;AAE9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAkD,MAAM,OAAO,CAAC;AAGvE,UAAU,MAAO,SAAQ,gBAAgB;IACrC,aAAa,EAAE,oBAAoB,EAAE,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,CAAC,aAAa,EAAE,oBAAoB,EAAE,KAAK,IAAI,CAAC;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC1C,kBAAkB,EAAE,MAAM,CAAC;CAC9B;AAqCD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"NonOrgCaseNotifyeesSelector.d.ts","sourceRoot":"","sources":["../../../../../src/components/CaseManagement/SendNotifications/NonOrgCaseNotifyeesSelector.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAwB,oBAAoB,EAAY,MAAM,wBAAwB,CAAC;AAE9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAkD,MAAM,OAAO,CAAC;AAGvE,UAAU,MAAO,SAAQ,gBAAgB;IACrC,aAAa,EAAE,oBAAoB,EAAE,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,CAAC,aAAa,EAAE,oBAAoB,EAAE,KAAK,IAAI,CAAC;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC1C,kBAAkB,EAAE,MAAM,CAAC;CAC9B;AAqCD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,qBA0MxD"}
|
|
@@ -144,7 +144,7 @@ export function NonOrgCaseNotifyeesSelector(props) {
|
|
|
144
144
|
const isContactOption = isContact(option);
|
|
145
145
|
const isCurrentUserCaseContact = isContactOption && option.ssoUsername === props.contactSsoUsername;
|
|
146
146
|
const isDisabled = (props.isChipDisabled && isContactOption) || isCurrentUserCaseContact;
|
|
147
|
-
return (React.createElement(Label, { key: getKey(option) || index, onClose: () => onRemoveItem(option)
|
|
147
|
+
return (React.createElement(Label, { key: getKey(option) || index, onClose: !isDisabled ? () => onRemoveItem(option) : undefined, closeBtnAriaLabel: `Remove ${getHydraContactLabel(option)}`, variant: "outline" }, getHydraContactLabel(option)));
|
|
148
148
|
})));
|
|
149
149
|
};
|
|
150
150
|
const menu = (React.createElement(Menu, { ref: menuRef },
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AskRedHat.d.ts","sourceRoot":"","sources":["../../../../src/components/TroubleshootSection/AskRedHat.tsx"],"names":[],"mappings":"AACA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAOhD,UAAU,MAAM;IACZ,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;CAClC;AAED,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CAqJtC,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Button, Card, CardBody, CardHeader, Spinner } from '@patternfly/react-core';
|
|
2
|
+
import React, { useRef, useState } from 'react';
|
|
3
|
+
import { useAIResponseState } from '../../context/AIResponseContext';
|
|
4
|
+
import { useParseRuleMarkdown } from '../../hooks/useParseRuleMarkdown';
|
|
5
|
+
import { CollapseIcon } from './icons/CollapseIcon';
|
|
6
|
+
import { StarIcon } from './icons/StarIcon';
|
|
7
|
+
export const AskRedHat = ({ onChatWithAIClick }) => {
|
|
8
|
+
const [isExpanded, setIsExpanded] = useState(false);
|
|
9
|
+
const aiResponseState = useAIResponseState();
|
|
10
|
+
const contentRef = useRef(null);
|
|
11
|
+
const onToggle = () => {
|
|
12
|
+
if (isExpanded && contentRef.current) {
|
|
13
|
+
contentRef.current.scrollTop = 0;
|
|
14
|
+
}
|
|
15
|
+
setIsExpanded((prev) => !prev);
|
|
16
|
+
};
|
|
17
|
+
const handleChatWithAIClick = () => onChatWithAIClick === null || onChatWithAIClick === void 0 ? void 0 : onChatWithAIClick();
|
|
18
|
+
const aiResponse = aiResponseState.aiResponse;
|
|
19
|
+
const answer = (aiResponse === null || aiResponse === void 0 ? void 0 : aiResponse.answer) || (aiResponse === null || aiResponse === void 0 ? void 0 : aiResponse.content) || 'No AI response available yet.';
|
|
20
|
+
const sources = (aiResponse === null || aiResponse === void 0 ? void 0 : aiResponse.sources) || (aiResponse === null || aiResponse === void 0 ? void 0 : aiResponse.references) || [];
|
|
21
|
+
const sourcesCount = sources.length || 0;
|
|
22
|
+
const isLoading = aiResponseState.isLoading || !aiResponse;
|
|
23
|
+
const { parseMarkdown } = useParseRuleMarkdown();
|
|
24
|
+
if (isLoading) {
|
|
25
|
+
return (React.createElement("div", { className: "ask-redhat" },
|
|
26
|
+
React.createElement("p", { className: "ask-redhat-title" },
|
|
27
|
+
React.createElement(StarIcon, { width: 20, height: 20 }),
|
|
28
|
+
"AI Insights"),
|
|
29
|
+
React.createElement("div", { className: "ask-redhat-content-wrapper" },
|
|
30
|
+
React.createElement("div", { className: "ask-redhat-content", style: { textAlign: 'center', padding: '2rem' } },
|
|
31
|
+
React.createElement(Spinner, { size: "lg" }),
|
|
32
|
+
React.createElement("p", { style: { marginTop: '1rem' } }, "Getting AI insights..."))),
|
|
33
|
+
!aiResponseState.isLoading && (React.createElement("div", { className: "ask-redhat-toggle-button" },
|
|
34
|
+
React.createElement(Button, { variant: "link", onClick: handleChatWithAIClick, className: "ask-redhat-chat-button" }, "Chat with AI to get started")))));
|
|
35
|
+
}
|
|
36
|
+
if (aiResponseState.error) {
|
|
37
|
+
return (React.createElement("div", { className: "ask-redhat" },
|
|
38
|
+
React.createElement("p", { className: "ask-redhat-title" },
|
|
39
|
+
React.createElement(StarIcon, { width: 20, height: 20 }),
|
|
40
|
+
"AI Insights"),
|
|
41
|
+
React.createElement("div", { className: "ask-redhat-content-wrapper" },
|
|
42
|
+
React.createElement("div", { className: "ask-redhat-content", style: { textAlign: 'center', padding: '2rem' } },
|
|
43
|
+
React.createElement("p", { style: { color: '#d73502', marginBottom: '1rem' } }, "Unable to get AI insights. Please try again later."),
|
|
44
|
+
React.createElement(Button, { variant: "link", onClick: handleChatWithAIClick, className: "ask-redhat-chat-button", icon: React.createElement(StarIcon, null) }, "Try again with AI Chat")))));
|
|
45
|
+
}
|
|
46
|
+
return (React.createElement("div", { className: "ask-redhat" },
|
|
47
|
+
React.createElement("p", { className: "ask-redhat-title" },
|
|
48
|
+
React.createElement(StarIcon, { width: 20, height: 20 }),
|
|
49
|
+
"AI Insights"),
|
|
50
|
+
React.createElement("div", { className: "ask-redhat-content-wrapper" },
|
|
51
|
+
React.createElement("div", { ref: contentRef, className: `ask-redhat-content ${isExpanded ? 'ask-redhat-content--expanded' : ''}` },
|
|
52
|
+
React.createElement("div", { className: `ask-redhat-content-scrollable ${isExpanded ? 'ask-redhat-content--expanded-scrollable' : ''}` },
|
|
53
|
+
React.createElement("div", null,
|
|
54
|
+
React.createElement("div", { dangerouslySetInnerHTML: { __html: parseMarkdown(answer) } }),
|
|
55
|
+
sourcesCount > 0 && (React.createElement(React.Fragment, null,
|
|
56
|
+
React.createElement("p", null, "2 sources"),
|
|
57
|
+
React.createElement("div", { className: "ask-redhat-cards" }, sources.map((source, index) => (React.createElement(Card, { className: "ask-redhat-card", key: index },
|
|
58
|
+
React.createElement(CardHeader, null,
|
|
59
|
+
React.createElement("h3", { className: "ask-redhat-card-title" },
|
|
60
|
+
React.createElement("a", { href: source.link, target: "_blank", rel: "noopener noreferrer" }, source.title))),
|
|
61
|
+
React.createElement(CardBody, null,
|
|
62
|
+
React.createElement("p", null, source.snippet)))))))))),
|
|
63
|
+
React.createElement("div", { className: "ask-redhat-footer-wrapper" },
|
|
64
|
+
React.createElement("div", { className: "ask-redhat-footer" },
|
|
65
|
+
React.createElement("p", { className: "ask-redhat-footer-text" }, "Want to continue the conversation? Dive deeper with our AI assistant"),
|
|
66
|
+
React.createElement(Button, { onClick: handleChatWithAIClick, className: 'ask-redhat-chat-button', icon: React.createElement(StarIcon, null) }, "Chat with AI"))),
|
|
67
|
+
!isExpanded && React.createElement("div", { className: "ask-redhat-fade-overlay" }))),
|
|
68
|
+
React.createElement("div", { className: "ask-redhat-toggle-button-wrapper" },
|
|
69
|
+
React.createElement("div", { className: "ask-redhat-border-line" }),
|
|
70
|
+
React.createElement(Button, { onClick: onToggle, className: isExpanded ? 'ask-redhat-toggle-button-collapsed' : 'ask-redhat-toggle-button' },
|
|
71
|
+
isExpanded ? React.createElement(CollapseIcon, null) : React.createElement(StarIcon, { width: 20, height: 20 }),
|
|
72
|
+
isExpanded ? '' : 'Read more'))));
|
|
73
|
+
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import '@ifd-ui/ask-redhat-core/ask-redhat-core.css';
|
|
1
2
|
import React from 'react';
|
|
2
3
|
interface IProps {
|
|
3
4
|
inlineEditable: boolean;
|
|
@@ -6,6 +7,10 @@ interface IProps {
|
|
|
6
7
|
collapseOnBlur?: boolean;
|
|
7
8
|
autoFocus?: boolean;
|
|
8
9
|
hideSaveCancel?: boolean;
|
|
10
|
+
isAIChatMode: boolean;
|
|
11
|
+
setIsAIChatMode: (value: boolean) => void;
|
|
12
|
+
onChatWithAIClick?: () => void;
|
|
13
|
+
aiServicesAvailable: boolean;
|
|
9
14
|
}
|
|
10
15
|
declare function TroubleshootSection(props: IProps): React.JSX.Element;
|
|
11
16
|
declare namespace TroubleshootSection {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TroubleshootSection.d.ts","sourceRoot":"","sources":["../../../../src/components/TroubleshootSection/TroubleshootSection.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TroubleshootSection.d.ts","sourceRoot":"","sources":["../../../../src/components/TroubleshootSection/TroubleshootSection.tsx"],"names":[],"mappings":"AAAA,OAAO,6CAA6C,CAAC;AASrD,OAAO,KAAqB,MAAM,OAAO,CAAC;AAY1C,UAAU,MAAM;IACZ,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,mBAAmB,EAAE,OAAO,CAAC;CAChC;AAUD,iBAAS,mBAAmB,CAAC,KAAK,EAAE,MAAM,qBAiKzC;kBAjKQ,mBAAmB;;;AAoK5B,eAAe,mBAAmB,CAAC"}
|
|
@@ -1,4 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import '@ifd-ui/ask-redhat-core/ask-redhat-core.css';
|
|
11
|
+
import { AskRedHatChat, setAuthToken } from '@ifd-ui/ask-redhat-core';
|
|
12
|
+
import { Button, Card, CardBody, CardHeader, Tooltip } from '@patternfly/react-core';
|
|
2
13
|
import InfoCircleIcon from '@patternfly/react-icons/dist/js/icons/info-circle-icon';
|
|
3
14
|
import { ErrorBoundary, LoadingDots } from '@rh-support/components';
|
|
4
15
|
import { PreviousCaseTypes } from '@rh-support/utils';
|
|
@@ -6,23 +17,31 @@ import isEmpty from 'lodash/isEmpty';
|
|
|
6
17
|
import isEqual from 'lodash/isEqual';
|
|
7
18
|
import React, { useContext } from 'react';
|
|
8
19
|
import { Trans, useTranslation } from 'react-i18next';
|
|
20
|
+
import { useAIResponseState } from '../../context/AIResponseContext';
|
|
9
21
|
import { useCaseSelector } from '../../context/CaseContext';
|
|
10
22
|
import { TCStateContext } from '../../context/TopContentContext';
|
|
23
|
+
import { appSourceId_ARH, excludedCaseTypesforARH } from '../../reducers/CaseConstNTypes';
|
|
11
24
|
import { OpenShiftClusterId } from '../CaseManagement/OpenShiftClusterId';
|
|
12
25
|
import ClusterRecommendations from '../Recommendations/ClusterRecommendations';
|
|
13
26
|
import InsightsResults from '../Recommendations/InsightsResults';
|
|
14
27
|
import Suggestions from '../Suggestions/Suggestions';
|
|
28
|
+
import { AskRedHat } from './AskRedHat';
|
|
15
29
|
const defaultProps = {
|
|
16
30
|
initialIsEditing: false,
|
|
17
31
|
required: false,
|
|
18
32
|
collapseOnBlur: false,
|
|
19
33
|
autoFocus: false,
|
|
20
34
|
hideSaveCancel: false,
|
|
35
|
+
aiServicesAvailable: false,
|
|
21
36
|
};
|
|
22
37
|
function TroubleshootSection(props) {
|
|
23
|
-
var _a;
|
|
38
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
24
39
|
const { t } = useTranslation();
|
|
40
|
+
const { aiServicesAvailable, isAIChatMode, setIsAIChatMode, onChatWithAIClick } = props;
|
|
25
41
|
const { topContentState: { topContent }, } = useContext(TCStateContext);
|
|
42
|
+
const aiResponseState = useAIResponseState();
|
|
43
|
+
const session = window === null || window === void 0 ? void 0 : window.sessionjs;
|
|
44
|
+
const keycloakSession = (_b = (_a = session === null || session === void 0 ? void 0 : session._state) === null || _a === void 0 ? void 0 : _a.keycloak) !== null && _b !== void 0 ? _b : null;
|
|
26
45
|
const { product, version, isCreatingCase, caseType } = useCaseSelector((state) => ({
|
|
27
46
|
product: state.caseDetails.product,
|
|
28
47
|
version: state.caseDetails.version,
|
|
@@ -32,18 +51,72 @@ function TroubleshootSection(props) {
|
|
|
32
51
|
issue: state.caseDetails.issue,
|
|
33
52
|
}), isEqual);
|
|
34
53
|
const canShowTopProducts = isEmpty(product);
|
|
35
|
-
const canShowTopContent = !canShowTopProducts && ((
|
|
54
|
+
const canShowTopContent = !canShowTopProducts && ((_c = topContent === null || topContent === void 0 ? void 0 : topContent.data) === null || _c === void 0 ? void 0 : _c.length) > 0;
|
|
36
55
|
const isNotAnIdea = caseType !== PreviousCaseTypes.FEATURE_ENHANCEMENT;
|
|
37
|
-
|
|
56
|
+
const isExcludedCaseType = excludedCaseTypesforARH.includes(caseType !== null && caseType !== void 0 ? caseType : '');
|
|
57
|
+
const handleInitialized = (success, error) => {
|
|
58
|
+
if (success) {
|
|
59
|
+
console.log('Chat initialized successfully');
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
console.error('Chat initialization failed:', error);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const preprocessRequest = () => __awaiter(this, void 0, void 0, function* () {
|
|
66
|
+
var _a;
|
|
67
|
+
if (!keycloakSession) {
|
|
68
|
+
throw new Error('No Keycloak session available');
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
yield ((_a = session === null || session === void 0 ? void 0 : session.updateToken) === null || _a === void 0 ? void 0 : _a.call(session, 500));
|
|
72
|
+
const token = session === null || session === void 0 ? void 0 : session.getEncodedToken();
|
|
73
|
+
if (token) {
|
|
74
|
+
setAuthToken(token);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
throw new Error('No token available');
|
|
78
|
+
}
|
|
79
|
+
return Promise.resolve();
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
console.error('Failed to refresh token:', error);
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
const initConfig = {
|
|
87
|
+
packageVersion: (_d = window === null || window === void 0 ? void 0 : window.supportVersionInfo) === null || _d === void 0 ? void 0 : _d.packageVersion,
|
|
88
|
+
appSourceId: appSourceId_ARH,
|
|
89
|
+
enableDebugLogging: false,
|
|
90
|
+
headerTitle: 'AI insights',
|
|
91
|
+
showWelcomeMessage: false,
|
|
92
|
+
conversationId: ((_e = aiResponseState.aiResponse) === null || _e === void 0 ? void 0 : _e.conversationId) || undefined,
|
|
93
|
+
enableHeaderMenu: false,
|
|
94
|
+
enableTheme: false,
|
|
95
|
+
tokenAuth: {
|
|
96
|
+
auth: {
|
|
97
|
+
userInfo: (_h = (_g = (_f = window === null || window === void 0 ? void 0 : window.sessionjs) === null || _f === void 0 ? void 0 : _f.getToken) === null || _g === void 0 ? void 0 : _g.call(_f)) !== null && _h !== void 0 ? _h : {},
|
|
98
|
+
authToken: (_k = (_j = window === null || window === void 0 ? void 0 : window.sessionjs) === null || _j === void 0 ? void 0 : _j.getEncodedToken()) !== null && _k !== void 0 ? _k : '',
|
|
99
|
+
},
|
|
100
|
+
events: {
|
|
101
|
+
preprocessRequest,
|
|
102
|
+
isAuthenticated: () => {
|
|
103
|
+
var _a, _b, _c;
|
|
104
|
+
return (_c = (_b = (_a = window === null || window === void 0 ? void 0 : window.sessionjs) === null || _a === void 0 ? void 0 : _a.isAuthenticated) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : false;
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
onInitialized: handleInitialized,
|
|
109
|
+
};
|
|
110
|
+
const handleChatWithAIClick = () => {
|
|
111
|
+
setIsAIChatMode(true);
|
|
112
|
+
onChatWithAIClick === null || onChatWithAIClick === void 0 ? void 0 : onChatWithAIClick();
|
|
113
|
+
};
|
|
114
|
+
return (React.createElement(React.Fragment, null, isAIChatMode ? (React.createElement(React.Fragment, null,
|
|
115
|
+
React.createElement(AskRedHatChat, { initConfig: initConfig }),
|
|
116
|
+
React.createElement("div", { className: "fullscreen-chat-footer" },
|
|
117
|
+
React.createElement(Button, { onClick: () => props.setIsAIChatMode(false), variant: "link", className: "return-to-case-btn" }, t('Return to case creation'))))) : (React.createElement(React.Fragment, null,
|
|
38
118
|
React.createElement("section", null,
|
|
39
|
-
React.createElement(
|
|
40
|
-
React.createElement("p", { className: "pf-v6-u-pt-md" },
|
|
41
|
-
React.createElement("span", { className: "pf-v6-u-font-family-heading pf-v6-u-pr-xs" }, t('Product')),
|
|
42
|
-
" ",
|
|
43
|
-
product),
|
|
44
|
-
React.createElement("p", null,
|
|
45
|
-
React.createElement("span", { className: "pf-v6-u-font-family-heading pf-v6-u-pr-xs" }, t('Version')),
|
|
46
|
-
version)),
|
|
119
|
+
!isExcludedCaseType && aiServicesAvailable && (React.createElement(AskRedHat, { onChatWithAIClick: handleChatWithAIClick })),
|
|
47
120
|
!isCreatingCase && (React.createElement(OpenShiftClusterId, { className: "push-bottom", "data-tracking-id": "troubleshoot-section-openshift-cluster-id" })),
|
|
48
121
|
React.createElement(LoadingDots, { show: topContent.isFetching }),
|
|
49
122
|
topContent.data.length === 0 && (React.createElement(Card, { id: "card", className: "pf-v6-u-mb-md" },
|
|
@@ -56,7 +129,7 @@ function TroubleshootSection(props) {
|
|
|
56
129
|
React.createElement(Trans, null, "No recommendations for this product")))),
|
|
57
130
|
React.createElement(ErrorBoundary, { errorMsgInfo: { message: t('There was an error loading suggestions') } }, canShowTopContent && !isEmpty(version) && React.createElement(Suggestions, null)),
|
|
58
131
|
!isCreatingCase && React.createElement(ClusterRecommendations, { className: "pf-v6-u-mt-lg" })),
|
|
59
|
-
React.createElement("section", { className: "pf-v6-u-mt-lg" }, isNotAnIdea && (React.createElement(InsightsResults, { isDisplayOnMain: true, "data-tracking-id": "troubleshoot-section-file-recs" })))));
|
|
132
|
+
React.createElement("section", { className: "pf-v6-u-mt-lg" }, isNotAnIdea && (React.createElement(InsightsResults, { isDisplayOnMain: true, "data-tracking-id": "troubleshoot-section-file-recs" })))))));
|
|
60
133
|
}
|
|
61
134
|
TroubleshootSection.defaultProps = defaultProps;
|
|
62
135
|
export default TroubleshootSection;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollapseIcon.d.ts","sourceRoot":"","sources":["../../../../../src/components/TroubleshootSection/icons/CollapseIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,UAAU,SAAS;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,YAAY,UAAW,SAAS,sBAiB5C,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export const CollapseIcon = (props) => {
|
|
3
|
+
const { width = 18.118, height = 12 } = props;
|
|
4
|
+
return (React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: width, height: height, viewBox: "0 0 19 11", fill: "none", style: {
|
|
5
|
+
flexShrink: 0,
|
|
6
|
+
} },
|
|
7
|
+
React.createElement("path", { d: "M9.05895 0L16.9042 7.07143H1.21367L9.05895 0Z", fill: "#9F549C" }),
|
|
8
|
+
React.createElement("path", { d: "M9.05895 1.57129L16.9042 8.64272H1.21367L9.05895 1.57129Z", fill: "white" })));
|
|
9
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StarIcon.d.ts","sourceRoot":"","sources":["../../../../../src/components/TroubleshootSection/icons/StarIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,UAAU,SAAS;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,QAAQ,UAAW,SAAS,sBAgDxC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export const StarIcon = (props) => {
|
|
3
|
+
const { width = 16, height = 15.273 } = props;
|
|
4
|
+
return (React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: width, height: height, viewBox: "0 0 16 15.273", fill: "none", style: {
|
|
5
|
+
flexShrink: 0,
|
|
6
|
+
aspectRatio: '16.00/15.27',
|
|
7
|
+
} },
|
|
8
|
+
React.createElement("path", { d: "M16.197 9.21581L11.3573 8.18825L10.3297 3.34854C10.2937 3.16868 10.1345 3.04541 9.95463 3.04541C9.77478 3.04541 9.61558 3.17385 9.57958 3.34854L8.55202 8.18825L3.71231 9.21581C3.53245 9.25181 3.40918 9.41101 3.40918 9.59087C3.40918 9.77072 3.53762 9.92992 3.71231 9.96592L8.55202 10.9935L9.57958 15.8332C9.61558 16.013 9.77478 16.1363 9.95463 16.1363C10.1345 16.1363 10.2937 16.0079 10.3297 15.8332L11.3573 10.9935L16.197 9.96592C16.3768 9.92992 16.5001 9.77072 16.5001 9.59087C16.5001 9.41101 16.3717 9.25181 16.197 9.21581Z", fill: "url(#paint0_linear_5146_16767)" }),
|
|
9
|
+
React.createElement("path", { d: "M3.40909 6.68195C3.58647 6.68195 3.74356 6.55526 3.77905 6.38297L4.16931 4.53308L6.0192 4.14282C6.19658 4.10733 6.31818 3.95024 6.31818 3.77286C6.31818 3.59548 6.19149 3.43839 6.0192 3.4029L4.16931 3.01264L3.77905 1.16275C3.74356 0.98537 3.58647 0.86377 3.40909 0.86377C3.23171 0.86377 3.07462 0.990461 3.03913 1.16275L2.64887 3.01264L0.798982 3.4029C0.6216 3.43839 0.5 3.59548 0.5 3.77286C0.5 3.95024 0.626691 4.10733 0.798982 4.14282L2.64887 4.53308L3.03913 6.38297C3.07462 6.56035 3.23171 6.68195 3.40909 6.68195Z", fill: "url(#paint1_linear_5146_16767)" }),
|
|
10
|
+
React.createElement("defs", null,
|
|
11
|
+
React.createElement("linearGradient", { id: "paint0_linear_5146_16767", x1: "9.95463", y1: "3.04541", x2: "9.95463", y2: "16.1363", gradientUnits: "userSpaceOnUse" },
|
|
12
|
+
React.createElement("stop", { stopColor: "#F56E6E" }),
|
|
13
|
+
React.createElement("stop", { offset: "1", stopColor: "#5E40BE" })),
|
|
14
|
+
React.createElement("linearGradient", { id: "paint1_linear_5146_16767", x1: "3.40909", y1: "0.86377", x2: "3.40909", y2: "6.68195", gradientUnits: "userSpaceOnUse" },
|
|
15
|
+
React.createElement("stop", { stopColor: "#F56E6E" }),
|
|
16
|
+
React.createElement("stop", { offset: "1", stopColor: "#5E40BE" })))));
|
|
17
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContactSelectorInternal.d.ts","sourceRoot":"","sources":["../../../../../src/components/shared/input/ContactSelectorInternal.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;
|
|
1
|
+
{"version":3,"file":"ContactSelectorInternal.d.ts","sourceRoot":"","sources":["../../../../../src/components/shared/input/ContactSelectorInternal.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AAqBrF,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,MAAM;IACnB,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC9B,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACnC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,MAAM,KAAA,EAAE,KAAK,KAAA,EAAE,GAAG,KAAA,KAAK,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;CAClE;AAED,MAAM,WAAW,MAAM;IACnB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,qBAAa,uBAAwB,SAAQ,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACxE,UAAU,EAAE,eAAe,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAQ;IAC5C,QAAQ,oCAAuC;IAE/C,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAalC;gBAEU,KAAK,EAAE,MAAM;IAYzB,gBAAgB,YAAa,QAAQ,KAAG,MAAM,CAS5C;IAEF,mBAAmB,aAAc,QAAQ,EAAE,KAAG,QAAQ,EAAE,CAGtD;IAEF,sBAAsB,MAAO,QAAQ,KAAG,OAAO,CAE7C;IAEF,kBAAkB,CAAC,SAAS,EAAE,MAAM;IAmBpC,QAAQ,aAAoB,QAAQ,EAAE,mBAKpC;IAEF,YAAY,UAAiB,MAAM,mBA0CjC;IAEF,iBAAiB,UAAW,MAAM,UAiBhC;IAEF,YAAY,UAAW,GAAG,aAAa,GAAG,UAkBxC;IAEF,mBAAmB,oBAAqB,QAAQ,UAI9C;IAEF,aAAa,UAAW,KAAK,CAAC,aAAa,UAkCzC;IAEF,WAAW,aAIT;IAEF,UAAU,aAKR;IAEF,WAAW,aAGT;IAEF,QAAQ,aAEN;IAEF,MAAM;CAqGT"}
|
|
@@ -10,7 +10,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import { contacts } from '@cee-eng/hydrajs';
|
|
11
11
|
import { Button, Label, LabelGroup, MenuToggle, Select, SelectList, SelectOption, Spinner, TextInputGroup, TextInputGroupMain, TextInputGroupUtilities, } from '@patternfly/react-core';
|
|
12
12
|
import TimesCircleIcon from '@patternfly/react-icons/dist/esm/icons/times-circle-icon';
|
|
13
|
-
import { haltEvent } from '@rh-support/utils';
|
|
14
13
|
import assign from 'lodash/assign';
|
|
15
14
|
import differenceBy from 'lodash/differenceBy';
|
|
16
15
|
import filter from 'lodash/filter';
|
|
@@ -213,11 +212,7 @@ export class ContactSelectorInternal extends React.Component {
|
|
|
213
212
|
: searchValue;
|
|
214
213
|
const toggle = (toggleRef) => (React.createElement(MenuToggle, { ref: toggleRef, variant: "typeahead", onClick: this.onToggle, isExpanded: isOpen, isDisabled: this.props.disabled || this.props.isUpdating, isFullWidth: true },
|
|
215
214
|
React.createElement(TextInputGroup, { isPlain: true },
|
|
216
|
-
React.createElement(TextInputGroupMain, { value: displayValue, onChange: (_, value) => this.handleInputChange(value), onFocus: this.handleFocus, onBlur: this.handleBlur, onKeyDown: this.handleKeyDown, placeholder: this.props.placeholder || 'Search contact by name or username', ref: this.inputRef, autoComplete: "off", isExpanded: isOpen, role: "combobox" }, this.props.multiple && selectedContacts.length > 0 && (React.createElement(LabelGroup, { "aria-label": "Selected contacts" }, selectedContacts.map((contact, index) => {
|
|
217
|
-
var _a, _b;
|
|
218
|
-
const isDisabled = !!((_b = (_a = this.props) === null || _a === void 0 ? void 0 : _a.disableContactRemoval) === null || _b === void 0 ? void 0 : _b.find((v) => v.ssoUsername === contact.ssoUsername));
|
|
219
|
-
return (React.createElement(Label, { key: contact.ssoUsername, variant: "outline", color: "blue", onClick: haltEvent, onClose: () => this.handleRemoveContact(contact), isDisabled: isDisabled }, this.getSelectedLabel(contact)));
|
|
220
|
-
})))),
|
|
215
|
+
React.createElement(TextInputGroupMain, { value: displayValue, onChange: (_, value) => this.handleInputChange(value), onFocus: this.handleFocus, onBlur: this.handleBlur, onKeyDown: this.handleKeyDown, placeholder: this.props.placeholder || 'Search contact by name or username', ref: this.inputRef, autoComplete: "off", isExpanded: isOpen, role: "combobox" }, this.props.multiple && selectedContacts.length > 0 && (React.createElement(LabelGroup, { "aria-label": "Selected contacts" }, selectedContacts.map((contact, index) => (React.createElement(Label, { key: contact.ssoUsername, variant: "outline", color: "blue", onClose: () => this.handleRemoveContact(contact) }, this.getSelectedLabel(contact))))))),
|
|
221
216
|
React.createElement(TextInputGroupUtilities, null,
|
|
222
217
|
isLoading && React.createElement(Spinner, { size: "sm" }),
|
|
223
218
|
this.props.clearButton && (searchValue || selectedContacts.length > 0) && (React.createElement(Button, { variant: "plain", icon: React.createElement(TimesCircleIcon, null), onClick: this.handleClear, "aria-label": "Clear input" }))))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WizardLayout.d.ts","sourceRoot":"","sources":["../../../../src/components/wizardLayout/WizardLayout.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAEvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAMvD,OAAO,EAAuC,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAcvG,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;CACpD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"WizardLayout.d.ts","sourceRoot":"","sources":["../../../../src/components/wizardLayout/WizardLayout.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAkD,MAAM,OAAO,CAAC;AAEvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAMvD,OAAO,EAAuC,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAcvG,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;CACpD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,qBAyNzC"}
|
|
@@ -35,6 +35,7 @@ import WizardMain from './WizardMain';
|
|
|
35
35
|
export function WizardLayout(props) {
|
|
36
36
|
const { routeState: { activeSection, isCaseCreate }, } = useContext(RouteContext);
|
|
37
37
|
const { getMetadata } = useMetadata();
|
|
38
|
+
const [isAIChatMode, setIsAIChatMode] = useState(false);
|
|
38
39
|
const { caseCreationError, contactSSOName, caseType, product, caseState, ABTestVariation } = useCaseSelector((state) => ({
|
|
39
40
|
caseState: state,
|
|
40
41
|
caseCreationError: state.caseCreationError,
|
|
@@ -152,9 +153,9 @@ export function WizardLayout(props) {
|
|
|
152
153
|
React.createElement(GlobalTroubleshootEffects, { routeProps: props.routeProps }),
|
|
153
154
|
activeSection !== AppRouteSections.DESCRIBE_IDEA && (React.createElement(PreCaseConfirmationModals, { onModalClose: onModalClose, confirmationModalType: confirmationModalType, onConfirm: () => submitCaseAndNavigate(caseCreationError) })),
|
|
154
155
|
React.createElement(Grid, { style: { height: '100%' } },
|
|
155
|
-
React.createElement(GridItem, { sm: 12, md: 12, lg: 8, xl2: 8 },
|
|
156
|
-
React.createElement(WizardMain, { routeProps: props.routeProps, submitCaseAndNavigate: submitCaseAndNavigate, confirmSupportModal: confirmSupportModal })),
|
|
157
|
-
React.createElement(GridItem, { span: 4, className: "grid-wizard-aside-content" },
|
|
158
|
-
React.createElement(WizardAside, { isAttachmentUploadModalOpen: confirmationModalType === PreCaseConfirmationModalsEnum.NO_ATTACHMENT_MODAL, routeProps: props.routeProps }))),
|
|
156
|
+
React.createElement(GridItem, { sm: 12, md: 12, lg: isAIChatMode ? 12 : 8, xl2: isAIChatMode ? 12 : 8 },
|
|
157
|
+
React.createElement(WizardMain, { routeProps: props.routeProps, submitCaseAndNavigate: submitCaseAndNavigate, confirmSupportModal: confirmSupportModal, isAIChatMode: isAIChatMode, setIsAIChatMode: setIsAIChatMode })),
|
|
158
|
+
!isAIChatMode && (React.createElement(GridItem, { span: 4, className: "grid-wizard-aside-content" },
|
|
159
|
+
React.createElement(WizardAside, { isAttachmentUploadModalOpen: confirmationModalType === PreCaseConfirmationModalsEnum.NO_ATTACHMENT_MODAL, routeProps: props.routeProps })))),
|
|
159
160
|
React.createElement(AlertToastWrapper, { submitCaseAndNavigate: submitCaseAndNavigate, routeProps: props.routeProps })));
|
|
160
161
|
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { Dispatch, SetStateAction } from 'react';
|
|
2
2
|
import { RouteComponentProps } from 'react-router-dom';
|
|
3
3
|
import { IRouteUrlParams } from '../../reducers/RouteConstNTypes';
|
|
4
4
|
interface IProps {
|
|
5
5
|
routeProps: RouteComponentProps<IRouteUrlParams>;
|
|
6
6
|
submitCaseAndNavigate: (isReSubmitting: boolean) => void;
|
|
7
7
|
confirmSupportModal: (hasPreferredSecureSupportAccount: boolean) => void;
|
|
8
|
+
isAIChatMode: boolean;
|
|
9
|
+
setIsAIChatMode: Dispatch<SetStateAction<boolean>>;
|
|
8
10
|
}
|
|
9
11
|
declare function WizardMain(props: IProps): React.JSX.Element;
|
|
10
12
|
export default WizardMain;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WizardMain.d.ts","sourceRoot":"","sources":["../../../../src/components/wizardLayout/WizardMain.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WizardMain.d.ts","sourceRoot":"","sources":["../../../../src/components/wizardLayout/WizardMain.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAqD,MAAM,OAAO,CAAC;AAE3G,OAAO,EAAS,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAU9D,OAAO,EAAoB,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAyCpF,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACjD,qBAAqB,EAAE,CAAC,cAAc,EAAE,OAAO,KAAK,IAAI,CAAC;IACzD,mBAAmB,EAAE,CAAC,gCAAgC,EAAE,OAAO,KAAK,IAAI,CAAC;IACzE,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;CACtD;AAED,iBAAS,UAAU,CAAC,KAAK,EAAE,MAAM,qBAyShC;AACD,eAAe,UAAU,CAAC"}
|