From 883c20efac957d7e37f716bf5cfe043d11a51e68 Mon Sep 17 00:00:00 2001
From: "metabase-bot[bot]"
 <109303359+metabase-bot[bot]@users.noreply.github.com>
Date: Thu, 4 Apr 2024 19:08:02 +0000
Subject: [PATCH] asynchronously load libraries for png and pdf exports
 (#41036) (#41050)

Co-authored-by: Aleksandr Lesnenko <alxnddr@users.noreply.github.com>
---
 frontend/src/metabase/visualizations/lib/save-chart-image.ts | 2 +-
 .../src/metabase/visualizations/lib/save-dashboard-pdf.ts    | 5 ++---
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/frontend/src/metabase/visualizations/lib/save-chart-image.ts b/frontend/src/metabase/visualizations/lib/save-chart-image.ts
index 5324edafe02..99137432f10 100644
--- a/frontend/src/metabase/visualizations/lib/save-chart-image.ts
+++ b/frontend/src/metabase/visualizations/lib/save-chart-image.ts
@@ -1,5 +1,4 @@
 import { css } from "@emotion/react";
-import html2canvas from "html2canvas";
 
 export const SAVING_DOM_IMAGE_CLASS = "saving-dom-image";
 export const SAVING_DOM_IMAGE_HIDDEN_CLASS = "saving-dom-image-hidden";
@@ -22,6 +21,7 @@ export const saveChartImage = async (selector: string, fileName: string) => {
 
   node.classList.add(SAVING_DOM_IMAGE_CLASS);
 
+  const { default: html2canvas } = await import("html2canvas");
   const canvas = await html2canvas(node, {
     useCORS: true,
   });
diff --git a/frontend/src/metabase/visualizations/lib/save-dashboard-pdf.ts b/frontend/src/metabase/visualizations/lib/save-dashboard-pdf.ts
index e2496076390..e41a36aa090 100644
--- a/frontend/src/metabase/visualizations/lib/save-dashboard-pdf.ts
+++ b/frontend/src/metabase/visualizations/lib/save-dashboard-pdf.ts
@@ -1,6 +1,3 @@
-import html2canvas from "html2canvas";
-import jspdf from "jspdf";
-
 import { color } from "metabase/lib/colors";
 
 import { SAVING_DOM_IMAGE_CLASS } from "./save-chart-image";
@@ -17,6 +14,7 @@ export const saveDashboardPdf = async (
     return;
   }
 
+  const { default: html2canvas } = await import("html2canvas");
   const image = await html2canvas(node, {
     useCORS: true,
     onclone: (doc: Document, node: HTMLElement) => {
@@ -35,6 +33,7 @@ export const saveDashboardPdf = async (
   const pdfWidth = imageWidth;
   const pdfHeight = imageHeight + 80;
 
+  const { default: jspdf } = await import("jspdf");
   const pdf = new jspdf({
     unit: "px",
     hotfixes: ["px_scaling"],
-- 
GitLab