Skip to content

Commit 2684172

Browse files
authored
Merge pull request #190 from docker/cm/optimistic-secrets
Add optimistic updates to secrets
2 parents 338b151 + c30c77d commit 2684172

File tree

1 file changed

+27
-21
lines changed

1 file changed

+27
-21
lines changed

src/extension/ui/src/queries/useSecrets.ts

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,32 @@ import { v1 } from "@docker/extension-api-client-types";
55
import { Secret } from "../types";
66

77
export function useSecrets(client: v1.DockerDesktopClient) {
8-
const queryClient = useQueryClient();
8+
const queryClient = useQueryClient();
99

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);
2722
}
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

Comments
 (0)