From 1b51146c29b1d208613a0be975bbd851998092ef Mon Sep 17 00:00:00 2001 From: sHa Date: Thu, 12 Jun 2025 11:18:39 +0300 Subject: [PATCH] refactor: Enhance logo loading logic and streamline theme setting in Preview component --- src/pages/Preview.svelte | 47 ++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/src/pages/Preview.svelte b/src/pages/Preview.svelte index 4f5dc1d..068ff2b 100644 --- a/src/pages/Preview.svelte +++ b/src/pages/Preview.svelte @@ -13,29 +13,34 @@ let setTheme = () => {}; // Default no-op function onMount(() => { - if (typeof window !== 'undefined' && window.appData) { - logos = window.appData.logos || []; - theme = window.appData.theme || "system"; - - // Check if setTheme exists in window.appData - if (window.appData.setTheme && typeof window.appData.setTheme === 'function') { - console.log("PreviewPage: Found window.appData.setTheme function"); - setTheme = window.appData.setTheme; - } else { - console.warn("PreviewPage: window.appData.setTheme not found or not a function"); + function tryFindLogo() { + if (typeof window !== 'undefined' && window.appData && Array.isArray(window.appData.logos) && window.appData.logos.length > 0) { + logos = window.appData.logos || []; + theme = window.appData.theme || "system"; + if (window.appData.setTheme && typeof window.appData.setTheme === 'function') { + setTheme = window.appData.setTheme; + } + const logoName = params.logoName.replace(/-/g, ' '); + logo = logos.find(l => + l.name.toLowerCase().replace(/\s+/g, '-') === params.logoName.toLowerCase() || + l.name.toLowerCase() === logoName.toLowerCase() + ); + if (!logo) { + console.error("Logo not found:", params.logoName); + push('/', { replace: true }); + } + return true; } + return false; + } - // Find the logo based on the URL parameter - const logoName = params.logoName.replace(/-/g, ' '); - logo = logos.find(l => - l.name.toLowerCase().replace(/\s+/g, '-') === params.logoName.toLowerCase() || - l.name.toLowerCase() === logoName.toLowerCase() - ); - - if (!logo) { - console.error("Logo not found:", params.logoName); - push('/', { replace: true }); - } + if (!tryFindLogo()) { + // Poll until logos are loaded + const interval = setInterval(() => { + if (tryFindLogo()) { + clearInterval(interval); + } + }, 100); } // Back button event listener