import React from 'react-native'; import RouteMaster from './components/routes/RouteMaster'; import RouteMapper from './components/navigation/RouteMapper'; import GlobalStyles from './settings/styles'; import BusyIndicator from 'react-native-busy-indicator'; import token from './api/token'; import { checkToken } from './api/CircleCI'; import 'moment-duration-format'; const { Navigator, StyleSheet, Platform, View, Alert } = React; const styles = StyleSheet.create({ navbar: { backgroundColor: GlobalStyles.get('CIRCLE_NAVBAR_BG'), flexDirection:'row', justifyContent: 'center', }, container: { flex: 1, marginTop: (Platform.OS === 'ios' ? 64 : 56) } }); const LOGGED_IN_ROUTE = RouteMaster.get('HOME'); const LOGIN_ROUTE = RouteMaster.get('LOGIN'); export default class App extends React.Component { constructor() { super(); this.state = { initialRoute: false }; } renderScene(route, nav) { const Component = route.component; const props = route.props || {}; return ( ); } warnInvalidToken() { Alert.alert( 'Token Invalidated', 'The token you used previously is now invalid. Please generate a new one in your account settings.', [ { text: 'ok' } ] ); } componentWillMount() { token.get().then(function (CIToken) { if (!CIToken) { this.setState({ initialRoute: LOGIN_ROUTE }); return; } checkToken(CIToken).then(function (isValid) { this.setState({ initialRoute: isValid ? LOGGED_IN_ROUTE : LOGIN_ROUTE }); if (!isValid) { this.warnInvalidToken(); } }.bind(this)); }.bind(this)); } render() { if (!this.state.initialRoute) { return null; // Replace with a splash screen? } return ( } configureScene={(route) => { if (route.sceneConfig) { return route.sceneConfig; } return Navigator.SceneConfigs.PushFromRight; }} /> ); } };