"use client" import { useEffect, useRef, useState } from "react" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Input } from "@/components/ui/input" import { DRIVE_BTN_GHOST, DRIVE_BTN_PRIMARY, DRIVE_DIALOG_BODY, DRIVE_DIALOG_CONTENT, DRIVE_DIALOG_FOOTER, DRIVE_DIALOG_HEADER, DRIVE_DIALOG_OVERLAY, DRIVE_FIELD_CLASS, DRIVE_TEXT_SECONDARY, DRIVE_TEXT_TITLE, } from "@/lib/drive/drive-dialog-styles" import { cn } from "@/lib/utils" export function DriveNameDialog({ open, onOpenChange, title, description, defaultValue, confirmLabel = "Créer", onConfirm, }: { open: boolean onOpenChange: (open: boolean) => void title: string description?: string defaultValue: string confirmLabel?: string onConfirm: (name: string) => void | Promise }) { const [value, setValue] = useState(defaultValue) const [busy, setBusy] = useState(false) const inputRef = useRef(null) useEffect(() => { if (!open) return setValue(defaultValue) const t = setTimeout(() => { const el = inputRef.current if (!el) return el.focus() el.select() }, 0) return () => clearTimeout(t) }, [open, defaultValue]) const submit = async () => { const trimmed = value.trim() if (!trimmed || busy) return setBusy(true) try { await onConfirm(trimmed) onOpenChange(false) } finally { setBusy(false) } } return ( e.preventDefault()} {...(description ? {} : { "aria-describedby": undefined })} > {title} {description ? ( {description} ) : null}
setValue(e.target.value)} onKeyDown={(e) => { if (e.key === "Enter") void submit() }} disabled={busy} autoComplete="off" className={DRIVE_FIELD_CLASS} />
) }