import { createEffect, Show } from "solid-js" import { Router, Route, useLocation, useNavigate } from "@solidjs/router" import type { Component } from "solid-js" import AppShell from "@/components/AppShell" import Toast from "@/components/Toast" import Home from "@/pages/Home" import RelayList from "@/pages/relays/RelayList" import RelayNew from "@/pages/relays/RelayNew" import RelayDetail from "@/pages/relays/RelayDetail" import RelayEdit from "@/pages/relays/RelayEdit" import Account from "@/pages/Account" import AdminTenantList from "@/pages/admin/AdminTenantList" import AdminTenantDetail from "@/pages/admin/AdminTenantDetail" import AdminRelayList from "@/pages/admin/AdminRelayList" import AdminRelayDetail from "@/pages/admin/AdminRelayDetail" import AdminRelayEdit from "@/pages/admin/AdminRelayEdit" import { account, eventStore, identity, pool } from "@/lib/state" import { NostrProvider } from "@/lib/nostr" function Layout(props: { children?: any }) { const location = useLocation() const usesAppShell = () => location.pathname.match(/^\/(relays|account|admin)/) createEffect(() => { // Reinitialize Preline components on route change location.pathname window.HSStaticMethods?.autoInit() }) return (
{props.children}}> {props.children}
) } export default function App() { const requireCondition = (Page: Component, condition: () => boolean): Component => { return () => { const navigate = useNavigate() createEffect(() => { if (!identity.loading && !condition()) navigate("/", { replace: true }) }) return ( ) } } const requireAdmin = (Page: Component) => requireCondition(Page, () => Boolean(identity()?.is_admin)) const requireTenant = (Page: Component) => requireCondition(Page, () => Boolean(identity())) return ( ) }