Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
| /* | |
| # Copyright 2025 Google LLC | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| */ | |
| import React, {useState} from 'react'; | |
| import LandingScreen from './screens/LandingScreen'; | |
| import JourneySelectionScreen from './screens/JourneySelectionScreen'; | |
| import ChatScreen from './screens/ChatScreen'; | |
| import SummaryScreen from './screens/SummaryScreen'; | |
| import DetailsOverlay from './components/DetailsOverlay'; | |
| import {Tooltip} from 'react-tooltip'; // ADD THIS | |
| import 'react-tooltip/dist/react-tooltip.css'; // ADD THIS | |
| function App() { | |
| const [currentScreen, setCurrentScreen] = useState('landing'); | |
| const [selectedJourney, setSelectedJourney] = useState(null); | |
| const [isDetailsOverlayVisible, setIsDetailsOverlayVisible] = useState(false); | |
| const [caseImagesCache, setCaseImagesCache] = useState({}); | |
| const [summaryData, setSummaryData] = useState(null); | |
| const handleLaunchJourney = (journey) => { | |
| setSelectedJourney(journey); | |
| setSummaryData(null); | |
| setCurrentScreen('chat'); | |
| }; | |
| const handleNavigate = (screen) => { | |
| setCurrentScreen(screen); | |
| }; | |
| const handleShowDetails = (show) => { | |
| setIsDetailsOverlayVisible(show); | |
| }; | |
| const updateImageCache = (caseId, imageUrl) => { | |
| setCaseImagesCache(prevCache => ({ | |
| ...prevCache, | |
| [caseId]: imageUrl | |
| })); | |
| }; | |
| const handleGoToSummary = (data) => { | |
| setSummaryData(data); | |
| setCurrentScreen('summary'); | |
| }; | |
| const renderScreen = () => { | |
| const screenProps = { | |
| onNavigate: handleNavigate, | |
| onShowDetails: () => handleShowDetails(true) | |
| }; | |
| switch (currentScreen) { | |
| case 'journeySelection': | |
| return <JourneySelectionScreen {...screenProps} onLaunchJourney={handleLaunchJourney}/>; | |
| case 'chat': | |
| return ( | |
| <ChatScreen | |
| {...screenProps} | |
| journey={selectedJourney} | |
| cachedImage={caseImagesCache[selectedJourney?.id]} | |
| onImageLoad={(imageUrl) => updateImageCache(selectedJourney.id, imageUrl)} | |
| onGoToSummary={handleGoToSummary} | |
| /> | |
| ); | |
| case 'summary': | |
| return ( | |
| <SummaryScreen | |
| {...screenProps} | |
| journey={selectedJourney} | |
| cachedImage={caseImagesCache[selectedJourney?.id]} | |
| summaryData={summaryData} | |
| /> | |
| ); | |
| case 'landing': | |
| default: | |
| return <LandingScreen | |
| onStartJourney={() => handleNavigate('journeySelection')} | |
| onShowDetails={screenProps.onShowDetails} | |
| />; | |
| } | |
| }; | |
| return ( | |
| <div className="app-container"> | |
| {renderScreen()} | |
| {isDetailsOverlayVisible && <DetailsOverlay onClose={() => handleShowDetails(false)}/>} | |
| <Tooltip anchorSelect=".tooltip-trigger" className="custom-tooltip" arrow={true}/> | |
| </div> | |
| ); | |
| } | |
| export default App; |