refactor(react/type_widgets): bring back printing and exporting to PDF

This commit is contained in:
Elian Doran
2025-10-05 17:07:34 +03:00
parent 156b4101a5
commit d3594e4a05
2 changed files with 18 additions and 29 deletions

View File

@@ -8,7 +8,7 @@ import { TypeWidgetProps } from "./type_widgets/type_widget";
import "./NoteDetail.css"; import "./NoteDetail.css";
import attributes from "../services/attributes"; import attributes from "../services/attributes";
import { ExtendedNoteType, TYPE_MAPPINGS } from "./note_types"; import { ExtendedNoteType, TYPE_MAPPINGS } from "./note_types";
import { isMobile } from "../services/utils"; import { dynamicRequire, isMobile } from "../services/utils";
/** /**
* The note detail is in charge of rendering the content of a note, by determining its type (e.g. text, code) and using the appropriate view widget. * The note detail is in charge of rendering the content of a note, by determining its type (e.g. text, code) and using the appropriate view widget.
@@ -115,6 +115,23 @@ export default function NoteDetail() {
resolve(component); resolve(component);
}); });
useTriliumEvent("printActiveNote", () => {
if (!noteContext?.isActive() || !note) return;
// Trigger in timeout to dismiss the menu while printing.
setTimeout(window.print, 0);
});
useTriliumEvent("exportAsPdf", () => {
if (!noteContext?.isActive() || !note) return;
const { ipcRenderer } = dynamicRequire("electron");
ipcRenderer.send("export-as-pdf", {
title: note.title,
pageSize: note.getAttributeValue("label", "printPageSize") ?? "Letter",
landscape: note.hasAttribute("label", "printLandscape")
});
});
return ( return (
<div <div
ref={containerRef} ref={containerRef}

View File

@@ -44,39 +44,11 @@ export default class NoteDetailWidget extends NoteContextAwareWidget {
return await this.parent?.triggerCommand("runActiveNote", params); return await this.parent?.triggerCommand("runActiveNote", params);
} }
async printActiveNoteEvent() {
if (!this.noteContext?.isActive()) {
return;
}
// Trigger in timeout to dismiss the menu while printing.
setTimeout(window.print, 0);
}
async exportAsPdfEvent() {
if (!this.noteContext?.isActive() || !this.note) {
return;
}
const { ipcRenderer } = utils.dynamicRequire("electron");
ipcRenderer.send("export-as-pdf", {
title: this.note.title,
pageSize: this.note.getAttributeValue("label", "printPageSize") ?? "Letter",
landscape: this.note.hasAttribute("label", "printLandscape")
});
}
beforeUnloadEvent() { beforeUnloadEvent() {
return this.spacedUpdate.isAllSavedAndTriggerUpdate(); return this.spacedUpdate.isAllSavedAndTriggerUpdate();
} }
readOnlyTemporarilyDisabledEvent({ noteContext }: EventData<"readOnlyTemporarilyDisabled">) {
if (this.isNoteContext(noteContext.ntxId)) {
this.refresh();
}
}
async executeInActiveNoteDetailWidgetEvent({ callback }: EventData<"executeInActiveNoteDetailWidget">) { async executeInActiveNoteDetailWidgetEvent({ callback }: EventData<"executeInActiveNoteDetailWidget">) {
if (!this.isActiveNoteContext()) { if (!this.isActiveNoteContext()) {
return; return;