88 lines
2.7 KiB
TypeScript
88 lines
2.7 KiB
TypeScript
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] });
|
|
},
|
|
});
|
|
} |