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'] });
    },
  });
}