'use client'; import { useEffect, useRef, useState, useMemo, useLayoutEffect, useCallback } from 'react'; import { motion, AnimatePresence, Reorder } from 'framer-motion'; import { createAvatar } from '@dicebear/core'; import { glass } from '@dicebear/collection'; import dayjs from 'dayjs'; import utc from 'dayjs/plugin/utc'; import timezone from 'dayjs/plugin/timezone'; import Announcement from "./components/Announcement"; import { DatePicker, DonateTabs, NumericInput, Stat } from "./components/Common"; import { ChevronIcon, CloseIcon, CloudIcon, DragIcon, ExitIcon, GridIcon, ListIcon, LoginIcon, LogoutIcon, MailIcon, PlusIcon, RefreshIcon, SettingsIcon, SortIcon, StarIcon, TrashIcon, UpdateIcon, UserIcon } from "./components/Icons"; import githubImg from "./assets/github.svg"; import { supabase } from './lib/supabase'; import { fetchFundData, fetchLatestRelease, fetchShanghaiIndexDate, fetchSmartFundNetValue, searchFunds, submitFeedback } from './api/fund'; import packageJson from '../package.json'; dayjs.extend(utc); dayjs.extend(timezone); dayjs.tz.setDefault('Asia/Shanghai'); const TZ = 'Asia/Shanghai'; const nowInTz = () => dayjs().tz(TZ); const toTz = (input) => (input ? dayjs.tz(input, TZ) : nowInTz()); const formatDate = (input) => toTz(input).format('YYYY-MM-DD'); function FeedbackModal({ onClose, user }) { const [submitting, setSubmitting] = useState(false); const [succeeded, setSucceeded] = useState(false); const [error, setError] = useState(""); const onSubmit = async (e) => { e.preventDefault(); setSubmitting(true); setError(""); const formData = new FormData(e.target); const nickname = formData.get("nickname")?.trim(); if (!nickname) { formData.set("nickname", "匿名"); } // Web3Forms Access Key formData.append("access_key", process.env.NEXT_PUBLIC_WEB3FORMS_ACCESS_KEY || ''); formData.append("subject", "基估宝 - 用户反馈"); try { const data = await submitFeedback(formData); if (data.success) { setSucceeded(true); } else { setError(data.message || "提交失败,请稍后再试"); } } catch (err) { setError("网络错误,请检查您的连接"); } finally { setSubmitting(false); } }; return ( e.stopPropagation()} >
意见反馈
{succeeded ? (
🎉

感谢您的反馈!

我们已收到您的建议,会尽快查看。

) : (