46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
|
import { createPortfolio, updatePortfolio, deletePortfolio } from '../api/portfolioApi';
|
|
import { useNavigate } from 'react-router-dom';
|
|
|
|
export function usePortfolioMutations() {
|
|
const queryClient = useQueryClient();
|
|
const navigate = useNavigate();
|
|
|
|
const create = useMutation({
|
|
mutationFn: (data: { name: string; description?: string; currency?: string }) =>
|
|
createPortfolio(data),
|
|
onSuccess: (res) => {
|
|
queryClient.invalidateQueries({ queryKey: ['portfolios'] });
|
|
navigate(`/portfolios/${res.data.id}`);
|
|
},
|
|
});
|
|
|
|
const update = useMutation({
|
|
mutationFn: ({
|
|
id,
|
|
data,
|
|
}: {
|
|
id: number;
|
|
data: {
|
|
name?: string;
|
|
description?: string;
|
|
currency?: string;
|
|
};
|
|
}) => updatePortfolio(id, data),
|
|
onSuccess: (_, { id }) => {
|
|
queryClient.invalidateQueries({ queryKey: ['portfolios'] });
|
|
queryClient.invalidateQueries({ queryKey: ['portfolio', id] });
|
|
},
|
|
});
|
|
|
|
const remove = useMutation({
|
|
mutationFn: (id: number) => deletePortfolio(id),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: ['portfolios'] });
|
|
navigate('/portfolios');
|
|
},
|
|
});
|
|
|
|
return { create, update, remove };
|
|
}
|