import type { Site, SiteAccount } from "@umt/contracts"; import { ArrowRight, Camera, Globe, Plus, RefreshCw } from "lucide-react"; import { useState } from "react"; import { Link } from "react-router"; import { toast } from "sonner"; import { snapshotStale, useSiteAccounts, useSites, useSnapshotSite, useToggleSite } from "~/api/sites.ts"; import { EmptyState, ErrorState, LoadingState } from "~/components/console/empty-state.tsx"; import { consolePath } from "~/components/console/nav.ts"; import { PageHeader } from "~/components/console/page-header.tsx"; import { StatusBadge } from "~/components/console/status-badge.tsx"; import { Button } from "~/components/ui/button.tsx"; import { Switch } from "~/components/ui/switch.tsx"; import { accountSummary, circuitLabel, relTime, SITE_HEALTH } from "~/components/workbench/release-fields.ts"; import { ADAPTER_LABEL, SiteRegisterDialog } from "~/components/workbench/site-register-dialog.tsx"; import { errorMessage } from "~/lib/api.ts"; function SiteCard({ site, accounts }: { site: Site; accounts: SiteAccount[] }) { const toggle = useToggleSite(); const snap = useSnapshotSite(); const health = SITE_HEALTH[site.healthStatus]; const account = accountSummary(accounts); const stale = site.snapshotEnabled && snapshotStale(site); const circuit = circuitLabel(site); return (
{site.key} · {ADAPTER_LABEL[site.adapter]}