@@ -26,14 +26,26 @@ const filterCatalog = (catalogItems: CatalogItemWithName[], registryItems: { [ke
26
26
27
27
const NEVER_SHOW_AGAIN_KEY = 'registry-sync-never-show-again' ;
28
28
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 ) ) ;
34
47
} ;
35
48
}
36
-
37
49
export const CatalogGrid : React . FC < CatalogGridProps > = ( {
38
50
registryItems,
39
51
canRegister,
@@ -81,8 +93,8 @@ export const CatalogGrid: React.FC<CatalogGridProps> = ({
81
93
setSecrets ( response || [ ] ) ;
82
94
}
83
95
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 ] } )
86
98
loadSecrets ( ) ;
87
99
} , 1000 ) ;
88
100
@@ -205,8 +217,8 @@ export const CatalogGrid: React.FC<CatalogGridProps> = ({
205
217
registered = { Object . keys ( registryItems ) . some ( ( i ) => i === item . name ) }
206
218
register = { registerCatalogItem }
207
219
unregister = { unregisterCatalogItem }
208
- onSecretChange = { ( secret ) => {
209
- debouncedAddSecret ( client , secret . name , secret . value ) ;
220
+ onSecretChange = { async ( secret ) => {
221
+ await debouncedAddSecret ( client , secret . name , secret . value ) ;
210
222
} }
211
223
secrets = { secrets }
212
224
/>
@@ -229,7 +241,7 @@ export const CatalogGrid: React.FC<CatalogGridProps> = ({
229
241
name . toLowerCase ( ) . includes ( search . toLowerCase ( ) ) && < Grid2 size = { { xs : 12 , sm : 6 , md : 4 } } key = { name } >
230
242
< CatalogItemCard item = { catalogItems . find ( ( i ) => i . name === name ) ! } openUrl = { ( ) => {
231
243
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 ) => {
233
245
debouncedAddSecret ( client , secret . name , secret . value ) ;
234
246
} } secrets = { secrets } />
235
247
</ Grid2 >
0 commit comments