placebo.mk/frontend/src/queries/live-blogs.ts
2026-01-29 04:01:55 +01:00

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] });
},
});
}