import { View, Text, Button, ScrollView } from '@tarojs/components' import Taro, { useLoad } from '@tarojs/taro' import { useMemo, useState } from 'react' import { BrandNav, SiteFooter } from '../../components/Chrome' import { fetchMeetups, type Meetup } from '../../services/api' import './index.scss' export default function MeetupsPage() { const [list, setList] = useState([]) const [mode, setMode] = useState<'all' | 'online' | 'offline' | 'hybrid'>('all') const [err, setErr] = useState('') const [loading, setLoading] = useState(true) useLoad(() => { fetchMeetups() .then((d) => { setList(d); setLoading(false) }) .catch((e) => { setErr(e.message || '加载失败'); setLoading(false) }) }) const filtered = useMemo(() => { if (mode === 'all') return list return list.filter((m) => (m.mode || '').toLowerCase() === mode) }, [list, mode]) return ( 🎉 MEETUPS 游民活动 同城与线上 · 登录后可 RSVP {([ ['all', '全部'], ['online', '线上'], ['offline', '线下'], ['hybrid', '混合'], ] as const).map(([k, label]) => ( ))} {loading ? 加载中… : null} {err ? {err} : null} {filtered.map((m) => ( {m.emoji || '🎉'} {m.title} {m.city || '—'} · {m.date || ''} {m.time || ''} · {m.mode || 'offline'} {m.description || ''} {m.venue ? 📍 {m.venue} : null} {(m.tags || []).map((tag) => ( {tag} ))} {m.rsvp_count ?? m.attendees ?? 0}/{m.max_attendees || '∞'} 人 {m.destination_slug ? ( ) : null} ))} {!loading && !err && !filtered.length ? ( 暂无活动 ) : null} ) }