import { useMutation, useQueryClient } from "@tanstack/react-query"; import { useTRPC } from "../trpc"; type TRPCApi = ReturnType; export function useAttachBookmarkAsset( opts?: Parameters[0], ) { const api = useTRPC(); const queryClient = useQueryClient(); return useMutation( api.assets.attachAsset.mutationOptions({ ...opts, onSuccess: (res, req, meta, context) => { queryClient.invalidateQueries(api.bookmarks.getBookmarks.pathFilter()); queryClient.invalidateQueries( api.bookmarks.searchBookmarks.pathFilter(), ); queryClient.invalidateQueries( api.bookmarks.getBookmark.queryFilter({ bookmarkId: req.bookmarkId }), ); queryClient.invalidateQueries(api.assets.list.pathFilter()); return opts?.onSuccess?.(res, req, meta, context); }, }), ); } export function useReplaceBookmarkAsset( opts?: Parameters[0], ) { const api = useTRPC(); const queryClient = useQueryClient(); return useMutation( api.assets.replaceAsset.mutationOptions({ ...opts, onSuccess: (res, req, meta, context) => { queryClient.invalidateQueries(api.bookmarks.getBookmarks.pathFilter()); queryClient.invalidateQueries( api.bookmarks.searchBookmarks.pathFilter(), ); queryClient.invalidateQueries( api.bookmarks.getBookmark.queryFilter({ bookmarkId: req.bookmarkId }), ); queryClient.invalidateQueries(api.assets.list.pathFilter()); return opts?.onSuccess?.(res, req, meta, context); }, }), ); } export function useDetachBookmarkAsset( opts?: Parameters[0], ) { const api = useTRPC(); const queryClient = useQueryClient(); return useMutation( api.assets.detachAsset.mutationOptions({ ...opts, onSuccess: (res, req, meta, context) => { queryClient.invalidateQueries(api.bookmarks.getBookmarks.pathFilter()); queryClient.invalidateQueries( api.bookmarks.searchBookmarks.pathFilter(), ); queryClient.invalidateQueries( api.bookmarks.getBookmark.queryFilter({ bookmarkId: req.bookmarkId }), ); queryClient.invalidateQueries(api.assets.list.pathFilter()); return opts?.onSuccess?.(res, req, meta, context); }, }), ); }