import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { ideasApi, type QueryIdeasParams } from '../services/ideas'; import type { CreateIdeaDto, UpdateIdeaDto } from '../types/idea'; import { useIdeasStore } from '../store/ideas'; const QUERY_KEY = 'ideas'; export function useIdeasQuery() { const { filters, sorting, pagination } = useIdeasStore(); const params: QueryIdeasParams = { ...filters, ...sorting, ...pagination, }; return useQuery({ queryKey: [QUERY_KEY, params], queryFn: () => ideasApi.getAll(params), }); } export function useIdeaQuery(id: string) { return useQuery({ queryKey: [QUERY_KEY, id], queryFn: () => ideasApi.getOne(id), enabled: !!id, }); } export function useModulesQuery() { return useQuery({ queryKey: [QUERY_KEY, 'modules'], queryFn: () => ideasApi.getModules(), staleTime: 60000, // Cache for 1 minute }); } export function useCreateIdea() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (dto: CreateIdeaDto) => ideasApi.create(dto), onSuccess: () => { queryClient.invalidateQueries({ queryKey: [QUERY_KEY] }); }, }); } export function useUpdateIdea() { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ id, dto }: { id: string; dto: UpdateIdeaDto }) => ideasApi.update(id, dto), onSuccess: () => { queryClient.invalidateQueries({ queryKey: [QUERY_KEY] }); }, }); } export function useDeleteIdea() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (id: string) => ideasApi.delete(id), onSuccess: () => { queryClient.invalidateQueries({ queryKey: [QUERY_KEY] }); }, }); }