diff --git a/app/layout.tsx b/app/layout.tsx index f5595eb..c3f1ab6 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -10,19 +10,28 @@ import { Inter } from "next/font/google"; import { Toaster } from "@/components/ui/toaster" import Script from "next/script"; import Umami from "@/components/Umami"; +import { useEffect, useState } from "react"; const inter = Inter({ subsets: ["latin"] }); +export const relayUrls = [ + "wss://relay.nostr.band", + "wss://relay.damus.io", +]; + export default function RootLayout({ children, }: Readonly<{ children: React.ReactNode; }>) { + const [dynamicRelayUrls, setDynamicRelayUrls] = useState(relayUrls); - const relayUrls = [ - "wss://relay.nostr.band", - "wss://relay.damus.io", - ]; + useEffect(() => { + const storedRelayUrls = localStorage.getItem('relayUrls'); + if (storedRelayUrls) { + setDynamicRelayUrls(JSON.parse(storedRelayUrls)); + } + }, []); return ( @@ -43,7 +52,7 @@ export default function RootLayout({
- + {children}
@@ -52,4 +61,4 @@ export default function RootLayout({ ); -} \ No newline at end of file +} diff --git a/app/login/page.tsx b/app/login/page.tsx index eb2debe..0f6980c 100644 --- a/app/login/page.tsx +++ b/app/login/page.tsx @@ -10,6 +10,12 @@ export default function LoginPage() { document.title = `Login | LUMINA`; }, []); + const handleLogin = (relayUrls) => { + if (relayUrls && relayUrls.length > 0) { + localStorage.setItem('relayUrls', JSON.stringify(relayUrls)); + } + }; + return ( <> @@ -19,7 +25,7 @@ export default function LoginPage() {
- +
); diff --git a/app/relays/page.tsx b/app/relays/page.tsx new file mode 100644 index 0000000..404bad9 --- /dev/null +++ b/app/relays/page.tsx @@ -0,0 +1,43 @@ +import { useEffect, useState } from 'react'; +import { relayUrls } from '../layout'; + +const fetchRelayStatus = async (url: string) => { + try { + const response = await fetch(url); + if (response.ok) { + return { url, status: 'Online' }; + } else { + return { url, status: 'Offline' }; + } + } catch (error) { + return { url, status: 'Offline' }; + } +}; + +const RelaysPage = () => { + const [relayStatuses, setRelayStatuses] = useState<{ url: string; status: string }[]>([]); + + useEffect(() => { + const fetchStatuses = async () => { + const statuses = await Promise.all(relayUrls.map(fetchRelayStatus)); + setRelayStatuses(statuses); + }; + + fetchStatuses(); + }, []); + + return ( +
+

Relay Status

+
    + {relayStatuses.map((relay) => ( +
  • + {relay.url}: {relay.status} +
  • + ))} +
+
+ ); +}; + +export default RelaysPage; diff --git a/components/BottomBar.tsx b/components/BottomBar.tsx index c3cd2fd..2665994 100644 --- a/components/BottomBar.tsx +++ b/components/BottomBar.tsx @@ -71,6 +71,9 @@ export default function BottomBar() { Notifications )} + + Relays + ) -} \ No newline at end of file +}