| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 | 
							- import {createStore, applyMiddleware, combineReducers} from 'redux';
 - import {Provider} from 'react-redux';
 - import {Navigation} from 'react-native-navigation';
 - import thunk from 'redux-thunk';
 - import * as reducers from './reducers';
 - import * as appActions from './reducers/app/actions';
 - 
 - // redux related book keeping
 - const createStoreWithMiddleware = applyMiddleware(thunk)(createStore);
 - const reducer = combineReducers(reducers);
 - const store = createStoreWithMiddleware(reducer);
 - 
 - // screen related book keeping
 - import {registerScreens} from './screens';
 - registerScreens(store, Provider);
 - 
 - // notice that this is just a simple class, it's not a React component
 - export default class App {
 -   constructor() {
 -     // since react-redux only works on components, we need to subscribe this class manually
 -     store.subscribe(this.onStoreUpdate.bind(this));
 -     store.dispatch(appActions.appInitialized());
 -   }
 - 
 -   onStoreUpdate() {
 -     const {root} = store.getState().app;
 -     // handle a root change
 -     // if your app doesn't change roots in runtime, you can remove onStoreUpdate() altogether
 -     if (this.currentRoot != root) {
 -       this.currentRoot = root;
 -       this.startApp(root);
 -     }
 -   }
 - 
 -   startApp(root) {
 -     switch (root) {
 -       case 'login':
 -         // Navigation.startSingleScreenApp({
 -         //  screen: {
 -         //    screen: 'example.LoginScreen',
 -         //    title: 'Login',
 -         //    navigatorStyle: {}
 -         //  },
 -         //  passProps: {
 -         //    str: 'This is a prop passed in \'startSingleScreenApp()\'!',
 -         //    obj: {
 -         //      str: 'This is a prop passed in an object!',
 -         //      arr: [
 -         //        {
 -         //          str: 'This is a prop in an object in an array in an object!'
 -         //        }
 -         //      ],
 -         //      arr2: [
 -         //        [
 -         //          'array of strings',
 -         //          'with two strings'
 -         //        ],
 -         //        [
 -         //          1, 2, 3
 -         //        ]
 -         //      ]
 -         //    },
 -         //    num: 1234,
 -         //    fn: function() {
 -         //      return 'Hello from a function!';
 -         //    }
 -         //  }
 -         // });
 -         Navigation.startSingleScreenApp({
 -           screen: {
 -             title: 'Example',
 -             screen: 'example.TopTabsScreen',
 -             topTabs: [
 -               {
 -                 screenId: 'example.FirstTabScreen',
 -                 title: 'Tab1',
 -                 passProps: {
 -                   str: 'This is a prop passed to Tab1',
 -                   fn: () => 'Hello from a function passed as passProps!'
 -                 }
 -               },
 -               {
 -                 screenId: 'example.PushedScreen',
 -                 title: 'Tab2',
 -                 passProps: {
 -                   str: 'This is a prop passed to Tab2'
 -                 }
 -               },
 -               {
 -                 screenId: 'example.ListScreen',
 -                 title: 'Tab3',
 -                 passProps: {
 -                   str: 'This is a prop passed to Tab3'
 -                 }
 -               }
 -             ],
 -             navigatorStyle: {}
 -           },
 -           drawer: { // optional, add this if you want a side menu drawer in your app
 -             left: { // optional, define if you want a drawer from the left
 -               screen: 'example.SideMenu' // unique ID registered with Navigation.registerScreen
 -             },
 -             disableOpenGesture: false // optional, can the drawer be opened with a swipe instead of button
 -           }
 -         });
 -         return;
 -       case 'after-login':
 -         Navigation.startTabBasedApp({
 -           tabs: [
 -             {
 -               label: 'One',
 -               screen: 'example.FirstTabScreen',
 -               icon: require('../img/one.png'),
 -               selectedIcon: require('../img/one_selected.png'),
 -               title: 'Screen One',
 -               overrideBackPress: true,
 -               navigatorStyle: {}
 -             },
 -             {
 -               label: 'Two',
 -               screen: 'example.SecondTabScreen',
 -               icon: require('../img/two.png'),
 -               selectedIcon: require('../img/two_selected.png'),
 -               title: 'Screen Two',
 -               navigatorStyle: {}
 -             }
 -           ],
 -           passProps: {
 -             str: 'This is a prop passed in \'startTabBasedApp\'!',
 -             obj: {
 -               str: 'This is a prop passed in an object!',
 -               arr: [
 -                 {
 -                   str: 'This is a prop in an object in an array in an object!'
 -                 }
 -               ]
 -             },
 -             num: 1234
 -           },
 -           animationType: 'slide-down',
 -           title: 'Redux Example',
 -           drawer: { // optional, add this if you want a side menu drawer in your app
 -             left: { // optional, define if you want a drawer from the left
 -               screen: 'example.BottomTabsSideMenu' // unique ID registered with Navigation.registerScreen
 -             },
 -             disableOpenGesture: false, // optional, can the drawer be opened with a swipe instead of button
 -             passProps: {
 -               title: 'Hello from SideMenu'
 -             }
 -           },
 -           appStyle: {
 -             bottomTabBadgeTextColor: '#ffffff',
 -             bottomTabBadgeBackgroundColor: '#ff0000'
 -           }
 -         });
 -         return;
 -       default:
 -         console.error('Unknown app root');
 -     }
 -   }
 - }
 
 
  |