From 587aeb2c02f6ce0cbb460bba571a505ed55c1d90 Mon Sep 17 00:00:00 2001 From: Nathaniel Maman Date: Thu, 26 Nov 2015 02:07:11 +0200 Subject: [PATCH] add more complex example --- src/components/Back.js | 26 ++++++++++++ src/components/Collection.js | 80 ++++++++++++++++++++++++++++++++---- src/components/FixApp.js | 69 ++++++++++++++++++++++++++++--- src/components/Simple.js | 14 ++++++- 4 files changed, 175 insertions(+), 14 deletions(-) create mode 100644 src/components/Back.js diff --git a/src/components/Back.js b/src/components/Back.js new file mode 100644 index 00000000..316877b2 --- /dev/null +++ b/src/components/Back.js @@ -0,0 +1,26 @@ +import React from 'react-native'; + +var { + Text, + TouchableHighlight, + StyleSheet, +} = React; + +var Back = React.createClass ({ + render() { + return ( + this.props.navigator.jumpBack()}> + back + + ) + } +}) + +var styles = StyleSheet.create({ + link: { + color: 'blue', + } +}); + +module.exports = Back; diff --git a/src/components/Collection.js b/src/components/Collection.js index 1990d076..c6f1d49a 100644 --- a/src/components/Collection.js +++ b/src/components/Collection.js @@ -1,10 +1,14 @@ import React from 'react-native'; import Relay from 'react-relay'; +import Back from './Back'; var { ListView, View, Text, + TextInput, + TouchableHighlight, + StyleSheet, } = React; var Collection = React.createClass ({ @@ -18,42 +22,90 @@ var Collection = React.createClass ({ }}); return { dataSource: ds.cloneWithRows([]), + first: 0, }; }, componentWillMount() { + if (this.state.first > 0) { + this.setState({ + dataSource: this.state.dataSource.cloneWithRows(this.props.viewer.widgets.edges), + }); + } + }, + + componentWillReceiveProps(nextProps) { this.setState({ - dataSource: this.state.dataSource.cloneWithRows(this.props.viewer.widgets.edges), + dataSource: this.state.dataSource.cloneWithRows(nextProps.viewer.widgets.edges), }); }, - renderRow(edge) { + renderRow(edge,b, id) { return ( - ID: {edge.node.id} - NAME: {edge.node.name} + ---{++id}--- + ID: + {edge.node.id} + NAME: + {edge.node.name} ); }, + onChangeText(first) { + first = first || 0; + + if (first > 0) { + this.props.relay.setVariables({ + first: +first + }); + } + + if ( first === 0 ) { + this.setState({ + dataSource: this.state.dataSource.cloneWithRows([]), + }); + } + + this.setState({first}); + }, + render() { return ( - - Collection Example: + + + Has Previous Page: + {this.props.viewer.widgets.pageInfo.hasPreviousPage ? "true":"false"} + Has Next Page: + {this.props.viewer.widgets.pageInfo.hasNextPage ? "true":"false"} + ); } }); export default Relay.createContainer(Collection, { + initialVariables: { + first: 1, + }, fragments: { viewer: () => Relay.QL` fragment on User { - widgets(first: 10) { + widgets(first: $first) { + pageInfo { + hasNextPage + hasPreviousPage + } edges { node { id @@ -65,3 +117,17 @@ export default Relay.createContainer(Collection, { `, }, }); + +var styles = StyleSheet.create({ + key: { + color: 'red', + }, + value: { + color: 'green', + }, + view: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + } +}); diff --git a/src/components/FixApp.js b/src/components/FixApp.js index 480848e8..b81078d4 100644 --- a/src/components/FixApp.js +++ b/src/components/FixApp.js @@ -4,21 +4,69 @@ import Simple from './Simple'; import Collection from './Collection'; var { + Navigator, + TouchableHighlight, + StyleSheet, + BackAndroid, + Text, View, } = React; +var _navigator; +BackAndroid.addEventListener('hardwareBackPress', () => { + if (_navigator && _navigator.getCurrentRoutes().length > 1) { + _navigator.pop(); + return true; + } + return false; +}); + + var FixApp = React.createClass({ - render() { - return ( - + renderScene(route, navigator) { + _navigator = navigator; + switch (route.id) { + case 'Simple': + return ( + ) + case 'Collection': + return ( - - ) + ) + default: + return ( + + _navigator.push({id: 'Simple'})}> + Simple Example + + _navigator.push({id: 'Collection'})}> + Collection Example + + + ) + } + }, + + render() { + return ( + { + if (route.sceneConfig) { + return route.sceneConfig; + } + return Navigator.SceneConfigs.FloatFromBottom; + }} + /> + ); } }); @@ -32,3 +80,14 @@ export default Relay.createContainer(FixApp, { `, }, }); + +var styles = StyleSheet.create({ + view: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, + link: { + color: 'blue', + }, +}); diff --git a/src/components/Simple.js b/src/components/Simple.js index da2fb601..34da7652 100644 --- a/src/components/Simple.js +++ b/src/components/Simple.js @@ -1,18 +1,20 @@ import React from 'react-native'; import Relay from 'react-relay'; +import Back from './Back'; var { View, Text, + StyleSheet, } = React; var Simple = React.createClass ({ render() { return ( - - Simple Example + Viewer ID: {this.props.viewer.id} + ); } @@ -27,3 +29,11 @@ export default Relay.createContainer(Simple, { `, }, }); + +var styles = StyleSheet.create({ + view: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, +});