"use client" import { useState } from "react" import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query" import { useToast } from "@/components/ui/use-toast" import { Button } from "@/components/ui/button" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import { Badge } from "@/components/ui/badge" import { getStatusPages, deleteStatusPage, getStatusPageUrl, type StatusPage, } from "@/lib/statuspages" import { MoreHorizontal, Plus, ExternalLink, Globe, Lock } from "lucide-react" import { StatusPageDialog } from "./status-page-dialog" import { Link } from "@/components/router" export function StatusPagesTable() { const { toast } = useToast() const queryClient = useQueryClient() const [dialogOpen, setDialogOpen] = useState(false) const [editingPage, setEditingPage] = useState(null) const { data: pages, isLoading } = useQuery({ queryKey: ["status-pages"], queryFn: getStatusPages, }) const deleteMutation = useMutation({ mutationFn: deleteStatusPage, onSuccess: () => { toast({ title: "Status page deleted successfully" }) queryClient.invalidateQueries({ queryKey: ["status-pages"] }) }, onError: (error: Error) => { toast({ title: "Failed to delete status page", description: error.message, variant: "destructive", }) }, }) const handleEdit = (page: StatusPage) => { setEditingPage(page) setDialogOpen(true) } const handleAdd = () => { setEditingPage(null) setDialogOpen(true) } const handleDelete = (id: string) => { if (confirm("Are you sure you want to delete this status page?")) { deleteMutation.mutate(id) } } if (isLoading) { return
Loading...
} return (

Status Pages

Name Slug Monitors Visibility Actions {pages?.length === 0 ? ( No status pages yet. Create one to share your service status publicly. ) : ( pages?.map((page) => ( {page.name} {page.slug} {page.monitor_count} {page.public ? ( Public ) : ( Private )} handleEdit(page)}> Edit {page.public && ( View Public Page )} handleDelete(page.id)} className="text-destructive" > Delete )) )}
) }