diff --git a/packages/frontend/src/opensheetmusicdisplay.ts b/packages/frontend/src/opensheetmusicdisplay.ts new file mode 100644 index 0000000..257fbe9 --- /dev/null +++ b/packages/frontend/src/opensheetmusicdisplay.ts @@ -0,0 +1 @@ +export { OpenSheetMusicDisplay as default } from "opensheetmusicdisplay"; diff --git a/packages/frontend/src/routes/Attachment.tsx b/packages/frontend/src/routes/Attachment.tsx index a3d8e29..e8798d5 100644 --- a/packages/frontend/src/routes/Attachment.tsx +++ b/packages/frontend/src/routes/Attachment.tsx @@ -1,62 +1,66 @@ import { AttachmentId, PieceId } from "common"; -import { OpenSheetMusicDisplay } from "opensheetmusicdisplay"; -import { useEffect, useRef } from "react"; +import { lazy, useEffect, useRef } from "react"; import { useParams } from "react-router-dom"; import { client } from "../client"; import { useLoading } from "../loading"; -// TODO: Lazy load `opensheetmusicdisplay` (don't bundle into main script). +export const Attachment = lazy(async () => { -export function Attachment() { + const { default: OpenSheetMusicDisplay } = await import("../opensheetmusicdisplay.ts"); - const params = useParams(); - const pieceId = PieceId(params.pieceId!); - const attachmentId = AttachmentId(params.attachmentId!); + return { + default: function Attachment() { - const { isLoading, error, data } = useLoading(() => client.piece({ pieceId }).attachment({ attachmentId }).get()); + const params = useParams(); + const pieceId = PieceId(params.pieceId!); + const attachmentId = AttachmentId(params.attachmentId!); - const containerRef = useRef(null); + const { isLoading, error, data } = useLoading(() => client.piece({ pieceId }).attachment({ attachmentId }).get()); - useEffect(() => { - if (isLoading || error !== null) return; + const containerRef = useRef(null); - const url = URL.createObjectURL(data?.data); + useEffect(() => { + if (isLoading || error !== null) return; - const render = () => osmd.render(); + const url = URL.createObjectURL(data?.data); - const osmd = new OpenSheetMusicDisplay(containerRef.current!, { - autoResize: false, - drawTitle: false, - drawComposer: false, - drawMeasureNumbers: true, - drawMeasureNumbersOnlyAtSystemStart: true, - //measureNumberInterval: 5, - //renderSingleHorizontalStaffline: true, - }); + const render = () => osmd.render(); - osmd.load(url).then(render); + const osmd = new OpenSheetMusicDisplay(containerRef.current!, { + autoResize: false, + drawTitle: false, + drawComposer: false, + drawMeasureNumbers: true, + drawMeasureNumbersOnlyAtSystemStart: true, + //measureNumberInterval: 5, + //renderSingleHorizontalStaffline: true, + }); - window.addEventListener("resize", render); + osmd.load(url).then(render); - return () => { - URL.revokeObjectURL(url); - window.removeEventListener("resize", render); - }; - }, [isLoading, data]); + window.addEventListener("resize", render); - if (isLoading) { - return ( -
-
Ładowanie…
-
- ); - } + return () => { + URL.revokeObjectURL(url); + window.removeEventListener("resize", render); + }; + }, [isLoading, data]); - if (error !== null) { -
-
Wystąpił błąd: {error.value}
-
- } + if (isLoading) { + return ( +
+
Ładowanie…
+
+ ); + } - return
; -} + if (error !== null) { +
+
Wystąpił błąd: {error.value}
+
+ } + + return
; + }, + }; +});