import { useParams } from "@solidjs/router" import { createEffect, createResource, createSignal, onCleanup, 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 { useRelay, useRelayActivity } from "@/lib/hooks" import useRelayToggles from "@/lib/useRelayToggles" import { setBillingFlowActive } from "@/lib/billing" import { refetchBilling } 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, pendingPaymentSetup, clearPendingPaymentSetup, toggles } = useRelayToggles(relayId, relay, { refetch, mutate }) const [paymentSetupOpen, setPaymentSetupOpen] = createSignal(false) createEffect(() => { if (pendingPaymentSetup() && !pendingInvoice()) { setPaymentSetupOpen(true) clearPendingPaymentSetup() } }) // Suppress the shared banner's redundant pay/setup prompts while this page's // own inline plan-change modals are open. createEffect(() => setBillingFlowActive(Boolean(pendingInvoice()) || paymentSetupOpen())) onCleanup(() => setBillingFlowActive(false)) return ( {(r) => (
)}
{(inv) => ( { clearPendingInvoice() void refetchBilling() }} /> )} { setPaymentSetupOpen(false) void refetchBilling() }} />
) }