diff --git a/Gruntfile.js b/Gruntfile.js index dd7a0115..ff91f02f 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -114,7 +114,8 @@ module.exports = function(grunt) { ], options: { ignores: [ - 'src/js/**/*.ios.js' + 'src/js/**/*.ios.js', + 'src/js/native_react_views/*.js' ], curly: true, // sometimes triple equality is just redundant and unnecessary @@ -217,6 +218,7 @@ module.exports = function(grunt) { 'src/__tests__/casperjs/*.js', 'src/js/__tests__/create.js', 'src/js/__tests__/*.js', + 'src/js/native_react_views/*.js', 'src/js/**/*.ios.js' ] }, diff --git a/src/js/constants/Routes.js b/src/js/constants/Routes.js new file mode 100644 index 00000000..d9af3475 --- /dev/null +++ b/src/js/constants/Routes.js @@ -0,0 +1,19 @@ +var assign = require('object-assign'); +var keyMirror = require('../util/keyMirror'); + +module.exports = keyMirror({ + NUX: null, + LOADING: null, + SEQUENCE_SELECT: null, + LEVEL_SELECT: null, +}); + +module.exports.getRouteWithParams = function(id, params) { + return assign({id: id}, params); +}; + +module.exports.getRouteForID = function(id) { + return { + id: id, + }; +}; diff --git a/src/js/native/index.ios.js b/src/js/native/index.ios.js index 2ed5543b..73d646a9 100755 --- a/src/js/native/index.ios.js +++ b/src/js/native/index.ios.js @@ -4,98 +4,49 @@ */ 'use strict'; -var levels = require('../../levels/index.js'); -var LevelStore = require('../stores/LevelStore.js'); -var levelSequences = require('../../levels').levelSequences; - var React = require('react-native'); var { AppRegistry, - StyleSheet, Image, + Navigator, ScrollView, + StyleSheet, Text, TouchableHighlight, View, } = React; +var Routes = require('../constants/Routes'); +var SequenceSelectView = require('../native_react_views/SequenceSelectView'); +var LevelSelectView = require('../native_react_views/LevelSelectView'); + var LearnGitBranching = React.createClass({ + + _renderScene: function(route, navigator) { + switch (route.id) { + case Routes.SEQUENCE_SELECT: + return ; + case Routes.LEVEL_SELECT: + return ; + } + throw new Exception('No route found for ' + route.id); + }, + render: function() { return ( - - - - - Yo Whatup Peter - - {Object.keys(levelSequences).map(function(sequence) { - return ( - - - - - - {sequence} - - - - - - ); - })} - - + ); - } + }, + }); var styles = StyleSheet.create({ headerSpacer: { height: 40 }, - logo: { - width: 300, - borderRadius: 2, - justifyContent: 'center', - flexDirection: 'column', - alignItems: 'center', - height: 100 - }, - cardContainer: { - shadowColor: '#666', - shadowOpacity: 0.7, - marginBottom: 16, - shadowOffset: { - x: 100, - y: 100 - }, - }, - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - backgroundColor: '#FFF', - }, - levelLabel: { - flexDirection: 'column', - backgroundColor: 'rgba(0, 0, 0, 0)', - alignItems: 'center', - justifyContent: 'center', - borderRadius: 10 - }, - sequenceName: { - color: '#FFF', - fontWeight: 'bold', - fontSize: 20, - }, - welcome: { - fontSize: 20, - textAlign: 'center', - margin: 10, - }, }); AppRegistry.registerComponent('LearnGitBranching', () => LearnGitBranching); diff --git a/src/js/native_react_views/LevelSelectView.js b/src/js/native_react_views/LevelSelectView.js new file mode 100644 index 00000000..b19a19f0 --- /dev/null +++ b/src/js/native_react_views/LevelSelectView.js @@ -0,0 +1,42 @@ +var NavButton = require('../native_react_views/NavButton'); +var React = require('react-native'); +var Routes = require('../constants/Routes'); + +var { + ScrollView, + StyleSheet, + Text, + View, +} = React; + +var LevelSelectView = React.createClass({ + + propTypes: { + navigator: React.PropTypes.object.isRequired, + }, + + render: function() { + return ( + + + + { + this.props.navigator.popToTop(); + }} + /> + + + ); + } + +}); + +var styles = StyleSheet.create({ + headerSpacer: { + height: 40 + }, +}); + +module.exports = LevelSelectView; diff --git a/src/js/native_react_views/NavButton.js b/src/js/native_react_views/NavButton.js new file mode 100644 index 00000000..7aa1bd90 --- /dev/null +++ b/src/js/native_react_views/NavButton.js @@ -0,0 +1,32 @@ +var React = require('react-native'); +var { + PixelRatio, + StyleSheet, + Text, + TouchableHighlight, + View, +} = React; + +class NavButton extends React.Component { + render() { + return ( + + {this.props.text} + + ); + } +} + +var styles = StyleSheet.create({ + button: { + backgroundColor: 'white', + padding: 15, + borderBottomWidth: 1 / PixelRatio.get(), + borderBottomColor: '#CDCDCD', + }, +}); + +module.exports = NavButton; diff --git a/src/js/native_react_views/SequenceSelectView.js b/src/js/native_react_views/SequenceSelectView.js new file mode 100644 index 00000000..be2fa879 --- /dev/null +++ b/src/js/native_react_views/SequenceSelectView.js @@ -0,0 +1,44 @@ +var NavButton = require('../native_react_views/NavButton'); +var React = require('react-native'); +var Routes = require('../constants/Routes'); +var { + PixelRatio, + ScrollView, + StyleSheet, + Text, + View, +} = React; + +var SequenceSelectView = React.createClass({ + + propTypes: { + navigator: React.PropTypes.object.isRequired, + }, + + render: function() { + return ( + + + + { + this.props.navigator.push( + Routes.getRouteForID(Routes.LEVEL_SELECT) + ); + }} + /> + + + ); + } + +}); + +var styles = StyleSheet.create({ + headerSpacer: { + height: 40 + }, +}); + +module.exports = SequenceSelectView;