'use client'; import Link from 'next/link'; import { useState } from 'react'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { useSearchParams } from 'next/navigation'; import { ArrowLeft, MapPin, Trash2 } from 'lucide-react'; import { toast } from 'sonner'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from '@/components/ui/alert-dialog'; 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 { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { OriginService } from '@/lib/services/openflare'; import { formatDateTime } from '@/lib/utils'; import { useTranslations } from 'next-intl'; import { OriginEditorDialog } from '../components/origin-editor-dialog'; export function OriginDetailPageClient() { const t = useTranslations('origins'); const tc = useTranslations('common'); const searchParams = useSearchParams(); const queryClient = useQueryClient(); const originId = searchParams.get('id')?.trim() ?? ''; const parsedId = Number(originId); const enabled = originId !== '' && Number.isFinite(parsedId); const [editorOpen, setEditorOpen] = useState(false); const [deleteOpen, setDeleteOpen] = useState(false); const originQuery = useQuery({ queryKey: ['openflare', 'origins', originId], queryFn: () => OriginService.getById(parsedId), enabled, }); const deleteMutation = useMutation({ mutationFn: () => OriginService.deleteById(parsedId), onSuccess: async () => { toast.success(t('deleted')); await queryClient.invalidateQueries({ queryKey: ['openflare', 'origins'], }); window.location.href = '/origins'; }, onError: (error) => { toast.error(error instanceof Error ? error.message : t('deleteFailed')); }, }); const origin = originQuery.data; if (!enabled) { return (
{origin.address}
{t('boundRoutes')}
{t('createdAt')}
{formatDateTime(origin.created_at)}
{t('updatedAt')}
{formatDateTime(origin.updated_at)}
{t('remark')}
{origin.remark || t('noRemark')}
{t('relatedRoutesDesc')}