Spaces:
Running
Running
"use client"; | |
import { useState, useEffect } from "react"; | |
import { Button } from "@/components/ui/button"; | |
import { | |
Dialog, | |
DialogContent, | |
DialogHeader, | |
DialogTitle, | |
DialogFooter, | |
DialogClose, | |
} from "@/components/ui/dialog"; | |
import { Input } from "@/components/ui/input"; | |
import { Label } from "@/components/ui/label"; | |
import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; | |
import type { RobotConnection } from "@/types/robot"; | |
interface EditRobotDialogProps { | |
robot: RobotConnection | null; | |
isOpen: boolean; | |
onOpenChange: (open: boolean) => void; | |
onSave: (updatedRobot: RobotConnection) => void; | |
} | |
export function EditRobotDialog({ | |
robot, | |
isOpen, | |
onOpenChange, | |
onSave, | |
}: EditRobotDialogProps) { | |
const [name, setName] = useState(""); | |
const [type, setType] = useState<"so100_follower" | "so100_leader">( | |
"so100_follower" | |
); | |
useEffect(() => { | |
if (robot) { | |
setName(robot.name); | |
setType(robot.robotType || "so100_follower"); | |
} | |
}, [robot]); | |
const handleSave = () => { | |
if (robot) { | |
onSave({ ...robot, name, robotId: name, robotType: type }); | |
} | |
}; | |
if (!robot) return null; | |
return ( | |
<Dialog open={isOpen} onOpenChange={onOpenChange}> | |
<DialogContent className="font-sans bg-background/80 backdrop-blur-sm border-primary/20"> | |
<DialogHeader> | |
<DialogTitle>Configure Robot</DialogTitle> | |
</DialogHeader> | |
<div className="grid gap-4 py-4"> | |
<div className="grid grid-cols-4 items-center gap-4"> | |
<Label htmlFor="name" className="text-right"> | |
Name | |
</Label> | |
<Input | |
id="name" | |
value={name} | |
onChange={(e) => setName(e.target.value)} | |
className="col-span-3 font-mono" | |
/> | |
</div> | |
<div className="grid grid-cols-4 items-center gap-4"> | |
<Label className="text-right">Type</Label> | |
<RadioGroup | |
value={type} | |
onValueChange={(value) => | |
setType(value as "so100_follower" | "so100_leader") | |
} | |
className="col-span-3" | |
> | |
<div className="flex items-center space-x-2"> | |
<RadioGroupItem value="so100_follower" id="r1" /> | |
<Label htmlFor="r1">SO-100 Follower</Label> | |
</div> | |
<div className="flex items-center space-x-2"> | |
<RadioGroupItem value="so100_leader" id="r2" /> | |
<Label htmlFor="r2">SO-100 Leader</Label> | |
</div> | |
</RadioGroup> | |
</div> | |
</div> | |
<DialogFooter> | |
<DialogClose asChild> | |
<Button type="button" variant="secondary"> | |
Cancel | |
</Button> | |
</DialogClose> | |
<DialogClose asChild> | |
<Button type="submit" onClick={handleSave}> | |
Save Changes | |
</Button> | |
</DialogClose> | |
</DialogFooter> | |
</DialogContent> | |
</Dialog> | |
); | |
} | |