summaryrefslogtreecommitdiff
path: root/apps/web/src/components/editor/rename-dialog.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/src/components/editor/rename-dialog.tsx')
-rw-r--r--apps/web/src/components/editor/rename-dialog.tsx88
1 files changed, 88 insertions, 0 deletions
diff --git a/apps/web/src/components/editor/rename-dialog.tsx b/apps/web/src/components/editor/rename-dialog.tsx
new file mode 100644
index 00000000..ad9833c0
--- /dev/null
+++ b/apps/web/src/components/editor/rename-dialog.tsx
@@ -0,0 +1,88 @@
+import { Button } from "@/components/ui/button";
+import {
+ Dialog,
+ DialogBody,
+ DialogContent,
+ DialogFooter,
+ DialogHeader,
+ DialogTitle,
+} from "@/components/ui/dialog";
+import { Input } from "@/components/ui/input";
+import { useState } from "react";
+import { Label } from "@/components/ui/label";
+
+export function RenameDialog({
+ isOpen,
+ onOpenChange,
+ onConfirm,
+ currentName,
+ title,
+}: {
+ isOpen: boolean;
+ onOpenChange: (open: boolean) => void;
+ onConfirm: (newName: string) => void;
+ currentName: string;
+ title: string;
+}) {
+ const [name, setName] = useState(currentName);
+
+ const handleOpenChange = (open: boolean) => {
+ if (open) {
+ setName(currentName);
+ }
+ onOpenChange(open);
+ };
+
+ const trimmedName = name.trim();
+ const isConfirmDisabled =
+ trimmedName.length === 0 || trimmedName === currentName;
+
+ const handleConfirm = () => {
+ if (isConfirmDisabled) {
+ return;
+ }
+ onConfirm(trimmedName);
+ };
+
+ return (
+ <Dialog open={isOpen} onOpenChange={handleOpenChange}>
+ <DialogContent>
+ <DialogHeader>
+ <DialogTitle>{title}</DialogTitle>
+ </DialogHeader>
+
+ <DialogBody className="gap-3">
+ <Label>New name</Label>
+ <Input
+ value={name}
+ onChange={(e) => setName(e.target.value)}
+ onKeyDown={(e) => {
+ if (e.key === "Enter") {
+ e.preventDefault();
+ handleConfirm();
+ }
+ }}
+ onFocus={(e) => e.target.select()}
+ placeholder="Enter a new name"
+ />
+ </DialogBody>
+
+ <DialogFooter>
+ <Button
+ variant="outline"
+ onClick={(e) => {
+ e.preventDefault();
+ e.stopPropagation();
+ onOpenChange(false);
+ }}
+ >
+ Cancel
+ </Button>
+ <Button disabled={isConfirmDisabled} onClick={handleConfirm}>
+ Rename
+ </Button>
+ </DialogFooter>
+ </DialogContent>
+ </Dialog>
+ );
+}