From 2be7f4406ae67ac96114a2fae4cca9f3372b48ed Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Fri, 27 Mar 2026 12:57:11 -0700 Subject: [PATCH] Whatever --- frontend/src/components/CheckIcon.tsx | 7 + frontend/src/components/ExternalLinkIcon.tsx | 9 + frontend/src/components/RelayForm.tsx | 70 +++++-- frontend/src/lib/hooks.ts | 3 +- frontend/src/pages/Home.tsx | 201 ++++++++++++++++--- frontend/src/pages/Login.tsx | 29 ++- frontend/src/pages/admin/AdminRelayEdit.tsx | 36 +--- frontend/src/pages/relays/RelayEdit.tsx | 36 +--- 8 files changed, 281 insertions(+), 110 deletions(-) create mode 100644 frontend/src/components/CheckIcon.tsx create mode 100644 frontend/src/components/ExternalLinkIcon.tsx diff --git a/frontend/src/components/CheckIcon.tsx b/frontend/src/components/CheckIcon.tsx new file mode 100644 index 0000000..19145e3 --- /dev/null +++ b/frontend/src/components/CheckIcon.tsx @@ -0,0 +1,7 @@ +export default function CheckIcon() { + return ( + + + + ) +} diff --git a/frontend/src/components/ExternalLinkIcon.tsx b/frontend/src/components/ExternalLinkIcon.tsx new file mode 100644 index 0000000..a82a7b3 --- /dev/null +++ b/frontend/src/components/ExternalLinkIcon.tsx @@ -0,0 +1,9 @@ +export default function ExternalLinkIcon() { + return ( + + + + + + ) +} diff --git a/frontend/src/components/RelayForm.tsx b/frontend/src/components/RelayForm.tsx index 589dff4..06fa11b 100644 --- a/frontend/src/components/RelayForm.tsx +++ b/frontend/src/components/RelayForm.tsx @@ -1,13 +1,18 @@ -type RelayFormProps = { - name: string - setName: (value: string) => void +import { createEffect, createSignal } from "solid-js" +import type { Relay } from "../lib/hooks" +import { slugify } from "../lib/slugify" + +export type RelayFormValues = { + info_name: string subdomain: string - setSubdomain: (value: string) => void - icon: string - setIcon: (value: string) => void - description: string - setDescription: (value: string) => void - onSubmit: (e: Event) => void + info_icon: string + info_description: string +} + +type RelayFormProps = { + initialValues: Pick + syncSubdomainWithName?: boolean + onSubmit: (values: RelayFormValues, e: Event) => void | Promise submitting: boolean error?: string submitLabel: string @@ -15,14 +20,43 @@ type RelayFormProps = { } export default function RelayForm(props: RelayFormProps) { + const [name, setName] = createSignal(props.initialValues.info_name) + const [subdomain, setSubdomain] = createSignal(props.initialValues.subdomain) + const [icon, setIcon] = createSignal(props.initialValues.info_icon) + const [description, setDescription] = createSignal(props.initialValues.info_description) + + createEffect(() => { + setName(props.initialValues.info_name) + setSubdomain(props.initialValues.subdomain) + setIcon(props.initialValues.info_icon) + setDescription(props.initialValues.info_description) + }) + + function handleSubmit(e: Event) { + e.preventDefault() + void props.onSubmit( + { + info_name: name(), + subdomain: subdomain(), + info_icon: icon(), + info_description: description(), + }, + e, + ) + } + return ( -
+ {/* Basic info */}
props.setName(e.currentTarget.value)} + value={name()} + onInput={e => { + const value = e.currentTarget.value + setName(value) + if (props.syncSubdomainWithName) setSubdomain(slugify(value)) + }} required class="w-full border border-gray-300 rounded-lg px-3 py-2" /> @@ -31,8 +65,8 @@ export default function RelayForm(props: RelayFormProps) {
props.setSubdomain(e.currentTarget.value)} + value={subdomain()} + onInput={e => setSubdomain(e.currentTarget.value)} required class="flex-1 px-3 py-2" /> @@ -43,16 +77,16 @@ export default function RelayForm(props: RelayFormProps) { props.setIcon(e.currentTarget.value)} + value={icon()} + onInput={e => setIcon(e.currentTarget.value)} class="w-full border border-gray-300 rounded-lg px-3 py-2" />