|
@@ -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>
|
|
|
}
|
|
}
|
|
|
|
|
|