All files / src/hooks useMonitors.ts

100% Statements 45/45
100% Branches 11/11
100% Functions 11/11
100% Lines 45/45

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 591x 1x                 1x   1x 2x 2x 2x 2x 2x   1x 2x 2x 2x 2x 2x 2x   1x 2x 2x 2x 2x 1x 1x 2x 2x   1x 2x 2x 2x 1x 2x 1x 1x 1x 2x 2x   1x 2x 2x 2x 2x 1x 1x 2x 2x  
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
import {
  getMonitors,
  getMonitor,
  createMonitor,
  updateMonitor,
  deleteMonitor,
} from "../api/monitors";
import type { MonitorUpdate, MonitorListResponse } from "../types/monitor";
 
const MONITORS_KEY = "monitors";
 
export function useMonitors(skip: number = 0, limit: number = 100) {
  return useQuery<MonitorListResponse>({
    queryKey: [MONITORS_KEY, skip, limit],
    queryFn: () => getMonitors(skip, limit),
  });
}
 
export function useMonitor(id: string) {
  return useQuery({
    queryKey: [MONITORS_KEY, id],
    queryFn: () => getMonitor(id),
    enabled: !!id,
  });
}
 
export function useCreateMonitor() {
  const queryClient = useQueryClient();
  return useMutation({
    mutationFn: createMonitor,
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: [MONITORS_KEY] });
    },
  });
}
 
export function useUpdateMonitor() {
  const queryClient = useQueryClient();
  return useMutation({
    mutationFn: ({ id, data }: { id: string; data: MonitorUpdate }) =>
      updateMonitor(id, data),
    onSuccess: (_, variables) => {
      queryClient.invalidateQueries({ queryKey: [MONITORS_KEY] });
      queryClient.invalidateQueries({ queryKey: [MONITORS_KEY, variables.id] });
    },
  });
}
 
export function useDeleteMonitor() {
  const queryClient = useQueryClient();
  return useMutation({
    mutationFn: deleteMonitor,
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: [MONITORS_KEY] });
    },
  });
}