mirror of
https://github.com/pacnpal/Roo-Code.git
synced 2025-12-20 04:11:10 -05:00
Refactor showWelcome
This commit is contained in:
@@ -10,26 +10,14 @@ import { ExtensionStateContextProvider, useExtensionState } from "./context/Exte
|
|||||||
import { vscode } from "./utils/vscode"
|
import { vscode } from "./utils/vscode"
|
||||||
|
|
||||||
const AppContent = () => {
|
const AppContent = () => {
|
||||||
const { apiConfiguration, shouldShowAnnouncement } = useExtensionState()
|
const { didHydrateState, showWelcome, apiConfiguration, shouldShowAnnouncement } = useExtensionState()
|
||||||
const [showSettings, setShowSettings] = useState(false)
|
const [showSettings, setShowSettings] = useState(false)
|
||||||
const [showHistory, setShowHistory] = useState(false)
|
const [showHistory, setShowHistory] = useState(false)
|
||||||
const [showWelcome, setShowWelcome] = useState<boolean>(false)
|
|
||||||
const [showAnnouncement, setShowAnnouncement] = useState(false)
|
const [showAnnouncement, setShowAnnouncement] = useState(false)
|
||||||
|
|
||||||
const handleMessage = useCallback((e: MessageEvent) => {
|
const handleMessage = useCallback((e: MessageEvent) => {
|
||||||
const message: ExtensionMessage = e.data
|
const message: ExtensionMessage = e.data
|
||||||
switch (message.type) {
|
switch (message.type) {
|
||||||
case "state":
|
|
||||||
let hasKey = false
|
|
||||||
const config = message.state?.apiConfiguration
|
|
||||||
if (config) {
|
|
||||||
const { apiKey, openRouterApiKey, awsAccessKey, vertexProjectId } = config
|
|
||||||
hasKey = [apiKey, openRouterApiKey, awsAccessKey, vertexProjectId].some((key) => key !== undefined)
|
|
||||||
} else {
|
|
||||||
hasKey = false
|
|
||||||
}
|
|
||||||
setShowWelcome(!hasKey)
|
|
||||||
break
|
|
||||||
case "action":
|
case "action":
|
||||||
switch (message.action!) {
|
switch (message.action!) {
|
||||||
case "settingsButtonTapped":
|
case "settingsButtonTapped":
|
||||||
@@ -62,6 +50,10 @@ const AppContent = () => {
|
|||||||
}
|
}
|
||||||
}, [shouldShowAnnouncement])
|
}, [shouldShowAnnouncement])
|
||||||
|
|
||||||
|
if (!didHydrateState) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{showWelcome ? (
|
{showWelcome ? (
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import { ApiConfiguration } from "../../../src/shared/api"
|
|||||||
import { vscode } from "../utils/vscode"
|
import { vscode } from "../utils/vscode"
|
||||||
|
|
||||||
interface ExtensionStateContextType extends ExtensionState {
|
interface ExtensionStateContextType extends ExtensionState {
|
||||||
|
didHydrateState: boolean
|
||||||
|
showWelcome: boolean
|
||||||
setApiConfiguration: (config: ApiConfiguration) => void
|
setApiConfiguration: (config: ApiConfiguration) => void
|
||||||
setMaxRequestsPerTask: (value?: number) => void
|
setMaxRequestsPerTask: (value?: number) => void
|
||||||
setCustomInstructions: (value?: string) => void
|
setCustomInstructions: (value?: string) => void
|
||||||
@@ -22,11 +24,19 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
|
|||||||
shouldShowAnnouncement: false,
|
shouldShowAnnouncement: false,
|
||||||
})
|
})
|
||||||
const [didHydrateState, setDidHydrateState] = useState(false)
|
const [didHydrateState, setDidHydrateState] = useState(false)
|
||||||
|
const [showWelcome, setShowWelcome] = useState(false)
|
||||||
|
|
||||||
const handleMessage = useCallback((event: MessageEvent) => {
|
const handleMessage = useCallback((event: MessageEvent) => {
|
||||||
const message: ExtensionMessage = event.data
|
const message: ExtensionMessage = event.data
|
||||||
if (message.type === "state" && message.state) {
|
if (message.type === "state" && message.state) {
|
||||||
setState(message.state)
|
setState(message.state)
|
||||||
|
const config = message.state?.apiConfiguration
|
||||||
|
const hasKey = config
|
||||||
|
? [config.apiKey, config.openRouterApiKey, config.awsAccessKey, config.vertexProjectId].some(
|
||||||
|
(key) => key !== undefined
|
||||||
|
)
|
||||||
|
: false
|
||||||
|
setShowWelcome(!hasKey)
|
||||||
setDidHydrateState(true)
|
setDidHydrateState(true)
|
||||||
}
|
}
|
||||||
}, [])
|
}, [])
|
||||||
@@ -39,6 +49,8 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
|
|||||||
|
|
||||||
const contextValue: ExtensionStateContextType = {
|
const contextValue: ExtensionStateContextType = {
|
||||||
...state,
|
...state,
|
||||||
|
didHydrateState,
|
||||||
|
showWelcome,
|
||||||
setApiConfiguration: (value) => setState((prevState) => ({ ...prevState, apiConfiguration: value })),
|
setApiConfiguration: (value) => setState((prevState) => ({ ...prevState, apiConfiguration: value })),
|
||||||
setMaxRequestsPerTask: (value) => setState((prevState) => ({ ...prevState, maxRequestsPerTask: value })),
|
setMaxRequestsPerTask: (value) => setState((prevState) => ({ ...prevState, maxRequestsPerTask: value })),
|
||||||
setCustomInstructions: (value) => setState((prevState) => ({ ...prevState, customInstructions: value })),
|
setCustomInstructions: (value) => setState((prevState) => ({ ...prevState, customInstructions: value })),
|
||||||
@@ -46,10 +58,6 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
|
|||||||
setShowAnnouncement: (value) => setState((prevState) => ({ ...prevState, shouldShowAnnouncement: value })),
|
setShowAnnouncement: (value) => setState((prevState) => ({ ...prevState, shouldShowAnnouncement: value })),
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!didHydrateState) {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
return <ExtensionStateContext.Provider value={contextValue}>{children}</ExtensionStateContext.Provider>
|
return <ExtensionStateContext.Provider value={contextValue}>{children}</ExtensionStateContext.Provider>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user