diff --git a/apps/client/src/widgets/react/ReactBasicWidget.tsx b/apps/client/src/widgets/react/ReactBasicWidget.tsx index db8a3f1d4..18e9b87ec 100644 --- a/apps/client/src/widgets/react/ReactBasicWidget.tsx +++ b/apps/client/src/widgets/react/ReactBasicWidget.tsx @@ -8,14 +8,25 @@ export default abstract class ReactBasicWidget extends BasicWidget { abstract get component(): JSX.Element; - doRender() { - const renderContainer = new DocumentFragment(); - render(( - - {this.component} - - ), renderContainer); - this.$widget = $(renderContainer.firstChild as HTMLElement); + doRender() { + this.$widget = renderReactWidget(this, this.component); } } + +/** + * 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) { + const renderContainer = new DocumentFragment(); + render(( + + {el} + + ), renderContainer); + return $(renderContainer.firstChild as HTMLElement); +} \ No newline at end of file diff --git a/apps/client/src/widgets/ribbon_widgets/search_definition.ts b/apps/client/src/widgets/ribbon_widgets/search_definition.ts index b0f19d3ec..2439b590f 100644 --- a/apps/client/src/widgets/ribbon_widgets/search_definition.ts +++ b/apps/client/src/widgets/ribbon_widgets/search_definition.ts @@ -19,6 +19,7 @@ import bulkActionService from "../../services/bulk_action.js"; import { Dropdown } from "bootstrap"; import type FNote from "../../entities/fnote.js"; import type { AttributeType } from "../../entities/fattribute.js"; +import { renderReactWidget } from "../react/ReactBasicWidget.jsx"; const TPL = /*html*/`
@@ -306,7 +307,7 @@ export default class SearchDefinitionWidget extends NoteContextAwareWidget { const actions = bulkActionService.parseActions(this.note); const renderedEls = actions - .map((action) => action.render()) + .map((action) => renderReactWidget(this, action.doRender())) .filter((e) => e) as JQuery[]; this.$actionOptions.empty().append(...renderedEls);