From 33f68cb6c22897f7996b6c84b0e528c47fae00b5 Mon Sep 17 00:00:00 2001 From: "Yuichiro Tachibana (Tsuchiya)" Date: Thu, 22 Feb 2024 22:28:56 +0900 Subject: [PATCH] Fix Canvas3D/Canvas3DGS async imports (#7511) * Fix Model3D and Model3DUpload to handle async-imports and access the child component's exported method * Refactoring: reorder the lines to put the related snippets together * add changeset * Refactoring * Disable the undo buttons for Canvas3DGS * add changeset * Refactoring to use optional chaining --------- Co-authored-by: gradio-pr-bot --- .changeset/yummy-states-wink.md | 6 +++ js/model3D/shared/Model3D.svelte | 55 ++++++++++++++------------ js/model3D/shared/Model3DUpload.svelte | 54 +++++++++++++------------ 3 files changed, 64 insertions(+), 51 deletions(-) create mode 100644 .changeset/yummy-states-wink.md diff --git a/.changeset/yummy-states-wink.md b/.changeset/yummy-states-wink.md new file mode 100644 index 0000000000..0cf6482dd5 --- /dev/null +++ b/.changeset/yummy-states-wink.md @@ -0,0 +1,6 @@ +--- +"@gradio/model3d": patch +"gradio": patch +--- + +fix:Fix Canvas3D/Canvas3DGS async imports diff --git a/js/model3D/shared/Model3D.svelte b/js/model3D/shared/Model3D.svelte index 5fdacd66fa..492e2bafdb 100644 --- a/js/model3D/shared/Model3D.svelte +++ b/js/model3D/shared/Model3D.svelte @@ -4,6 +4,8 @@ import { File, Download, Undo } from "@gradio/icons"; import type { I18nFormatter } from "@gradio/utils"; import { dequal } from "dequal"; + import type Canvas3DGS from "./Canvas3DGS.svelte"; + import type Canvas3D from "./Canvas3D.svelte"; export let value: FileData | null; export let clear_color: [number, number, number, number] = [0, 0, 0, 0]; @@ -21,23 +23,33 @@ let current_settings = { camera_position, zoom_speed, pan_speed }; - let canvas3dgs: any; - let canvas3d: any; let use_3dgs = false; - let resolved_url: string | undefined; - - async function loadCanvas3D(): Promise { + let Canvas3DGSComponent: typeof Canvas3DGS; + let Canvas3DComponent: typeof Canvas3D; + async function loadCanvas3D(): Promise { const module = await import("./Canvas3D.svelte"); return module.default; } - - async function loadCanvas3DGS(): Promise { + async function loadCanvas3DGS(): Promise { const module = await import("./Canvas3DGS.svelte"); return module.default; } + $: if (value) { + use_3dgs = value.path.endsWith(".splat") || value.path.endsWith(".ply"); + if (use_3dgs) { + loadCanvas3DGS().then((component) => { + Canvas3DGSComponent = component; + }); + } else { + loadCanvas3D().then((component) => { + Canvas3DComponent = component; + }); + } + } + let canvas3d: Canvas3D | undefined; function handle_undo(): void { - canvas3d.reset_camera_position(camera_position, zoom_speed, pan_speed); + canvas3d?.reset_camera_position(camera_position, zoom_speed, pan_speed); } $: { @@ -46,25 +58,12 @@ current_settings.zoom_speed !== zoom_speed || current_settings.pan_speed !== pan_speed ) { - canvas3d.reset_camera_position(camera_position, zoom_speed, pan_speed); + canvas3d?.reset_camera_position(camera_position, zoom_speed, pan_speed); current_settings = { camera_position, zoom_speed, pan_speed }; } } - $: { - if (value) { - use_3dgs = value?.path.endsWith(".splat") || value?.path.endsWith(".ply"); - if (use_3dgs) { - loadCanvas3DGS().then((module) => { - canvas3dgs = module; - }); - } else { - loadCanvas3D().then((module) => { - canvas3d = module; - }); - } - } - } + let resolved_url: string | undefined;