Skip to content

Commit 2f6059c

Browse files
committed
Navigation
1 parent df84b59 commit 2f6059c

File tree

10 files changed

+210
-18
lines changed

10 files changed

+210
-18
lines changed

src/App.js

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/app.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
'use strict'
2+
3+
import React from 'react-native'
4+
import Navigator from './nav/Navigator'
5+
6+
const initialRoute = { id: 'home', title: "Discover App1" }
7+
8+
class App extends React.Component {
9+
render() {
10+
return (
11+
<Navigator initialRoute={initialRoute} />
12+
)
13+
}
14+
}
15+
16+
export default App
17+
// export default HomeSelf

src/nav/NavigationBar.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
'use strict'
2+
3+
import React from 'react-native'
4+
import NavigationBarRouteMapper from './NavigationBarRouteMapper'
5+
6+
import styles from './NavigationBarStyles'
7+
8+
const NavigationBar = <React.Navigator.NavigationBar
9+
routeMapper={NavigationBarRouteMapper}
10+
style={styles.navBar} />
11+
12+
export default NavigationBar
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import React, {
2+
TouchableHighlight,
3+
Text,
4+
} from 'react-native'
5+
6+
7+
const NavigationBarRouteMapper = {
8+
LeftButton(route, navigator, index, navState) {
9+
if (index === 0) {
10+
return null;
11+
} else {
12+
return (
13+
<TouchableHighlight onPress={() => {
14+
if (index > 0) {
15+
navigator.pop();
16+
}
17+
}} style={styles.navButtonLeft}>
18+
<Text style={styles.navBarText}>Back</Text>
19+
</TouchableHighlight>
20+
)
21+
}
22+
},
23+
24+
RightButton() {
25+
<Text style={styles.navBarText}>
26+
RightButton
27+
</Text>
28+
},
29+
30+
Title(route, navigator, index, navState) {
31+
return (
32+
<Text style={styles.navBarTitleText}>
33+
{(route.title) ? route.title : "Discover App"}
34+
</Text>
35+
)
36+
},
37+
}
38+
39+
40+
const styles = React.StyleSheet.create({
41+
navBarButtonText: {
42+
fontSize: 10,
43+
textAlign: 'center',
44+
margin: 10,
45+
},
46+
navBarTitleText: {
47+
fontSize: 12,
48+
textAlign: 'center',
49+
margin: 10,
50+
},
51+
navBarText: {
52+
textAlign: 'center',
53+
color: '#333333',
54+
marginBottom: 5,
55+
},
56+
navButtonLeft: {
57+
marginTop: 10,
58+
marginLeft: 10,
59+
},
60+
});
61+
62+
63+
export default NavigationBarRouteMapper

src/nav/NavigationBarStyles.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
'use strict'
2+
3+
import { StyleSheet } from 'react-native'
4+
5+
6+
export default StyleSheet.create({
7+
navBar: {
8+
flex: 1,
9+
justifyContent: 'center',
10+
alignItems: 'center',
11+
backgroundColor: 'white',
12+
borderBottomWidth: 1,
13+
borderBottomColor: "#CCC",
14+
},
15+
navBarButtonText: {
16+
fontSize: 10,
17+
textAlign: 'center',
18+
margin: 10,
19+
},
20+
navBarTitleText: {
21+
fontSize: 20,
22+
textAlign: 'center',
23+
margin: 10,
24+
},
25+
navBarText: {
26+
textAlign: 'center',
27+
color: '#333333',
28+
marginBottom: 5,
29+
},
30+
})

src/nav/Navigator.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import React from 'react-native'
2+
import NavigationBar from './NavigationBar'
3+
import NavigationRenderScene from './RenderScene'
4+
5+
// const paddingTop = React.Navigator.NavigationBar.Styles.General.NavBarHeight
6+
const paddingTop = 64
7+
8+
9+
class Navigator extends React.Component {
10+
render() {
11+
return (
12+
<React.Navigator
13+
style={{flex:1}}
14+
initialRoute={this.props.initialRoute}
15+
renderScene={NavigationRenderScene}
16+
navigationBar={NavigationBar}
17+
sceneStyle={{paddingTop}}
18+
/>
19+
)
20+
}
21+
}
22+
23+
Navigator.propTypes = {
24+
initialRoute: React.PropTypes.shape({
25+
id: React.PropTypes.string.isRequired,
26+
}).isRequired,
27+
}
28+
29+
export default Navigator

src/nav/RenderScene.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
'use strict'
2+
3+
import React from 'react-native'
4+
import HomeView from '../views/Home'
5+
import LoginView from '../views/Login'
6+
7+
8+
export default function renderScene(route, navigator) {
9+
switch (route.id) {
10+
case 'login':
11+
return (<LoginView navigator={navigator} {...route.data} />)
12+
case 'home':
13+
return (<HomeView navigator={navigator} />)
14+
default:
15+
return (
16+
<React.Text style={{fontSize: 40, color: 'red'}}>
17+
Oops, route error '{route.id}'
18+
</React.Text>
19+
)
20+
}
21+
}

src/views/Home/Home.js

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,38 @@
33
import React, {
44
Text,
55
View,
6+
TouchableHighlight,
67
} from 'react-native';
78

89
import styles from './HomeStyles'
910

10-
export default class Home extends React.Component {
11+
class Home extends React.Component {
12+
_AuthWithSpotify() {
13+
this.props.navigator.push({
14+
id: 'login',
15+
title: 'Login in first'
16+
})
17+
}
18+
1119
render() {
1220
return (
1321
<View style={styles.container}>
1422
<Text style={styles.welcome}>
1523
Welcome to React Native!
1624
</Text>
17-
<Text style={styles.instructions}>
18-
To get started, edit index.ios.js
19-
</Text>
20-
<Text style={styles.instructions}>
21-
Press Cmd+R to reload,{'\n'}
22-
Cmd+D or shake for dev menu
23-
</Text>
25+
<TouchableHighlight style={styles.partyBtn}
26+
underlayColor={'#669694'}
27+
onPress={this._AuthWithSpotify.bind(this)}>
28+
<Text style={styles.simpleText}>
29+
Authenticate with spotify
30+
</Text>
31+
</TouchableHighlight>
2432
</View>
2533
);
2634
}
2735
}
36+
37+
Home.propTypes = {
38+
navigator: React.PropTypes.object.isRequired,
39+
}
40+
export default Home

src/views/Login/Login.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
'use strict'
2+
3+
import React from 'react-native'
4+
5+
6+
export default class Login extends React.Component {
7+
render() {
8+
return (
9+
<React.Text style={{fontSize: 30, flex:1}}>Mono!!!</React.Text>
10+
)
11+
}
12+
}

src/views/Login/package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"name": "Login",
3+
"private": true,
4+
"main": "./Login.js"
5+
}

0 commit comments

Comments
 (0)