From 5d102ad2151db443cc9ab3e00a31989ef5781ba4 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Fri, 27 Feb 2026 13:11:42 -0800 Subject: [PATCH] Refactor relay form --- frontend/src/components/RelayForm.tsx | 86 ++++++++++++++++ frontend/src/lib/relayPlans.ts | 3 + frontend/src/lib/slugify.ts | 9 ++ frontend/src/pages/admin/AdminRelayEdit.tsx | 103 +++++--------------- frontend/src/pages/relays/RelayEdit.tsx | 103 +++++--------------- frontend/src/pages/relays/RelayNew.tsx | 11 +-- 6 files changed, 145 insertions(+), 170 deletions(-) create mode 100644 frontend/src/components/RelayForm.tsx create mode 100644 frontend/src/lib/relayPlans.ts create mode 100644 frontend/src/lib/slugify.ts diff --git a/frontend/src/components/RelayForm.tsx b/frontend/src/components/RelayForm.tsx new file mode 100644 index 0000000..474927c --- /dev/null +++ b/frontend/src/components/RelayForm.tsx @@ -0,0 +1,86 @@ +type RelayFormProps = { + name: string + setName: (value: string) => void + subdomain: string + setSubdomain: (value: string) => void + icon: string + setIcon: (value: string) => void + description: string + setDescription: (value: string) => void + plan: string + setPlan: (value: string) => void + plans: readonly string[] + onSubmit: (e: Event) => void + submitting: boolean + error?: string + submitLabel: string + submittingLabel: string +} + +export default function RelayForm(props: RelayFormProps) { + return ( +
+
+ + props.setName(e.currentTarget.value)} + required + class="w-full border border-gray-300 rounded-lg px-3 py-2" + /> +
+
+ +
+ props.setSubdomain(e.currentTarget.value)} + required + class="flex-1 px-3 py-2" + /> + .spaces.coracle.social +
+
+
+ + props.setIcon(e.currentTarget.value)} + class="w-full border border-gray-300 rounded-lg px-3 py-2" + /> +
+
+ +