import { useEffect, useState, type ReactNode } from "react"; import Storage from "@tensamin/storage/context"; import Crypto from "@tensamin/crypto/context"; import Mobile from "@tensamin/mobile/context"; import LegalWrapper from "@/features/legal/screen"; import { Toaster } from "@tensamin/ui/cmp/sonner"; import { TooltipProvider } from "@tensamin/ui/cmp/tooltip"; import { useStorage } from "@tensamin/storage/context"; import { useLocation, useNavigate } from "@tanstack/react-router"; import { useIsMobile } from "@tensamin/ui/utils"; import { isTauri } from "@tauri-apps/api/core"; /** * Executes Layout. * @param props Parameter props. * @returns unknown. */ export default function Layout(props: { children: ReactNode }) { const [pixelRatio, setPixelRatio] = useState(devicePixelRatio); const [visible, setVisible] = useState(false); const isMobile = useIsMobile(); useEffect(() => { const handleResize = () => { setPixelRatio(devicePixelRatio); setVisible(true); setTimeout(() => setVisible(false), 1000); }; window.addEventListener("resize", handleResize); return () => window.removeEventListener("resize", handleResize); }, []); return ( <>
{visible && (
{Math.round(pixelRatio)}
)} {/* Todo: Make this nicer */} {pixelRatio !== 1 && (
Hey! You're zoomed in.
)}
{props.children} ); } function LoginWrapper({ children }: { children: ReactNode }) { const [loggedIn, setLoggedIn] = useState(null); const { load } = useStorage(); const navigate = useNavigate(); const location = useLocation(); useEffect(() => { let active = true; load("user_id").then((userId) => { if (!active) { return; } if (userId !== 0) { setLoggedIn(true); return; } setLoggedIn(false); navigate({ to: "/login", }); }); return () => { active = false; }; }, [load, navigate, location.pathname]); if (loggedIn !== true && location.pathname !== "/login") { return null; } return children; }