Initial commit: CI Agent competitive-intelligence monitoring app
FastAPI + Celery + Next.js + Postgres/Redis app with company monitoring, source collection, LLM-based change analysis, enrichment, and account security (Turnstile, escalating lockout, email verification).
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
"use client";
|
||||
|
||||
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
||||
import { api } from "@/lib/api-client";
|
||||
import type { AlertListFilters, AlertUpdatePayload } from "@/lib/types";
|
||||
|
||||
export function useAlerts(filters: AlertListFilters = {}) {
|
||||
return useQuery({
|
||||
queryKey: ["alerts", filters],
|
||||
queryFn: () => api.listAlerts(filters),
|
||||
});
|
||||
}
|
||||
|
||||
export function useAlert(alertId: string | undefined) {
|
||||
return useQuery({
|
||||
queryKey: ["alerts", "detail", alertId],
|
||||
queryFn: () => api.getAlert(alertId as string),
|
||||
enabled: Boolean(alertId),
|
||||
});
|
||||
}
|
||||
|
||||
function useInvalidateAlerts() {
|
||||
const queryClient = useQueryClient();
|
||||
return () => queryClient.invalidateQueries({ queryKey: ["alerts"] });
|
||||
}
|
||||
|
||||
export function useUpdateAlert(alertId: string) {
|
||||
const invalidate = useInvalidateAlerts();
|
||||
return useMutation({
|
||||
mutationFn: (payload: AlertUpdatePayload) => api.updateAlert(alertId, payload),
|
||||
onSuccess: invalidate,
|
||||
});
|
||||
}
|
||||
|
||||
export function useMarkAlertRead() {
|
||||
const invalidate = useInvalidateAlerts();
|
||||
return useMutation({
|
||||
mutationFn: (alertId: string) => api.markAlertRead(alertId),
|
||||
onSuccess: invalidate,
|
||||
});
|
||||
}
|
||||
|
||||
export function useResolveAlert() {
|
||||
const invalidate = useInvalidateAlerts();
|
||||
return useMutation({
|
||||
mutationFn: (alertId: string) => api.resolveAlert(alertId),
|
||||
onSuccess: invalidate,
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user