Skip to content

Commit bcbbc75

Browse files
authored
Merge pull request #1160 from StoDevX/react-navigation-take2
Migrate to React-Navigation
2 parents c7e6352 + a286d10 commit bcbbc75

File tree

138 files changed

+3158
-2538
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

138 files changed

+3158
-2538
lines changed

.flowconfig

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@
2121
.*/Libraries/react-native/ReactNative.js
2222

2323
; Ignore other things
24-
.*/node_modules/jest-runtime/build/__tests__/.*
25-
.*/node_modules/babel-plugin-flow-react-proptypes/src/__test__/.*
24+
.*/node_modules/.*/__tests?__/.*
2625
.*/node_modules/.*/examples/.*
2726
.*/node_modules/react-native-mock/.*
2827

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
"react-native-button": "1.8.2",
7373
"react-native-communications": "2.2.1",
7474
"react-native-custom-tabs": "0.1.4",
75+
"react-native-datepicker": "1.5.1",
7576
"react-native-device-info": "0.10.2",
7677
"react-native-google-analytics-bridge": "5.0.1",
7778
"react-native-keychain": "1.2.0",
@@ -84,9 +85,9 @@
8485
"react-native-safari-view": "2.0.0",
8586
"react-native-search-bar": "3.0.0",
8687
"react-native-sortable-list": "github:hawkrives/react-native-sortable-list#a46c78161e0a1a8d3a45f2fef69d98af3e911b6d",
87-
"react-native-tab-view": "0.0.66",
8888
"react-native-tableview-simple": "0.16.5",
8989
"react-native-vector-icons": "4.2.0",
90+
"react-navigation": "1.0.0-beta.11",
9091
"react-redux": "5.0.5",
9192
"redux": "3.6.0",
9293
"redux-logger": "3.0.6",

source/app.js

Lines changed: 22 additions & 165 deletions
Original file line numberDiff line numberDiff line change
@@ -4,164 +4,39 @@
44
* Index view
55
*/
66

7-
// Tweak the global fetch
87
import './globalize-fetch'
98
import './setup-moment'
10-
import {tracker} from './analytics'
119
import OneSignal from 'react-native-onesignal'
1210

1311
import React from 'react'
14-
import {Navigator, BackAndroid, StyleSheet, Platform} from 'react-native'
1512
import {Provider} from 'react-redux'
1613
import {store} from './flux'
17-
import * as c from './views/components/colors'
18-
import {
19-
Title,
20-
LeftButton,
21-
RightButton,
22-
configureScene,
23-
} from './views/components/navigation'
24-
25-
import CalendarView, {EventDetail as EventDetailView} from './views/calendar'
26-
import {ContactsView} from './views/contacts'
27-
import {DictionaryView, DictionaryDetailView} from './views/dictionary'
28-
import {HomeView, EditHomeView} from './views/home'
29-
import StreamingView from './views/streaming'
30-
import {MenusView} from './views/menus'
31-
import {BonAppHostedMenu} from './views/menus/menu-bonapp'
32-
import {FilterView} from './views/components/filter'
33-
import NewsView from './views/news'
34-
import NewsItemView from './views/news/news-item'
35-
import SISView from './views/sis'
36-
import JobDetailView from './views/sis/student-work/detail'
37-
import {
38-
BuildingHoursView,
39-
BuildingHoursDetailView,
40-
} from './views/building-hours'
41-
import TransportationView from './views/transportation'
42-
import SettingsView from './views/settings'
43-
import SISLoginView from './views/settings/login'
44-
import CreditsView from './views/settings/credits'
45-
import PrivacyView from './views/settings/privacy'
46-
import LegalView from './views/settings/legal'
47-
import {StudentOrgsView, StudentOrgsDetailView} from './views/student-orgs'
48-
import {FaqView} from './views/faqs'
49-
import {SnapshotsView} from './storybook'
50-
import HelpView from './views/help'
51-
52-
import NoRoute from './views/components/no-route'
53-
54-
// Render a given scene
55-
function renderScene(route, navigator) {
56-
let props = {route, navigator, ...(route.props || {})}
57-
tracker.trackScreenView(route.id)
14+
import {tracker} from './analytics'
15+
import {AppNavigator} from './navigation'
16+
import type {NavigationState} from 'react-navigation'
5817

59-
switch (route.id) {
60-
case 'HomeView':
61-
return <HomeView {...props} />
62-
case 'MenusView':
63-
return <MenusView {...props} />
64-
case 'BonAppHostedMenu':
65-
return <BonAppHostedMenu {...props} />
66-
case 'FilterView':
67-
return <FilterView {...props} />
68-
case 'CalendarView':
69-
return <CalendarView {...props} />
70-
case 'EventDetailView':
71-
return <EventDetailView {...props} />
72-
case 'ContactsView':
73-
return <ContactsView {...props} />
74-
case 'DictionaryView':
75-
return <DictionaryView {...props} />
76-
case 'DictionaryDetailView':
77-
return <DictionaryDetailView {...props} />
78-
case 'StreamingView':
79-
return <StreamingView {...props} />
80-
case 'NewsView':
81-
return <NewsView {...props} />
82-
case 'NewsItemView':
83-
return <NewsItemView {...props} />
84-
case 'BuildingHoursView':
85-
return <BuildingHoursView {...props} />
86-
case 'BuildingHoursDetailView':
87-
return <BuildingHoursDetailView {...props} />
88-
case 'SISView':
89-
return <SISView {...props} />
90-
case 'JobDetailView':
91-
return <JobDetailView {...props} />
92-
case 'TransportationView':
93-
return <TransportationView {...props} />
94-
case 'SettingsView':
95-
return <SettingsView {...props} />
96-
case 'SISLoginView':
97-
return <SISLoginView {...props} />
98-
case 'CreditsView':
99-
return <CreditsView {...props} />
100-
case 'PrivacyView':
101-
return <PrivacyView {...props} />
102-
case 'LegalView':
103-
return <LegalView {...props} />
104-
case 'EditHomeView':
105-
return <EditHomeView {...props} />
106-
case 'StudentOrgsView':
107-
return <StudentOrgsView {...props} />
108-
case 'StudentOrgsDetailView':
109-
return <StudentOrgsDetailView {...props} />
110-
case 'FaqView':
111-
return <FaqView {...props} />
112-
case 'SnapshotsView':
113-
return <SnapshotsView {...props} />
114-
case 'HelpView':
115-
return <HelpView {...props} />
116-
default:
117-
return <NoRoute {...props} />
18+
// gets the current screen from navigation state
19+
function getCurrentRouteName(navigationState: NavigationState): ?string {
20+
if (!navigationState) {
21+
return null
22+
}
23+
const route = navigationState.routes[navigationState.index]
24+
// dive into nested navigators
25+
if (route.routes) {
26+
return getCurrentRouteName(route)
11827
}
28+
return route.routeName
11929
}
12030

121-
const styles = StyleSheet.create({
122-
container: {
123-
marginTop: Platform.OS === 'ios' ? 64 : 56,
124-
flex: 1,
125-
backgroundColor: Platform.OS === 'ios'
126-
? c.iosLightBackground
127-
: c.androidLightBackground,
128-
},
129-
navigationBar: {
130-
backgroundColor: c.olevilleGold,
131-
...Platform.select({
132-
ios: {
133-
shadowOffset: {width: 0, height: StyleSheet.hairlineWidth},
134-
shadowColor: 'rgb(100, 100, 100)',
135-
shadowOpacity: 0.5,
136-
shadowRadius: StyleSheet.hairlineWidth,
137-
},
138-
android: {
139-
elevation: 4,
140-
},
141-
}),
142-
},
143-
})
144-
14531
export default class App extends React.Component {
14632
componentDidMount() {
147-
tracker.trackEvent('app', 'launch')
148-
BackAndroid.addEventListener(
149-
'hardwareBackPress',
150-
this.registerAndroidBackButton,
151-
)
152-
15333
OneSignal.addEventListener('received', this.onReceived)
15434
OneSignal.addEventListener('opened', this.onOpened)
15535
OneSignal.addEventListener('registered', this.onRegistered)
15636
OneSignal.addEventListener('ids', this.onIds)
15737
}
15838

15939
componentWillUnmount() {
160-
BackAndroid.removeEventListener(
161-
'hardwareBackPress',
162-
this.registerAndroidBackButton,
163-
)
164-
16540
OneSignal.removeEventListener('received', this.onReceived)
16641
OneSignal.removeEventListener('opened', this.onOpened)
16742
OneSignal.removeEventListener('registered', this.onRegistered)
@@ -187,40 +62,22 @@ export default class App extends React.Component {
18762
console.log('Device info:', device)
18863
}
18964

190-
_navigator: Navigator
65+
trackScreenChanges(
66+
prevState: NavigationState,
67+
currentState: NavigationState,
68+
) {
69+
const currentScreen = getCurrentRouteName(currentState)
70+
const prevScreen = getCurrentRouteName(prevState)
19171

192-
registerAndroidBackButton = () => {
193-
if (this._navigator && this._navigator.getCurrentRoutes().length > 1) {
194-
this._navigator.pop()
195-
return true
72+
if (currentScreen !== prevScreen) {
73+
tracker.trackScreenView(currentScreen)
19674
}
197-
return false
19875
}
19976

20077
render() {
20178
return (
20279
<Provider store={store}>
203-
<Navigator
204-
ref={nav => (this._navigator = nav)}
205-
navigationBar={
206-
<Navigator.NavigationBar
207-
style={styles.navigationBar}
208-
routeMapper={{
209-
LeftButton,
210-
RightButton,
211-
Title,
212-
}}
213-
/>
214-
}
215-
initialRoute={{
216-
id: 'HomeView',
217-
title: 'All About Olaf',
218-
index: 0,
219-
}}
220-
renderScene={renderScene}
221-
sceneStyle={styles.container}
222-
configureScene={configureScene}
223-
/>
80+
<AppNavigator onNavigationStateChange={this.trackScreenChanges} />
22481
</Provider>
22582
)
22683
}

source/navigation.js

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
// @flow
2+
3+
import {StackNavigator} from 'react-navigation'
4+
import * as c from './views/components/colors'
5+
6+
import CalendarView, {EventDetail as EventDetailView} from './views/calendar'
7+
import {ContactsView} from './views/contacts'
8+
import {DictionaryView, DictionaryDetailView} from './views/dictionary'
9+
import {HomeView, EditHomeView} from './views/home'
10+
import StreamingView from './views/streaming'
11+
import {MenusView} from './views/menus'
12+
import {FilterView} from './views/components/filter'
13+
import NewsView from './views/news'
14+
import NewsItemView from './views/news/news-item'
15+
import SISView from './views/sis'
16+
import JobDetailView from './views/sis/student-work/detail'
17+
import {
18+
BuildingHoursView,
19+
BuildingHoursDetailView,
20+
BuildingHoursProblemReportView,
21+
BuildingHoursScheduleEditorView,
22+
} from './views/building-hours'
23+
import TransportationView, {BusMapView} from './views/transportation'
24+
import SettingsView from './views/settings'
25+
import SISLoginView from './views/settings/login'
26+
import CreditsView from './views/settings/credits'
27+
import PrivacyView from './views/settings/privacy'
28+
import LegalView from './views/settings/legal'
29+
import {StudentOrgsView, StudentOrgsDetailView} from './views/student-orgs'
30+
import {FaqView} from './views/faqs'
31+
// import {SnapshotsView} from './storybook'
32+
import HelpView from './views/help'
33+
34+
export const AppNavigator = StackNavigator(
35+
{
36+
HomeView: {screen: HomeView},
37+
BuildingHoursDetailView: {screen: BuildingHoursDetailView},
38+
BuildingHoursView: {screen: BuildingHoursView},
39+
BuildingHoursProblemReportView: {screen: BuildingHoursProblemReportView},
40+
BuildingHoursScheduleEditorView: {screen: BuildingHoursScheduleEditorView},
41+
CalendarView: {screen: CalendarView},
42+
ContactsView: {screen: ContactsView},
43+
CreditsView: {screen: CreditsView},
44+
DictionaryDetailView: {screen: DictionaryDetailView},
45+
DictionaryView: {screen: DictionaryView},
46+
EditHomeView: {screen: EditHomeView},
47+
EventDetailView: {screen: EventDetailView},
48+
FaqView: {screen: FaqView},
49+
FilterView: {screen: FilterView},
50+
HelpView: {screen: HelpView},
51+
JobDetailView: {screen: JobDetailView},
52+
LegalView: {screen: LegalView},
53+
MenusView: {screen: MenusView},
54+
NewsItemView: {screen: NewsItemView},
55+
NewsView: {screen: NewsView},
56+
PrivacyView: {screen: PrivacyView},
57+
SettingsView: {screen: SettingsView},
58+
SISLoginView: {screen: SISLoginView},
59+
SISView: {screen: SISView},
60+
// SnapshotsView: {screen: SnapshotsView},
61+
StreamingView: {screen: StreamingView},
62+
StudentOrgsDetailView: {screen: StudentOrgsDetailView},
63+
StudentOrgsView: {screen: StudentOrgsView},
64+
TransportationView: {screen: TransportationView},
65+
BusMapView: {screen: BusMapView},
66+
},
67+
{
68+
navigationOptions: {
69+
headerStyle: {
70+
backgroundColor: c.olevilleGold,
71+
},
72+
headerTintColor: c.white,
73+
},
74+
},
75+
)

source/storybook/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ const Nav = ({children}: {children?: Function}) =>
7979
/>
8080

8181
export class SnapshotsView extends React.Component {
82+
static navigationOptions = {
83+
title: 'Snapshot Time',
84+
}
85+
8286
state = {
8387
viewPath: 'streaming.radio',
8488
}

0 commit comments

Comments
 (0)