@rh-support/troubleshoot 2.6.24 → 2.6.27
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/ESSRemoteSession.js +1 -1
- package/lib/esm/components/CaseEditView/RequestRemoteSession/NewEssTermsModal.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/RequestRemoteSession/NewEssTermsModal.js +52 -96
- package/lib/esm/components/CaseEditView/RequestRemoteSession/RemoteSessionAgreementModal.d.ts.map +1 -1
- package/lib/esm/components/CaseEditView/RequestRemoteSession/RemoteSessionAgreementModal.js +24 -21
- package/lib/esm/components/CaseEditView/Tabs/CaseDetails/CaseHostname.js +4 -2
- 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/CaseInformation/Severity.js +1 -1
- package/lib/esm/components/CaseInformation/SupportLevel.d.ts.map +1 -1
- package/lib/esm/components/CaseInformation/SupportLevel.js +1 -1
- package/lib/esm/components/CaseManagement/OpenshiftDropdownV4.d.ts.map +1 -1
- package/lib/esm/components/CaseManagement/OpenshiftDropdownV4.js +1 -13
- 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/Cve/CveModal.d.ts.map +1 -1
- package/lib/esm/components/Cve/CveModal.js +2 -3
- package/lib/esm/components/ProductSelector/NewProductDropdownSelector.d.ts.map +1 -1
- package/lib/esm/components/ProductSelector/NewProductDropdownSelector.js +1 -10
- package/lib/esm/components/Recommendations/AsideResults.js +1 -1
- package/lib/esm/components/Recommendations/ClusterRecommendationsModal.d.ts.map +1 -1
- package/lib/esm/components/Recommendations/ClusterRecommendationsModal.js +4 -7
- package/lib/esm/components/Recommendations/EARules/EARuleInfoAccordion.d.ts.map +1 -1
- package/lib/esm/components/Recommendations/EARules/EARuleInfoAccordion.js +1 -3
- package/lib/esm/components/Recommendations/InsightsRuleInfo.d.ts.map +1 -1
- package/lib/esm/components/Recommendations/InsightsRuleInfo.js +2 -9
- package/lib/esm/components/Recommendations/RecommendationFeedbackModal.d.ts.map +1 -1
- package/lib/esm/components/Recommendations/RecommendationFeedbackModal.js +4 -4
- package/lib/esm/components/Recommendations/RulesModal.d.ts.map +1 -1
- package/lib/esm/components/Recommendations/RulesModal.js +4 -7
- package/lib/esm/components/Recommendations/WatsonxAiIcon.js +1 -1
- package/lib/esm/components/Suggestions/Suggestions.d.ts.map +1 -1
- package/lib/esm/components/Suggestions/Suggestions.js +12 -17
- package/lib/esm/components/Suggestions/TopContent.d.ts.map +1 -1
- package/lib/esm/components/Suggestions/TopContent.js +13 -13
- 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 +7 -0
- package/lib/esm/components/TroubleshootSection/TroubleshootSection.d.ts.map +1 -1
- package/lib/esm/components/TroubleshootSection/TroubleshootSection.js +96 -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/shared/useIsSectionValid.d.ts.map +1 -1
- package/lib/esm/components/shared/useIsSectionValid.js +1 -7
- package/lib/esm/components/wizardLayout/GlobalTroubleshootEffects.d.ts.map +1 -1
- package/lib/esm/components/wizardLayout/GlobalTroubleshootEffects.js +1 -3
- package/lib/esm/components/wizardLayout/WizardLayout.d.ts.map +1 -1
- package/lib/esm/components/wizardLayout/WizardLayout.js +6 -4
- package/lib/esm/components/wizardLayout/WizardMain.d.ts +5 -1
- package/lib/esm/components/wizardLayout/WizardMain.d.ts.map +1 -1
- package/lib/esm/components/wizardLayout/WizardMain.js +147 -18
- package/lib/esm/components/wizardLayout/WizardNavigation.d.ts +4 -2
- package/lib/esm/components/wizardLayout/WizardNavigation.d.ts.map +1 -1
- package/lib/esm/components/wizardLayout/WizardNavigation.js +13 -16
- 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 +338 -0
- package/lib/esm/css/app.css +4 -5
- package/lib/esm/css/case.css +0 -12
- package/lib/esm/hooks/useWizard.d.ts +6 -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 -10
- package/package.json +7 -6
|
@@ -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":"AAWA,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;IACnD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,4BAA4B,CAAC,EAAE,OAAO,CAAC;CAC1C;AAED,iBAAS,UAAU,CAAC,KAAK,EAAE,MAAM,qBA+ThC;AACD,eAAe,UAAU,CAAC"}
|
|
@@ -1,3 +1,12 @@
|
|
|
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
|
+
};
|
|
1
10
|
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
11
|
var t = {};
|
|
3
12
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
@@ -9,16 +18,21 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
9
18
|
}
|
|
10
19
|
return t;
|
|
11
20
|
};
|
|
12
|
-
import {
|
|
21
|
+
import { Env } from '@cee-eng/hydrajs';
|
|
22
|
+
import { askRHDirectAIResponse, getRHDirectStatusCheck, } from '@ifd-ui/ask-redhat-core';
|
|
23
|
+
import { useWizardContext, Wizard, WizardNav, WizardNavItem, WizardStep } from '@patternfly/react-core';
|
|
13
24
|
import { LoadingIndicator } from '@rh-support/components';
|
|
14
25
|
import isEqual from 'lodash/isEqual';
|
|
15
26
|
import React, { Suspense, useContext, useEffect, useRef, useState } from 'react';
|
|
16
27
|
import { useTranslation } from 'react-i18next';
|
|
17
28
|
import { Route } from 'react-router-dom';
|
|
29
|
+
import { useAIResponseDispatch } from '../../context/AIResponseContext';
|
|
18
30
|
import { useCaseSelector } from '../../context/CaseContext';
|
|
19
31
|
import { RecommendationDispatchContext } from '../../context/RecommendationContext';
|
|
20
32
|
import { RouteContext, RouteDispatchContext } from '../../context/RouteContext';
|
|
21
33
|
import { useWizard } from '../../hooks/useWizard';
|
|
34
|
+
import { receivedAIResponse, receivedAIResponseError, requestAIResponse } from '../../reducers/AIResponseReducer';
|
|
35
|
+
import { appSourceId_ARH, excludedCaseTypesforARH } from '../../reducers/CaseConstNTypes';
|
|
22
36
|
import { RecommendationsConstants } from '../../reducers/RecommendationsReducer';
|
|
23
37
|
import { AppRouteSections } from '../../reducers/RouteConstNTypes';
|
|
24
38
|
import { setActiveSectionChanged, updateisNextBtnClickedToShowValidationError } from '../../reducers/RouteReducer';
|
|
@@ -27,22 +41,54 @@ import SubmitCase from '../SubmitCase/SubmitCase';
|
|
|
27
41
|
import MainSection from './MainSection';
|
|
28
42
|
import NewFeatureModal from './NewFeatureModal';
|
|
29
43
|
import WizardNavigation from './WizardNavigation';
|
|
44
|
+
// Mapping for case type display text in AI questions
|
|
45
|
+
const CASE_TYPE_AI_TEXT_MAP = {
|
|
46
|
+
Other: 'Something',
|
|
47
|
+
};
|
|
48
|
+
const getCaseTypeAIText = (caseType) => {
|
|
49
|
+
return CASE_TYPE_AI_TEXT_MAP[caseType] || caseType;
|
|
50
|
+
};
|
|
51
|
+
const generateCaseTypePrefix = (activeSection, caseType) => {
|
|
52
|
+
if (activeSection === AppRouteSections.TROUBLESHOOT) {
|
|
53
|
+
return '';
|
|
54
|
+
}
|
|
55
|
+
const helpWith = getCaseTypeAIText(caseType);
|
|
56
|
+
return `I want help with ${helpWith}. `;
|
|
57
|
+
};
|
|
58
|
+
//generate AI question based on case details
|
|
59
|
+
const generateAIQuestion = (activeSection, product, version, summary, issue, caseType) => {
|
|
60
|
+
const baseMessage = `My issue is primarily related to ${product} ${version}. I would title my problem: ${summary}. More details are as follows: ${issue}.`;
|
|
61
|
+
const prefix = generateCaseTypePrefix(activeSection, caseType);
|
|
62
|
+
return `${prefix}${baseMessage}`;
|
|
63
|
+
};
|
|
30
64
|
function WizardMain(props) {
|
|
31
65
|
const [showRestFlag, setShowRestFlag] = useState(false);
|
|
66
|
+
const [aiServicesAvailable, setAIServicesAvailable] = useState(false); // default to false until services are confirmed available
|
|
32
67
|
const recommendationDispatch = useContext(RecommendationDispatchContext);
|
|
33
|
-
const { isCreatingCase } = useCaseSelector((state) => ({
|
|
68
|
+
const { isCreatingCase, product, version, summary, issue, caseType } = useCaseSelector((state) => ({
|
|
34
69
|
isCreatingCase: state.isCreatingCase,
|
|
70
|
+
product: state.caseDetails.product,
|
|
71
|
+
version: state.caseDetails.version,
|
|
72
|
+
summary: state.caseDetails.summary,
|
|
73
|
+
issue: state.caseDetails.issue,
|
|
74
|
+
caseType: state.caseDetails.caseType,
|
|
35
75
|
}), isEqual);
|
|
36
|
-
const { routeState: { isCaseCreate }, } = useContext(RouteContext);
|
|
76
|
+
const { routeState: { isCaseCreate, activeSection }, } = useContext(RouteContext);
|
|
77
|
+
const aiResponseDispatch = useAIResponseDispatch();
|
|
78
|
+
const isTroubleshootSection = activeSection === AppRouteSections.TROUBLESHOOT;
|
|
79
|
+
const isResourcesSection = activeSection === AppRouteSections.RESOURCES;
|
|
80
|
+
const isSummarizeSection = activeSection === AppRouteSections.SUMMARIZE;
|
|
37
81
|
const [userSeenRecommendations, setUserSeenRecommendations] = useState(false);
|
|
38
82
|
const [userClickedNextonRecommendations, setUserClickedNextonRecommendations] = useState(false);
|
|
39
83
|
const [userScrolledLabel, setUserScrolledLabel] = useState(false);
|
|
40
84
|
const [userCanNavigateToTroubleshoot, setUserCanNavigateToTroubleshoot] = useState(false);
|
|
41
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
42
85
|
const [isNextButtonClicked, setIsNextButtonClicked] = useState(false);
|
|
43
86
|
const isNextButtonClickedRef = useRef(false);
|
|
44
87
|
const isBackButtonClickedRef = useRef(false);
|
|
45
88
|
const resultsRowRef = useRef(null);
|
|
89
|
+
const handleChatWithAIClick = () => {
|
|
90
|
+
props.setIsAIChatMode(true);
|
|
91
|
+
};
|
|
46
92
|
const { getStepsSequece } = useWizard(props.routeProps, {
|
|
47
93
|
userSeenRecommendationsfn: setUserSeenRecommendations,
|
|
48
94
|
userSeenRecommendationsValue: userSeenRecommendations,
|
|
@@ -50,12 +96,66 @@ function WizardMain(props) {
|
|
|
50
96
|
userClickedNextonRecommendationsValue: userClickedNextonRecommendations,
|
|
51
97
|
resultsRowRef: resultsRowRef,
|
|
52
98
|
userScrolledLabel: userScrolledLabel,
|
|
99
|
+
isAIChatMode: props.isAIChatMode,
|
|
100
|
+
setIsAIChatMode: props.setIsAIChatMode,
|
|
101
|
+
onChatWithAIClick: handleChatWithAIClick,
|
|
102
|
+
aiServicesAvailable: aiServicesAvailable,
|
|
103
|
+
isSecureSupport: props.isSecureSupport,
|
|
104
|
+
hasConfirmedStatesideSupport: props.hasConfirmedStatesideSupport,
|
|
53
105
|
});
|
|
54
106
|
const dispatchToRouteReducer = useContext(RouteDispatchContext);
|
|
55
107
|
const { t } = useTranslation();
|
|
56
108
|
useEffect(() => {
|
|
57
109
|
setActiveSectionChanged(dispatchToRouteReducer, isCaseCreate ? AppRouteSections.GET_SUPPORT : AppRouteSections.TROUBLESHOOT, '');
|
|
58
110
|
}, [isCaseCreate, dispatchToRouteReducer]);
|
|
111
|
+
const shouldEnableARHServices = () => {
|
|
112
|
+
// Check if the current section is relevant for AI services
|
|
113
|
+
const isRelevantSection = isTroubleshootSection || isSummarizeSection || isResourcesSection;
|
|
114
|
+
// Check if the case type is allowed (not in the excluded list)
|
|
115
|
+
const isCaseTypeAllowed = !excludedCaseTypesforARH.includes(caseType || '');
|
|
116
|
+
// Check if user is not a secure support or confirmed stateside support user
|
|
117
|
+
const isNotSecureOrStatesideUser = !props.isSecureSupport && !props.hasConfirmedStatesideSupport;
|
|
118
|
+
return isRelevantSection && isCaseTypeAllowed && isNotSecureOrStatesideUser;
|
|
119
|
+
};
|
|
120
|
+
useEffect(() => {
|
|
121
|
+
if (!activeSection) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (!shouldEnableARHServices()) {
|
|
125
|
+
if (aiServicesAvailable) {
|
|
126
|
+
setAIServicesAvailable(false);
|
|
127
|
+
}
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
// check if ARH services are available
|
|
131
|
+
if (!aiServicesAvailable) {
|
|
132
|
+
const checkAIServices = () => __awaiter(this, void 0, void 0, function* () {
|
|
133
|
+
var _a, _b, _c;
|
|
134
|
+
const config = {
|
|
135
|
+
appSourceId: appSourceId_ARH,
|
|
136
|
+
authToken: (_b = (_a = window === null || window === void 0 ? void 0 : window.sessionjs) === null || _a === void 0 ? void 0 : _a.getEncodedToken()) !== null && _b !== void 0 ? _b : '',
|
|
137
|
+
packageVersion: (_c = window === null || window === void 0 ? void 0 : window.supportVersionInfo) === null || _c === void 0 ? void 0 : _c.packageVersion,
|
|
138
|
+
appEnv: Env.getEnvName(),
|
|
139
|
+
};
|
|
140
|
+
try {
|
|
141
|
+
yield getRHDirectStatusCheck(config);
|
|
142
|
+
setAIServicesAvailable(true);
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
setAIServicesAvailable(false);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
checkAIServices();
|
|
149
|
+
}
|
|
150
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
151
|
+
}, [
|
|
152
|
+
activeSection,
|
|
153
|
+
caseType,
|
|
154
|
+
isCaseCreate,
|
|
155
|
+
aiServicesAvailable,
|
|
156
|
+
props.isSecureSupport,
|
|
157
|
+
props.hasConfirmedStatesideSupport,
|
|
158
|
+
]);
|
|
59
159
|
const renderSubmitCasePage = () => (React.createElement(MainSection, { section: AppRouteSections.SUBMIT_CASE, title: t('Case has been submitted'), isLoading: isCreatingCase, description: t("We'll be in contact with you shortly. Look for updates on this case."), className: "case-submit-page" },
|
|
60
160
|
React.createElement(Suspense, { fallback: React.createElement(LoadingIndicator, { size: "sm" }) },
|
|
61
161
|
React.createElement(SubmitCase, { routeProps: props.routeProps }))));
|
|
@@ -100,26 +200,55 @@ function WizardMain(props) {
|
|
|
100
200
|
isBackButtonClickedRef.current = false;
|
|
101
201
|
setIsNextButtonClicked(false);
|
|
102
202
|
};
|
|
203
|
+
const handleReturnToCaseCreation = () => {
|
|
204
|
+
props.setIsAIChatMode(false);
|
|
205
|
+
};
|
|
103
206
|
const customNav = (isExpanded, steps, activeStep, goToStepByIndex) => (React.createElement(WizardNav, { isExpanded: isExpanded }, steps.map((step) => {
|
|
104
207
|
return (React.createElement(WizardNavItem, { key: step.id, id: step.id, content: step.name, isCurrent: activeStep.id === step.id, isDisabled: !step.canJumpTo, stepIndex: step.index, onClick: () => goToStepByIndex(step.index) }));
|
|
105
208
|
})));
|
|
106
|
-
const CustomFooter = (
|
|
209
|
+
const CustomFooter = () => {
|
|
210
|
+
var _a, _b, _c;
|
|
211
|
+
const { activeStep, goToNextStep, goToPrevStep, steps, goToStepByIndex } = useWizardContext(); // Correctly using the context
|
|
212
|
+
const config = {
|
|
213
|
+
appSourceId: appSourceId_ARH,
|
|
214
|
+
authToken: (_b = (_a = window === null || window === void 0 ? void 0 : window.sessionjs) === null || _a === void 0 ? void 0 : _a.getEncodedToken()) !== null && _b !== void 0 ? _b : '',
|
|
215
|
+
packageVersion: (_c = window === null || window === void 0 ? void 0 : window.supportVersionInfo) === null || _c === void 0 ? void 0 : _c.packageVersion,
|
|
216
|
+
appEnv: Env.getEnvName(),
|
|
217
|
+
};
|
|
107
218
|
useEffect(() => {
|
|
108
|
-
if (steps.length > 2 &&
|
|
109
|
-
|
|
219
|
+
if (steps.length > 2 && activeStep.index === 2 && isNextButtonClicked) {
|
|
220
|
+
goToStepByIndex(3);
|
|
110
221
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
222
|
+
}, [activeStep, steps.length, goToStepByIndex]);
|
|
223
|
+
const fetchARHResponse = () => __awaiter(this, void 0, void 0, function* () {
|
|
224
|
+
const detailedQuestion = generateAIQuestion(activeSection || '', product, version, summary, issue, caseType || '');
|
|
225
|
+
// Dispatch request started action
|
|
226
|
+
aiResponseDispatch(requestAIResponse(detailedQuestion));
|
|
227
|
+
try {
|
|
228
|
+
const response = yield askRHDirectAIResponse(detailedQuestion, config);
|
|
229
|
+
aiResponseDispatch(receivedAIResponse(response));
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
const errorMessage = error instanceof Error ? error.message : 'Failed to get AI response';
|
|
233
|
+
aiResponseDispatch(receivedAIResponseError(errorMessage));
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
const handleContinueClick = () => __awaiter(this, void 0, void 0, function* () {
|
|
237
|
+
// Navigate to next step first
|
|
238
|
+
isNextButtonClickedRef.current = true;
|
|
239
|
+
setIsNextButtonClicked(true);
|
|
240
|
+
goToNextStep();
|
|
241
|
+
focusWizardMainPanel();
|
|
242
|
+
// Fetch ARH response if conditions are met
|
|
243
|
+
if (shouldEnableARHServices() && aiServicesAvailable) {
|
|
244
|
+
yield fetchARHResponse();
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
return (React.createElement(WizardNavigation, { routeProps: props.routeProps, onNext: handleContinueClick, onBack: () => {
|
|
119
248
|
isBackButtonClickedRef.current = true;
|
|
120
|
-
goToPrevStep(
|
|
249
|
+
goToPrevStep();
|
|
121
250
|
focusWizardMainPanel();
|
|
122
|
-
}, activeStep: activeStep, onSubmit: onSubmit, confirmSupportModal: props.confirmSupportModal, onShowRestUpdate: (flag) => setShowRestFlag(flag), userSeenRecommendations: userSeenRecommendations, setUserSeenRecommendations: setUserSeenRecommendations, userClickedNextonRecommendationsFn: setUserClickedNextonRecommendations, userClickedNextonRecommendationsValue: userClickedNextonRecommendations, setUserCanNavigateToTroubleshoot: setUserCanNavigateToTroubleshoot, resultsRowRef: resultsRowRef, setUserScrolledLabel: setUserScrolledLabel }));
|
|
251
|
+
}, activeStep: activeStep, onSubmit: onSubmit, confirmSupportModal: props.confirmSupportModal, onShowRestUpdate: (flag) => setShowRestFlag(flag), userSeenRecommendations: userSeenRecommendations, setUserSeenRecommendations: setUserSeenRecommendations, userClickedNextonRecommendationsFn: setUserClickedNextonRecommendations, userClickedNextonRecommendationsValue: userClickedNextonRecommendations, setUserCanNavigateToTroubleshoot: setUserCanNavigateToTroubleshoot, resultsRowRef: resultsRowRef, setUserScrolledLabel: setUserScrolledLabel, isAIChatMode: props.isAIChatMode, onReturnToCaseCreation: handleReturnToCaseCreation }));
|
|
123
252
|
};
|
|
124
253
|
const steps = getStepsSequece(showRestFlag);
|
|
125
254
|
const wizardSteps = steps.map((step) => {
|
|
@@ -130,7 +259,7 @@ function WizardMain(props) {
|
|
|
130
259
|
// in useWizard file then add it to step squences in RouteConstNTypes
|
|
131
260
|
return (React.createElement(React.Fragment, null,
|
|
132
261
|
React.createElement(NewFeatureModal, null),
|
|
133
|
-
steps.length !== 0 && (React.createElement(Route, { path: `${RouteUtils.seBasePath}/(${steps[0].id}|describe-issue|open-case)`, render: () => (React.createElement(Wizard, { isVisitRequired: true, nav: customNav, navAriaLabel: ` navAriaLabel steps `, footer: CustomFooter, onStepChange: onCurrentStepChanged }, wizardSteps)) })),
|
|
262
|
+
steps.length !== 0 && (React.createElement(Route, { path: `${RouteUtils.seBasePath}/(${steps[0].id}|describe-issue|open-case)`, render: () => (React.createElement(Wizard, { isVisitRequired: true, nav: customNav, navAriaLabel: ` navAriaLabel steps `, footer: React.createElement(CustomFooter, null), onStepChange: onCurrentStepChanged }, wizardSteps)) })),
|
|
134
263
|
React.createElement(Route, { exact: true, path: `${RouteUtils.seBasePath}/${AppRouteSections.SUBMIT_CASE}`, render: () => renderSubmitCasePage() })));
|
|
135
264
|
}
|
|
136
265
|
export default WizardMain;
|
|
@@ -3,8 +3,8 @@ import { RouteComponentProps } from 'react-router-dom';
|
|
|
3
3
|
import { IRouteUrlParams, ISectionConfiguration } from '../../reducers/RouteConstNTypes';
|
|
4
4
|
interface IProps {
|
|
5
5
|
routeProps: RouteComponentProps<IRouteUrlParams>;
|
|
6
|
-
onNext: (
|
|
7
|
-
onBack: (
|
|
6
|
+
onNext: () => void;
|
|
7
|
+
onBack: () => void;
|
|
8
8
|
activeStep: Partial<ISectionConfiguration>;
|
|
9
9
|
onSubmit: () => void;
|
|
10
10
|
confirmSupportModal: (hasPreferredSecureSupportAccount: boolean) => void;
|
|
@@ -16,6 +16,8 @@ interface IProps {
|
|
|
16
16
|
setUserCanNavigateToTroubleshoot: (value: React.SetStateAction<boolean>) => void;
|
|
17
17
|
resultsRowRef?: any;
|
|
18
18
|
setUserScrolledLabel: (value: React.SetStateAction<boolean>) => void;
|
|
19
|
+
isAIChatMode?: boolean;
|
|
20
|
+
onReturnToCaseCreation?: () => void;
|
|
19
21
|
}
|
|
20
22
|
declare function WizardNavigation(props: IProps): React.JSX.Element;
|
|
21
23
|
declare namespace WizardNavigation {
|
|
@@ -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;AAOvD,OAAO,EAAoB,eAAe,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAM3G,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACjD,MAAM,EAAE,
|
|
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;AAOvD,OAAO,EAAoB,eAAe,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAM3G,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACjD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,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,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;CACvC;AAGD,iBAAS,gBAAgB,CAAC,KAAK,EAAE,MAAM,qBAiVtC;kBAjVQ,gBAAgB;;;AAmVzB,eAAe,gBAAgB,CAAC"}
|
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import { pcm } from '@cee-eng/hydrajs';
|
|
11
11
|
import { Button, ButtonVariant, WizardFooterWrapper } from '@patternfly/react-core';
|
|
12
|
-
import { useFetch
|
|
12
|
+
import { useFetch } from '@rh-support/components';
|
|
13
13
|
import { GlobalMetadataStateContext, useCanCreateCase } from '@rh-support/react-context';
|
|
14
14
|
import { dtmTrackEventCaseCreationStepEncountered, getResTypeFromUrl, PreviousToNewCaseTypeMap, scrollIntoView, } from '@rh-support/utils';
|
|
15
15
|
import find from 'lodash/find';
|
|
@@ -51,7 +51,6 @@ function WizardNavigation(props) {
|
|
|
51
51
|
const { activeSectionError, isSectionValidFn } = useIsSectionValid(activeSection);
|
|
52
52
|
const [isRecsModalVisible, setIsRecsModalVisible] = useState(false);
|
|
53
53
|
const previousRecommendationTop = useRef(0);
|
|
54
|
-
const previousStep = usePrevious(props.activeStep);
|
|
55
54
|
const { request: resolveSessionRequest } = useFetch(pcm.preCase.session.resolveSession);
|
|
56
55
|
const { sessionRestore: { activeSessionId, sessionResourceTracking }, } = useContext(SessionRestoreStateContext);
|
|
57
56
|
const { SessionResourceSource } = pcm.preCase.session;
|
|
@@ -60,15 +59,12 @@ function WizardNavigation(props) {
|
|
|
60
59
|
}), isEqual);
|
|
61
60
|
const caseDispatch = useCaseDispatch();
|
|
62
61
|
useEffect(() => {
|
|
63
|
-
var _a
|
|
64
|
-
if ((previousStep === null || previousStep === void 0 ? void 0 : previousStep.id) === ((_a = props.activeStep) === null || _a === void 0 ? void 0 : _a.id)) {
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
62
|
+
var _a;
|
|
67
63
|
const isCreatingCase = RouteUtils.getQueryParams(props.routeProps).caseCreate === 'true';
|
|
68
64
|
dtmTrackEventCaseCreationStepEncountered(isCreatingCase,
|
|
69
65
|
// @ts-ignore
|
|
70
66
|
props.activeStep.name, props.activeStep.id === AppRouteSections.GET_SUPPORT ||
|
|
71
|
-
props.activeStep.id === AppRouteSections.TROUBLESHOOT, (
|
|
67
|
+
props.activeStep.id === AppRouteSections.TROUBLESHOOT, (_a = caseState.caseDetails) === null || _a === void 0 ? void 0 : _a.caseNumber, PreviousToNewCaseTypeMap[caseState.caseDetails.caseType], caseState.caseDetails.summary, caseState.caseDetails.product, caseState.caseDetails.version);
|
|
72
68
|
if (props.activeStep.id === AppRouteSections.RESOURCES) {
|
|
73
69
|
window.scrollTo({
|
|
74
70
|
top: 0,
|
|
@@ -76,7 +72,7 @@ function WizardNavigation(props) {
|
|
|
76
72
|
});
|
|
77
73
|
}
|
|
78
74
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
79
|
-
}, [
|
|
75
|
+
}, [props.activeStep.id]);
|
|
80
76
|
const [hasUserScrolled, setHasUserScrolled] = useState(false);
|
|
81
77
|
useEffect(() => {
|
|
82
78
|
if (props.activeStep.id !== (isCaseCreate ? AppRouteSections.SUMMARIZE : AppRouteSections.TROUBLESHOOT) ||
|
|
@@ -139,7 +135,7 @@ function WizardNavigation(props) {
|
|
|
139
135
|
}
|
|
140
136
|
};
|
|
141
137
|
}, [recommendationState.numFound, hasUserScrolled, props, isCaseCreate]);
|
|
142
|
-
const onNext = (
|
|
138
|
+
const onNext = () => {
|
|
143
139
|
var _a;
|
|
144
140
|
updateisNextBtnClickedToShowValidationError(dispatchToRouteReducer, true);
|
|
145
141
|
//handle the new changes for 13406:
|
|
@@ -175,19 +171,19 @@ function WizardNavigation(props) {
|
|
|
175
171
|
// to show all steps, a delay needed in order to steps array
|
|
176
172
|
// to be updated
|
|
177
173
|
window.setTimeout(() => {
|
|
178
|
-
props.onNext && props.onNext(
|
|
174
|
+
props.onNext && props.onNext();
|
|
179
175
|
}, 10);
|
|
180
176
|
}
|
|
181
177
|
else {
|
|
182
|
-
props.onNext && props.onNext(
|
|
178
|
+
props.onNext && props.onNext();
|
|
183
179
|
}
|
|
184
180
|
}
|
|
185
181
|
return;
|
|
186
182
|
};
|
|
187
|
-
const onBack = (
|
|
183
|
+
const onBack = () => {
|
|
188
184
|
if (props.activeStep.hidRestOnBack)
|
|
189
185
|
props.onShowRestUpdate(false);
|
|
190
|
-
props.onBack(
|
|
186
|
+
props.onBack();
|
|
191
187
|
};
|
|
192
188
|
const onRecsFeedbackModalToggle = () => {
|
|
193
189
|
setIsRecsModalVisible((visible) => !visible);
|
|
@@ -253,9 +249,10 @@ function WizardNavigation(props) {
|
|
|
253
249
|
// To handle entitled products
|
|
254
250
|
return (React.createElement(React.Fragment, null,
|
|
255
251
|
React.createElement(WizardFooterWrapper, null,
|
|
256
|
-
props.
|
|
257
|
-
|
|
258
|
-
|
|
252
|
+
props.isAIChatMode ? (React.createElement(Button, { onClick: props.onReturnToCaseCreation, variant: "link", className: "return-to-case-btn" }, t('Return to case creation'))) : (React.createElement(React.Fragment, null,
|
|
253
|
+
props.activeStep.order !== 0 && (React.createElement("button", { onClick: () => onBack(), className: "btn btn-app btn-open-white main-nav-button", "data-tracking-id": `prev-of-${activeSection}`, type: "button", disabled: isDisabledGoBack() }, t('Go back'))),
|
|
254
|
+
React.createElement("button", { disabled: nextButtonDisabledLogic(), onClick: onNext, className: "btn btn-app btn-primary main-nav-button", "data-tracking-id": `next-of-${activeSection}`, type: "button" }, t(props.activeStep.nextButtonLabel)),
|
|
255
|
+
activeSection === AppRouteSections.RESOURCES && isFileRecommendationsTriggered && (React.createElement(Button, { onClick: handleFileRecsSelfSolved, variant: ButtonVariant.secondary, className: "issue-solved-button solved-issue-button", "data-tracking-id": "troubleshoot-self-solved-issue" }, t('I solved my issue'))))),
|
|
259
256
|
React.createElement(RecommendationFeedbackModal, { isModalOpen: isRecsModalVisible, handleModalToggle: onRecsFeedbackModalToggle, modalContent: t(`Great, we're glad that resolved your issue`) }),
|
|
260
257
|
activeSectionError ? (React.createElement("small", { className: "pf-v6-u-align-self-center pf-v6-u-ml-md text-red" }, activeSectionError)) : null)));
|
|
261
258
|
}
|
|
@@ -2,6 +2,7 @@ import 'react-bootstrap-typeahead/css/Typeahead.css';
|
|
|
2
2
|
import '../../css/app.css';
|
|
3
3
|
import '../../css/pagination.css';
|
|
4
4
|
import '../../css/productSelector.css';
|
|
5
|
+
import '../../css/AskRedHat.css';
|
|
5
6
|
import '../../css/results.css';
|
|
6
7
|
import '../shared/fileUpload/css/fileSelector.css';
|
|
7
8
|
import React from 'react';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/wizardLayout/index.tsx"],"names":[],"mappings":"AAAA,OAAO,6CAA6C,CAAC;AACrD,OAAO,mBAAmB,CAAC;AAC3B,OAAO,0BAA0B,CAAC;AAClC,OAAO,+BAA+B,CAAC;AACvC,OAAO,uBAAuB,CAAC;AAC/B,OAAO,2CAA2C,CAAC;AAGnD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAIvD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,SAAS,EAAE,GAAG,CAAC;QACf,oBAAoB,EAAE,GAAG,CAAC;QAC1B,MAAM,EAAE,GAAG,CAAC;QACZ,KAAK,EAAE,GAAG,CAAC;QACX,aAAa,EAAE;YACX,cAAc,EAAE,MAAM,CAAC;YACvB,OAAO,EAAE,MAAM,CAAC;SACnB,CAAC;KACL;IAED,UAAU,QAAQ;QACd,YAAY,EAAE,GAAG,CAAC;KACrB;CACJ;AAED,eAAO,MAAM,YAAY,UAAW,MAAM,sBAYzC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/wizardLayout/index.tsx"],"names":[],"mappings":"AAAA,OAAO,6CAA6C,CAAC;AACrD,OAAO,mBAAmB,CAAC;AAC3B,OAAO,0BAA0B,CAAC;AAClC,OAAO,+BAA+B,CAAC;AACvC,OAAO,yBAAyB,CAAC;AACjC,OAAO,uBAAuB,CAAC;AAC/B,OAAO,2CAA2C,CAAC;AAGnD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAIvD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,UAAU,MAAM;IACZ,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,SAAS,EAAE,GAAG,CAAC;QACf,oBAAoB,EAAE,GAAG,CAAC;QAC1B,MAAM,EAAE,GAAG,CAAC;QACZ,KAAK,EAAE,GAAG,CAAC;QACX,aAAa,EAAE;YACX,cAAc,EAAE,MAAM,CAAC;YACvB,OAAO,EAAE,MAAM,CAAC;SACnB,CAAC;KACL;IAED,UAAU,QAAQ;QACd,YAAY,EAAE,GAAG,CAAC;KACrB;CACJ;AAED,eAAO,MAAM,YAAY,UAAW,MAAM,sBAYzC,CAAC"}
|
|
@@ -2,6 +2,7 @@ import 'react-bootstrap-typeahead/css/Typeahead.css';
|
|
|
2
2
|
import '../../css/app.css';
|
|
3
3
|
import '../../css/pagination.css';
|
|
4
4
|
import '../../css/productSelector.css';
|
|
5
|
+
import '../../css/AskRedHat.css';
|
|
5
6
|
import '../../css/results.css';
|
|
6
7
|
import '../shared/fileUpload/css/fileSelector.css';
|
|
7
8
|
import { useDocumentTitle } from '@rh-support/components';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IAIResponseActionType, IAIResponseState } from '../reducers/AIResponseConstNTypes';
|
|
3
|
+
export declare const AIResponseStateContext: React.Context<IAIResponseState>;
|
|
4
|
+
export declare const AIResponseDispatchContext: React.Context<React.Dispatch<IAIResponseActionType>>;
|
|
5
|
+
export declare function AIResponseContextProvider({ children }: {
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
}): React.JSX.Element;
|
|
8
|
+
export declare const useAIResponseState: () => IAIResponseState;
|
|
9
|
+
export declare const useAIResponseDispatch: () => React.Dispatch<IAIResponseActionType>;
|
|
10
|
+
//# sourceMappingURL=AIResponseContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIResponseContext.d.ts","sourceRoot":"","sources":["../../../src/context/AIResponseContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAA0B,MAAM,mCAAmC,CAAC;AAKpH,eAAO,MAAM,sBAAsB,iCAAgE,CAAC;AACpG,eAAO,MAAM,yBAAyB,sDACgD,CAAC;AAEvF,wBAAgB,yBAAyB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,qBAUpF;AAGD,eAAO,MAAM,kBAAkB,wBAM9B,CAAC;AAEF,eAAO,MAAM,qBAAqB,6CAMjC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React, { useReducer } from 'react';
|
|
2
|
+
import { initialAIResponseState } from '../reducers/AIResponseConstNTypes';
|
|
3
|
+
import { aiResponseReducer } from '../reducers/AIResponseReducer';
|
|
4
|
+
const initialDispatchContext = () => { };
|
|
5
|
+
export const AIResponseStateContext = React.createContext(initialAIResponseState);
|
|
6
|
+
export const AIResponseDispatchContext = React.createContext(initialDispatchContext);
|
|
7
|
+
export function AIResponseContextProvider({ children }) {
|
|
8
|
+
const [aiResponseState, aiResponseDispatch] = useReducer(aiResponseReducer, initialAIResponseState);
|
|
9
|
+
return (React.createElement(AIResponseStateContext.Provider, { value: aiResponseState },
|
|
10
|
+
React.createElement(AIResponseDispatchContext.Provider, { value: aiResponseDispatch }, children)));
|
|
11
|
+
}
|
|
12
|
+
// Custom hooks for easy access
|
|
13
|
+
export const useAIResponseState = () => {
|
|
14
|
+
const context = React.useContext(AIResponseStateContext);
|
|
15
|
+
if (context === undefined) {
|
|
16
|
+
throw new Error('useAIResponseState must be used within a AIResponseContextProvider');
|
|
17
|
+
}
|
|
18
|
+
return context;
|
|
19
|
+
};
|
|
20
|
+
export const useAIResponseDispatch = () => {
|
|
21
|
+
const context = React.useContext(AIResponseDispatchContext);
|
|
22
|
+
if (context === undefined) {
|
|
23
|
+
throw new Error('useAIResponseDispatch must be used within a AIResponseContextProvider');
|
|
24
|
+
}
|
|
25
|
+
return context;
|
|
26
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RootTroubleshootProvider.d.ts","sourceRoot":"","sources":["../../../src/context/RootTroubleshootProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"RootTroubleshootProvider.d.ts","sourceRoot":"","sources":["../../../src/context/RootTroubleshootProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,UAAU,MAAM;IACZ,QAAQ,EAAE,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;CACzC;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,qBAoBrD"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { AttachmentContextProvider } from '../components/shared/fileUpload/reducer/AttachmentReducerContext';
|
|
3
|
+
import { AIResponseContextProvider } from './AIResponseContext';
|
|
3
4
|
import { CaseContextProvider } from './CaseContext';
|
|
4
5
|
import { ClusterRecommendationsContextProvider } from './ClusterRecommendationsContext';
|
|
5
6
|
import { RecommendationContextProvider } from './RecommendationContext';
|
|
@@ -10,10 +11,11 @@ import { TCContextProvider } from './TopContentContext';
|
|
|
10
11
|
export function RootTroubleshootProvider(props) {
|
|
11
12
|
return (React.createElement(RouteContextProvider, null,
|
|
12
13
|
React.createElement(CaseContextProvider, null,
|
|
13
|
-
React.createElement(
|
|
14
|
-
React.createElement(
|
|
15
|
-
React.createElement(
|
|
16
|
-
React.createElement(
|
|
17
|
-
React.createElement(
|
|
18
|
-
React.createElement(
|
|
14
|
+
React.createElement(AIResponseContextProvider, null,
|
|
15
|
+
React.createElement(RecommendationContextProvider, null,
|
|
16
|
+
React.createElement(AttachmentContextProvider, null,
|
|
17
|
+
React.createElement(RulesContextProvider, null,
|
|
18
|
+
React.createElement(ClusterRecommendationsContextProvider, null,
|
|
19
|
+
React.createElement(TCContextProvider, null,
|
|
20
|
+
React.createElement(SessionRestoreContextProvider, null, props.children))))))))));
|
|
19
21
|
}
|