eletrotupi / tcc/ frontend/components/history/ActivityHistoryCard.tsx7c9911031ecbe75f0d9d67f8fbaae4eece125df9
2.0 KB | 64 lines Raw
1
import { View, StyleSheet } from "react-native";
2
import { Text } from "@/components/ui/Text";
3
import { MaterialIcons } from "@expo/vector-icons";
4
import { Card } from "@/components/ui/Cards";
5
import type { HistoryCard } from "@/lib/history/types";
6
import type { CareAction } from "@/lib/api";
7
import { Spacing } from "@/constants/theme";
8
import { getActivityCategory } from "@/constants/care-action-categories";
9
import { router } from "expo-router";
10

11
type Props = { card: HistoryCard & { raw: CareAction } };
12

13
export function ActivityHistoryCard({ card }: Props) {
14
  const meta = getActivityCategory(card.raw.activity?.type);
15
  const time = new Date(card.timestamp).toLocaleTimeString("pt-BR", {
16
    hour: "2-digit",
17
    minute: "2-digit",
18
  });
19

20
  return (
21
    <Card
22
      style={styles.card}
23
      onPress={() => (router.push as any)(`/care-actions/${card.raw.id}`)}
24
    >
25
      <View style={styles.row}>
26
        <View style={[styles.iconWrap, { backgroundColor: meta.iconBackground }]}>
27
          <MaterialIcons name={meta.icon as any} size={22} color={meta.color} />
28
        </View>
29
        <View style={styles.body}>
30
          <View style={styles.titleRow}>
31
            <Text style={styles.title}>{card.title}</Text>
32
            <Text style={styles.time}>{time}</Text>
33
          </View>
34
          <Text style={styles.summary} numberOfLines={2}>
35
            {card.summary}
36
          </Text>
37
        </View>
38
      </View>
39
    </Card>
40
  );
41
}
42

43
const styles = StyleSheet.create({
44
  card: { padding: Spacing.cardGap },
45
  row: { flexDirection: "row", alignItems: "flex-start", gap: 12 },
46
  iconWrap: {
47
    width: 40,
48
    height: 40,
49
    borderRadius: 20,
50
    alignItems: "center",
51
    justifyContent: "center",
52
    marginTop: 1,
53
  },
54
  body: { flex: 1 },
55
  titleRow: {
56
    flexDirection: "row",
57
    justifyContent: "space-between",
58
    alignItems: "center",
59
    marginBottom: 2,
60
  },
61
  title: { fontSize: 15, fontWeight: "600" },
62
  time: { fontSize: 13, opacity: 0.45 },
63
  summary: { fontSize: 13, opacity: 0.6, lineHeight: 18 },
64
});