eletrotupi / tcc/ frontend/app/(tabs)/history.tsx2ab1b144925b43a39d19edf4dbf40bf863addc7f
2.4 KB | 67 lines Raw
1
import { useState } from "react";
2
import { ScrollView, View, Text } from "react-native";
3
import { ScreenLayout } from "@/components/ui/ScreenLayout";
4
import { Section, SectionHeader } from "@/components/ui/Sections";
5
import { FilterPills } from "@/components/ui/FilterPills";
6
import { useAuth } from "@/context/AuthContext";
7
import { useHistoryFeed } from "@/hooks/useHistoryFeed";
8
import type { HistoryCard, HistoryCategory } from "@/lib/history/types";
9
import { MoodHistoryCard } from "@/components/history/MoodHistoryCard";
10
import { SleepRecordCard } from "@/components/history/SleepRecordCard";
11
import { TriggerHistoryCard } from "@/components/history/TriggerCard";
12
import { MedicineHistoryCard } from "@/components/history/MedicineHistoryCard";
13
import { AppointmentHistoryCard } from "@/components/history/AppointmentHistoryCard";
14
import { ActivityHistoryCard } from "@/components/history/ActivityHistoryCard";
15

16
function HistoryCardRenderer({ card }: { card: HistoryCard }) {
17
  switch (card.category) {
18
    case "mood":
19
      return <MoodHistoryCard card={card as any} />;
20
    case "sleep":
21
      return <SleepRecordCard card={card as any} />;
22
    case "trigger":
23
      return <TriggerHistoryCard card={card as any} />;
24
    case "care_action":
25
      switch (card.subtype) {
26
        case "medicine":
27
          return <MedicineHistoryCard card={card as any} />;
28
        case "appointment":
29
          return <AppointmentHistoryCard card={card as any} />;
30
        case "activity":
31
          return <ActivityHistoryCard card={card as any} />;
32
        default:
33
          return null;
34
      }
35
  }
36
}
37

38
export default function History() {
39
  const { user } = useAuth();
40
  const [activeFilter, setActiveFilter] = useState<HistoryCategory | "all">(
41
    "all",
42
  );
43
  const grouped = useHistoryFeed(activeFilter);
44

45
  return (
46
    <ScreenLayout
47
      userName={user.firstName}
48
      userAvatar={user.avatarURL}
49
      showNotificationBadge={true}
50
    >
51
      <ScrollView>
52
        <FilterPills active={activeFilter} onChange={setActiveFilter} />
53

54
        {Object.entries(grouped).map(([date, cards]) => (
55
          <Section key={date}>
56
            <SectionHeader title={date} />
57
            <View>
58
              {cards.map((card) => (
59
                <HistoryCardRenderer key={card.id} card={card} />
60
              ))}
61
            </View>
62
          </Section>
63
        ))}
64
      </ScrollView>
65
    </ScreenLayout>
66
  );
67
}