Skip to content

Instantly share code, notes, and snippets.

@joeyvandijk
Last active August 29, 2015 14:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joeyvandijk/96a3597ae0dccaf842cd to your computer and use it in GitHub Desktop.
Save joeyvandijk/96a3597ae0dccaf842cd to your computer and use it in GitHub Desktop.
const React = require('react-native')

var {
  AppRegistry,
  StyleSheet,
  Navigator,
  View,
  Text,
  TouchableHighlight,
  Component,
  PropTypes
} = React

const styles = StyleSheet.create({
  container: {
    flex: 1,
    marginTop: 20,
    justifyContent: 'center',
    backgroundColor: '#ffffff'
  },
  subContainer: {
    top: 0,
    bottom: 0,
    left: 0,
    right: 0,
    flex: 1
  },
  button: {
    flex: 1,
    borderColor: '#ff9900',
    borderWidth: 2,
    color: '#ff9900',
    fontSize: 15,
    fontWeight: 'bold',
    padding: 5,
    backgroundColor: 'rgba(0,0,0,0)'
  },
  navigator: {
    flex: 1
  }
})

class AnyView extends Component {
  constructor (props) {
    super(props)
    this.state = {
      isBase: (this.props.title.toLowerCase() === 'base')
    }
    this.onPressClick = this.onPressClick.bind(this)
  }
  onPressClick () {
    if (this.state.isBase) {
      // go to other view
      this.props.navigator.push({
        state: 'image',
        sceneConfig: Navigator.SceneConfigs.FloatFromRight
      })
    }else {
      // go back
      this.props.navigator.pop()
    }
  }
  render () {
    return (
      <View style={[styles.subContainer, {backgroundColor: (this.state.isBase ? '#44ffff' : '#ffff44')}]}>
        <Text>{this.props.title}</Text>
        <TouchableHighlight
          onPress={() => this.onPressClick()}
          underlayColor={(this.state.isBase ? '#44ffff' : '#ffff44')}
          style={{width: 70}}
          >
          <Text style={styles.button}>{this.props.text}</Text>
        </TouchableHighlight>
      </View>
    )
  }
}

AnyView.propTypes = {
  navigator: PropTypes.object
}

class ORIENTATION extends Component{
  constructor (props) {
    super(props)

    this.onLayoutChange = this.onLayoutChange.bind(this)
    this.renderScene = this.renderScene.bind(this)
  }
  onLayoutChange (e) {
    console.log('APP LAYOUT CHANGE', e.nativeEvent.layout)
  }
  renderScene (route, navigator) {
    console.log('APP RENDER SCENE:', route.state.toLowerCase(), navigator.getCurrentRoutes())
    let Component = AnyView
    let title = ''
    let text = ''
    switch (route.state.toLowerCase()) {
      case 'base':
        title = 'Base'
        text = 'Go to image'
        break
      case 'image':
        title = 'Image'
        text = 'Back'
        break
      default:
        Component = <View />
        break
    }

    return (
      <View style={styles.container}>
        <Component navigator={navigator} {...route.props} title={title} text={text} style={{flex: 1}} />
      </View>
    )
  }
  render () {
    return (
      <View style={{flex: 1}} onLayout={this.onLayoutChange}>
        <Navigator
          style={[styles.navigator]}
          initialRoute={{
              state: 'base',
              sceneConfig: Navigator.SceneConfigs.FloatFromLeft
            }}
          renderScene={this.renderScene}
          configureScene={(route) => (Object.assign({gestures: route.gestures}, route.sceneConfig || Navigator.SceneConfigs.FloatFromRight))}
          />
      </View>
    )
  }
}

AppRegistry.registerComponent('ORIENTATION', () => ORIENTATION)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment