A bunch more small things

This commit is contained in:
Gregory Schier
2023-02-25 23:04:31 -08:00
parent 83bb18df03
commit d85c021305
25 changed files with 1749 additions and 918 deletions

View File

@@ -0,0 +1,49 @@
import { invoke } from '@tauri-apps/api';
import { convertDates, HttpResponse } from '../lib/models';
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
export function responsesQueryKey(requestId: string) {
return ['responses', { requestId }];
}
export function useResponses(requestId: string) {
return useQuery<HttpResponse[]>({
initialData: [],
queryKey: responsesQueryKey(requestId),
queryFn: async () => {
const responses = (await invoke('responses', { requestId })) as HttpResponse[];
return responses.map(convertDates);
},
});
}
export function useDeleteResponse(response?: HttpResponse) {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async () => {
if (response == null) return;
await invoke('delete_response', { id: response.id });
},
onSuccess: () => {
if (response == null) return;
queryClient.setQueryData(
['responses', { requestId: response.requestId }],
(responses: HttpResponse[] = []) => responses.filter((r) => r.id !== response.id),
);
},
});
}
export function useDeleteAllResponses(requestId?: string) {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async () => {
if (requestId == null) return;
await invoke('delete_all_responses', { requestId });
},
onSuccess: () => {
if (requestId == null) return;
queryClient.setQueryData(['responses', { requestId: requestId }], []);
},
});
}