eletrotupi / tcc/ frontend/components/history/AppointmentHistoryCard.tsxed13065ca7e9582c60b2bbc2ffd34c78abb4cc8a
2.2 KB | 73 lines Raw
1
import { Text, View, StyleSheet } from "react-native";
2
import { MaterialIcons } from "@expo/vector-icons";
3
import { Card } from "@/components/ui/Cards";
4
import { Badge } from "@/components/ui/Badge";
5
import type { HistoryCard } from "@/lib/history/types";
6
import type { CareAction } from "@/lib/api";
7
import { Spacing } from "@/constants/theme";
8
import { router } from "expo-router";
9

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

12
export function AppointmentHistoryCard({ card }: Props) {
13
  const time = new Date(card.timestamp).toLocaleTimeString("pt-BR", {
14
    hour: "2-digit",
15
    minute: "2-digit",
16
  });
17

18
  return (
19
    <Card
20
      style={styles.card}
21
      onPress={() => (router.push as any)(`/care-actions/${card.raw.id}`)}
22
    >
23
      <View style={styles.row}>
24
        <View style={[styles.iconWrap, styles.iconBg]}>
25
          <MaterialIcons name="psychology" size={22} color="#1D4ED8" />
26
        </View>
27
        <View style={styles.body}>
28
          <View style={styles.titleRow}>
29
            <Text style={styles.title}>{card.title}</Text>
30
            <Text style={styles.time}>{time}</Text>
31
          </View>
32
          {card.summary ? (
33
            <Text style={styles.summary} numberOfLines={2}>
34
              {card.summary}
35
            </Text>
36
          ) : null}
37
          {card.badge ? (
38
            <Badge
39
              label={card.badge.label}
40
              variant={card.badge.variant as any}
41
              style={styles.badge}
42
            />
43
          ) : null}
44
        </View>
45
      </View>
46
    </Card>
47
  );
48
}
49

50
const styles = StyleSheet.create({
51
  card: { padding: Spacing.cardGap },
52
  row: { flexDirection: "row", alignItems: "flex-start", gap: 12 },
53
  iconWrap: {
54
    width: 40,
55
    height: 40,
56
    borderRadius: 20,
57
    alignItems: "center",
58
    justifyContent: "center",
59
    marginTop: 1,
60
  },
61
  iconBg: { backgroundColor: "#DBEAFE" },
62
  body: { flex: 1 },
63
  titleRow: {
64
    flexDirection: "row",
65
    justifyContent: "space-between",
66
    alignItems: "center",
67
    marginBottom: 2,
68
  },
69
  title: { fontSize: 15, fontWeight: "600" },
70
  time: { fontSize: 13, opacity: 0.45 },
71
  summary: { fontSize: 13, opacity: 0.6, lineHeight: 18, marginBottom: 6 },
72
  badge: { alignSelf: "flex-start", marginTop: 4 },
73
});