import * as React from "react" import { Button } from "@/components/ui/button" import { Label } from "@/components/ui/label" import { Switch } from "@/components/ui/switch" import { Input } from "@/components/ui/input" import { cn } from "@/lib/utils" export interface LinkEditorProps extends React.HTMLAttributes { defaultUrl?: string defaultText?: string defaultIsNewTab?: boolean onSave: (url: string, text?: string, isNewTab?: boolean) => void } export const LinkEditBlock = React.forwardRef( ({ onSave, defaultIsNewTab, defaultUrl, defaultText, className }, ref) => { const formRef = React.useRef(null) const [url, setUrl] = React.useState(defaultUrl || "") const [text, setText] = React.useState(defaultText || "") const [isNewTab, setIsNewTab] = React.useState(defaultIsNewTab || false) const handleSave = React.useCallback( (e: React.FormEvent) => { e.preventDefault() if (formRef.current) { const isValid = Array.from( formRef.current.querySelectorAll("input"), ).every((input) => input.checkValidity()) if (isValid) { onSave(url, text, isNewTab) } else { formRef.current.querySelectorAll("input").forEach((input) => { if (!input.checkValidity()) { input.reportValidity() } }) } } }, [onSave, url, text, isNewTab], ) React.useImperativeHandle(ref, () => formRef.current as HTMLDivElement) return (
setUrl(e.target.value)} />
setText(e.target.value)} />
) }, ) LinkEditBlock.displayName = "LinkEditBlock" export default LinkEditBlock