'use client'; import Link from 'next/link'; import { useMemo, useState } from 'react'; import { useQuery } from '@tanstack/react-query'; import { useRouter } from 'next/navigation'; import { Eye, Globe, Plus, Search } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { EmptyStateWithBorder } from '@/components/layout/empty'; import { ErrorInline } from '@/components/layout/error'; import { Input } from '@/components/ui/input'; import { LoadingStateWithBorder } from '@/components/layout/loading'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from '@/components/ui/tooltip'; import { ZoneService, zoneQueryKey } from '@/lib/services/openflare'; import { formatDateTime } from '@/lib/utils'; import { useTranslations } from 'next-intl'; import { ZoneEditorDialog } from './[zoneId]/components/zone-editor-dialog'; import { getErrorMessage } from './components/website-utils'; export default function WebsitesPage() { const t = useTranslations('websites'); const router = useRouter(); const [search, setSearch] = useState(''); const [editorOpen, setEditorOpen] = useState(false); const zonesQuery = useQuery({ queryKey: zoneQueryKey, queryFn: () => ZoneService.list(), }); const zones = useMemo(() => { const keyword = search.trim().toLowerCase(); const list = zonesQuery.data ?? []; if (!keyword) { return list; } return list.filter((zone) => zone.domain.toLowerCase().includes(keyword)); }, [search, zonesQuery.data]); return (

{t('title')}

setSearch(event.target.value)} className='h-8 pl-8 text-xs' />
{zonesQuery.isLoading ? ( ) : zonesQuery.isError ? (
void zonesQuery.refetch()} />
) : zones.length === 0 ? ( ) : (
ID {t('rootDomain')} {t('domainCount')} {t('createdAt')} {t('updatedAt')} {t('actions')} {zones.map((zone) => ( router.push(`/websites/${zone.id}`)} > {zone.id} {zone.domain} {zone.domain_count ?? 0} {formatDateTime(zone.created_at)} {formatDateTime(zone.updated_at)} event.stopPropagation()} >
{t('manageZone')}
))}
)}
); }