import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { Voice } from '../types'; import { createVoice, deleteVoice, fetchAssistants, fetchVoices, updateVoice, } from './backendApi'; import { queryKeys } from './queryKeys'; export const useAssistantsQuery = () => useQuery({ queryKey: queryKeys.assistants, queryFn: fetchAssistants, }); export const useVoicesQuery = () => useQuery({ queryKey: queryKeys.voices, queryFn: fetchVoices, }); export const useCreateVoiceMutation = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: (payload: Partial) => createVoice(payload), onSuccess: (created) => { queryClient.setQueryData(queryKeys.voices, (prev = []) => [created, ...prev]); }, }); }; export const useUpdateVoiceMutation = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ id, data }: { id: string; data: Partial }) => updateVoice(id, data), onSuccess: (updated) => { queryClient.setQueryData(queryKeys.voices, (prev = []) => prev.map((voice) => (voice.id === updated.id ? updated : voice)) ); }, }); }; export const useDeleteVoiceMutation = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: async (id: string) => { await deleteVoice(id); return id; }, onSuccess: (deletedId) => { queryClient.setQueryData(queryKeys.voices, (prev = []) => prev.filter((voice) => voice.id !== deletedId) ); }, }); };