import { App, Modal } from "obsidian"; import React, { useState } from "react"; import { Root } from "react-dom/client"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { createPluginRoot } from "@/utils/react/createPluginRoot"; function ExtensionInputModalContent({ onConfirm, onCancel, }: { onConfirm: (extension: string) => void; onCancel: () => void; }) { const [extension, setExtension] = useState(""); const [error, setError] = useState(null); const validateAndConfirm = (value: string) => { if (value.includes(" ")) { setError("Extension cannot contain spaces"); return; } setError(null); onConfirm(value); }; const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === "Enter") { e.preventDefault(); e.stopPropagation(); validateAndConfirm(extension); } }; return (
{ setExtension(e.target.value); setError(null); }} onKeyDown={handleKeyDown} /> {error &&

{error}

}
); } export class ExtensionInputModal extends Modal { private root: Root; constructor( app: App, private onConfirm: (extension: string) => void ) { super(app); // https://docs.obsidian.md/Reference/TypeScript+API/Modal/setTitle // @ts-ignore this.setTitle("Add Extension"); } onOpen() { const { contentEl } = this; this.root = createPluginRoot(contentEl, this.app); const handleConfirm = (extension: string) => { this.onConfirm(extension); this.close(); }; const handleCancel = () => { this.close(); }; this.root.render( ); } onClose() { this.root.unmount(); } }