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 ( {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({ headerRow: { flexDirection: "row", alignItems: "center", }, illustration: { width: 100, height: 100, }, illustrationContainer: { marginRight: 16, }, textContainer: { flex: 1, }, 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", }, }); export default ScreenTensi;