This repository has no description
2.0 kB
54 lines
1import { createSembleClient } from '@/services/apiClient';
2import { useMutation, useQueryClient } from '@tanstack/react-query';
3import { cardKeys } from '../cardKeys';
4import { collectionKeys } from '@/features/collections/lib/collectionKeys';
5import { noteKeys } from '@/features/notes/lib/noteKeys';
6import { sembleKeys } from '@/features/semble/lib/sembleKeys';
7import { feedKeys } from '@/features/feeds/lib/feedKeys';
8
9export default function useUpdateCardAssociations() {
10 const client = createSembleClient();
11
12 const queryClient = useQueryClient();
13
14 const mutation = useMutation({
15 mutationFn: (updatedCard: {
16 cardId: string;
17 note?: string;
18 addToCollectionIds?: string[];
19 removeFromCollectionIds?: string[];
20 }) => {
21 return client.updateUrlCardAssociations({
22 cardId: updatedCard.cardId,
23 note: updatedCard.note,
24 addToCollections: updatedCard.addToCollectionIds,
25 removeFromCollections: updatedCard.removeFromCollectionIds,
26 });
27 },
28
29 onSuccess: (_data, variables) => {
30 queryClient.invalidateQueries({ queryKey: cardKeys.all() });
31 queryClient.invalidateQueries({ queryKey: noteKeys.all() });
32 queryClient.invalidateQueries({ queryKey: feedKeys.all() });
33 queryClient.invalidateQueries({ queryKey: sembleKeys.all() });
34 queryClient.invalidateQueries({ queryKey: collectionKeys.mine() });
35 queryClient.invalidateQueries({ queryKey: collectionKeys.infinite() });
36 queryClient.invalidateQueries({ queryKey: collectionKeys.all() });
37
38 // invalidate each collection query individually
39 variables.addToCollectionIds?.forEach((id) => {
40 queryClient.invalidateQueries({
41 queryKey: collectionKeys.collection(id),
42 });
43 });
44
45 variables.removeFromCollectionIds?.forEach((id) => {
46 queryClient.invalidateQueries({
47 queryKey: collectionKeys.collection(id),
48 });
49 });
50 },
51 });
52
53 return mutation;
54}