This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

semble / src / webapp / features / cards / lib / mutations / useAddCard.tsx
2.0 kB 49 lines
1import { useMutation, useQueryClient } from '@tanstack/react-query'; 2import { addUrlToLibrary } from '../dal'; 3import { cardKeys } from '../cardKeys'; 4import { collectionKeys } from '@/features/collections/lib/collectionKeys'; 5import { feedKeys } from '@/features/feeds/lib/feedKeys'; 6 7export default function useAddCard() { 8 const queryClient = useQueryClient(); 9 10 const mutation = useMutation({ 11 mutationFn: (newCard: { 12 url: string; 13 note?: string; 14 collectionIds?: string[]; 15 }) => { 16 return addUrlToLibrary(newCard.url, { 17 note: newCard.note, 18 collectionIds: newCard.collectionIds, 19 }); 20 }, 21 22 // Do things that are absolutely necessary and logic related (like query invalidation) in the useMutation callbacks 23 // Do UI related things like redirects or showing toast notifications in mutate callbacks. If the user navigated away from the current screen before the mutation finished, those will purposefully not fire 24 // https://tkdodo.eu/blog/mastering-mutations-in-react-query#some-callbacks-might-not-fire 25 onSuccess: (_data, variables) => { 26 queryClient.invalidateQueries({ queryKey: cardKeys.mine() }); 27 queryClient.invalidateQueries({ queryKey: cardKeys.all() }); 28 queryClient.invalidateQueries({ queryKey: feedKeys.all() }); 29 queryClient.invalidateQueries({ queryKey: collectionKeys.mine() }); 30 queryClient.invalidateQueries({ queryKey: collectionKeys.infinite() }); 31 queryClient.invalidateQueries({ queryKey: collectionKeys.all() }); 32 queryClient.invalidateQueries({ 33 queryKey: collectionKeys.bySembleUrl(variables.url), 34 }); 35 36 // invalidate each collection query individually 37 variables.collectionIds?.forEach((id) => { 38 queryClient.invalidateQueries({ 39 queryKey: collectionKeys.collection(id), 40 }); 41 queryClient.invalidateQueries({ 42 queryKey: collectionKeys.infinite(id), 43 }); 44 }); 45 }, 46 }); 47 48 return mutation; 49}