import { useAppDispatch, useAppSelector } from '@/hooks/redux'; import { MoodType } from '@/services/moodCheckins'; import { createMoodRecord, deleteMoodRecord, fetchDailyMoodCheckins, fetchMoodHistory, fetchMoodStatistics, selectLatestMoodRecordByDate, selectMoodLoading, selectMoodRecordsByDate, selectMoodStatistics, updateMoodRecord } from '@/store/moodSlice'; import dayjs from 'dayjs'; // 创建心情记录参数 export interface CreateMoodParams { moodType: MoodType; intensity: number; description?: string; checkinDate?: string; } // 更新心情记录参数 export interface UpdateMoodParams { id: string; moodType?: MoodType; intensity?: number; description?: string; } // 获取心情历史参数 export interface GetMoodHistoryParams { startDate: string; endDate: string; moodType?: MoodType; } // 获取心情统计参数 export interface GetMoodStatisticsParams { startDate: string; endDate: string; } /** * 心情数据管理 Hook */ export function useMoodData() { const dispatch = useAppDispatch(); const loading = useAppSelector(selectMoodLoading); const statistics = useAppSelector(selectMoodStatistics); /** * 获取指定日期的心情记录 */ const getMoodRecordsByDate = (date: string) => { return useAppSelector(selectMoodRecordsByDate(date)); }; /** * 获取指定日期的最新心情记录 */ const getLatestMoodRecordByDate = (date: string) => { return useAppSelector(selectLatestMoodRecordByDate(date)); }; /** * 获取今天的心情记录 */ const getTodayMoodRecord = () => { const today = dayjs().format('YYYY-MM-DD'); return useAppSelector(selectLatestMoodRecordByDate(today)); }; /** * 获取指定日期的心情记录(异步) */ const fetchMoodRecords = async (date: string) => { const result = await dispatch(fetchDailyMoodCheckins(date)).unwrap(); return result.checkins || []; }; /** * 获取心情历史记录 */ const fetchMoodHistoryRecords = async (params: GetMoodHistoryParams) => { const result = await dispatch(fetchMoodHistory(params)).unwrap(); return result.checkins || []; }; /** * 获取心情统计数据 */ const fetchMoodStatisticsData = async (params: GetMoodStatisticsParams) => { return await dispatch(fetchMoodStatistics(params)).unwrap(); }; /** * 创建心情记录 */ const createMood = async (params: CreateMoodParams) => { return await dispatch(createMoodRecord(params)).unwrap(); }; /** * 更新心情记录 */ const updateMood = async (params: UpdateMoodParams) => { return await dispatch(updateMoodRecord(params)).unwrap(); }; /** * 删除心情记录 */ const deleteMood = async (id: string) => { return await dispatch(deleteMoodRecord({ id })).unwrap(); }; return { // 状态 loading, statistics, // 选择器 getMoodRecordsByDate, getLatestMoodRecordByDate, getTodayMoodRecord, // 异步操作 fetchMoodRecords, fetchMoodHistoryRecords, fetchMoodStatisticsData, createMood, updateMood, deleteMood, }; } /** * 获取指定日期心情记录的 Hook */ export function useMoodRecords(date: string) { const records = useAppSelector(selectMoodRecordsByDate(date)); const latestRecord = useAppSelector(selectLatestMoodRecordByDate(date)); const loading = useAppSelector(selectMoodLoading); const dispatch = useAppDispatch(); const fetchRecords = async () => { return await dispatch(fetchDailyMoodCheckins(date)).unwrap(); }; return { records, latestRecord, loading: loading.daily, fetchRecords, }; } /** * 获取今天心情记录的 Hook */ export function useTodayMood() { const today = dayjs().format('YYYY-MM-DD'); return useMoodRecords(today); }