'use client'; import { useState } from 'react'; import { Eye } from 'lucide-react'; import { useTranslations } from 'next-intl'; import { EmptyStateWithBorder } from '@/components/layout/empty'; import { ErrorInline } from '@/components/layout/error'; import { LoadingStateWithBorder } from '@/components/layout/loading'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { Tooltip, TooltipContent, TooltipTrigger, } from '@/components/ui/tooltip'; import type { AccessLogItem, AccessLogList } from '@/lib/services/openflare'; import { formatDateTime } from '@/lib/utils'; import { AccessLogDetailDialog } from './access-log-detail-dialog'; import { cacheOutcomeLabel, DETAIL_SORT_OPTIONS, resolveCacheOutcome, type CacheOutcome, } from './access-log-utils'; function cacheOutcomeVariant( outcome: CacheOutcome, ): 'default' | 'secondary' | 'outline' | 'destructive' { switch (outcome) { case 'hit': return 'default'; case 'origin': return 'secondary'; default: return 'outline'; } } function PaginationBar({ page, hasMore, loading, onPrev, onNext, }: { page: number; hasMore: boolean; loading: boolean; onPrev: () => void; onNext: () => void; }) { const t = useTranslations('accessLogs.detail'); return (
{t('page', { page: page + 1 })}
{t('detail.listTitle')}