Home Manual Reference Source

src/screens/subscreens/resources/Money.jsx

import { useEffect, useState } from "react"
import { useLoading } from "../../../Context";
import ApiRequests from "../../../server/apidata";
import { StyleSheet, Text, ScrollView, TouchableOpacity, View, StatusBar } from "react-native";
import { Ionicons } from '@expo/vector-icons';
import MoneysGraph from "../../../components/MoneysGraph";

const statusBarHeight = StatusBar.currentHeight ? StatusBar.currentHeight + 5 : 64


const api = new ApiRequests();

export default function Money({ navigation }) {

    const { showLoading, hideLoading } = useLoading();
    const [pesoName, setPesoName] = useState("");
    const [dolarName, setDolarName] = useState("");
    const [euroName, setEuroName] = useState("");

    const moedas = ["ARS-BRL", "EUR-BRL", "USD-BRL"];
    const [dolar, setDolar] = useState(null);
    const [euro, setEuro] = useState(null);
    const [peso, setPeso] = useState(null);


    useEffect(() => {
        const getMoney = async () => {
            showLoading();
            try {
                var outp = await api.getMoneyData(moedas);

                let arg = outp[moedas[0].replace("-", "")];
                let eur = outp[moedas[1].replace("-", "")];
                let us = outp[moedas[2].replace("-", "")];

                setDolarName(us["name"]);
                setPesoName(arg["name"]);
                setEuroName(eur["name"]);

                let meuro = {
                    labels: [eur["code"], eur["codein"]],
                    datasets: [
                        {
                            data: [parseFloat(eur["ask"]), parseFloat(1)]
                        }
                    ]
                };
                setEuro(meuro);

                let mpeso = {
                    labels: [arg["code"], arg["codein"]],
                    datasets: [
                        {
                            data: [parseFloat(arg["ask"]), parseFloat(1)]
                        }
                    ]
                };
                setPeso(mpeso);

                let mdolar = {
                    labels: [us["code"], us["codein"]],
                    datasets: [
                        {
                            data: [parseFloat(us["ask"]), parseFloat(1)]
                        }
                    ]
                };
                setDolar(mdolar);

            }
            catch (e) { console.log(e) } finally {
                hideLoading();
            }
        }

        getMoney();
    }, [])


    return (
        <View style={{ marginTop: statusBarHeight }}>
            <TouchableOpacity style={styles.back} onPress={() => { navigation.navigate("Home") }}>
                <Ionicons name="home" size={18} color="darkblue" />
            </TouchableOpacity>
            <ScrollView style={{ marginTop: 16, paddingHorizontal: 8 }}>

                <Text style={styles.title}>Cotações</Text>

                {peso ? <MoneysGraph color={"rgb(0, 139, 93)"} bardata={peso} name={pesoName} />
                    : <View style={styles.load}></View>}

                {dolar ? <MoneysGraph color={"rgb(163, 39, 23)"} bardata={dolar} name={dolarName} />
                    : <View style={styles.load}></View>}

                {euro ? <MoneysGraph color={"rgb(163, 39, 23)"} bardata={euro} name={euroName} />
                    : <View style={styles.load}></View>}

            </ScrollView >
        </View>
    )
}

const styles = StyleSheet.create({
    back: {
        marginHorizontal: 10,
        marginVertical: 8,
        position: 'absolute',
        top: 6,
        zIndex: 99,
        borderRadius: 100,
        borderWidth: 2,
        padding: 5,
        borderColor: 'darkblue'
    },
    title: {
        fontSize: 28,
        fontWeight: "bold",
        textAlign: "center"
    },
    load: {
        padding: 12,
        marginBottom: 24,
        marginLeft: 12
    }
})