import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import * as api from '../lib/api'; // Live Blog Queries export function useLiveBlogs(params: api.FindLiveBlogsParams = {}) { return useQuery({ queryKey: ['liveBlogs', params], queryFn: () => api.fetchLiveBlogs(params), }); } export function useLiveBlog(slug: string) { return useQuery({ queryKey: ['liveBlog', slug], queryFn: () => api.fetchLiveBlogBySlug(slug), enabled: !!slug, }); } export function useLiveBlogById(id: string) { return useQuery({ queryKey: ['liveBlog', id], queryFn: () => api.fetchLiveBlogById(id), enabled: !!id, }); } export function useLiveBlogUpdates(liveBlogId: string, page = 1, limit = 50) { return useQuery({ queryKey: ['liveBlogUpdates', liveBlogId, page, limit], queryFn: () => api.fetchLiveBlogUpdates(liveBlogId, page, limit), enabled: !!liveBlogId, }); } export function useRecentLiveBlogs() { return useQuery({ queryKey: ['recentLiveBlogs'], queryFn: () => api.fetchRecentLiveBlogs(), refetchInterval: 30000, // Refetch every 30 seconds }); } // Live Blog Mutations (Admin) export function useCreateLiveBlogUpdate() { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ liveBlogId, dto }: { liveBlogId: string; dto: api.CreateLiveBlogUpdateDto }) => api.createLiveBlogUpdate(liveBlogId, dto), onSuccess: (data, variables) => { // Invalidate live blog queries queryClient.invalidateQueries({ queryKey: ['liveBlog', variables.liveBlogId] }); queryClient.invalidateQueries({ queryKey: ['liveBlogUpdates', variables.liveBlogId] }); }, }); } export function useUpdateLiveBlogUpdate() { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ liveBlogId, updateId, dto }: { liveBlogId: string; updateId: string; dto: api.UpdateLiveBlogUpdateDto }) => api.updateLiveBlogUpdate(liveBlogId, updateId, dto), onSuccess: (data, variables) => { // Invalidate live blog queries queryClient.invalidateQueries({ queryKey: ['liveBlog', variables.liveBlogId] }); queryClient.invalidateQueries({ queryKey: ['liveBlogUpdates', variables.liveBlogId] }); }, }); } export function useDeleteLiveBlogUpdate() { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ liveBlogId, updateId }: { liveBlogId: string; updateId: string }) => api.deleteLiveBlogUpdate(liveBlogId, updateId), onSuccess: (data, variables) => { // Invalidate live blog queries queryClient.invalidateQueries({ queryKey: ['liveBlog', variables.liveBlogId] }); queryClient.invalidateQueries({ queryKey: ['liveBlogUpdates', variables.liveBlogId] }); }, }); }