Your Monitors
{monitors.length} monitor{monitors.length !== 1 ? 's' : ''} active
Add New Monitor
No monitors yet
{monitor.name}
{monitor.url}
'use client' import { useEffect, useState } from 'react' import { useRouter } from 'next/navigation' import { useQuery } from '@tanstack/react-query' import { monitorAPI } from '@/lib/api' import { isAuthenticated, clearAuth } from '@/lib/auth' export default function DashboardPage() { const router = useRouter() const [showAddForm, setShowAddForm] = useState(false) const [newMonitor, setNewMonitor] = useState({ url: '', name: '', frequency: 60, }) useEffect(() => { if (!isAuthenticated()) { router.push('/login') } }, [router]) const { data, isLoading, refetch } = useQuery({ queryKey: ['monitors'], queryFn: async () => { const response = await monitorAPI.list() return response.monitors }, }) const handleLogout = () => { clearAuth() router.push('/login') } const handleAddMonitor = async (e: React.FormEvent) => { e.preventDefault() try { await monitorAPI.create(newMonitor) setNewMonitor({ url: '', name: '', frequency: 60 }) setShowAddForm(false) refetch() } catch (err) { console.error('Failed to create monitor:', err) } } const handleCheckNow = async (id: string) => { try { await monitorAPI.check(id) alert('Check triggered! Results will appear shortly.') setTimeout(() => refetch(), 2000) } catch (err) { console.error('Failed to trigger check:', err) } } const handleDelete = async (id: string) => { if (!confirm('Are you sure you want to delete this monitor?')) return try { await monitorAPI.delete(id) refetch() } catch (err) { console.error('Failed to delete monitor:', err) } } if (isLoading) { return (
Loading...
{monitors.length} monitor{monitors.length !== 1 ? 's' : ''} active
No monitors yet
{monitor.url}