File size: 1,276 Bytes
7c5ed63 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { api } from '../api';
import type { SessionSummary } from '../types';
export function useSessions() {
return useQuery({
queryKey: ['sessions'] as const,
queryFn: () => api.listSessions(),
});
}
export function useSession(sessionId: string | undefined) {
return useQuery({
queryKey: ['session', sessionId] as const,
queryFn: () => api.getSession(sessionId!),
enabled: !!sessionId,
});
}
export function useDeleteSession() {
const qc = useQueryClient();
return useMutation({
mutationFn: (sessionId: string) => api.deleteSession(sessionId),
onSuccess: (_result, sessionId) => {
qc.setQueryData<SessionSummary[]>(['sessions'], (old) =>
old?.filter((s) => s.sessionId !== sessionId),
);
qc.removeQueries({ queryKey: ['session', sessionId] });
void qc.invalidateQueries({ queryKey: ['sessions'] });
},
});
}
/** Import a debug zip; refreshes the session list on success. */
export function useImportZip() {
const qc = useQueryClient();
return useMutation({
mutationFn: (file: File) => api.importZip(file),
onSuccess: () => {
void qc.invalidateQueries({ queryKey: ['sessions'] });
},
});
}
|