feat: 修复健康数据
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
import { AnimatedNumber } from '@/components/AnimatedNumber';
|
||||
import { ROUTES } from '@/constants/Routes';
|
||||
import { useActiveCalories } from '@/hooks/useActiveCalories';
|
||||
import { useAppDispatch, useAppSelector } from '@/hooks/redux';
|
||||
import { useAuthGuard } from '@/hooks/useAuthGuard';
|
||||
import { fetchCompleteNutritionCardData, selectNutritionCardDataByDate } from '@/store/nutritionSlice';
|
||||
import { fetchDailyBasalMetabolism, fetchDailyNutritionData, selectBasalMetabolismByDate, selectNutritionSummaryByDate } from '@/store/nutritionSlice';
|
||||
import { triggerLightHaptic } from '@/utils/haptics';
|
||||
import { calculateRemainingCalories } from '@/utils/nutrition';
|
||||
import dayjs from 'dayjs';
|
||||
@@ -102,17 +103,24 @@ export function NutritionRadarCard({
|
||||
return selectedDate ? dayjs(selectedDate).format('YYYY-MM-DD') : dayjs().format('YYYY-MM-DD');
|
||||
}, [selectedDate]);
|
||||
|
||||
const cardData = useAppSelector(selectNutritionCardDataByDate(dateKey));
|
||||
const { nutritionSummary, healthData, basalMetabolism } = cardData;
|
||||
// 使用专用的选择器获取营养数据和基础代谢
|
||||
const nutritionSummary = useAppSelector(selectNutritionSummaryByDate(dateKey));
|
||||
const basalMetabolism = useAppSelector(selectBasalMetabolismByDate(dateKey));
|
||||
|
||||
// 获取营养和健康数据
|
||||
// 使用专用的hook获取运动消耗卡路里
|
||||
const { activeCalories: effectiveActiveCalories, loading: activeCaloriesLoading } = useActiveCalories(selectedDate);
|
||||
|
||||
// 获取营养数据和基础代谢数据
|
||||
useEffect(() => {
|
||||
const loadNutritionCardData = async () => {
|
||||
const targetDate = selectedDate || new Date();
|
||||
|
||||
try {
|
||||
setLoading(true);
|
||||
await dispatch(fetchCompleteNutritionCardData(targetDate)).unwrap();
|
||||
await Promise.all([
|
||||
dispatch(fetchDailyNutritionData(targetDate)).unwrap(),
|
||||
dispatch(fetchDailyBasalMetabolism(targetDate)).unwrap(),
|
||||
]);
|
||||
} catch (error) {
|
||||
console.error('NutritionRadarCard: 获取营养卡片数据失败:', error);
|
||||
} finally {
|
||||
@@ -139,7 +147,6 @@ export function NutritionRadarCard({
|
||||
|
||||
// 使用从HealthKit获取的数据,如果没有则使用默认值
|
||||
const effectiveBasalMetabolism = basalMetabolism || 0; // 基础代谢默认值
|
||||
const effectiveActiveCalories = healthData?.activeCalories || 0; // 运动消耗卡路里
|
||||
|
||||
const remainingCalories = calculateRemainingCalories({
|
||||
basalMetabolism: effectiveBasalMetabolism,
|
||||
@@ -171,8 +178,8 @@ export function NutritionRadarCard({
|
||||
<View style={styles.contentContainer}>
|
||||
<View style={styles.radarContainer}>
|
||||
<SimpleRingProgress
|
||||
remainingCalories={loading ? 0 : remainingCalories}
|
||||
totalAvailable={loading ? 0 : effectiveBasalMetabolism + effectiveActiveCalories}
|
||||
remainingCalories={(loading || activeCaloriesLoading) ? 0 : remainingCalories}
|
||||
totalAvailable={(loading || activeCaloriesLoading) ? 0 : effectiveBasalMetabolism + effectiveActiveCalories}
|
||||
/>
|
||||
</View>
|
||||
|
||||
@@ -195,10 +202,10 @@ export function NutritionRadarCard({
|
||||
<Text style={styles.calorieSubtitle}>还能吃</Text>
|
||||
<View style={styles.remainingCaloriesContainer}>
|
||||
<AnimatedNumber
|
||||
value={loading ? 0 : remainingCalories}
|
||||
value={(loading || activeCaloriesLoading) ? 0 : remainingCalories}
|
||||
resetToken={resetToken}
|
||||
style={styles.mainValue}
|
||||
format={(v) => loading ? '--' : Math.round(v).toString()}
|
||||
format={(v) => (loading || activeCaloriesLoading) ? '--' : Math.round(v).toString()}
|
||||
/>
|
||||
<Text style={styles.calorieUnit}>千卡</Text>
|
||||
</View>
|
||||
@@ -217,10 +224,10 @@ export function NutritionRadarCard({
|
||||
<Text style={styles.calculationLabel}>运动</Text>
|
||||
</View>
|
||||
<AnimatedNumber
|
||||
value={loading ? 0 : effectiveActiveCalories}
|
||||
value={activeCaloriesLoading ? 0 : effectiveActiveCalories}
|
||||
resetToken={resetToken}
|
||||
style={styles.calculationValue}
|
||||
format={(v) => loading ? '--' : Math.round(v).toString()}
|
||||
format={(v) => activeCaloriesLoading ? '--' : Math.round(v).toString()}
|
||||
/>
|
||||
<Text style={styles.calculationText}> - </Text>
|
||||
<View style={styles.calculationItem}>
|
||||
|
||||
Reference in New Issue
Block a user