mirror of
https://github.com/pacnpal/Roo-Code.git
synced 2025-12-20 12:21:13 -05:00
87 lines
2.3 KiB
TypeScript
87 lines
2.3 KiB
TypeScript
import { useCallback, useEffect, useState } from "react"
|
|
import { useEvent } from "react-use"
|
|
import { ExtensionMessage } from "../../src/shared/ExtensionMessage"
|
|
import ChatView from "./components/ChatView"
|
|
import HistoryView from "./components/HistoryView"
|
|
import SettingsView from "./components/SettingsView"
|
|
import WelcomeView from "./components/WelcomeView"
|
|
import { ExtensionStateContextProvider, useExtensionState } from "./context/ExtensionStateContext"
|
|
import { vscode } from "./utils/vscode"
|
|
|
|
const AppContent = () => {
|
|
const { didHydrateState, showWelcome, shouldShowAnnouncement } = useExtensionState()
|
|
const [showSettings, setShowSettings] = useState(false)
|
|
const [showHistory, setShowHistory] = useState(false)
|
|
const [showAnnouncement, setShowAnnouncement] = useState(false)
|
|
|
|
const handleMessage = useCallback((e: MessageEvent) => {
|
|
const message: ExtensionMessage = e.data
|
|
switch (message.type) {
|
|
case "action":
|
|
switch (message.action!) {
|
|
case "settingsButtonTapped":
|
|
setShowSettings(true)
|
|
setShowHistory(false)
|
|
break
|
|
case "historyButtonTapped":
|
|
setShowSettings(false)
|
|
setShowHistory(true)
|
|
break
|
|
case "chatButtonTapped":
|
|
setShowSettings(false)
|
|
setShowHistory(false)
|
|
break
|
|
}
|
|
break
|
|
}
|
|
}, [])
|
|
|
|
useEvent("message", handleMessage)
|
|
|
|
useEffect(() => {
|
|
if (shouldShowAnnouncement) {
|
|
setShowAnnouncement(true)
|
|
vscode.postMessage({ type: "didShowAnnouncement" })
|
|
}
|
|
}, [shouldShowAnnouncement])
|
|
|
|
if (!didHydrateState) {
|
|
return null
|
|
}
|
|
|
|
return (
|
|
<>
|
|
{showWelcome ? (
|
|
<WelcomeView />
|
|
) : (
|
|
<>
|
|
{showSettings && <SettingsView onDone={() => setShowSettings(false)} />}
|
|
{showHistory && <HistoryView onDone={() => setShowHistory(false)} />}
|
|
{/* Do not conditionally load ChatView, it's expensive and there's state we don't want to lose (user input, disableInput, askResponse promise, etc.) */}
|
|
<ChatView
|
|
showHistoryView={() => {
|
|
setShowSettings(false)
|
|
setShowHistory(true)
|
|
}}
|
|
isHidden={showSettings || showHistory}
|
|
showAnnouncement={showAnnouncement}
|
|
hideAnnouncement={() => {
|
|
setShowAnnouncement(false)
|
|
}}
|
|
/>
|
|
</>
|
|
)}
|
|
</>
|
|
)
|
|
}
|
|
|
|
const App = () => {
|
|
return (
|
|
<ExtensionStateContextProvider>
|
|
<AppContent />
|
|
</ExtensionStateContextProvider>
|
|
)
|
|
}
|
|
|
|
export default App
|