eletrotupi / tcc/ frontend/app/(tabs)/actions.tsx92fe16c5883a76b1919f4c7dcb888c00e2912fc3
4.8 KB | 175 lines Raw
1
import { View, StyleSheet } from "react-native";
2
import { Text } from "@/components/ui/Text";
3
import { ScreenLayout } from "@/components/ui/ScreenLayout";
4
import { useAuth } from "@/context/AuthContext";
5
import { Section, SectionHeader } from "@/components/ui/Sections";
6
import { Card } from "@/components/ui/Cards";
7
import { Grid } from "@/components/ui/LayoutHelpers";
8
import { Button } from "@/components/ui/Button";
9
import {
10
  Shadows,
11
  Colors,
12
  Typography,
13
  Spacing,
14
  BorderRadius,
15
} from "@/constants/theme";
16
import { Ionicons, Octicons } from "@expo/vector-icons";
17
import { Link, router } from "expo-router";
18

19
export default function Actions() {
20
  const { user } = useAuth();
21

22
  const onPressSleep = () => {
23
    router.push("/sleep/new");
24
  };
25

26
  const onPressTrigger = () => {
27
    router.push("/triggers/new");
28
  };
29

30
  return (
31
    <ScreenLayout
32
      userName={user?.firstName}
33
      userAvatar={user?.avatarURL}
34
    >
35
      <Section>
36
        <SectionHeader
37
          title="Ações de Cuidado"
38
          subtitle="Registre atividades, acompanhe medicamentos e mantenha sua rotina organizada"
39
        ></SectionHeader>
40

41
        <Button
42
          title="Registrar ação de cuidado"
43
          size="large"
44
          onPress={() => router.push('/care-actions/new')}
45
          style={{ ...Shadows.lg }}
46
        />
47
      </Section>
48

49
      <Card style={{ padding: Spacing.cardGap, height: 150 }} onPress={() => router.push('/medicine-regimens')}>
50
        <View style={[styles.cardIcon, { backgroundColor: "#E7FDEF" }]}>
51
          <Ionicons name="bandage-outline" size={20} color="#13EC5B" />
52
        </View>
53

54
        <Text style={styles.cardTitleHeadline}>Gerenciar Medicamentos</Text>
55

56
        <Text style={styles.cardDescriptionHeadline}>
57
          Organize seus medicamentos, horários e doses
58
        </Text>
59
      </Card>
60

61
      <Grid gap={4}>
62
        <Card onPress={onPressSleep} style={{ padding: Spacing.cardGap }}>
63
          <View style={[styles.cardIcon, { backgroundColor: "#EFF6FF" }]}>
64
            <Ionicons name="moon-outline" size={20} color="#2563EB" />
65
          </View>
66

67
          <Text style={styles.cardTitle}>Registrar Sono</Text>
68

69
          <Text style={styles.cardDescription}>
70
            Registre a duração e a qualidade do sono
71
          </Text>
72
        </Card>
73

74
        <Card style={{ padding: Spacing.cardGap }} onPress={onPressTrigger}>
75
          <View style={[styles.cardIcon, { backgroundColor: "#FFF7ED" }]}>
76
            <Ionicons name="flash-outline" size={20} color="#EA580C" />
77
          </View>
78

79
          <Text style={styles.cardTitle}>Registrar Gatilho</Text>
80

81
          <Text style={styles.cardDescription}>
82
            Registre eventos que aferatam seu humor
83
          </Text>
84
        </Card>
85
      </Grid>
86

87
      <Card style={styles.disclaimerCard}>
88
        <View style={styles.disclaimerTitleContainer}>
89
          <Ionicons
90
            name="information-circle-outline"
91
            size={20}
92
            color={Colors.light.tint}
93
          />
94
          <Text style={styles.disclaimerTitleText}>Nota de Apoio</Text>
95
        </View>
96

97
        <Text style={styles.disclaimerText}>
98
          Este aplicativo é um assistente digital para auxiliar no seu
99
          monitoramento diário. Em caso de emergência ou sintomas graves, entre
100
          em contato imediatamente com seu médico ou serviços de saúde locais.
101
        </Text>
102

103
        <View style={styles.disclaimerHelp}>
104
          <Link href="https://expo.dev" style={styles.disclaimerHelpText}>
105
            Ver canais de ajuda{" "}
106
            <Octicons name="link-external" size={12} color="black" />
107
          </Link>
108
        </View>
109
      </Card>
110
    </ScreenLayout>
111
  );
112
}
113

114
const styles = StyleSheet.create({
115
  cardIcon: {
116
    paddingVertical: 15,
117
    paddingHorizontal: 14,
118
    width: 48,
119
    borderRadius: BorderRadius.md,
120
  },
121
  cardTitleHeadline: {
122
    ...Typography.headlineMd,
123
    lineHeight: 20,
124
    marginTop: 4,
125
  },
126
  cardTitle: {
127
    ...Typography.bodyLg,
128
    lineHeight: 20,
129
    marginTop: 4,
130
  },
131
  cardDescriptionHeadline: {
132
    ...Typography.bodyMd,
133
    color: Colors.light.textSecondary,
134
    fontWeight: "600" as const,
135
    marginTop: 4,
136
  },
137
  cardDescription: {
138
    ...Typography.labelSm,
139
    color: Colors.light.textSecondary,
140
    marginTop: 4,
141
  },
142
  disclaimerCard: {
143
    padding: Spacing.cardGap,
144
    marginTop: 20,
145
  },
146
  disclaimerTitleContainer: {
147
    flex: 1,
148
    flexDirection: "row",
149
    gap: 5,
150
    marginBottom: 10,
151
  },
152
  disclaimerTitleText: {
153
    fontWeight: 600,
154
    fontSize: 16,
155
    lineHeight: 20,
156
  },
157
  disclaimerText: {
158
    fontSize: 12,
159
    lineHeight: 18,
160
    color: Colors.light.textSecondary,
161
  },
162
  disclaimerHelp: {
163
    marginTop: 10,
164
    borderTopWidth: 1,
165
    borderTopColor: Colors.light.divider,
166
    paddingTop: 5,
167
  },
168
  disclaimerHelpText: {
169
    color: "#0f172a",
170
    fontWeight: 500,
171
    fontSize: 12,
172
    lineHeight: 16,
173
    alignItems: "center",
174
  },
175
});