"use client"; import React, { useState } from 'react'; import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from '@/components/ui/alert-dialog'; import { MoreVertical, Plus } from 'lucide-react'; const Adresseliste = () => { // Sample initial data const [personer, setPersoner] = useState([ { id: 1, navn: 'Anders Andersen', email: 'anders@example.com', telefon: '+45 12 34 56 78' }, { id: 2, navn: 'Birgitte Bertelsen', email: 'birgitte@example.com', telefon: '+45 23 45 67 89' }, { id: 3, navn: 'Christian Christensen', email: 'christian@example.com', telefon: '+45 34 56 78 90' } ]); // State for handling the edit/add modal const [modalOpen, setModalOpen] = useState(false); const [isEditing, setIsEditing] = useState(false); const [currentPerson, setCurrentPerson] = useState({ id: null, navn: '', email: '', telefon: '' }); // State for delete confirmation dialog const [deleteDialogOpen, setDeleteDialogOpen] = useState(false); const [personToDelete, setPersonToDelete] = useState(null); // Handle opening the add modal const handleAdd = () => { setIsEditing(false); setCurrentPerson({ id: null, navn: '', email: '', telefon: '' }); setModalOpen(true); }; // Handle opening the edit modal const handleEdit = (person) => { setIsEditing(true); setCurrentPerson({ ...person }); setModalOpen(true); }; // Handle input changes in the modal const handleInputChange = (e) => { const { name, value } = e.target; setCurrentPerson({ ...currentPerson, [name]: value }); }; // Handle saving a new or edited person const handleSave = () => { if (isEditing) { // Update existing person setPersoner(personer.map(person => person.id === currentPerson.id ? currentPerson : person )); } else { // Add new person const newId = personer.length > 0 ? Math.max(...personer.map(p => p.id)) + 1 : 1; setPersoner([...personer, { ...currentPerson, id: newId }]); } setModalOpen(false); }; // Open delete confirmation dialog const openDeleteDialog = (person) => { setPersonToDelete(person); setDeleteDialogOpen(true); }; // Handle deleting a person const handleDelete = () => { if (personToDelete) { setPersoner(personer.filter(person => person.id !== personToDelete.id)); setDeleteDialogOpen(false); setPersonToDelete(null); } }; return (

Adresseliste - example 1

{/* Custom table using div structure */}
{/* Table Header */}
Navn
E-mail
Telefonnummer
{/* Table Body */} {personer.map((person) => (
{person.navn}
{person.email}
{person.telefon}
handleEdit(person)}> Rediger openDeleteDialog(person)} className="text-red-600"> Slet
))} {/* Empty state */} {personer.length === 0 && (
Ingen kontakter tilføjet endnu. Klik på "Tilføj" for at tilføje en ny kontakt.
)}
{/* Add/Edit Modal */} {isEditing ? 'Rediger kontakt' : 'Tilføj ny kontakt'} {isEditing ? 'Rediger kontaktoplysningerne herunder.' : 'Indtast kontaktoplysninger for den nye person.'}
{/* Delete Confirmation Dialog */} Er du sikker? Dette vil permanent slette {personToDelete?.navn} fra adresselisten. Denne handling kan ikke fortrydes. Annuller Slet
); }; export default Adresseliste;