diff --git a/apps/client/src/print.tsx b/apps/client/src/print.tsx index a9dec12c4..075b566e6 100644 --- a/apps/client/src/print.tsx +++ b/apps/client/src/print.tsx @@ -7,6 +7,7 @@ import content_renderer, { applyInlineMermaid } from "./services/content_rendere interface RendererProps { note: FNote; onReady: () => void; + onProgressChanged?: (progress: number) => void; } async function main() { @@ -23,13 +24,16 @@ async function main() { function App({ note, noteId }: { note: FNote | null | undefined, noteId: string }) { const sentReadyEvent = useRef(false); + const onProgressChanged = useCallback((progress: number) => { + window.dispatchEvent(new CustomEvent("note-load-progress", { detail: { progress } })); + }, []); const onReady = useCallback(() => { if (sentReadyEvent.current) return; window.dispatchEvent(new Event("note-ready")); window._noteReady = true; sentReadyEvent.current = true; }, []); - const props: RendererProps | undefined | null = note && { note, onReady }; + const props: RendererProps | undefined | null = note && { note, onReady, onProgressChanged }; if (!note || !props) return @@ -89,7 +93,7 @@ function SingleNoteRenderer({ note, onReady }: RendererProps) { ; } -function CollectionRenderer({ note, onReady }: RendererProps) { +function CollectionRenderer({ note, onReady, onProgressChanged }: RendererProps) { const viewType = useNoteViewType(note); return ; } diff --git a/apps/client/src/widgets/NoteDetail.tsx b/apps/client/src/widgets/NoteDetail.tsx index 0482d0ddb..5d5e5b02a 100644 --- a/apps/client/src/widgets/NoteDetail.tsx +++ b/apps/client/src/widgets/NoteDetail.tsx @@ -162,6 +162,10 @@ export default function NoteDetail() { return; } + iframe.contentWindow.addEventListener("note-load-progress", (e) => { + console.log("Got ", e); + }); + iframe.contentWindow.addEventListener("note-ready", () => { toast.closePersistent("printing"); iframe.contentWindow?.print(); diff --git a/apps/client/src/widgets/collections/NoteList.tsx b/apps/client/src/widgets/collections/NoteList.tsx index 04c03b0e8..c613f8d39 100644 --- a/apps/client/src/widgets/collections/NoteList.tsx +++ b/apps/client/src/widgets/collections/NoteList.tsx @@ -26,9 +26,10 @@ interface NoteListProps { media: ViewModeMedia; viewType: ViewTypeOptions | undefined; onReady?: () => void; + onProgressChanged?(progress: number): void; } -export default function NoteList(props: Pick) { +export default function NoteList(props: Pick) { const { note, noteContext, notePath, ntxId } = useNoteContext(); const viewType = useNoteViewType(note); const [ enabled, setEnabled ] = useState(noteContext?.hasNoteList()); @@ -43,7 +44,7 @@ export function SearchNoteList(props: Omit } -export function CustomNoteList({ note, viewType, isEnabled: shouldEnable, notePath, highlightedTokens, displayOnlyCollections, ntxId, onReady, ...restProps }: NoteListProps) { +export function CustomNoteList({ note, viewType, isEnabled: shouldEnable, notePath, highlightedTokens, displayOnlyCollections, ntxId, onReady, onProgressChanged, ...restProps }: NoteListProps) { const widgetRef = useRef(null); const noteIds = useNoteIds(shouldEnable ? note : null, viewType, ntxId); const isFullHeight = (viewType && viewType !== "list" && viewType !== "grid"); @@ -86,6 +87,8 @@ export function CustomNoteList({ note, viewType, isEnabled: shouldEnable, notePa viewConfig: viewModeConfig.config, saveConfig: viewModeConfig.storeFn, onReady: onReady ?? (() => {}), + onProgressChanged: onProgressChanged ?? (() => {}), + ...restProps } } diff --git a/apps/client/src/widgets/collections/interface.ts b/apps/client/src/widgets/collections/interface.ts index 7bec23a64..bd80b4afd 100644 --- a/apps/client/src/widgets/collections/interface.ts +++ b/apps/client/src/widgets/collections/interface.ts @@ -17,4 +17,5 @@ export interface ViewModeProps { saveConfig(newConfig: T): void; media: ViewModeMedia; onReady(): void; + onProgressChanged?(progress: number): void; } diff --git a/apps/client/src/widgets/collections/legacy/ListPrintView.tsx b/apps/client/src/widgets/collections/legacy/ListPrintView.tsx index 77a354d0d..3fc1be0b4 100644 --- a/apps/client/src/widgets/collections/legacy/ListPrintView.tsx +++ b/apps/client/src/widgets/collections/legacy/ListPrintView.tsx @@ -10,7 +10,7 @@ interface NotesWithContent { contentEl: HTMLElement; } -export function ListPrintView({ note, noteIds: unfilteredNoteIds, onReady }: ViewModeProps<{}>) { +export function ListPrintView({ note, noteIds: unfilteredNoteIds, onReady, onProgressChanged }: ViewModeProps<{}>) { const noteIds = useFilteredNoteIds(note, unfilteredNoteIds); const [ notesWithContent, setNotesWithContent ] = useState(); @@ -33,6 +33,10 @@ export function ListPrintView({ note, noteIds: unfilteredNoteIds, onReady }: Vie noteIdsSet.add(note.noteId); notesWithContent.push({ note, contentEl }); + if (onProgressChanged) { + onProgressChanged((notesWithContent.length / noteIds.length) * 100); + } + if (note.hasChildren()) { const filteredChildNotes = await filterChildNotes(note); for (const childNote of filteredChildNotes) {