"use client"; import { useEffect, useState } from "react"; import { updateRoomItem } from "@/actions/rooms"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { useServerAction } from "@/hooks/use-server-action"; interface EditItem { id: number; name: string; type: string; x: number; y: number; z: number; rot: number; wallPos: string; extraData: string; } interface Props { roomId: number; item: EditItem | null; open: boolean; onOpenChange: (open: boolean) => void; } export function EditItemDialog({ roomId, item, open, onOpenChange }: Props) { const { run, isPending } = useServerAction(); const [x, setX] = useState("0"); const [y, setY] = useState("0"); const [z, setZ] = useState("0"); const [rot, setRot] = useState("0"); const [wallPos, setWallPos] = useState(""); const [extraData, setExtraData] = useState(""); const isWall = item?.type === "i"; useEffect(() => { if (item) { setX(String(item.x)); setY(String(item.y)); setZ(String(item.z)); setRot(String(item.rot)); setWallPos(item.wallPos); setExtraData(item.extraData); } }, [item]); function handleSave() { if (!item) return; const payload = isWall ? { roomId, itemId: item.id, wallPos, extraData } : { roomId, itemId: item.id, x: Number(x), y: Number(y), z: Number(z), rot: Number(rot), extraData, }; run(() => updateRoomItem(payload), { successMessage: "Item updated and room reloaded", onSuccess: () => onOpenChange(false), }); } return ( Edit furniture {item ? `${item.name} (#${item.id})` : ""}
{isWall ? (
setWallPos(e.target.value)} placeholder=":w=0,0 l=0,0 r" className="font-mono" />

Format: :w=X,Y l=X,Y r

) : ( <>
setX(e.target.value)} className="font-mono" />
setY(e.target.value)} className="font-mono" />
setZ(e.target.value)} className="font-mono" />
setRot(e.target.value)} className="font-mono w-24" />
)}