mirror of
https://github.com/zadam/trilium.git
synced 2025-12-22 16:20:08 +01:00
chore(script/jsx): get widgets to be interpreted
This commit is contained in:
@@ -70,11 +70,12 @@ export class WidgetsByParent {
|
||||
}
|
||||
|
||||
add(widget: Widget) {
|
||||
if ("parent" in widget) {
|
||||
if ("type" in widget && widget.type === "react-widget") {
|
||||
// React-based script.
|
||||
this.byParent[widget.parent] = this.byParent[widget.parent] || [];
|
||||
this.byParent[widget.parent].push(widget);
|
||||
} else if (widget.parentWidget) {
|
||||
const reactWidget = widget as WidgetDefinition;
|
||||
this.byParent[reactWidget.parent] = this.byParent[reactWidget.parent] || [];
|
||||
this.byParent[reactWidget.parent].push(widget);
|
||||
} else if ("parentWidget" in widget && widget.parentWidget) {
|
||||
this.byParent[widget.parentWidget] = this.byParent[widget.parentWidget] || [];
|
||||
this.byParent[widget.parentWidget].push(widget);
|
||||
} else {
|
||||
@@ -92,7 +93,13 @@ export class WidgetsByParent {
|
||||
// previously, custom widgets were provided as a single instance, but that has the disadvantage
|
||||
// for splits where we actually need multiple instaces and thus having a class to instantiate is better
|
||||
// https://github.com/zadam/trilium/issues/4274
|
||||
.map((w: any) => (w.prototype ? new w() : w))
|
||||
.map((w: any) => {
|
||||
if ("type" in w && w.type === "react-widget") {
|
||||
return w.render();
|
||||
}
|
||||
|
||||
return (w.prototype ? new w() : w);
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -480,6 +480,10 @@ export interface WidgetDefinition {
|
||||
render: () => VNode
|
||||
}
|
||||
|
||||
export interface WidgetDefinitionWithType extends WidgetDefinition {
|
||||
type: "react-widget"
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>This is the main frontend API interface for scripts. All the properties and methods are published in the "api" object
|
||||
* available in the JS frontend notes. You can use e.g. <code>api.showMessage(api.startNote.title);</code></p>
|
||||
@@ -736,7 +740,10 @@ function FrontendScriptApi(this: Api, startNote: FNote, currentNote: FNote, orig
|
||||
this.logSpacedUpdates[noteId].scheduleUpdate();
|
||||
};
|
||||
this.defineWidget = (definition) => {
|
||||
return definition;
|
||||
return {
|
||||
type: "react-widget",
|
||||
...definition
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user