"use client"; import { zodResolver } from "@hookform/resolvers/zod"; import { Loader2, Lock, LogOut, RefreshCw, Save, Trash2, Unlock, } from "lucide-react"; import { useForm } from "react-hook-form"; import { deleteRoom, roomRconAction, updateRoom } from "@/actions/rooms"; import { useConfirmDialog } from "@/components/admin/confirm-dialog"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Textarea } from "@/components/ui/textarea"; import { useServerAction } from "@/hooks/use-server-action"; import { type UpdateRoomInput, updateRoomSchema } from "@/lib/validators/room"; interface RoomEditFormProps { room: { id: number; name: string; description: string; state: string; usersMax: number; users: number; ownerName: string; }; } export function RoomEditForm({ room }: RoomEditFormProps) { const { run, isPending } = useServerAction(); const { register, handleSubmit, setValue, formState: { errors }, } = useForm({ resolver: zodResolver(updateRoomSchema), defaultValues: { name: room.name, description: room.description, state: room.state as "open" | "locked" | "password" | "invisible", usersMax: room.usersMax, }, }); function onSubmit(data: UpdateRoomInput) { run(() => updateRoom({ id: room.id, ...data }), { successMessage: "Room updated successfully.", }); } const { confirm, dialog: confirmDialog } = useConfirmDialog(); async function handleDelete() { const ok = await confirm({ title: "Delete Room", description: "Are you sure you want to delete this room? This cannot be undone.", confirmLabel: "Delete", variant: "danger", }); if (!ok) return; run(() => deleteRoom({ id: room.id }), { redirectTo: "/admin/rooms" }); } function handleRconAction(action: "kick" | "lock" | "unlock" | "reload") { run(() => roomRconAction({ roomId: room.id, action }), { successMessage: `Action "${action}" executed successfully.`, errorMessage: `Action "${action}" failed. Is the emulator running?`, }); } return (
{confirmDialog}
{/* Edit Form */} Room Details
{errors.name && (

{errors.name.message}

)}