diff --git a/index.android.js b/index.android.js
index 10277d8..b1c97ad 100644
--- a/index.android.js
+++ b/index.android.js
@@ -4,62 +4,21 @@
* @flow
*/
-import React, { Component } from "react";
-import { AppRegistry, Navigator, Text, View, UIManager } from "react-native";
-import { ThemeProvider, Toolbar } from "react-native-material-ui";
-import uiTheme from "./js/ui-theme";
-import SideMenu from "react-native-side-menu";
-import DrawerMenu from "./js/DrawerMenu";
+import React, { Component } from 'react';
+import { AppRegistry, Navigator, UIManager } from 'react-native';
+import routes from './js/routes';
+import App from './js/App';
-UIManager.setLayoutAnimationEnabledExperimental &&
- UIManager.setLayoutAnimationEnabledExperimental(true);
+UIManager.setLayoutAnimationEnabledExperimental && UIManager.setLayoutAnimationEnabledExperimental(true);
export default class AreThereCookies extends Component {
- state = { drawerOpen: false };
+ static displayName = 'AreThereCookies';
- toggleSideMenu = () => {
- this.setState(({ drawerOpen }) => ({ drawerOpen: !drawerOpen }));
- };
+ renderScene = (route, navigator) => ;
- setSideMenuOpen = (drawerOpen: boolean) => {
- this.setState({ drawerOpen });
- };
-
- render() {
- const { drawerOpen } = this.state;
- return (
-
- {
- const menu = ;
- return (
-
-
-
-
- Scene content will go here...
-
-
-
- );
- }}
- />
-
- );
- }
+ render() {
+ return ;
+ }
}
-AppRegistry.registerComponent("AreThereCookies", () => AreThereCookies);
+AppRegistry.registerComponent('AreThereCookies', () => AreThereCookies);
diff --git a/js/App.js b/js/App.js
new file mode 100644
index 0000000..f49e99a
--- /dev/null
+++ b/js/App.js
@@ -0,0 +1,66 @@
+//@flow
+import React, { Component } from 'react';
+import { View } from 'react-native';
+import { ThemeProvider, Toolbar } from 'react-native-material-ui';
+import theme from './ui-theme';
+import SideMenu from 'react-native-side-menu';
+import DrawerMenu from './pages/DrawerMenu';
+import { routingContextTypes } from './routes';
+
+type Props = {
+ route: Object,
+ navigator: Object,
+};
+
+type State = {
+ drawerOpen: boolean,
+};
+
+export default class App extends Component {
+ state = { drawerOpen: false };
+
+ props: Props;
+
+ state: State;
+
+ getChildContext() {
+ const { navigator, route } = this.props;
+ return { navigator, route };
+ }
+
+ toggleSideMenu = () => {
+ this.setState(({ drawerOpen }) => ({ drawerOpen: !drawerOpen }));
+ };
+
+ setSideMenuOpen = (drawerOpen: boolean) => {
+ this.setState({ drawerOpen });
+ };
+
+ render() {
+ const { navigator, route } = this.props;
+ const { drawerOpen } = this.state;
+ return (
+
+ }
+ isOpen={drawerOpen}
+ onChange={this.setSideMenuOpen}
+ >
+
+
+
+
+
+
+ );
+ }
+}
+App.childContextTypes = routingContextTypes;
diff --git a/js/DrawerMenu.js b/js/DrawerMenu.js
deleted file mode 100644
index c2a24b3..0000000
--- a/js/DrawerMenu.js
+++ /dev/null
@@ -1,39 +0,0 @@
-// @flow
-import React, { Component } from "react";
-import { Drawer, Avatar } from "react-native-material-ui";
-
-type Props = {
- navigator: Object,
- route: { index: number, title: string, page: string }
-};
-
-export default class DrawerMenu extends Component {
- static displayName = "DrawerMenu";
-
- props: Props;
-
- render() {
- return (
-
-
- }
- footer={{
- dense: true,
- centerElement: { primaryText: "User Name" }
- }}
- />
-
-
-
- );
- }
-}
diff --git a/js/pages/DrawerMenu.js b/js/pages/DrawerMenu.js
new file mode 100644
index 0000000..a26318b
--- /dev/null
+++ b/js/pages/DrawerMenu.js
@@ -0,0 +1,50 @@
+// @flow
+import React, { Component } from 'react';
+import { Drawer, Avatar } from 'react-native-material-ui';
+import routes from '../routes';
+
+type Props = {
+ navigator: Object,
+ route: Object,
+};
+
+export default class DrawerMenu extends Component {
+ static displayName = 'DrawerMenu';
+
+ props: Props;
+
+ chooseItem = routeKey => () => {
+ if (routeKey === 'logout') {
+ navigator.immediatelyResetRouteStack();
+ }
+
+ const { navigator } = this.props;
+ const newRoute = routes[routeKey];
+ navigator.replace(newRoute);
+ };
+
+ render() {
+ return (
+
+
+ }
+ footer={{
+ dense: true,
+ centerElement: { primaryText: 'User Name' },
+ }}
+ />
+
+
+
+ );
+ }
+}
diff --git a/js/pages/Faves.js b/js/pages/Faves.js
new file mode 100644
index 0000000..dfd6e6f
--- /dev/null
+++ b/js/pages/Faves.js
@@ -0,0 +1,23 @@
+// @flow
+import React, { Component } from 'react';
+import { Text, View } from 'react-native';
+import theme from '../ui-theme';
+
+type Props = {
+ route: Object,
+ navigator: Object,
+};
+
+export default class Faves extends Component {
+ static displayName = 'Faves';
+
+ props: Props;
+
+ render() {
+ return (
+
+ Faves!
+
+ );
+ }
+}
diff --git a/js/pages/Food.js b/js/pages/Food.js
new file mode 100644
index 0000000..2954fca
--- /dev/null
+++ b/js/pages/Food.js
@@ -0,0 +1,23 @@
+// @flow
+import React, { Component } from 'react';
+import { Text, View } from 'react-native';
+import theme from '../ui-theme';
+
+type Props = {
+ route: Object,
+ navigator: Object,
+};
+
+export default class Food extends Component {
+ static displayName = 'Food';
+
+ props: Props;
+
+ render() {
+ return (
+
+ Food!
+
+ );
+ }
+}
diff --git a/js/pages/Places.js b/js/pages/Places.js
new file mode 100644
index 0000000..a15605a
--- /dev/null
+++ b/js/pages/Places.js
@@ -0,0 +1,23 @@
+// @flow
+import React, { Component } from 'react';
+import { Text, View } from 'react-native';
+import theme from '../ui-theme';
+
+type Props = {
+ route: Object,
+ navigator: Object,
+};
+
+export default class Places extends Component {
+ static displayName = 'Places';
+
+ props: Props;
+
+ render() {
+ return (
+
+ Places!
+
+ );
+ }
+}
diff --git a/js/routes.js b/js/routes.js
new file mode 100644
index 0000000..1218f62
--- /dev/null
+++ b/js/routes.js
@@ -0,0 +1,42 @@
+// @flow
+import { PropTypes } from 'react';
+import Food from './pages/Food';
+import Places from './pages/Places';
+import Faves from './pages/Faves';
+
+const {
+ shape,
+ func,
+ string,
+} = PropTypes;
+
+export default {
+ food: {
+ title: 'Food',
+ component: Food,
+ icon: 'local-pizza',
+ },
+ places: {
+ title: 'Places',
+ component: Places,
+ icon: 'domain',
+ },
+ faves: {
+ title: 'Faves',
+ component: Faves,
+ icon: 'stars',
+ },
+};
+
+export const routingContextTypes = {
+ navigator: shape({
+ push: func,
+ replace: func,
+ immediatelyResetRouteStack: func,
+ }),
+ route: shape({
+ title: string,
+ component: func,
+ icon: string,
+ }),
+};
diff --git a/js/ui-theme.js b/js/ui-theme.js
index 8146ea0..d5e327f 100644
--- a/js/ui-theme.js
+++ b/js/ui-theme.js
@@ -3,18 +3,21 @@
* Default theme for reference:
* https://github.com/xotahal/react-native-material-ui/blob/master/src/styles/themes/light.js
*/
-import { COLOR } from "react-native-material-ui";
+import { COLOR } from 'react-native-material-ui';
export default {
- palette: {
- primaryColor: COLOR.orange500,
- accentColor: COLOR.teal500,
- disabledColor: COLOR.grey500
- },
- toolbar: {
- titleText: { color: COLOR.grey800 },
- leftElement: { color: COLOR.grey800 },
- rightElement: { color: COLOR.grey800 },
- container: { backgroundColor: COLOR.grey200, height: 50 }
- }
+ palette: {
+ primaryColor: COLOR.orange500,
+ accentColor: COLOR.teal500,
+ disabledColor: COLOR.grey500,
+ },
+ toolbar: {
+ titleText: { color: COLOR.grey800 },
+ leftElement: { color: COLOR.grey800 },
+ rightElement: { color: COLOR.grey800 },
+ container: { backgroundColor: COLOR.grey200, height: 50 },
+ },
+ page: {
+ container: { flex: 1, backgroundColor: COLOR.white },
+ },
};