Home Manual Reference Source

src/screens/Settings.jsx

/**
 * Settings screen component.
 * 
 * @param {object} navigation - The navigation object used for navigating between screens.
 * @returns {JSX.Element} The rendered Settings screen.
 */
import { useEffect, useState } from 'react';
import ChangeData from '../components/ChangeData';
import { MaterialIcons } from '@expo/vector-icons';
import { View, TouchableOpacity, StyleSheet, Text, StatusBar } from 'react-native';
import DBStorage from '../database/firebaseDBMethods';
import { useLoading } from '../Context';
import AsyncStorage from '@react-native-async-storage/async-storage';


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


export default function Settings({ navigation }) {
  const { showLoading, hideLoading, setShouldRefresh } = useLoading();


  const [dados, setUserData] = useState({});
  const [shouldRefresh, setShouldRefreshSettings] = useState(true);

  useEffect(() => {
    const getAllData = async () => {

      const doc = await AsyncStorage.getItem('userDoc');
      const fr = new DBStorage(doc);
      try {
        showLoading();
        let res = await fr.getFullDoc();
        let uD = res.userData;
        setUserData(uD);
      } catch (err) {
        console.log(err);
      } finally {
        hideLoading();
      }

    };

    getAllData();
  }, [shouldRefresh]);

  const refresh = async () => {
    setShouldRefreshSettings(!shouldRefresh);
  }

  const handleSair = async () => {
    await AsyncStorage.removeItem('isAuth');
    await AsyncStorage.removeItem('fullUserData');
    await AsyncStorage.removeItem('userDoc');
    navigation.navigate("Auth");
  }

  return (
    <View style={{ marginTop: statusBarHeight, height: '100%' }}>
      <View>
        <ChangeData
          label="Nome"
          value={dados.name}
          refresh={refresh}
        />
        <ChangeData
          label="Email"
          value={dados.email}
          refresh={refresh}
        />
        <ChangeData
          label="Profissão"
          value={dados.profissao}
          refresh={refresh}
        />
        <ChangeData
          label="Perfil de Investimento"
          value={dados.perfilInvestimento}
          refresh={refresh}
        />
      </View>

      <View style={styles.homeBtnView}>
        <TouchableOpacity
          style={styles.homeBtn}
          onPress={() => {
            setShouldRefresh(true);
            navigation.navigate('Home');
          }}>
          <MaterialIcons name="home" size={30} color="#fff" />
        </TouchableOpacity>
      </View>

      <TouchableOpacity style={styles.sair} onPress={handleSair}>
        <Text style={{ fontSize: 20 }}>Sair</Text></TouchableOpacity>
    </View>
  );
}

const styles = StyleSheet.create({
  homeBtnView: {
    marginHorizontal: 30,
    flexDirection: 'row',
    justifyContent: 'space-between',
    position: 'absolute',
    bottom: 80,
    right: 10,
  },
  homeBtn: {
    padding: 10,
    borderRadius: 100,
    backgroundColor: 'darkblue',
  },
  sair: {
    position: 'absolute',
    bottom: 80,
    left: 20,
    borderWidth: 1,
    borderColor: 'darkblue',
    borderRadius: 12,
    paddingVertical: 8,
    paddingHorizontal: 16
  }

});