diff --git a/screens/ScreenTensi.js b/screens/ScreenTensi.js
index 04388e7..ba89b43 100644
--- a/screens/ScreenTensi.js
+++ b/screens/ScreenTensi.js
@@ -1,21 +1,392 @@
-import { StatusBar } from 'expo-status-bar';
-import { StyleSheet, Text, View } from 'react-native';
+import React, { useState, useRef, useEffect } from "react";
+import {
+ View,
+ Text,
+ Image,
+ StyleSheet,
+ TouchableOpacity,
+ Animated,
+ BackHandler,
+ FlatList,
+ ScrollView,
+ TextInput,
+} from "react-native";
+import axios from "axios";
+import AsyncStorage from "@react-native-async-storage/async-storage";
+import Container from "../components/Container";
+import CardRecord from "../components/CardRecord";
const ScreenTensi = ({ navigation }) => {
+ const [token, setToken] = useState(null);
+
+ const [profileId, setProfileId] = useState(null);
+ const [profileName, setProfileName] = useState(null);
+ const [profileSex, setProfileSex] = useState(null);
+ const [profileDob, setProfileDob] = useState(null);
+ const [profileAge, setProfileAge] = useState(null);
+
+ const [sys, setSys] = useState(""); // Systolic
+ const [dia, setDia] = useState(""); // Diastolic
+ const [pulse, setPulse] = useState(""); // Pulse rate
+ const [note, setNote] = useState(""); // Additional notes
+
+ const [recordList, setRecordList] = useState([]);
+
+ const getToken = async () => {
+ const savedToken = await AsyncStorage.getItem("auth_token");
+ if (savedToken !== null) {
+ setToken(savedToken);
+ } else {
+ // navigation.navigate("Profile");
+ }
+ };
+
+ const HttpRequest = (url, body, conf, handle) => {
+ // string, object, object
+ axios
+ .post(url, body, conf)
+ .then((response) => {
+ handle(response.data);
+ })
+ .catch((error) => {
+ console.error("Terjadi kesalahan:", error.stack);
+ });
+ };
+
+ const handleProfileDetail = (data) => {
+ if (data.status === "success") {
+ setProfileId(data.data.id);
+ setProfileName(data.data.name);
+ setProfileSex(data.data.sex);
+ setProfileDob(data.data.dob);
+ if (data.data.dob !== null) {
+ const tanggalLahir = new Date(data.data.dob);
+ const today = new Date();
+ const umur = today.getFullYear() - tanggalLahir.getFullYear();
+ const bulanSekarang = today.getMonth() - tanggalLahir.getMonth();
+ let umurTerupdate;
+ if (
+ bulanSekarang < 0 ||
+ (bulanSekarang === 0 && today.getDate() < tanggalLahir.getDate())
+ ) {
+ umurTerupdate = umur - 1;
+ } else {
+ umurTerupdate = umur;
+ }
+ setProfileAge(umurTerupdate);
+ }
+ }
+ };
+
+ const fetchProfileDetail = async () => {
+ try {
+ const url = "https://uas.ditaajipratama.net/api/checkcare/profile/detail";
+ const body = {};
+ const auth_token = await AsyncStorage.getItem("auth_token");
+ const config = {
+ headers: {
+ Authorization: `Bearer ${auth_token}`,
+ },
+ };
+ console.log(`Bearer ${auth_token}`);
+ console.log(token);
+ if (auth_token !== null) {
+ HttpRequest(url, body, config, handleProfileDetail);
+ }
+ } catch (error) {
+ console.log(error.stack);
+ }
+ };
+
+ const quickResult = (sys, dia, pulse) => {
+ var title = "Cek Tekanan Darah";
+ var message = "Masukkan tekanan darah dan nadi Anda";
+ var image = require("../img/thermometer.png"); // You'll change this
+ var category = "unknown";
+
+ const sysNum = parseInt(sys) || 0;
+ const diaNum = parseInt(dia) || 0;
+ const pulseNum = parseInt(pulse) || 0;
+
+ if (sysNum === 0 && diaNum === 0 && pulseNum === 0) {
+ title = "Cek Tekanan Darah";
+ message = "Masukkan tekanan darah dan nadi Anda";
+ category = "input";
+ } else {
+ // Blood pressure categories
+ if (sysNum >= 180 || diaNum >= 120) {
+ title = "Krisis Hipertensi";
+ message = "Tekanan darah sangat tinggi - Segera ke dokter!";
+ category = "emergency";
+ } else if (sysNum >= 140 || diaNum >= 90) {
+ title = "Hipertensi Tingkat 2";
+ message = "Tekanan darah tinggi - Konsultasi dengan dokter";
+ category = "high2";
+ } else if (sysNum >= 130 || diaNum >= 80) {
+ title = "Hipertensi Tingkat 1";
+ message = "Tekanan darah sedikit tinggi - Perhatikan pola hidup";
+ category = "high1";
+ } else if (sysNum >= 120 && diaNum < 80) {
+ title = "Tekanan Darah Meningkat";
+ message = "Tekanan darah mulai meningkat - Jaga pola hidup sehat";
+ category = "elevated";
+ } else if (sysNum < 120 && diaNum < 80) {
+ title = "Tekanan Darah Normal";
+ message = "Tekanan darah Anda dalam batas normal";
+ category = "normal";
+ } else if (sysNum < 90 || diaNum < 60) {
+ title = "Tekanan Darah Rendah";
+ message = "Tekanan darah rendah - Perhatikan gejala pusing";
+ category = "low";
+ }
+
+ // Pulse check
+ if (pulseNum > 0) {
+ if (pulseNum < 60) {
+ message += " | Nadi lambat (bradycardia)";
+ } else if (pulseNum > 100) {
+ message += " | Nadi cepat (tachycardia)";
+ } else {
+ message += " | Nadi normal";
+ }
+ }
+ }
+
+ return { title, message, image, category };
+ };
+
+ const reqRecordList = async () => {
+ try {
+ const url = "https://uas.ditaajipratama.net/api/checkcare/tension/list";
+ const body = {};
+ const auth_token = await AsyncStorage.getItem("auth_token");
+ const config = {
+ headers: {
+ Authorization: `Bearer ${auth_token}`,
+ },
+ };
+ const handle = (data) => {
+ setRecordList(data);
+ };
+ if (auth_token !== null) {
+ HttpRequest(url, body, config, handle);
+ }
+ } catch (error) {
+ console.log(error.stack);
+ }
+ };
+
+ const reqAdd = async () => {
+ try {
+ const url = "https://uas.ditaajipratama.net/api/checkcare/tension/add";
+ const body = {
+ sys: parseInt(sys) || 0,
+ dia: parseInt(dia) || 0,
+ pulse: parseInt(pulse) || 0,
+ note,
+ };
+ const auth_token = await AsyncStorage.getItem("auth_token");
+ const config = {
+ headers: {
+ Authorization: `Bearer ${auth_token}`,
+ },
+ };
+ const handle = (data) => {
+ reqRecordList();
+ setSys("");
+ setDia("");
+ setPulse("");
+ setNote("");
+ };
+ if (auth_token !== null) {
+ HttpRequest(url, body, config, handle);
+ }
+ } catch (error) {
+ console.log(error.stack);
+ }
+ };
+
+ const ListItem = ({ item }) => {
+ const result = quickResult(item.sys, item.dia, item.pulse);
+ return (
+
+ {item.when}
+
+ {item.sys}/{item.dia} mmHg | {item.pulse} bpm
+
+ {result.title}
+
+ );
+ };
+
+ useEffect(() => {
+ getToken();
+ fetchProfileDetail();
+ reqRecordList();
+ }, []);
+
return (
-
- Ini halaman Tensi
-
-
+
+
+
+
+
+
+ {quickResult(sys, dia, pulse).title}
+
+ {`Tekanan: ${sys || 0}/${dia || 0} mmHg | Nadi: ${pulse || 0} bpm`}
+
+
+ {quickResult(sys, dia, pulse).message}
+
+
+
+
+
+
+ setSys(text)}
+ value={sys}
+ />
+ setDia(text)}
+ value={dia}
+ />
+ setPulse(text)}
+ value={pulse}
+ />
+
+
+ setNote(text)}
+ value={note}
+ multiline
+ />
+
+
+ Submit
+
+
+
+
+ }
+ keyExtractor={(item, index) => index.toString()}
+ />
+
+
);
-}
+};
const styles = StyleSheet.create({
- container: {
+ headerRow: {
+ flexDirection: "row",
+ alignItems: "center",
+ },
+ illustration: {
+ width: 100,
+ height: 100,
+ },
+ illustrationContainer: {
+ marginRight: 16,
+ },
+ textContainer: {
flex: 1,
- backgroundColor: '#fff',
- alignItems: 'center',
- justifyContent: 'center',
+ },
+ title: {
+ fontSize: 28,
+ fontWeight: "bold",
+ color: "#111",
+ },
+ datetime: {
+ fontSize: 12,
+ color: "#444",
+ marginVertical: 4,
+ },
+ description: {
+ fontSize: 14,
+ color: "#333",
+ maxWidth: 320,
+ marginBottom: 16,
+ },
+ inputColumn: {
+ width: "100%",
+ marginBottom: 10,
+ },
+ inputRow: {
+ flexDirection: "row",
+ justifyContent: "space-between",
+ width: "100%",
+ marginBottom: 10,
+ },
+ inputForm: {
+ flex: 1,
+ borderWidth: 1,
+ borderColor: "#ccc",
+ borderRadius: 30,
+ paddingVertical: 10,
+ paddingHorizontal: 16,
+ marginHorizontal: 6,
+ backgroundColor: "#fff",
+ color: "#333",
+ },
+ inputFormNote: {
+ borderWidth: 1,
+ borderColor: "#ccc",
+ borderRadius: 15,
+ paddingVertical: 10,
+ paddingHorizontal: 16,
+ marginVertical: 6,
+ backgroundColor: "#fff",
+ color: "#333",
+ minHeight: 60,
+ },
+ inputButtonSubmit: {
+ borderRadius: 30,
+ paddingVertical: 12,
+ marginVertical: 6,
+ backgroundColor: "#007bff",
+ },
+ submitText: {
+ textAlign: "center",
+ color: "#fff",
+ fontWeight: "600",
+ },
+ resultDate: {
+ flex: 1,
+ color: "#333",
+ },
+ resultValue: {
+ flex: 1,
+ textAlign: "center",
+ color: "#111",
+ fontWeight: "500",
+ },
+ resultStatus: {
+ flex: 1,
+ textAlign: "right",
+ fontWeight: "bold",
},
});