import { useParams } from "@solidjs/router" import { createMemo, createResource, createSignal, Show } from "solid-js" import BackLink from "@/components/BackLink" import PageContainer from "@/components/PageContainer" import PaymentDialog from "@/components/PaymentDialog" import PaymentSetup from "@/components/PaymentSetup" import RelayDetailCard from "@/components/RelayDetailCard" import ResourceState from "@/components/ResourceState" import useMinLoading from "@/components/useMinLoading" import ActivityFeed from "@/components/ActivityFeed" import { listRelayMembers } from "@/lib/api" import { getLatestOpenInvoice, useRelay, useRelayActivity, useTenant } from "@/lib/hooks" import useRelayToggles from "@/lib/useRelayToggles" import { plans } from "@/lib/state" export default function RelayDetail() { const params = useParams() const relayId = () => params.id ?? "" const [relay, { refetch, mutate }] = useRelay(relayId) const [members] = createResource(relayId, async (id) => { if (!id) return [] try { return (await listRelayMembers(id)).members } catch { return [] } }) const loading = useMinLoading(() => relay.loading && !relay()) const [activity] = useRelayActivity(relayId) const { busy, handleDeactivate, handleReactivate, handleUpdatePlan, pendingInvoice, clearPendingInvoice, toggles } = useRelayToggles(relayId, relay, { refetch, mutate }) const [tenant, { refetch: refetchTenant }] = useTenant() const [paymentSetupOpen, setPaymentSetupOpen] = createSignal(false) const [invoiceDialogOpen, setInvoiceDialogOpen] = createSignal(false) const [paymentBannerDismissed, setPaymentBannerDismissed] = createSignal(false) const isPaidRelay = createMemo(() => { const r = relay() if (!r) return false const plan = plans().find(p => p.id === r.plan) return !!(plan && plan.amount > 0) }) const [openInvoice, { refetch: refetchOpenInvoice }] = createResource( isPaidRelay, async (paid) => paid ? getLatestOpenInvoice() : null ) const showPaymentNudge = createMemo(() => { if (paymentBannerDismissed()) return false if (!isPaidRelay()) return false const t = tenant() if (!t) return false return !t.nwc_url }) return ( {(r) => (

Payment setup recommended

This relay is on a paid plan. Invoices are due when your subscription starts. Set up NWC or Stripe for automatic payments, or pay open invoices via Lightning.

)}
{(inv) => ( { clearPendingInvoice() void refetchTenant() void refetchOpenInvoice() }} /> )} {(inv) => ( { setInvoiceDialogOpen(false) void refetchOpenInvoice() }} /> )} { setPaymentSetupOpen(false) void refetchTenant() }} />
) }