import { useRef, useState } from "preact/hooks"; import { t } from "../../services/i18n"; import Button from "../react/Button"; import Modal from "../react/Modal"; import { Modal as BootstrapModal } from "bootstrap"; import ReactBasicWidget from "../react/ReactBasicWidget"; import FormTextBox from "../react/FormTextBox"; import FormGroup from "../react/FormGroup"; import { refToJQuerySelector } from "../react/react_utils"; import useTriliumEvent from "../react/hooks"; // JQuery here is maintained for compatibility with existing code. interface ShownCallbackData { $dialog: JQuery; $question: JQuery | null; $answer: JQuery | null; $form: JQuery; } export type PromptShownDialogCallback = ((callback: ShownCallbackData) => void) | null; export interface PromptDialogOptions { title?: string; message?: string; defaultValue?: string; shown?: PromptShownDialogCallback; callback?: (value: string | null) => void; } function PromptDialogComponent() { const modalRef = useRef(null); const formRef = useRef(null); const labelRef = useRef(null); const answerRef = useRef(null); const [ opts, setOpts ] = useState(); const [ value, setValue ] = useState(""); const [ shown, setShown ] = useState(false); useTriliumEvent("showPromptDialog", (opts) => { setOpts(opts); setShown(true); }) return ( { opts?.shown?.({ $dialog: refToJQuerySelector(modalRef), $question: refToJQuerySelector(labelRef), $answer: refToJQuerySelector(answerRef), $form: refToJQuerySelector(formRef) }); answerRef.current?.focus(); }} onSubmit={() => { const modal = BootstrapModal.getOrCreateInstance(modalRef.current!); modal.hide(); opts?.callback?.(value); }} onHidden={() => { opts?.callback?.(null); setShown(false); }} footer={