This commit is contained in:
eric
2026-06-06 04:29:46 -05:00
parent 88aa96a2a1
commit 41493c35ca
50 changed files with 4666 additions and 416 deletions

View File

@@ -1,15 +1,17 @@
"use client";
import { useState } from "react";
import { Link, useLocale, useTranslation } from "@/i18n/navigation";
import { Link, useTranslation } from "@/i18n/navigation";
import { cities } from "@/app/data/cities";
import { apiFetch } from "@/app/lib/api-client";
const CITY_OPTIONS = cities.map((c) => ({ value: c.name, label: `${c.icon} ${c.name}` }));
const CITY_BY_NAME = new Map(cities.map((city) => [city.name, city]));
export default function HostMeetupPage() {
const { t } = useTranslation("hostMeetup");
const locale = useLocale();
const [submitted, setSubmitted] = useState(false);
const [submitting, setSubmitting] = useState(false);
const [form, setForm] = useState({
city: "",
date: "",
@@ -20,9 +22,33 @@ export default function HostMeetupPage() {
maxAttendees: "20",
});
const handleSubmit = (e: React.FormEvent) => {
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
setSubmitted(true);
const city = CITY_BY_NAME.get(form.city);
setSubmitting(true);
try {
await apiFetch("/api/meetups", {
method: "POST",
body: JSON.stringify({
city: form.city,
emoji: city?.icon || "📍",
date: form.date,
time: form.time,
venue: form.venue,
address: form.address,
description: form.description,
rsvpCount: 1,
gradientFrom: city?.gradientFrom || "#ff4d4f",
gradientTo: city?.gradientTo || "#ff7a45",
attendees: [],
isUpcoming: true,
status: "pending",
}),
});
setSubmitted(true);
} finally {
setSubmitting(false);
}
};
if (submitted) {
@@ -183,14 +209,15 @@ export default function HostMeetupPage() {
</div>
<p className="text-xs text-gray-400 dark:text-gray-500">
{t("demoHint")}
PocketBase meetups pending
</p>
<button
type="submit"
disabled={submitting}
className="w-full py-3.5 rounded-xl bg-[#ff4d4f] text-white font-semibold hover:bg-[#ff7a45] transition-colors"
>
{t("submit")}
{submitting ? "提交中..." : t("submit")}
</button>
</form>
</main>