This commit is contained in:
Daniel
2026-03-04 00:39:01 +08:00
parent 95e2fe1c41
commit 3264b3252a
8 changed files with 152 additions and 17 deletions

View File

@@ -50,6 +50,7 @@ export function HeaderPanel() {
const [feedbackText, setFeedbackText] = useState('')
const [feedbackSending, setFeedbackSending] = useState(false)
const [feedbackDone, setFeedbackDone] = useState(false)
const [likeSending, setLikeSending] = useState(false)
useEffect(() => {
const timer = setInterval(() => setNow(new Date()), 1000)
@@ -139,14 +140,41 @@ export function HeaderPanel() {
}
}
const handleLike = () => {
if (liked) return
const handleLike = async () => {
if (liked || likeSending) return
setLiked(true)
const next = likes + 1
setLikes(next)
setLikeSending(true)
try {
localStorage.setItem(STORAGE_LIKES, String(next))
} catch {}
const res = await fetch('/api/like', { method: 'POST' })
const data = await res.json()
if (res.ok && data.likeCount != null) {
setStats({
viewers: data.viewers,
cumulative: data.cumulative,
feedbackCount: data.feedbackCount,
shareCount: data.shareCount,
likeCount: data.likeCount,
})
setLikes(data.likeCount)
try {
localStorage.setItem(STORAGE_LIKES, String(data.likeCount))
} catch {}
} else {
const next = likes + 1
setLikes(next)
try {
localStorage.setItem(STORAGE_LIKES, String(next))
} catch {}
}
} catch {
const next = likes + 1
setLikes(next)
try {
localStorage.setItem(STORAGE_LIKES, String(next))
} catch {}
} finally {
setLikeSending(false)
}
}
const formatDateTime = (d: Date) =>
@@ -218,7 +246,8 @@ export function HeaderPanel() {
<button
type="button"
onClick={handleLike}
className={`flex shrink-0 items-center gap-1 rounded border px-1.5 py-0.5 text-[9px] transition-colors sm:px-2 sm:py-1 sm:text-[10px] ${
disabled={likeSending}
className={`flex shrink-0 items-center gap-1 rounded border px-1.5 py-0.5 text-[9px] transition-colors sm:px-2 sm:py-1 sm:text-[10px] disabled:opacity-50 ${
liked
? 'border-red-500/50 bg-red-500/20 text-red-400'
: 'border-military-border text-military-text-secondary hover:bg-military-border/30 hover:text-red-400'