eletrotupi / tcc/ frontend/hooks/useHistoryFeed.ts3a9bb1a4b14edcfdaa020cfe24a371c731f83cc0
1.3 KB | 41 lines Raw
1
import { useMemo } from "react";
2
import {
3
  mergeAndSort,
4
  filterByCategory,
5
  groupByDate,
6
} from "@/lib/utils/history";
7
import {
8
  mapMoodToHistoryCard,
9
  mapSleepToHistoryCard,
10
  mapTriggerToHistoryCard,
11
  mapCareActionToHistoryCard,
12
} from "@/lib/history/mappers";
13
import type { HistoryCategory } from "@/lib/history/types";
14
import { useMoodEntries, useSleepRecords, useTriggers } from "@/hooks";
15
import { useCareActions } from "@/hooks/useCareAction.queries";
16

17
export function useHistoryFeed(activeFilter: HistoryCategory | "all") {
18
  const { data: moodsPage } = useMoodEntries({});
19
  const { data: sleepPage } = useSleepRecords({});
20
  const { data: triggersPage } = useTriggers({});
21
  const { data: careActionsPage } = useCareActions({});
22

23
  const moods = moodsPage?.entries ?? [];
24
  const sleepRecords = sleepPage?.entries ?? [];
25
  const triggers = triggersPage?.entries ?? [];
26
  const careActions = careActionsPage?.entries ?? [];
27

28
  const grouped = useMemo(() => {
29
    const merged = mergeAndSort([
30
      moods.map(mapMoodToHistoryCard),
31
      sleepRecords.map(mapSleepToHistoryCard),
32
      triggers.map(mapTriggerToHistoryCard),
33
      careActions.map(mapCareActionToHistoryCard),
34
    ]);
35

36
    const filtered = filterByCategory(merged, activeFilter);
37
    return groupByDate(filtered);
38
  }, [moods, sleepRecords, triggers, careActions, activeFilter]);
39

40
  return grouped;
41
}