/* eslint-disable react-refresh/only-export-components */ import { StrictMode, useEffect, useState, useRef } from "react"; import { createRoot } from "react-dom/client"; import "./index.css"; import DesktopApp from "@/ui/desktop/DesktopApp.tsx"; import { MobileApp } from "@/ui/mobile/MobileApp.tsx"; import { ThemeProvider } from "@/components/theme-provider"; import { ElectronVersionCheck } from "@/ui/desktop/user/ElectronVersionCheck.tsx"; import "./i18n/i18n"; import { isElectron } from "./ui/main-axios.ts"; import HostManagerApp from "./ui/desktop/apps/host-manager/HostManagerApp.tsx"; import TerminalApp from "./ui/desktop/apps/features/terminal/TerminalApp.tsx"; import FileManagerApp from "./ui/desktop/apps/features/file-manager/FileManagerApp.tsx"; import TunnelApp from "./ui/desktop/apps/features/tunnel/TunnelApp.tsx"; import ServerStatsApp from "./ui/desktop/apps/features/server-stats/ServerStatsApp.tsx"; import DockerApp from "./ui/desktop/apps/features/docker/DockerApp.tsx"; import GuacamoleApp from "@/ui/desktop/apps/features/guacamole/GuacamoleApp.tsx"; const FullscreenApp: React.FC = () => { const searchParams = new URLSearchParams(window.location.search); const view = searchParams.get("view"); const hostId = searchParams.get("hostId"); switch (view) { case "host-manager": return ; case "terminal": return ; case "file-manager": return ; case "tunnel": return ; case "server-stats": return ; case "docker": return ; case "rdp": case "vnc": case "telnet": return ; default: return ; } }; import { useServiceWorker } from "@/hooks/use-service-worker"; function useWindowWidth() { const [width, setWidth] = useState(window.innerWidth); const lastSwitchTime = useRef(0); const isCurrentlyMobile = useRef(window.innerWidth < 768); const hasSwitchedOnce = useRef(false); useEffect(() => { let timeoutId: NodeJS.Timeout; const handleResize = () => { clearTimeout(timeoutId); timeoutId = setTimeout(() => { const newWidth = window.innerWidth; const newIsMobile = newWidth < 768; const now = Date.now(); if (hasSwitchedOnce.current && now - lastSwitchTime.current < 10000) { setWidth(newWidth); return; } if ( newIsMobile !== isCurrentlyMobile.current && now - lastSwitchTime.current > 5000 ) { lastSwitchTime.current = now; isCurrentlyMobile.current = newIsMobile; hasSwitchedOnce.current = true; setWidth(newWidth); } else { setWidth(newWidth); } }, 2000); }; window.addEventListener("resize", handleResize); return () => { clearTimeout(timeoutId); window.removeEventListener("resize", handleResize); }; }, []); return width; } function RootApp() { const width = useWindowWidth(); const isMobile = width < 768; const [showVersionCheck, setShowVersionCheck] = useState(true); useServiceWorker(); const userAgent = navigator.userAgent || navigator.vendor || (window as any).opera || ""; const isTermixMobile = /Termix-Mobile/.test(userAgent); const searchParams = new URLSearchParams(window.location.search); const isFullscreen = searchParams.has("view"); const renderApp = () => { if (isFullscreen) { return ; } if (isElectron()) { return ; } if (isTermixMobile) { return ; } return isMobile ? : ; }; return ( <> {!isFullscreen && (
)}
{isElectron() && showVersionCheck && !isFullscreen ? ( setShowVersionCheck(false)} isAuthenticated={false} /> ) : ( renderApp() )}
); } createRoot(document.getElementById("root")!).render( , );