'use client' import { useState } from 'react' import { useRouter, useParams } from 'next/navigation' import { useQuery } from '@tanstack/react-query' import { monitorAPI } from '@/lib/api' import { DashboardLayout } from '@/components/layout/dashboard-layout' import { Button } from '@/components/ui/button' import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card' import { Badge } from '@/components/ui/badge' import ReactDiffViewer, { DiffMethod } from 'react-diff-viewer-continued' export default function SnapshotDetailsPage() { const router = useRouter() const params = useParams() const monitorId = params?.id as string const snapshotId = params?.snapshotId as string const [showHtml, setShowHtml] = useState(false) const { data: monitorData } = useQuery({ queryKey: ['monitor', monitorId], queryFn: async () => { const response = await monitorAPI.get(monitorId) return response.monitor }, }) const { data: snapshotData, isLoading } = useQuery({ queryKey: ['snapshot', monitorId, snapshotId], queryFn: async () => { const response = await monitorAPI.snapshot(monitorId, snapshotId) return response.snapshot }, }) const { data: historyData } = useQuery({ queryKey: ['history', monitorId], queryFn: async () => { const response = await monitorAPI.history(monitorId, 2) return response.snapshots } }) if (isLoading) { return (

Loading snapshot...

) } const snapshot = snapshotData const monitor = monitorData const previousSnapshot = historyData?.find((s: any) => new Date(s.createdAt) < new Date(snapshot?.createdAt) ) if (!snapshot) { return (

Snapshot not found

) } return ( {/* Page Header */}

Snapshot Details

{monitor && (

{monitor.name}

)}
{/* Snapshot Info Card */} Snapshot Information

Status

{snapshot.changed ? ( Changed ) : ( No Change )}

Created At

{new Date(snapshot.createdAt).toLocaleString(undefined, { year: 'numeric', month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit', })}

HTTP Status

= 400 ? 'destructive' : 'success'}> {snapshot.httpStatus || 'N/A'}

Response Time

{snapshot.responseTime}ms

{snapshot.changePercentage && (

Change Percentage

{Number(snapshot.changePercentage).toFixed(2)}%

)}
{snapshot.errorMessage && (

Error

{snapshot.errorMessage}

)} {/* Change Summary */} {snapshot.summary && (

Change Summary

{snapshot.summary}

)}
{/* Diff Viewer */} {snapshot.changed && previousSnapshot && ( Changes Detected
)} {/* Text Content when no change */} {!snapshot.changed && snapshot.textContent && ( Text Content
                            {snapshot.textContent}
                        
)} {/* HTML Content Toggle */} {snapshot.htmlContent && ( HTML Content {showHtml && (
                                {snapshot.htmlContent}
                            
)}
)}
) }