import { FC, useEffect, useState } from 'react'; import { View } from 'react-native'; import { NavigationProp, useNavigation, CommonActions } from '@react-navigation/native'; import { Formik } from 'formik'; import * as yup from 'yup'; import { Header, Input, Button, BigText, PageWrapper, WarningModal } from '../../components'; import { ButtonVariants } from '../../types/components'; import { StoreType, storage } from '../../storage'; import { NAVIGATION_PAGES } from '../../types'; import { useLoginMutation } from '@api/auth'; import { fetchAndSaveStatistics } from 'src/database/statisticsService'; import { useNetInfo } from '@react-native-community/netinfo'; type Props = { navigation: NavigationProp; }; const LoginSchema = yup.object({ login: yup.string().required(), pass: yup.string().required() }); const LoginScreen: FC = ({ navigation }) => { const { dispatch } = useNavigation(); const isFirstLaunch = storage.get('isFirstLaunch', StoreType.BOOLEAN) ?? true; const { data, mutate: userLogin } = useLoginMutation(); const updateLocalData = async (token: string) => { await fetchAndSaveStatistics(token); }; const [isWarningModalVisible, setIsWarningModalVisible] = useState(false); const netInfo = useNetInfo(); useEffect(() => { if (data && data.token) { storage.set('token', data.token); storage.set('uid', data.uid.toString()); storage.set('isFirstLaunch', false); updateLocalData(data.token); isFirstLaunch ? dispatch( CommonActions.reset({ index: 1, routes: [{ name: NAVIGATION_PAGES.INFO }] }) ) : dispatch( CommonActions.reset({ index: 1, routes: [{ name: NAVIGATION_PAGES.IN_APP }] }) ); } }, [data]); return (
{ if (netInfo?.isInternetReachable || netInfo?.isConnected) { userLogin({ login, pass }); } else { setIsWarningModalVisible(true); } }} validationSchema={LoginSchema} > {(props) => ( <> Welcome back )} setIsWarningModalVisible(false)} type="offline" /> ); }; export default LoginScreen;