1- import { useCallback , useState } from "react"
1+ import { useCallback , useState , useRef } from "react"
22import { VSCodeTextField } from "@vscode/webview-ui-toolkit/react"
33import { useQueryClient } from "@tanstack/react-query"
44
@@ -24,6 +24,10 @@ export const Unbound = ({ apiConfiguration, setApiConfigurationField, routerMode
2424 const [ isInvalidKey , setIsInvalidKey ] = useState < boolean > ( false )
2525 const queryClient = useQueryClient ( )
2626
27+ // Add refs to store timer IDs
28+ const didRefetchTimerRef = useRef < NodeJS . Timeout > ( )
29+ const invalidKeyTimerRef = useRef < NodeJS . Timeout > ( )
30+
2731 const handleInputChange = useCallback (
2832 < K extends keyof ProviderSettings , E > (
2933 field : K ,
@@ -42,18 +46,28 @@ export const Unbound = ({ apiConfiguration, setApiConfigurationField, routerMode
4246 apiConfiguration : apiConfiguration ,
4347 } )
4448
45- const waitForStateUpdate = new Promise < void > ( ( resolve ) => {
49+ const waitForStateUpdate = new Promise < void > ( ( resolve , reject ) => {
50+ const timeoutId = setTimeout ( ( ) => {
51+ window . removeEventListener ( "message" , messageHandler )
52+ reject ( new Error ( "Timeout waiting for state update" ) )
53+ } , 10000 ) // 10 second timeout
54+
4655 const messageHandler = ( event : MessageEvent ) => {
4756 const message = event . data
4857 if ( message . type === "state" ) {
58+ clearTimeout ( timeoutId )
4959 window . removeEventListener ( "message" , messageHandler )
5060 resolve ( )
5161 }
5262 }
5363 window . addEventListener ( "message" , messageHandler )
5464 } )
5565
56- await waitForStateUpdate
66+ try {
67+ await waitForStateUpdate
68+ } catch ( error ) {
69+ console . error ( "Failed to save configuration:" , error )
70+ }
5771 } , [ apiConfiguration ] )
5872
5973 const requestModels = useCallback ( async ( ) => {
@@ -102,10 +116,10 @@ export const Unbound = ({ apiConfiguration, setApiConfigurationField, routerMode
102116
103117 if ( requestModelsResult ) {
104118 setDidRefetch ( true )
105- setTimeout ( ( ) => setDidRefetch ( false ) , 2000 )
119+ didRefetchTimerRef . current = setTimeout ( ( ) => setDidRefetch ( false ) , 3000 )
106120 } else {
107121 setIsInvalidKey ( true )
108- setTimeout ( ( ) => setIsInvalidKey ( false ) , 2000 )
122+ invalidKeyTimerRef . current = setTimeout ( ( ) => setIsInvalidKey ( false ) , 3000 )
109123 }
110124 } , [ saveConfiguration , requestModels ] )
111125
0 commit comments