import React, { useEffect, useState } from "react"; import ReactDOM from "react-dom/client"; import App from "./App"; import Login from "./components/Login"; import { hydrateStore } from "./store/useAppStore"; import { BACKEND } from "./lib/storage"; import { apiStatus } from "./lib/api"; import "./styles.css"; type Phase = "loading" | "login" | "ready"; function Root() { const [phase, setPhase] = useState("loading"); useEffect(() => { (async () => { if (BACKEND === "php") { const authed = await apiStatus(); if (!authed) { setPhase("login"); return; } } await hydrateStore(); setPhase("ready"); })(); }, []); if (phase === "loading") { return (
🔥 Hearth
); } if (phase === "login") { return ( { await hydrateStore(); setPhase("ready"); }} /> ); } return ; } ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( ); // Register the service worker so Hearth is installable and works offline. // Only in the built web app (not the Tauri desktop app, not dev). if (BACKEND !== "tauri" && import.meta.env.PROD && "serviceWorker" in navigator) { window.addEventListener("load", () => { navigator.serviceWorker.register("sw.js").catch((e) => console.error("SW registration failed:", e)); }); }