/**
* @flow
*/
import React from 'react';
import {
AppRegistry,
AsyncStorage,
Button,
StyleSheet,
Text,
View,
} from 'react-native';
import {
addNavigationHelpers,
StackNavigator,
} from 'react-navigation';
import {
Provider,
connect,
} from 'react-redux';
import {
createStore,
combineReducers,
} from 'redux';
import {
persistStore,
autoRehydrate,
} from 'redux-persist';
const ProfileScreen = ({ navigation }) => (
Profile Screen
);
ProfileScreen.navigationOptions = {
title: 'Profile',
};
const LoginScreen = ({ navigation }) => (
Screen A
This is great
);
LoginScreen.navigationOptions = {
title: 'Log In',
};
const LoginStatusMessage = connect(state => ({
isLoggedIn: state.auth.isLoggedIn,
}))(({ isLoggedIn, dispatch }) => {
if (!isLoggedIn) {
return Please log in;
}
return (
{'You are "logged in" right now'}
);
});
const AuthButton = connect(state => ({
isLoggedIn: state.auth.isLoggedIn,
}), dispatch => ({
logout: () => dispatch({ type: 'Logout' }),
login: () => dispatch({ type: 'Navigate', routeName: 'Login' }),
}))(({ logout, login, isLoggedIn }) => (
));
const MainScreen = () => (
);
MainScreen.navigationOptions = {
title: 'Home Screen',
};
const AppNavigator = StackNavigator({
Login: { screen: LoginScreen },
Main: { screen: MainScreen },
Profile: { screen: ProfileScreen },
});
const AppWithNavigationState = connect(state => ({
nav: state.nav,
}))(({ dispatch, nav }) => (
));
const AppReducer = combineReducers({
nav: (state, action) => {
if (!state) {
state = {
index: 1,
routes: [
{ key: 'InitA', routeName: 'Main' },
{ key: 'InitB', routeName: 'Login' },
],
};
}
if (action.type === 'Login') {
return AppNavigator.router.getStateForAction({ type: 'Back' }, state);
}
if (action.type === 'Logout') {
return AppNavigator.router.getStateForAction({ type: 'Navigate', routeName: 'Login' }, state);
}
return AppNavigator.router.getStateForAction(action, state);
},
auth: (state, action) => {
if (!state) {
state = { isLoggedIn: false };
}
if (action.type === 'Login') {
return { ...state, isLoggedIn: true };
}
if (action.type === 'Logout') {
return { ...state, isLoggedIn: false };
}
return state;
},
});
class ReduxExampleApp extends React.Component {
store = createStore(AppReducer, undefined, autoRehydrate());
componentDidMount() {
persistStore(this.store, { storage: AsyncStorage });
}
render() {
return (
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
});
AppRegistry.registerComponent('ReduxExample', () => ReduxExampleApp);