eletrotupi / tcc / frontend/hooks/useHistoryFeed.ts master
1.1 KB Raw
// hooks/useHistoryFeed.ts
import { useMemo } from "react";
import {
  mergeAndSort,
  filterByCategory,
  groupByDate,
} from "@/lib/utils/history";
import {
  mapMoodToHistoryCard,
  mapSleepToHistoryCard,
  mapTriggerToHistoryCard,
} from "@/lib/history/mappers";
import type { HistoryCategory } from "@/lib/history/types";
import { useMoodEntries, useSleepRecords, useTriggers } from "@/hooks";

export function useHistoryFeed(activeFilter: HistoryCategory | "all") {
  const { data: moodsPage } = useMoodEntries({});
  const { data: sleepPage } = useSleepRecords({});
  const { data: triggersPage } = useTriggers({});

  const moods = moodsPage?.entries ?? [];
  const sleepRecords = sleepPage?.entries ?? [];
  const triggers = triggersPage?.entries ?? [];

  const grouped = useMemo(() => {
    const merged = mergeAndSort([
      moods.map(mapMoodToHistoryCard),
      sleepRecords.map(mapSleepToHistoryCard),
      triggers.map(mapTriggerToHistoryCard),
    ]);
    const filtered = filterByCategory(merged, activeFilter);
    return groupByDate(filtered);
  }, [moods, sleepRecords, triggers, activeFilter]);

  // TODO: expose the isLoading here
  return grouped;
}