diff --git a/apps/client/src/widgets/NoteDetail.tsx b/apps/client/src/widgets/NoteDetail.tsx index 476c8fe1b7..9ab8fa2e44 100644 --- a/apps/client/src/widgets/NoteDetail.tsx +++ b/apps/client/src/widgets/NoteDetail.tsx @@ -147,9 +147,11 @@ export default function NoteDetail() { toast.closePersistent("printing"); handlePrintReport(printReport); }; - const onPreviewResult = (_e: any, { buffer, title, notePath, pageSize, landscape }: { buffer: Uint8Array; title: string; notePath: string; pageSize: string; landscape: boolean }) => { + const onPreviewResult = (_e: any, { buffer, notePath, pageSize }: { buffer: Uint8Array; notePath: string; pageSize: string }) => { toast.closePersistent("printing"); - appContext.triggerCommand("showPrintPreview", { pdfBuffer: buffer, title, notePath, pageSize, landscape }); + if (note) { + appContext.triggerCommand("showPrintPreview", { pdfBuffer: buffer, note, notePath, pageSize }); + } }; ipcRenderer.on("print-progress", onPrintProgress); ipcRenderer.on("print-done", onPrintDone); @@ -159,7 +161,7 @@ export default function NoteDetail() { ipcRenderer.off("print-done", onPrintDone); ipcRenderer.off("export-as-pdf-preview-result", onPreviewResult); }; - }, []); + }, [note]); useTriliumEvent("executeInActiveNoteDetailWidget", ({ callback }) => { if (!noteContext?.isActive()) return; diff --git a/apps/client/src/widgets/dialogs/print_preview.tsx b/apps/client/src/widgets/dialogs/print_preview.tsx index 43e2edc1f8..2216e06a26 100644 --- a/apps/client/src/widgets/dialogs/print_preview.tsx +++ b/apps/client/src/widgets/dialogs/print_preview.tsx @@ -1,10 +1,11 @@ import { useCallback, useRef, useState } from "preact/hooks"; +import FNote from "../../entities/fnote"; import { t } from "../../services/i18n"; import toast from "../../services/toast"; import { dynamicRequire, isElectron } from "../../services/utils"; import Button, { ButtonGroup } from "../react/Button"; -import { useTriliumEvent } from "../react/hooks"; +import { useNoteLabelBoolean, useTriliumEvent } from "../react/hooks"; import Modal from "../react/Modal"; import PdfViewer from "../type_widgets/file/PdfViewer"; import OptionsRow from "../type_widgets/options/components/OptionsRow"; @@ -12,22 +13,22 @@ import OptionsSection from "../type_widgets/options/components/OptionsSection"; export interface PrintPreviewData { pdfBuffer: Uint8Array; - title: string; + note: FNote; notePath: string; pageSize: string; - landscape: boolean; } export default function PrintPreviewDialog() { const [shown, setShown] = useState(false); const [pdfUrl, setPdfUrl] = useState(); - const [landscape, setLandscape] = useState(false); + const [note, setNote] = useState(); const [loading, setLoading] = useState(false); const bufferRef = useRef(); - const titleRef = useRef(""); const notePathRef = useRef(""); const pageSizeRef = useRef(""); + const [landscape, setLandscape] = useNoteLabelBoolean(note, "printLandscape"); + const updatePreview = useCallback((buffer: Uint8Array) => { bufferRef.current = buffer; @@ -42,10 +43,9 @@ export default function PrintPreviewDialog() { }, [pdfUrl]); useTriliumEvent("showPrintPreview", (data: PrintPreviewData) => { - titleRef.current = data.title; + setNote(data.note); notePathRef.current = data.notePath; pageSizeRef.current = data.pageSize; - setLandscape(data.landscape); updatePreview(data.pdfBuffer); setShown(true); }); @@ -65,7 +65,7 @@ export default function PrintPreviewDialog() { const { ipcRenderer } = dynamicRequire("electron"); ipcRenderer.send("save-pdf", { - title: titleRef.current, + title: note?.title ?? "", buffer: bufferRef.current }); handleClose(); @@ -91,7 +91,7 @@ export default function PrintPreviewDialog() { ipcRenderer.once("export-as-pdf-preview-result", onResult); ipcRenderer.send("export-as-pdf-preview", { - title: titleRef.current, + title: note?.title ?? "", notePath: notePathRef.current, pageSize: pageSizeRef.current, landscape: newLandscape diff --git a/apps/server/src/services/window.ts b/apps/server/src/services/window.ts index 97ab93d267..ea120deb72 100644 --- a/apps/server/src/services/window.ts +++ b/apps/server/src/services/window.ts @@ -168,7 +168,7 @@ electron.ipcMain.on("export-as-pdf", async (e, { title, notePath, landscape, pag } }); -electron.ipcMain.on("export-as-pdf-preview", async (e, { title, notePath, landscape, pageSize }: ExportAsPdfOpts) => { +electron.ipcMain.on("export-as-pdf-preview", async (e, { notePath, landscape, pageSize }: ExportAsPdfOpts) => { try { const { browserWindow, printReport } = await getBrowserWindowForPrinting(e, notePath, "exporting_pdf"); @@ -187,7 +187,7 @@ electron.ipcMain.on("export-as-pdf-preview", async (e, { title, notePath, landsc ` }); - e.sender.send("export-as-pdf-preview-result", { buffer, title, notePath, pageSize, landscape }); + e.sender.send("export-as-pdf-preview-result", { buffer, notePath, pageSize }); } catch (_e) { electron.dialog.showErrorBox(t("pdf.unable-to-export-title"), t("pdf.unable-to-export-message")); } finally { diff --git a/packages/commons/src/lib/attribute_names.ts b/packages/commons/src/lib/attribute_names.ts index ce58c131bb..bde3ba98f2 100644 --- a/packages/commons/src/lib/attribute_names.ts +++ b/packages/commons/src/lib/attribute_names.ts @@ -60,6 +60,9 @@ type Labels = { "presentation:theme": string; "slide:background": string; + // Print/export + printLandscape: boolean; + // Note-type specific webViewSrc: string; "disabled:webViewSrc": string;