import { useEffect, useMemo } from "react"; import { useMutation } from "@tanstack/react-query"; import { Sparkles, Loader2 } from "lucide-react"; import { analyticsService } from "@/services/analytics.service"; import { useToast } from "@/hooks/use-toast"; interface Props { report_type: string; data: Record; } export default function AiReportNarrative({ report_type, data }: Props) { const { toast } = useToast(); const dataKey = useMemo(() => JSON.stringify(data), [data]); const mutation = useMutation({ mutationFn: (vars: { report_type: string; data: Record }) => analyticsService.getReportNarrative(vars), onError: (err: Error) => { toast({ title: "Summary unavailable", description: err.message || "Could not generate AI summary.", variant: "destructive", }); }, }); useEffect(() => { mutation.mutate({ report_type, data }); // eslint-disable-next-line react-hooks/exhaustive-deps }, [report_type, dataKey]); return (
AI Summary {mutation.isPending && (

Generating summary…

)} {mutation.isError && !mutation.isPending && (

Could not load summary.

)} {!mutation.isPending && mutation.data?.narrative && (

{mutation.data.narrative}

)} {mutation.isSuccess && !mutation.data?.narrative?.trim() && (

No summary returned.

)}
); }