import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { createContact, deleteContact, listContacts, updateContact } from '@/features/contacts/api' import type { ContactFilters, ContactUpdatePayload } from '@/features/contacts/api' export const contactsQueryKey = ['contacts'] as const const serializeFilters = (filters?: ContactFilters) => ({ page: filters?.page ?? 1, pageSize: filters?.pageSize, search: filters?.search ?? '', ownerId: filters?.ownerId ?? null, }) export const useContactsQuery = (filters?: ContactFilters) => useQuery({ queryKey: [...contactsQueryKey, serializeFilters(filters)], queryFn: () => listContacts(filters), }) export const useInvalidateContacts = () => { const queryClient = useQueryClient() return () => queryClient.invalidateQueries({ queryKey: contactsQueryKey }) } export const useCreateContactMutation = () => { const invalidate = useInvalidateContacts() return useMutation({ mutationFn: createContact, onSuccess: () => invalidate(), }) } export const useUpdateContactMutation = () => { const invalidate = useInvalidateContacts() return useMutation({ mutationFn: ({ contactId, payload }: { contactId: number; payload: ContactUpdatePayload }) => updateContact(contactId, payload), onSuccess: () => { invalidate() }, }) } export const useDeleteContactMutation = () => { const invalidate = useInvalidateContacts() return useMutation({ mutationFn: (contactId: number) => deleteContact(contactId), onSuccess: () => invalidate(), }) }