| import { ReactNode, useState } from "react" | |
| import { Button } from "@/components/ui/button" | |
| import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog" | |
| import { Textarea } from "@/components/ui/textarea" | |
| export function EditModal({ | |
| existingPrompt, | |
| isEnabled, | |
| className, | |
| children, | |
| onSave, | |
| }: { | |
| existingPrompt: string; | |
| isEnabled: boolean; | |
| className?: string; | |
| children?: ReactNode; | |
| onSave: (newPrompt: string) => void; | |
| }) { | |
| const [draftPrompt, setDraftPrompt] = useState(existingPrompt) | |
| const [isOpen, setOpen] = useState(false) | |
| const handleSubmit = () => { | |
| if (draftPrompt) { | |
| onSave(draftPrompt) | |
| setOpen(false) | |
| } | |
| } | |
| return ( | |
| <Dialog open={isOpen} onOpenChange={(open) => { | |
| if (!open || isEnabled) { | |
| setOpen(open) | |
| if (!open) { | |
| setDraftPrompt(existingPrompt) | |
| } | |
| } | |
| }}> | |
| <DialogTrigger asChild> | |
| {children} | |
| </DialogTrigger> | |
| <DialogContent className="sm:max-w-[425px] text-stone-800"> | |
| <DialogHeader> | |
| <DialogDescription className="w-full text-center text-lg font-bold text-stone-800"> | |
| Edit Prompt | |
| </DialogDescription> | |
| </DialogHeader> | |
| <div className="flex flex-row flex-grow w-full"> | |
| <Textarea | |
| placeholder="Story" | |
| rows={10} | |
| className="w-full bg-neutral-300 text-neutral-800 dark:bg-neutral-300 dark:text-neutral-800 rounded-r-none" | |
| // disabled={atLeastOnePanelIsBusy} | |
| onChange={(e) => { | |
| setDraftPrompt(e.target.value) | |
| }} | |
| onKeyDown={({ key }) => { | |
| if (key === 'Enter') { | |
| handleSubmit() | |
| } | |
| }} | |
| value={draftPrompt} | |
| /> | |
| </div> | |
| <DialogFooter> | |
| <Button | |
| type="button" | |
| variant="outline" | |
| onClick={() => { | |
| setOpen(false) | |
| setDraftPrompt(existingPrompt) | |
| }} | |
| >cancel</Button> | |
| <Button | |
| type="submit" | |
| onClick={() => handleSubmit()} | |
| disabled={!draftPrompt.length} | |
| >Save</Button> | |
| </DialogFooter> | |
| </DialogContent> | |
| </Dialog> | |
| ) | |
| } |