| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import { useCallback, useEffect, useState } from "react"
- import { useEvent } from "react-use"
- import { ExtensionMessage } from "../../src/shared/ExtensionMessage"
- import ChatView from "./components/chat/ChatView"
- import HistoryView from "./components/history/HistoryView"
- import SettingsView from "./components/settings/SettingsView"
- import WelcomeView from "./components/welcome/WelcomeView"
- import { ExtensionStateContextProvider, useExtensionState } from "./context/ExtensionStateContext"
- import { vscode } from "./utils/vscode"
- import McpView from "./components/mcp/McpView"
- const AppContent = () => {
- const { didHydrateState, showWelcome, shouldShowAnnouncement } = useExtensionState()
- const [showSettings, setShowSettings] = useState(false)
- const [showHistory, setShowHistory] = useState(false)
- const [showMcp, setShowMcp] = 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 "settingsButtonClicked":
- setShowSettings(true)
- setShowHistory(false)
- setShowMcp(false)
- break
- case "historyButtonClicked":
- setShowSettings(false)
- setShowHistory(true)
- setShowMcp(false)
- break
- case "mcpButtonClicked":
- setShowSettings(false)
- setShowHistory(false)
- setShowMcp(true)
- break
- case "chatButtonClicked":
- setShowSettings(false)
- setShowHistory(false)
- setShowMcp(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)} />}
- {showMcp && <McpView onDone={() => setShowMcp(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)
- setShowMcp(false)
- setShowHistory(true)
- }}
- isHidden={showSettings || showHistory || showMcp}
- showAnnouncement={showAnnouncement}
- hideAnnouncement={() => {
- setShowAnnouncement(false)
- }}
- />
- </>
- )}
- </>
- )
- }
- const App = () => {
- return (
- <ExtensionStateContextProvider>
- <AppContent />
- </ExtensionStateContextProvider>
- )
- }
- export default App
|