From aa0aa3cfcc71bb5b87e4b81b36ea250ab2a7b861 Mon Sep 17 00:00:00 2001 From: NimBold Date: Thu, 27 Aug 2026 20:42:37 +0330 Subject: [PATCH] test(startup): isolate main entrypoint for issue 37 --- src/main.tsx | 76 ++++++---------------------------------------------- 1 file changed, 8 insertions(+), 68 deletions(-) diff --git a/src/main.tsx b/src/main.tsx index b060cfe..6a7b4ae 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,4 +1,4 @@ -import { StrictMode, type ComponentType } from "react"; +import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; import "@fontsource-variable/inter/wght.css"; import "@fontsource-variable/noto-sans-hebrew/wght.css"; @@ -7,15 +7,11 @@ import "@fontsource-variable/outfit/wght.css"; import "@fontsource-variable/roboto/wght.css"; import "@fontsource-variable/vazirmatn/wght.css"; import "./index.css"; +import App from "./App"; import { i18nReady } from "./i18n"; import { ErrorBoundary } from "./components/ErrorBoundary"; import { ToastProvider } from "./contexts/ToastContext"; import { error as logError, warn as logWarn, initLogger } from "./utils/logger"; -import { getCurrentWindow } from '@tauri-apps/api/window'; -import { invokeCommand as invoke } from './ipc'; - -const isPropertiesWindow = getCurrentWindow().label.startsWith('properties-'); - void initLogger(); const serializeConsoleArguments = (values: unknown[]) => values.map(value => { @@ -44,80 +40,24 @@ console.warn = (...values: unknown[]) => { }; const rootElement = document.getElementById("root"); -const renderRoot = (RootComponent: ComponentType) => { +const renderApp = () => { if (!rootElement) return; createRoot(rootElement).render( - + , ); }; -const PropertiesStartupFailure = () => ( -
-

Download Properties could not be loaded.

- -
-); - -const renderMainApp = async () => { - if (!rootElement) return; - - // Keep the child entrypoint isolated from the main application module. App - // imports the persistent Zustand stores, whose module initialization issues - // main-window-only IPC commands. Loading it in a Properties child creates a - // second persistence owner and can race the bridge handshake. - const RootComponent = (await import('./App')).default; - renderRoot(RootComponent); -}; - -const renderPropertiesApp = async () => { - if (!rootElement) return; - - try { - // Properties starts with the synchronous English catalog and changes locale - // after its first paint. Waiting for a lazy locale chunk here delays the - // loading shell and makes native window startup visible to the user. - const RootComponent = (await import('./components/PropertiesWindowApp')).PropertiesWindowApp; - renderRoot(RootComponent); - } catch (error) { - // A failed lazy chunk must not leave the native window hidden forever. Show - // a styled, closable failure state and use the same caller-validated native - // reveal command as the normal child path. - console.error('Failed to initialize the Properties window:', error); - renderRoot(PropertiesStartupFailure); - const fallbackSessionId = crypto.randomUUID(); - void invoke('properties_window_send_ready', { sessionId: fallbackSessionId }) - .then(() => invoke('properties_window_reveal', { sessionId: fallbackSessionId })) - .catch(revealError => { - console.error('Failed to reveal the Properties startup error:', revealError); - }); - } -}; - -if (isPropertiesWindow) { - void renderPropertiesApp(); -} else { - void i18nReady.then(renderMainApp).catch(error => { - console.error('Failed to initialize localization:', error); - void renderMainApp(); - }); -} +void i18nReady.then(renderApp).catch(error => { + console.error('Failed to initialize localization:', error); + renderApp(); +}); // Prevent the webview's default context menu ("Reload", etc.) on right-click. // Individual components that provide custom context menus call preventDefault()