mirror of
https://github.com/zadam/trilium.git
synced 2025-11-10 23:35:50 +01:00
refactor(react/type_widgets): bring back execute with type widget
This commit is contained in:
@@ -19,6 +19,7 @@ import { isMobile } from "../services/utils";
|
|||||||
* - Caches the note type elements based on what the user has accessed, in order to quickly load it again.
|
* - Caches the note type elements based on what the user has accessed, in order to quickly load it again.
|
||||||
*/
|
*/
|
||||||
export default function NoteDetail() {
|
export default function NoteDetail() {
|
||||||
|
const containerRef = useRef<HTMLDivElement>(null);
|
||||||
const { note, type, mime, noteContext, parentComponent } = useNoteInfo();
|
const { note, type, mime, noteContext, parentComponent } = useNoteInfo();
|
||||||
const { ntxId, viewScope } = noteContext ?? {};
|
const { ntxId, viewScope } = noteContext ?? {};
|
||||||
const isFullHeight = checkFullHeight(noteContext, type);
|
const isFullHeight = checkFullHeight(noteContext, type);
|
||||||
@@ -103,8 +104,22 @@ export default function NoteDetail() {
|
|||||||
document.body.classList.toggle("force-fixed-tree", hasFixedTree);
|
document.body.classList.toggle("force-fixed-tree", hasFixedTree);
|
||||||
}, [ note ]);
|
}, [ note ]);
|
||||||
|
|
||||||
|
useTriliumEvent("executeWithTypeWidget", ({ resolve, ntxId: eventNtxId }) => {
|
||||||
|
if (eventNtxId !== ntxId || !activeNoteType || !containerRef.current) return;
|
||||||
|
|
||||||
|
const classNameToSearch = TYPE_MAPPINGS[activeNoteType].className;
|
||||||
|
const componentEl = containerRef.current.querySelector<HTMLElement>(`.${classNameToSearch}`);
|
||||||
|
if (!componentEl) return;
|
||||||
|
|
||||||
|
const component = glob.getComponentByEl(componentEl);
|
||||||
|
resolve(component);
|
||||||
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div class={`note-detail ${isFullHeight ? "full-height" : ""}`}>
|
<div
|
||||||
|
ref={containerRef}
|
||||||
|
class={`note-detail ${isFullHeight ? "full-height" : ""}`}
|
||||||
|
>
|
||||||
{Object.entries(noteTypesToRender.current).map(([ type, Element ]) => {
|
{Object.entries(noteTypesToRender.current).map(([ type, Element ]) => {
|
||||||
return <NoteDetailWrapper
|
return <NoteDetailWrapper
|
||||||
Element={Element}
|
Element={Element}
|
||||||
|
|||||||
@@ -1,67 +1,3 @@
|
|||||||
import { t } from "../services/i18n.js";
|
|
||||||
import NoteContextAwareWidget from "./note_context_aware_widget.js";
|
|
||||||
import protectedSessionHolder from "../services/protected_session_holder.js";
|
|
||||||
import SpacedUpdate from "../services/spaced_update.js";
|
|
||||||
import server from "../services/server.js";
|
|
||||||
import appContext, { type CommandListenerData, type EventData } from "../components/app_context.js";
|
|
||||||
import keyboardActionsService from "../services/keyboard_actions.js";
|
|
||||||
import noteCreateService from "../services/note_create.js";
|
|
||||||
import attributeService from "../services/attributes.js";
|
|
||||||
|
|
||||||
import EmptyTypeWidget from "./type_widgets/empty.js";
|
|
||||||
import EditableTextTypeWidget from "./type_widgets/editable_text.js";
|
|
||||||
import EditableCodeTypeWidget from "./type_widgets/editable_code.js";
|
|
||||||
import FileTypeWidget from "./type_widgets/file.js";
|
|
||||||
import ImageTypeWidget from "./type_widgets/image.js";
|
|
||||||
import RenderTypeWidget from "./type_widgets/render.js";
|
|
||||||
import RelationMapTypeWidget from "./type_widgets/relation_map.js";
|
|
||||||
import CanvasTypeWidget from "./type_widgets/canvas.js";
|
|
||||||
import ProtectedSessionTypeWidget from "./type_widgets/protected_session.js";
|
|
||||||
import BookTypeWidget from "./type_widgets/book.js";
|
|
||||||
import ReadOnlyTextTypeWidget from "./type_widgets/read_only_text.js";
|
|
||||||
import ReadOnlyCodeTypeWidget from "./type_widgets/read_only_code.js";
|
|
||||||
import NoneTypeWidget from "./type_widgets/none.js";
|
|
||||||
import NoteMapTypeWidget from "./type_widgets/note_map.js";
|
|
||||||
import WebViewTypeWidget from "./type_widgets/web_view.js";
|
|
||||||
import DocTypeWidget from "./type_widgets/doc.js";
|
|
||||||
import ContentWidgetTypeWidget from "./type_widgets/content_widget.js";
|
|
||||||
import AttachmentListTypeWidget from "./type_widgets/attachment_list.js";
|
|
||||||
import AttachmentDetailTypeWidget from "./type_widgets/attachment_detail.js";
|
|
||||||
import MindMapWidget from "./type_widgets/mind_map.js";
|
|
||||||
import utils from "../services/utils.js";
|
|
||||||
import type { NoteType } from "../entities/fnote.js";
|
|
||||||
import type TypeWidget from "./type_widgets/type_widget.js";
|
|
||||||
import { MermaidTypeWidget } from "./type_widgets/mermaid.js";
|
|
||||||
import AiChatTypeWidget from "./type_widgets/ai_chat.js";
|
|
||||||
|
|
||||||
const typeWidgetClasses = {
|
|
||||||
empty: EmptyTypeWidget,
|
|
||||||
editableText: EditableTextTypeWidget,
|
|
||||||
readOnlyText: ReadOnlyTextTypeWidget,
|
|
||||||
editableCode: EditableCodeTypeWidget,
|
|
||||||
readOnlyCode: ReadOnlyCodeTypeWidget,
|
|
||||||
file: FileTypeWidget,
|
|
||||||
image: ImageTypeWidget,
|
|
||||||
search: NoneTypeWidget,
|
|
||||||
render: RenderTypeWidget,
|
|
||||||
relationMap: RelationMapTypeWidget,
|
|
||||||
canvas: CanvasTypeWidget,
|
|
||||||
protectedSession: ProtectedSessionTypeWidget,
|
|
||||||
book: BookTypeWidget,
|
|
||||||
noteMap: NoteMapTypeWidget,
|
|
||||||
webView: WebViewTypeWidget,
|
|
||||||
doc: DocTypeWidget,
|
|
||||||
contentWidget: ContentWidgetTypeWidget,
|
|
||||||
attachmentDetail: AttachmentDetailTypeWidget,
|
|
||||||
attachmentList: AttachmentListTypeWidget,
|
|
||||||
mindMap: MindMapWidget,
|
|
||||||
aiChat: AiChatTypeWidget,
|
|
||||||
|
|
||||||
// Split type editors
|
|
||||||
mermaid: MermaidTypeWidget
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
export default class NoteDetailWidget extends NoteContextAwareWidget {
|
export default class NoteDetailWidget extends NoteContextAwareWidget {
|
||||||
|
|
||||||
private typeWidgets: Record<string, TypeWidget>;
|
private typeWidgets: Record<string, TypeWidget>;
|
||||||
@@ -118,8 +54,6 @@ export default class NoteDetailWidget extends NoteContextAwareWidget {
|
|||||||
|
|
||||||
this.child(typeWidget);
|
this.child(typeWidget);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.checkFullHeight();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -231,15 +165,4 @@ export default class NoteDetailWidget extends NoteContextAwareWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async executeWithTypeWidgetEvent({ resolve, ntxId }: EventData<"executeWithTypeWidget">) {
|
|
||||||
if (!this.isNoteContext(ntxId)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
await this.initialized;
|
|
||||||
|
|
||||||
await this.getWidgetType();
|
|
||||||
|
|
||||||
resolve(this.getTypeWidget());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user