import { Links, Meta, Outlet, Scripts, ScrollRestoration, } from "@remix-run/react"; import stylesheet from "./tailwind.css?url"; import type { LinksFunction } from "@remix-run/node"; // Supports weights 200-800 import "@fontsource-variable/manrope"; import { Refine } from "@refinedev/core"; import routerProvider from "@refinedev/remix-router"; import { notificationProvider } from "~/data/notification-provider"; import { SdkContextProvider, useSdk } from "~/components/lib/sdk-context"; import { Toaster } from "~/components/ui/toaster"; import { getProviders } from "~/data/providers.js"; import { Sdk } from "@lumeweb/portal-sdk"; import resources from "~/data/resources.js"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { useEffect, useMemo, useState } from "react"; import { PinningProcess } from "~/data/pinning.js"; export const links: LinksFunction = () => [ { rel: "stylesheet", href: stylesheet }, ]; const queryClient = new QueryClient(); export function Layout({ children }: { children: React.ReactNode }) { return ( {children} ); } function App() { return ( <> ); } export default function Root() { const [portalUrl, setPortalUrl] = useState(import.meta.env.VITE_PORTAL_URL); const sdk = Sdk.create(portalUrl); const providers = useMemo(() => getProviders(sdk as Sdk), [sdk]); useEffect(() => { if (sdk) { PinningProcess.setupSdk(sdk as Sdk); } }, [sdk]); useEffect(() => { if (!portalUrl) { fetch("/api/meta") .then((response) => response.json()) .then((data) => { setPortalUrl(`https://${data.domain}`); }) .catch((error) => { console.error("Failed to fetch portal url:", error); }); } }, [portalUrl]); if (!portalUrl) { return

Loading...

; } return ( ); } export function HydrateFallback() { return

Loading...

; }