function Layout()

in src/main/js/routes/layout/layout.js [18:57]


function Layout() {
    const loaderData = useLoaderData();
    const revalidator = useRevalidator();
    const [searchParams, setSearchParams] = useSearchParams();
    // refresh interval state
    const refreshIconClass = "fas fa-sync-alt"
    const [refreshInterval, setRefreshInterval] = useState(-1);
    const [refreshIcon, setRefreshIcon] = useState(refreshIconClass);

    // Code below sets the expected effects once refreshes changes
    useEffect(() => {
        // only schedule refreshes if interval is bigger than 0
        if (refreshInterval > 0) {
            const interval = setInterval(() => {
                if (document.visibilityState === "visible") {
                    revalidator.revalidate();
                }
            }, refreshInterval);
            return () => clearInterval(interval);
        }
    }, [refreshInterval]);

    useEffect(() => {
        if (revalidator.state === "idle") {
            setRefreshIcon(refreshIconClass)
        } else {
            setRefreshIcon(refreshIconClass + " fa-spin text-yellow-400")
        }
    }, [revalidator.state]);

    function hostName() {
        let hostName = ""
        try {
            hostName = new URL(searchParams.get("config_host")).hostname
        } catch {}
        return hostName;
    }

    return (<>
        <Suspense fallback={<Loading/>}>