build 1
This commit is contained in:
78
frontend/src/hooks/useMemes.ts
Normal file
78
frontend/src/hooks/useMemes.ts
Normal file
@@ -0,0 +1,78 @@
|
||||
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] });
|
||||
},
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user