Home Manual Reference Source

src/components/homeComponents/HorizontalMenuOption.jsx

import AsyncStorage from '@react-native-async-storage/async-storage';
import React, { useEffect, useState } from 'react';
import { View, Text, TouchableOpacity, StyleSheet, Image } from 'react-native';
import { AntDesign, Fontisto } from '@expo/vector-icons';
import DBStorage from '../../database/firebaseDBMethods';
import { useLoading } from '../../Context';
import HomeModal from './HomeModal';
import TooltipComp from '../TooltipComp';


export default function HorizontalMenuOption({ isRef, isRefresh, refresh, navigation, dados, allData, showSettingsTip, setShowSettingsTip }) {

  const { showLoading, hideLoading, setShouldRefresh } = useLoading();
  const [myDados, setDados] = useState([]);

  useEffect(() => {
    setDados(dados);
  }, [dados]);

  const [description, setDescription] = useState('');
  const [money, setMoney] = useState(0);
  const [date, setDate] = useState(new Date());

  const [isModalVisible, setModalVisible] = useState(false);
  const handleModal = () => {
    if (dados.type === 2) {
      navigation.navigate('Settings');
    } else if (dados.type === 99) {
      navigation.navigate('MoreOptions', { dados: allData });
    } else {
      setModalVisible(!isModalVisible);
    }
  };

  const saveData = async () => {
    try {
      setModalVisible(false);
      const doc = await AsyncStorage.getItem('userDoc');
      const fr = new DBStorage(doc);
      showLoading();
      if (myDados.type === 0) {
        res = await fr.appendToIncomes({
          description: description,
          value: money,
          date: formatarData(date),
          category: dados.label,
        });
      } else if (myDados.type === 1) {
        res = await fr.appendToExpenses({
          description: description,
          value: money,
          date: formatarData(date),
          category: dados.label,
        });
      }
    } catch (err) {
      console.log(err);
      alert(err);
    } finally {
      setShouldRefresh(true);
      refresh();
      isRefresh(!isRef);
      hideLoading();
    }

  };

  return (
    <View>

      <HomeModal setDescription={setDescription} setMoney={setMoney} setDate={setDate} date={date}
        isModalVisible={isModalVisible} dados={dados} handleModal={handleModal} saveData={saveData} />

      {myDados.type == 2 ?
        <TooltipComp tipText="Para começar, insira/atualize seus dados!" showTip={showSettingsTip} setTip={setShowSettingsTip} placement="left">

          <TouchableOpacity style={st._actionBtn} onPress={handleModal}>
            <View style={st._areaBtn}>
              {dados.type === 4 ?
                <Fontisto name={dados.icon} size={26} color="#000" /> :
                <AntDesign name={dados.icon} size={26} color="#000" />
              }
            </View>
            <Text style={st._labelBtn}>{dados.label}</Text>
          </TouchableOpacity>
        </TooltipComp>

        :

        <TouchableOpacity style={st._actionBtn} onPress={handleModal}>
          <View style={st._areaBtn}>
            {dados.type === 4 ?
              <Fontisto name={dados.icon} size={26} color="#000" /> :
              <AntDesign name={dados.icon} size={26} color="#000" />}
          </View>
          <Text style={st._labelBtn}>{dados.label}</Text>
        </TouchableOpacity>
      }
    </View>
  );
}

const st = StyleSheet.create({
  _actionBtn: {
    alignItems: 'center',
    marginRight: 32,
  },
  _areaBtn: {
    backgroundColor: '#ecf0f1',
    borderRadius: 30,
    height: 60,
    width: 60,
    justifyContent: 'center',
    alignItems: 'center',
  },
  _labelBtn: {
    marginTop: 4,
    textAlign: 'center',
    fontWeight: 'bold',
  },

});