build collections

This commit is contained in:
2026-03-28 01:34:27 -05:00
parent 2c128a404e
commit 8b502119f1
12 changed files with 704 additions and 114 deletions

View File

@@ -1,6 +1,54 @@
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { api, type ListParams } from '../api/client';
export function useCollections() {
return useQuery({
queryKey: ['collections'],
queryFn: () => api.collections.list(),
staleTime: 30_000,
});
}
export function useCreateCollection() {
const qc = useQueryClient();
return useMutation({
mutationFn: (name: string) => api.collections.create(name),
onSuccess: () => qc.invalidateQueries({ queryKey: ['collections'] }),
});
}
export function useRenameCollection() {
const qc = useQueryClient();
return useMutation({
mutationFn: ({ id, name }: { id: number; name: string }) => api.collections.rename(id, name),
onSuccess: () => qc.invalidateQueries({ queryKey: ['collections'] }),
});
}
export function useDeleteCollection() {
const qc = useQueryClient();
return useMutation({
mutationFn: (id: number) => api.collections.delete(id),
onSuccess: () => {
qc.invalidateQueries({ queryKey: ['collections'] });
qc.invalidateQueries({ queryKey: ['memes'] });
},
});
}
export function useMoveMeme() {
const qc = useQueryClient();
return useMutation({
mutationFn: ({ id, collection_id }: { id: string; collection_id: number }) =>
api.memes.move(id, collection_id),
onSuccess: (_, vars) => {
qc.invalidateQueries({ queryKey: ['memes'] });
qc.invalidateQueries({ queryKey: ['meme', vars.id] });
qc.invalidateQueries({ queryKey: ['collections'] });
},
});
}
export function useMemes(params: ListParams = {}) {
return useQuery({
queryKey: ['memes', params],