src/components/views/authloading-view.js
import React, { Component } from 'react';
import { ActivityIndicator, StyleSheet, View, Alert, Image } from 'react-native';
import { styles, colours, authloading_styles } from './stylesheets/authloading-styles';
let logo = require('../../assets/images/pplogo.png');
import Safearea from './helpers/safearea';
import BaseView from './view';
import AuthLoadingPresenter from '../presenters/authloading-presenter';
/**
* Class for the auth loading view to process the state before continuing.
* @extends BaseView
*/
class AuthLoadingView extends BaseView {
state = {
shouldLogout: false
}
/**
* Creates an instance of AuthLoadingView.
*
* @constructor
* @param {Object} props - Component properties
*/
constructor(props) {
super(props);
this.AuthLoadingP = new AuthLoadingPresenter(this);
}
/**
* Component is about to mount
*/
componentWillMount = () => {
const { navigation } = this.props;
const shouldLogout = navigation.getParam('logout', false);
this.AuthLoadingP.tryLogout(shouldLogout, this.onLogoutSuccess, this.onLogoutFailure);
this.setState({shouldLogout});
}
/**
* Component mounted
*/
componentDidMount = () => {
if (!this.state.shouldLogout) {
this.AuthLoadingP.checkAuthState(this.onAuthenticationSuccess, this.onAuthenticationFailure);
}
}
/**
* Component will unmount after this method is called, do any clean up here.
* Call viewUnmounting in base class so it can do any cleanup for the view before calling the presenter destroy method.
*/
componentWillUnmount = () => {
this.viewUnmounting(this.AuthLoadingP);
}
/**
* A function to call on the success of authentication verification.
*/
onAuthenticationSuccess = () => {
console.log('Authentication Success!');
this.navigateToScreen('App');
}
/**
* A function to call on the failure of authentication verification.
*/
onAuthenticationFailure = () => {
console.log('Authentication Failure!');
this.navigateToScreen('AuthStack');
}
/**
* A function to call on a successful logout.
*/
onLogoutSuccess = () => {
console.log('Logout Success');
this.navigateToScreen('AuthStack');
}
/**
* A function to call on a failure to logout.
*/
onLogoutFailure = () => {
console.log('Logout Failure');
Alert.alert(
"Error: Unable to logout",
"Please try again.",
[
{ text: "Ok", style: "ok" },
],
{ cancelable: false },
);
this.navigateToScreen('App');
}
/**
* Navigate to a particular screen
*
* @param {string} screen - A screen to navigate to. See defined screens in navigation.js
*/
navigateToScreen = (screen) => {
const { navigate } = this.props.navigation;
navigate(screen);
}
render() {
return (
<View style = {[styles.loading, authloading_styles.container]}>
<Safearea overrideColour={colours.ppGreen}/>
<Image source={logo} style={authloading_styles.image} resizeMode="contain" />
<ActivityIndicator style={authloading_styles.load} size='small' color="#FFFFFF"/>
</View>
);
}
}
export default AuthLoadingView;