import { cacheOptions, getData } from "@/lib/api"; import { useCallback } from "react"; import { useQuery, useQueryClient } from "react-query"; export type ApiEdit = (key: K, value: T[K]) => void; export function useApi(url: string, enabled?: boolean) { const { data, isLoading, error, ...props } = useQuery( url, () => getData(url), { enabled: enabled || true, ...cacheOptions } ); const queryClient = useQueryClient(); const edit = useCallback( (key: K, value: T[K]) => { queryClient.setQueryData(url, () => ({ ...data, [key]: value } as T)); }, [data] ); if (data && typeof data === "object" && "message" in data && typeof data.message === "string") { return { data: undefined, isLoading, error: data.message || "unknown error", edit, ...props }; } return { data: data as T, isLoading, error: error ? `${error}` : undefined, edit, ...props }; }