Add hooks

This commit is contained in:
Jon Staab
2026-03-26 14:52:52 -07:00
parent c9c551ed4f
commit a068b6471a
14 changed files with 237 additions and 42 deletions
+5 -5
View File
@@ -1,15 +1,15 @@
import { createEffect, createMemo, createResource, createSignal, For, Show } from "solid-js"
import { createEffect, createMemo, createSignal, For, Show } from "solid-js"
import { useNavigate } from "@solidjs/router"
import { getTenant, listTenantInvoices, updateTenantBilling } from "../lib/api"
import PageContainer from "../components/PageContainer"
import LoadingState from "../components/LoadingState"
import useMinLoading from "../components/useMinLoading"
import { accounts, persistAccounts } from "../lib/nostr"
import { updateActiveTenantBilling, useTenant, useTenantInvoices } from "../lib/hooks"
export default function Account() {
const navigate = useNavigate()
const [tenant, { refetch: refetchTenant }] = createResource(getTenant)
const [invoices] = createResource(listTenantInvoices)
const [tenant, { refetch: refetchTenant }] = useTenant()
const [invoices] = useTenantInvoices()
const [nwcUrl, setNwcUrl] = createSignal("")
const [saving, setSaving] = createSignal(false)
const [error, setError] = createSignal("")
@@ -30,7 +30,7 @@ export default function Account() {
setSaving(true)
try {
const next = nwcUrl().trim()
await updateTenantBilling(next)
await updateActiveTenantBilling(next)
await refetchTenant()
} catch (e) {
setError(e instanceof Error ? e.message : "Failed to update billing")
@@ -1,16 +1,16 @@
import { useParams } from "@solidjs/router"
import { createResource, createSignal, Show } from "solid-js"
import { adminDeactivateRelay, adminGetRelay, adminUpdateRelay, type Relay } from "../../lib/api"
import { createSignal, Show } from "solid-js"
import BackLink from "../../components/BackLink"
import PageContainer from "../../components/PageContainer"
import RelayDetailCard from "../../components/RelayDetailCard"
import ResourceState from "../../components/ResourceState"
import useMinLoading from "../../components/useMinLoading"
import { deactivateRelayById, updateRelayById, useRelay, type Relay } from "../../lib/hooks"
export default function AdminRelayDetail() {
const params = useParams()
const relayId = () => params.id ?? ""
const [relay, { refetch, mutate }] = createResource(relayId, adminGetRelay)
const [relay, { refetch, mutate }] = useRelay(relayId)
const [busy, setBusy] = createSignal(false)
const [error, setError] = createSignal("")
const loading = useMinLoading(() => relay.loading && !relay())
@@ -20,7 +20,7 @@ export default function AdminRelayDetail() {
setError("")
setBusy(true)
try {
await adminDeactivateRelay(relayId())
await deactivateRelayById(relayId())
await refetch()
} catch (e) {
setError(e instanceof Error ? e.message : "Failed to deactivate relay")
@@ -47,7 +47,7 @@ export default function AdminRelayDetail() {
mutate(next)
try {
await adminUpdateRelay(relayId(), next)
await updateRelayById(relayId(), next)
await refetch()
} catch (e) {
mutate(previous)
+4 -4
View File
@@ -1,18 +1,18 @@
import { useNavigate, useParams } from "@solidjs/router"
import { Show, createEffect, createResource, createSignal } from "solid-js"
import { adminGetRelay, adminUpdateRelay } from "../../lib/api"
import { Show, createEffect, createSignal } from "solid-js"
import RelayForm from "../../components/RelayForm"
import { slugify } from "../../lib/slugify"
import BackLink from "../../components/BackLink"
import PageContainer from "../../components/PageContainer"
import ResourceState from "../../components/ResourceState"
import useMinLoading from "../../components/useMinLoading"
import { updateRelayById, useRelay } from "../../lib/hooks"
export default function AdminRelayEdit() {
const navigate = useNavigate()
const params = useParams()
const relayId = () => params.id ?? ""
const [relay] = createResource(relayId, adminGetRelay)
const [relay] = useRelay(relayId)
const loading = useMinLoading(() => relay.loading)
const [name, setName] = createSignal("")
@@ -36,7 +36,7 @@ export default function AdminRelayEdit() {
setError("")
setSubmitting(true)
try {
await adminUpdateRelay(relayId(), {
await updateRelayById(relayId(), {
subdomain: slugify(subdomain()),
info_name: name().trim(),
info_icon: icon().trim(),
+3 -3
View File
@@ -1,14 +1,14 @@
import { A } from "@solidjs/router"
import Fuse from "fuse.js"
import { createMemo, createResource, createSignal, For, Show } from "solid-js"
import { adminListRelays } from "../../lib/api"
import { createMemo, createSignal, For, Show } from "solid-js"
import PageContainer from "../../components/PageContainer"
import ResourceState from "../../components/ResourceState"
import useMinLoading from "../../components/useMinLoading"
import { useAdminRelays } from "../../lib/hooks"
export default function AdminRelayList() {
const [query, setQuery] = createSignal("")
const [relays] = createResource(adminListRelays)
const [relays] = useAdminRelays()
const loading = useMinLoading(() => relays.loading)
const filtered = createMemo(() => {
@@ -1,15 +1,15 @@
import { useParams, A } from "@solidjs/router"
import { createResource, For, Show } from "solid-js"
import { adminGetTenant } from "../../lib/api"
import { For, Show } from "solid-js"
import BackLink from "../../components/BackLink"
import PageContainer from "../../components/PageContainer"
import ResourceState from "../../components/ResourceState"
import useMinLoading from "../../components/useMinLoading"
import { useAdminTenantDetail } from "../../lib/hooks"
export default function AdminTenantDetail() {
const params = useParams()
const tenantId = () => params.id ?? ""
const [detail] = createResource(tenantId, adminGetTenant)
const [detail] = useAdminTenantDetail(tenantId)
const loading = useMinLoading(() => detail.loading)
return (
+3 -3
View File
@@ -1,12 +1,12 @@
import { A } from "@solidjs/router"
import Fuse from "fuse.js"
import { createEffect, createMemo, createResource, createSignal, For, onCleanup, Show } from "solid-js"
import { createEffect, createMemo, createSignal, For, onCleanup, Show } from "solid-js"
import { getProfilePicture } from "applesauce-core/helpers/profile"
import { adminListTenants } from "../../lib/api"
import { eventStore, primeProfiles } from "../../lib/nostr"
import PageContainer from "../../components/PageContainer"
import ResourceState from "../../components/ResourceState"
import useMinLoading from "../../components/useMinLoading"
import { useAdminTenants } from "../../lib/hooks"
function shortenPubkey(pubkey: string) {
if (pubkey.length <= 16) return pubkey
@@ -15,7 +15,7 @@ function shortenPubkey(pubkey: string) {
export default function AdminTenantList() {
const [query, setQuery] = createSignal("")
const [tenants] = createResource(adminListTenants)
const [tenants] = useAdminTenants()
const [profiles, setProfiles] = createSignal<Record<string, { name?: string, about?: string, nip05?: string, picture?: string }>>({})
const loading = useMinLoading(() => tenants.loading)
+5 -5
View File
@@ -1,17 +1,17 @@
import { useParams } from "@solidjs/router"
import { createMemo, createResource, createSignal, Show } from "solid-js"
import { deactivateTenantRelay, getRelayMemberCount, getTenantRelay, updateTenantRelay, updateTenantRelayPlan, type Relay } from "../../lib/api"
import type { RelayPlanId } from "../../lib/relayPlans"
import BackLink from "../../components/BackLink"
import PageContainer from "../../components/PageContainer"
import RelayDetailCard from "../../components/RelayDetailCard"
import ResourceState from "../../components/ResourceState"
import useMinLoading from "../../components/useMinLoading"
import { deactivateRelayById, getRelayMemberCount, updateRelayById, updateRelayPlanById, useRelay, type Relay } from "../../lib/hooks"
export default function RelayDetail() {
const params = useParams()
const relayId = () => params.id ?? ""
const [relay, { refetch, mutate }] = createResource(relayId, getTenantRelay)
const [relay, { refetch, mutate }] = useRelay(relayId)
const relayUrl = createMemo(() => {
const subdomain = relay()?.subdomain
return subdomain ? `wss://${subdomain}.spaces.coracle.social` : undefined
@@ -26,7 +26,7 @@ export default function RelayDetail() {
setError("")
setBusy(true)
try {
await deactivateTenantRelay(relayId())
await deactivateRelayById(relayId())
await refetch()
} catch (e) {
setError(e instanceof Error ? e.message : "Failed to deactivate relay")
@@ -53,7 +53,7 @@ export default function RelayDetail() {
mutate(next)
try {
await updateTenantRelay(relayId(), next)
await updateRelayById(relayId(), next)
await refetch()
} catch (e) {
mutate(previous)
@@ -148,7 +148,7 @@ export default function RelayDetail() {
mutate(next)
try {
await updateTenantRelayPlan(relayId(), plan)
await updateRelayPlanById(relayId(), plan)
await refetch()
} catch (e) {
mutate(previous)
+4 -4
View File
@@ -1,18 +1,18 @@
import { useNavigate, useParams } from "@solidjs/router"
import { Show, createEffect, createResource, createSignal } from "solid-js"
import { getTenantRelay, updateTenantRelay } from "../../lib/api"
import { Show, createEffect, createSignal } from "solid-js"
import RelayForm from "../../components/RelayForm"
import { slugify } from "../../lib/slugify"
import BackLink from "../../components/BackLink"
import PageContainer from "../../components/PageContainer"
import ResourceState from "../../components/ResourceState"
import useMinLoading from "../../components/useMinLoading"
import { updateRelayById, useRelay } from "../../lib/hooks"
export default function RelayEdit() {
const navigate = useNavigate()
const params = useParams()
const relayId = () => params.id ?? ""
const [relay] = createResource(relayId, getTenantRelay)
const [relay] = useRelay(relayId)
const loading = useMinLoading(() => relay.loading)
const [name, setName] = createSignal("")
@@ -36,7 +36,7 @@ export default function RelayEdit() {
setError("")
setSubmitting(true)
try {
await updateTenantRelay(relayId(), {
await updateRelayById(relayId(), {
subdomain: slugify(subdomain()),
info_name: name().trim(),
info_icon: icon().trim(),
+3 -3
View File
@@ -1,13 +1,13 @@
import { A } from "@solidjs/router"
import Fuse from "fuse.js"
import { createMemo, createResource, createSignal, For, Show } from "solid-js"
import { listTenantRelays } from "../../lib/api"
import { createMemo, createSignal, For, Show } from "solid-js"
import PageContainer from "../../components/PageContainer"
import ResourceState from "../../components/ResourceState"
import useMinLoading from "../../components/useMinLoading"
import { useTenantRelays } from "../../lib/hooks"
export default function RelayList() {
const [relays] = createResource(listTenantRelays)
const [relays] = useTenantRelays()
const [query, setQuery] = createSignal("")
const [status, setStatus] = createSignal("all")
const loading = useMinLoading(() => relays.loading)
+2 -2
View File
@@ -1,7 +1,7 @@
import { Show, createSignal } from "solid-js"
import { useNavigate } from "@solidjs/router"
import { createTenantRelay } from "../../lib/api"
import { slugify } from "../../lib/slugify"
import { createRelayForActiveTenant } from "../../lib/hooks"
const PLANS = [
{ id: "free", label: "Free", price: 0, members: "Up to 10", blossom: false, livekit: false },
@@ -34,7 +34,7 @@ export default function RelayNew() {
setSubmitting(true)
try {
const relay = await createTenantRelay({
const relay = await createRelayForActiveTenant({
subdomain: slugify(subdomain()),
plan: plan(),
info_name: name().trim(),