From 87ccc591dfeded23de2fde0820e4e277edc88749 Mon Sep 17 00:00:00 2001 From: Tim Date: Tue, 19 May 2026 09:49:48 +0200 Subject: [PATCH] fix: core initialization --- src/core/CoreProvider.tsx | 43 ++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/src/core/CoreProvider.tsx b/src/core/CoreProvider.tsx index e80f51a1e..5fea324cb 100644 --- a/src/core/CoreProvider.tsx +++ b/src/core/CoreProvider.tsx @@ -4,7 +4,6 @@ import createTransport from './createTransport'; import Error from './Error'; const transport = createTransport(); -window.core = transport; type Props = { appInfo: object, @@ -12,7 +11,8 @@ type Props = { }; const Core = (props: Props) => { - const [initialized, setInitialized] = useState(false); + const initialized = useRef(false); + const [ready, setReady] = useState(false); const [error, setError] = useState(); const stateListeners = useRef([]); @@ -32,6 +32,9 @@ const Core = (props: Props) => { }; useEffect(() => { + if (initialized.current) return; + initialized.current = true; + const onCoreEvent = ({ name, args }: NewStateEvent | CoreEventEvent) => { switch (name) { case 'NewState': @@ -63,37 +66,31 @@ const Core = (props: Props) => { } }; - if (!window.core) { - transport - .init(props.appInfo) - .then(() => { - window.core = transport; - window.onCoreEvent = onCoreEvent; - setInitialized(true); - setError(null); - }) - .catch((e: Error) => { - console.error('Failed to initialize core:', e); - setInitialized(false); - setError(e); - }); - } + transport + .init(props.appInfo) + .then(() => { + window.core = transport; + window.onCoreEvent = onCoreEvent; + setReady(true); + setError(null); + }) + .catch((e: Error) => { + console.error('Failed to initialize core:', e); + setReady(false); + setError(e); + }); return () => { stateListeners.current = []; eventListeners.current = []; errorListeners.current = []; - setInitialized(false); - setError(null); - window.onCoreEvent = null; - window.core = null; }; }, []); return ( - { error && !initialized && } - { initialized && !error && props.children } + { error && !ready && } + { ready && !error && props.children } ); };