"use client"; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { getLayoutConfigurations, deleteLayoutConfiguration } from "@/app/actions/layout-configurations"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Skeleton } from "@/components/ui/skeleton"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger } from "@/components/ui/alert-dialog"; import { toast } from "@/hooks/use-toast"; import { Trash2, Eye, Edit, RefreshCw } from "lucide-react"; interface LayoutConfiguration { id: number; name: string; sections: LayoutSection[]; createdAt: string; updatedAt: string; } interface LayoutSection { id: number; name: string; type: string; sheetName: string; fields: LayoutSectionField[]; } interface LayoutSectionField { id: number; name: string; dataType: string; cellPosition: string; } export function LayoutConfigurationsTable() { const [configurations, setConfigurations] = useState([]); const [loading, setLoading] = useState(true); const [isRefreshing, setIsRefreshing] = useState(false); const router = useRouter(); useEffect(() => { loadConfigurations(); }, []); async function loadConfigurations() { try { const result = await getLayoutConfigurations(); if (result.success) { const configurations = (result.data || []).map((config: any) => ({ ...config, createdAt: config.createdAt instanceof Date ? config.createdAt.toISOString() : String(config.createdAt), updatedAt: config.updatedAt instanceof Date ? config.updatedAt.toISOString() : String(config.updatedAt), })); setConfigurations(configurations); } else { toast({ title: "Error", description: result.error, variant: "destructive", }); } } catch { toast({ title: "Error", description: "Failed to load configurations", variant: "destructive", }); } finally { setLoading(false); setIsRefreshing(false); } } async function refreshConfigurations() { setIsRefreshing(true); await loadConfigurations(); } async function handleDelete(id: number) { try { const result = await deleteLayoutConfiguration(id); if (result.success) { toast({ title: "Success", description: "Configuration deleted successfully", }); loadConfigurations(); } else { toast({ title: "Error", description: result.error, variant: "destructive", }); } } catch { toast({ title: "Error", description: "Failed to delete configuration", variant: "destructive", }); } } if (loading) { return (
{[...Array(3)].map((_, i) => ( ))}
); } if (configurations.length === 0) { return (

No layout configurations found

); } return (
{configurations.map((config) => (
{config.name} Created: {new Date(config.createdAt).toLocaleDateString()}
Delete Configuration Are you sure you want to delete {config.name}? This action cannot be undone. Cancel handleDelete(config.id)} className="bg-destructive text-destructive-foreground" > Delete
{config.sections.length} sections {config.sections.reduce((total, section) => total + section.fields.length, 0)} fields
))}
); }