import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { api, type ListParams } from '../api/client'; export function useMemes(params: ListParams = {}) { return useQuery({ queryKey: ['memes', params], queryFn: () => api.memes.list(params), }); } export function useMeme(id: string | null) { return useQuery({ queryKey: ['meme', id], queryFn: () => api.memes.get(id!), enabled: !!id, }); } export function useTags() { return useQuery({ queryKey: ['tags'], queryFn: () => api.tags.list(), }); } export function useUploadMeme() { const qc = useQueryClient(); return useMutation({ mutationFn: (formData: FormData) => api.memes.upload(formData), onSuccess: () => { qc.invalidateQueries({ queryKey: ['memes'] }); qc.invalidateQueries({ queryKey: ['tags'] }); }, }); } export function useUpdateMeme() { const qc = useQueryClient(); return useMutation({ mutationFn: ({ id, ...body }: { id: string; title?: string; description?: string; tags?: string[] }) => api.memes.update(id, body), onSuccess: (_, vars) => { qc.invalidateQueries({ queryKey: ['memes'] }); qc.invalidateQueries({ queryKey: ['meme', vars.id] }); qc.invalidateQueries({ queryKey: ['tags'] }); }, }); } export function useDeleteMeme() { const qc = useQueryClient(); return useMutation({ mutationFn: (id: string) => api.memes.delete(id), onSuccess: () => { qc.invalidateQueries({ queryKey: ['memes'] }); qc.invalidateQueries({ queryKey: ['tags'] }); }, }); } export function useRescaleMeme() { const qc = useQueryClient(); return useMutation({ mutationFn: ({ id, ...body }: { id: string; width?: number; height?: number; quality?: number; label?: string; }) => api.memes.rescale(id, body), onSuccess: (_, vars) => { qc.invalidateQueries({ queryKey: ['meme', vars.id] }); }, }); }