@@ -5,26 +5,32 @@ import { v1 } from "@docker/extension-api-client-types";
5
5
import { Secret } from "../types" ;
6
6
7
7
export function useSecrets ( client : v1 . DockerDesktopClient ) {
8
- const queryClient = useQueryClient ( ) ;
8
+ const queryClient = useQueryClient ( ) ;
9
9
10
- const { data, isLoading, error } = useQuery ( {
11
- queryKey : [ 'secrets' ] ,
12
- queryFn : async ( ) => {
13
- const secrets = await Secrets . getSecrets ( client ) ;
14
- return secrets ;
15
- } ,
16
- } ) ;
17
- const mutate = useMutation ( {
18
- mutationFn : async ( secret : Secret ) => {
19
- if ( ! secret . value ) {
20
- return Secrets . deleteSecret ( client , secret . name ) ;
21
- }
22
- return Secrets . addSecret ( client , secret ) ;
23
- } ,
24
- onSuccess : ( ) => {
25
- // Invalidate and refetch secrets after mutation
26
- queryClient . invalidateQueries ( { queryKey : [ 'secrets' ] } ) ;
10
+ const { data, isLoading, error } = useQuery ( {
11
+ queryKey : [ "secrets" ] ,
12
+ queryFn : async ( ) => {
13
+ const secrets = await Secrets . getSecrets ( client ) ;
14
+ return secrets ;
15
+ } ,
16
+ } ) ;
17
+ const mutate = useMutation ( {
18
+ mutationFn : async ( secret : Secret ) => {
19
+ queryClient . setQueryData ( [ "secrets" ] , ( old : Secret [ ] ) => {
20
+ if ( ! secret . value ) {
21
+ return old . filter ( ( s ) => s . name !== secret . name ) ;
27
22
}
28
- } ) ;
29
- return { data, isLoading, error, mutate } ;
30
- }
23
+ return [ ...old , secret ] ;
24
+ } ) ;
25
+ if ( ! secret . value ) {
26
+ return Secrets . deleteSecret ( client , secret . name ) ;
27
+ }
28
+ return Secrets . addSecret ( client , secret ) ;
29
+ } ,
30
+ onSuccess : ( ) => {
31
+ // Invalidate and refetch secrets after mutation
32
+ queryClient . invalidateQueries ( { queryKey : [ "secrets" ] } ) ;
33
+ } ,
34
+ } ) ;
35
+ return { data, isLoading, error, mutate } ;
36
+ }
0 commit comments