import { useContext, useEffect, useRef, useState } from "preact/hooks"; import Modal from "../react/Modal"; import "./PopupEditor.css"; import { useNoteContext, useTriliumEvent } from "../react/hooks"; import NoteTitleWidget from "../note_title"; import NoteIcon from "../note_icon"; import NoteContext from "../../components/note_context"; import { NoteContextContext, ParentComponent } from "../react/react_utils"; import NoteDetail from "../NoteDetail"; import { ComponentChildren } from "preact"; import NoteList from "../collections/NoteList"; import StandaloneRibbonAdapter from "../ribbon/components/StandaloneRibbonAdapter"; import FormattingToolbar from "../ribbon/FormattingToolbar"; export default function PopupEditor() { const [ shown, setShown ] = useState(false); const parentComponent = useContext(ParentComponent); const [ noteContext, setNoteContext ] = useState(new NoteContext("_popup-editor")); useTriliumEvent("openInPopup", async ({ noteIdOrPath }) => { const noteContext = new NoteContext("_popup-editor"); await noteContext.setNote(noteIdOrPath, { viewScope: { readOnlyTemporarilyDisabled: true } }); setNoteContext(noteContext); setShown(true); }); // Add a global class to be able to handle issues with z-index due to rendering in a popup. useEffect(() => { document.body.classList.toggle("popup-editor-open", shown); }, [shown]); return ( } className="popup-editor-dialog" size="lg" show={shown} onShown={() => { parentComponent?.handleEvent("focusOnDetail", { ntxId: noteContext.ntxId }); }} onHidden={() => setShown(false)} > ) } export function DialogWrapper({ children }: { children: ComponentChildren }) { const { note } = useNoteContext(); const wrapperRef = useRef(null); const [ hasTint, setHasTint ] = useState(false); // Apply the tinted-dialog class only if the custom color CSS class specifies a hue useEffect(() => { if (!wrapperRef.current) return; const customHue = getComputedStyle(wrapperRef.current).getPropertyValue("--custom-color-hue"); setHasTint(!!customHue); }, [ note ]); return (
{children}
) } export function TitleRow() { return (
) }