添加收藏

This commit is contained in:
yuchenglong
2026-01-16 14:41:15 +08:00
parent 4bccf39a8b
commit d20080eaf3
11 changed files with 656 additions and 75 deletions

View File

@@ -5,7 +5,7 @@ import { ThemedView } from "@/components/themed-view";
import { Colors } from "@/constants/theme";
import { useAppState } from "@/context/AppStateContext";
import { useTheme } from "@/context/ThemeContext";
import { fetchLiveScore } from "@/lib/api";
import { checkFavorite, fetchLiveScore } from "@/lib/api";
import { LiveScoreMatch, Match } from "@/types/api";
import { useRouter } from "expo-router";
import React, { useEffect, useState } from "react";
@@ -66,7 +66,25 @@ export default function LiveScreen() {
isLive: true,
}));
setMatches(converted);
// 直接传递 match.id 查询是否收藏,并更新列表状态
const listWithFavStatus = await Promise.all(
converted.map(async (m) => {
try {
const favRes = await checkFavorite("match", m.id);
return { ...m, fav: favRes.isFavorite };
} catch (error) {
console.error(`Check favorite failed for match ${m.id}:`, error);
return m;
}
})
);
// 将收藏的比赛置顶
const sortedList = [...listWithFavStatus].sort((a, b) => {
if (a.fav === b.fav) return 0;
return a.fav ? -1 : 1;
});
setMatches(sortedList);
} catch (error) {
console.error("Load live matches error:", error);
setMatches([]);
@@ -75,6 +93,18 @@ export default function LiveScreen() {
}
};
const handleFavoriteToggle = (matchId: string, isFav: boolean) => {
setMatches((prev) => {
const updated = prev.map((m) =>
m.id === matchId ? { ...m, fav: isFav } : m
);
return [...updated].sort((a, b) => {
if (a.fav === b.fav) return 0;
return a.fav ? -1 : 1;
});
});
};
return (
<ThemedView style={styles.container}>
<HomeHeader />
@@ -91,6 +121,7 @@ export default function LiveScreen() {
renderItem={({ item }) => (
<MatchCard
match={item}
onFavoriteToggle={handleFavoriteToggle}
onPress={(m) => {
router.push({
pathname: "/live-detail/[id]",