@@ -26,14 +26,26 @@ const filterCatalog = (catalogItems: CatalogItemWithName[], registryItems: { [ke
2626
2727const NEVER_SHOW_AGAIN_KEY = 'registry-sync-never-show-again' ;
2828
29- const debounce = ( func : ( ...args : any [ ] ) => void , delay : number ) => {
30- let timeout : NodeJS . Timeout ;
31- return ( ...args : any [ ] ) => {
32- clearTimeout ( timeout ) ;
33- timeout = setTimeout ( ( ) => func ( ...args ) , delay ) ;
29+ const debounce = ( inner : ( ...args : any [ ] ) => Promise < void > , ms = 0 ) => {
30+ let timer : NodeJS . Timeout | null = null ;
31+ let resolves : ( ( value : void | PromiseLike < void > ) => void ) [ ] = [ ] ;
32+
33+ return function ( ...args : any [ ] ) {
34+ // Run the function after a certain amount of time
35+ if ( timer ) {
36+ clearTimeout ( timer ) ;
37+ }
38+ timer = setTimeout ( ( ) => {
39+ // Get the result of the inner function, then apply it to the resolve function of
40+ // each promise that has been created since the last time the inner function was run
41+ let result = inner ( ...args ) ;
42+ resolves . forEach ( r => r ( result ) ) ;
43+ resolves = [ ] ;
44+ } , ms ) ;
45+
46+ return new Promise ( r => resolves . push ( r ) ) ;
3447 } ;
3548}
36-
3749export const CatalogGrid : React . FC < CatalogGridProps > = ( {
3850 registryItems,
3951 canRegister,
@@ -81,8 +93,8 @@ export const CatalogGrid: React.FC<CatalogGridProps> = ({
8193 setSecrets ( response || [ ] ) ;
8294 }
8395
84- const debouncedAddSecret = debounce ( ( client : v1 . DockerDesktopClient , name : string , value : string ) => {
85- Secrets . addSecret ( client , { name, value, policies : [ MCP_POLICY_NAME ] } )
96+ const debouncedAddSecret = debounce ( async ( client : v1 . DockerDesktopClient , name : string , value : string ) => {
97+ await Secrets . addSecret ( client , { name, value, policies : [ MCP_POLICY_NAME ] } )
8698 loadSecrets ( ) ;
8799 } , 1000 ) ;
88100
@@ -205,8 +217,8 @@ export const CatalogGrid: React.FC<CatalogGridProps> = ({
205217 registered = { Object . keys ( registryItems ) . some ( ( i ) => i === item . name ) }
206218 register = { registerCatalogItem }
207219 unregister = { unregisterCatalogItem }
208- onSecretChange = { ( secret ) => {
209- debouncedAddSecret ( client , secret . name , secret . value ) ;
220+ onSecretChange = { async ( secret ) => {
221+ await debouncedAddSecret ( client , secret . name , secret . value ) ;
210222 } }
211223 secrets = { secrets }
212224 />
@@ -229,7 +241,7 @@ export const CatalogGrid: React.FC<CatalogGridProps> = ({
229241 name . toLowerCase ( ) . includes ( search . toLowerCase ( ) ) && < Grid2 size = { { xs : 12 , sm : 6 , md : 4 } } key = { name } >
230242 < CatalogItemCard item = { catalogItems . find ( ( i ) => i . name === name ) ! } openUrl = { ( ) => {
231243 client . host . openExternal ( Ref . fromRef ( item . ref ) . toURL ( true ) ) ;
232- } } canRegister = { canRegister } registered = { true } register = { registerCatalogItem } unregister = { unregisterCatalogItem } onSecretChange = { ( secret ) => {
244+ } } canRegister = { canRegister } registered = { true } register = { registerCatalogItem } unregister = { unregisterCatalogItem } onSecretChange = { async ( secret ) => {
233245 debouncedAddSecret ( client , secret . name , secret . value ) ;
234246 } } secrets = { secrets } />
235247 </ Grid2 >
0 commit comments