import { ComponentChild, createContext, render, type JSX, type RefObject } from "preact"; import Component from "../../components/component"; import { EventData, EventNames } from "../../components/app_context"; import { useContext } from "preact/hooks"; export const ParentComponent = createContext(null); /** * Takes in a React ref and returns a corresponding JQuery selector. * * @param ref the React ref from which to obtain the jQuery selector. * @returns the corresponding jQuery selector. */ export function refToJQuerySelector(ref: RefObject | null): JQuery { if (ref?.current) { return $(ref.current); } else { return $(); } } /** * Renders a React component and returns the corresponding DOM element wrapped in JQuery. * * @param parentComponent the parent Trilium component for the component to be able to handle events. * @param el the JSX element to render. * @returns the rendered wrapped DOM element. */ export function renderReactWidget(parentComponent: Component, el: JSX.Element) { return renderReactWidgetAtElement(parentComponent, el, new DocumentFragment()).children(); } export function renderReactWidgetAtElement(parentComponent: Component, el: JSX.Element, container: Element | DocumentFragment) { render(( {el} ), container); return $(container) as JQuery; } export function disposeReactWidget(container: Element) { render(null, container); } export function separateByCommas(components: ComponentChild[]) { return components.reduce((acc, item) => (acc.length ? [...acc, ", ", item] : [item]), []); }