feat(render): integrate with search

This commit is contained in:
Elian Doran 2025-09-21 22:58:58 +03:00
parent b990770e48
commit 763c489cd3
No known key found for this signature in database
3 changed files with 14 additions and 48 deletions

View File

@ -45,13 +45,13 @@ function RevisionsButton({ note }: { note: FNote }) {
function NoteContextMenu({ note, noteContext }: { note: FNote, noteContext?: NoteContext }) {
const parentComponent = useContext(ParentComponent);
const canBeConvertedToAttachment = note?.isEligibleForConversionToAttachment();
const isSearchable = ["text", "code", "book", "mindMap", "doc"].includes(note.type);
const isSearchable = ["text", "code", "book", "mindMap", "doc", "render"].includes(note.type);
const isInOptions = note.noteId.startsWith("_options");
const isPrintable = ["text", "code"].includes(note.type);
const isElectron = getIsElectron();
const isMac = getIsMac();
const hasSource = ["text", "code", "relationMap", "mermaid", "canvas", "mindMap"].includes(note.type);
const isSearchOrBook = ["search", "book"].includes(note.type);
const isSearchOrBook = ["search", "book"].includes(note.type);
return (
<Dropdown
@ -74,7 +74,7 @@ function NoteContextMenu({ note, noteContext }: { note: FNote, noteContext?: Not
<CommandItem icon="bx bx-export" text={t("note_actions.export_note")}
disabled={isInOptions || note.noteId === "_backendLog"}
command={() => noteContext?.notePath && parentComponent?.triggerCommand("showExportDialog", {
notePath: noteContext.notePath,
notePath: noteContext.notePath,
defaultType: "single"
})} />
<FormDropdownDivider />
@ -133,4 +133,4 @@ function ConvertToAttachment({ note }: { note: FNote }) {
}}
>{t("note_actions.convert_into_attachment")}</FormListItem>
)
}
}

View File

@ -18,15 +18,25 @@ export default function Render({ note, noteContext, ntxId }: TypeWidgetProps) {
}
useEffect(refresh, [ note ]);
// Keyboard shortcut.
useTriliumEvent("renderActiveNote", () => {
if (noteContext?.isActive()) return;
refresh();
});
// Refresh on floating buttons.
useTriliumEvent("refreshData", ({ ntxId: eventNtxId }) => {
if (eventNtxId !== ntxId) return;
refresh();
});
// Integration with search.
useTriliumEvent("executeWithContentElement", ({ resolve, ntxId: eventNtxId }) => {
if (eventNtxId !== ntxId) return;
resolve(refToJQuerySelector(contentRef));
});
return (
<div className="note-detail-render note-detail-printable">
{!renderNotesFound && (

View File

@ -1,44 +0,0 @@
import renderService from "../../services/render.js";
import TypeWidget from "./type_widget.js";
import type FNote from "../../entities/fnote.js";
import type { EventData } from "../../components/app_context.js";
export default class RenderTypeWidget extends TypeWidget {
private $noteDetailRenderHelp!: JQuery<HTMLElement>;
private $noteDetailRenderContent!: JQuery<HTMLElement>;
static getType() {
return "render";
}
doRender() {
this.$widget = $(TPL);
this.$noteDetailRenderHelp = this.$widget.find(".note-detail-render-help");
this.$noteDetailRenderContent = this.$widget.find(".note-detail-render-content");
super.doRender();
}
async doRefresh(note: FNote) {
this.$widget.show();
this.$noteDetailRenderHelp.hide();
const renderNotesFound = await renderService.render(note, this.$noteDetailRenderContent);
}
cleanup() {
this.$noteDetailRenderContent.empty();
}
async executeWithContentElementEvent({ resolve, ntxId }: EventData<"executeWithContentElement">) {
if (!this.isNoteContext(ntxId)) {
return;
}
await this.initialized;
resolve(this.$noteDetailRenderContent);
}
}