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; readOnly?: boolean; } function PromptDialogComponent() { const modalRef = useRef(null); const formRef = useRef(null); const labelRef = useRef(null); const answerRef = useRef(null); const opts = useRef(); const [ value, setValue ] = useState(""); const [ shown, setShown ] = useState(false); const submitValue = useRef(null); useTriliumEvent("showPromptDialog", (newOpts) => { opts.current = newOpts; setValue(newOpts.defaultValue ?? ""); setShown(true); }) return ( { opts.current?.shown?.({ $dialog: refToJQuerySelector(modalRef), $question: refToJQuerySelector(labelRef), $answer: refToJQuerySelector(answerRef), $form: refToJQuerySelector(formRef) }); answerRef.current?.focus(); }} onSubmit={() => { submitValue.current = value; setShown(false); }} onHidden={() => { setShown(false); opts.current?.callback?.(submitValue.current); submitValue.current = null; opts.current = undefined; }} footer={