import { createSignal, onMount, Show, For } from "solid-js"; import { useNavigate } from "@solidjs/router"; import { api } from "../../api"; import { auth } from "../../store/auth"; import { extractError } from "../../utils/api"; import type { District, SiteRequest } from "../../types/district"; import { districtImage, districtIconClass } from "../../utils/districts"; export default function SubmitSite() { const navigate = useNavigate(); const [districts, setDistricts] = createSignal([]); const [selectedDistrict, setSelectedDistrict] = createSignal(""); const [title, setTitle] = createSignal(""); const [url, setUrl] = createSignal(""); const [description, setDescription] = createSignal(""); const [tagInput, setTagInput] = createSignal(""); const [tags, setTags] = createSignal([]); const [error, setError] = createSignal(""); const [submitting, setSubmitting] = createSignal(false); onMount(async () => { const response = await api("/districts"); if (response.ok) { setDistricts(response.data); } }); function addTag() { const tag = tagInput().trim().toLowerCase(); if (tag && tags().length < 5 && !tags().includes(tag)) { setTags([...tags(), tag]); setTagInput(""); } } function removeTag(tag: string) { setTags(tags().filter((existingTag) => existingTag !== tag)); } function handleTagKeyDown(event: KeyboardEvent) { if (event.key === "Enter") { event.preventDefault(); addTag(); } } async function handleSubmit(event: Event) { event.preventDefault(); setError(""); setSubmitting(true); const response = await api("/districts/sites", { method: "POST", token: auth.token(), body: { district: selectedDistrict(), title: title(), url: url(), description: description(), tags: tags(), }, }); if (response.ok) { navigate("/districts"); } else { setError(extractError(response.data)); } setSubmitting(false); } return (

Submit a Site

Submit a website to be listed in a district. Your submission will be reviewed by staff before it appears.

{error()}
{(district) => ( )}
setTitle(e.currentTarget.value)} placeholder="My Cool Website" maxLength={200} />
setUrl(e.currentTarget.value)} placeholder="https://example.nekoweb.org" />