aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mobile/App.js2
-rw-r--r--mobile/components/GreetingPage.js65
-rw-r--r--mobile/package.json1
-rw-r--r--mobile/screens/Form1.js86
4 files changed, 140 insertions, 14 deletions
diff --git a/mobile/App.js b/mobile/App.js
index 4348381..f36b696 100644
--- a/mobile/App.js
+++ b/mobile/App.js
@@ -4,7 +4,7 @@ import { Ionicons } from '@expo/vector-icons';
import { createStackNavigator, createAppContainer } from 'react-navigation';
import GreetingPage from './components/GreetingPage';
-import FormPage from './components/FormPage';
+import FormPage from './screens/Form1';
const RootStack = createStackNavigator( {GreetingPage: GreetingPage, FormPage: FormPage,},
diff --git a/mobile/components/GreetingPage.js b/mobile/components/GreetingPage.js
index 8b87474..e8da92e 100644
--- a/mobile/components/GreetingPage.js
+++ b/mobile/components/GreetingPage.js
@@ -1,10 +1,49 @@
import React, { Component } from 'react';
-import { Text, View, Alert, StyleSheet, Button, AppRegistry, Navigator, TouchableHighlight} from 'react-native';
+import { Text, View, Alert, StyleSheet, Button, AppRegistry, Navigator, TouchableHighlight, Platform} from 'react-native';
import { Ionicons } from '@expo/vector-icons';
import { createStackNavigator, createAppContainer } from 'react-navigation';
+import { Location, Permissions, Constants } from 'expo';
export default class GreetingPage extends Component {
//Every component needs a render() function
+ state = {
+ location: null,
+ errorMessage: null,
+ };
+
+ componentWillMount() {
+ if (Platform.OS === 'android' && !Constants.isDevice) {
+ this.setState({
+ errorMessage: 'This will not work on an android device',
+ });
+ } else {
+ this._getLocationAsync();
+ }
+ }
+
+ _getLocationAsync = async () => {
+ let { status } = await Permissions.askAsync(Permissions.LOCATION);
+ if (status !== 'granted') {
+ this.setState({
+ errorMessage: 'Permission to access location was denied',
+ });
+ }
+
+ let location = await Location.getCurrentPositionAsync({});
+ this.setState({ location });
+ };
+
+ moveToFormPage = () => {
+ this._getLocationAsync;
+ if (this.state.location === null) {
+ Alert.alert("There was a problem accessing your location");
+ return;
+ }
+ const coordinates = [this.state.location.coords.longitude, this.state.location.coords.latitude];
+ this.props.navigation.navigate('FormPage', {coordinates : coordinates});
+ }
+
+
render() {
return (
//<View> acts like the way <div> does in JavaScript
@@ -16,18 +55,19 @@ export default class GreetingPage extends Component {
<View style={styles.titleContainer}>
<Text style={styles.title}>
- [Place text here!]
+ Ensure that location services are enabled!
</Text>
</View>
- <TouchableHighlight
- style={styles.first_button_container}
- onPress={() => this.props.navigation.navigate('FormPage')}>
+ <TouchableHighlight
+ style={styles.first_button_container}
+ onPress={() => { this.moveToFormPage()
+ }}>
<View style={styles.press_button}>
<View>
- <Text style={styles.current_location_title}>
+ <Text style={styles.current_location_title}>
Use Current Location
</Text>
</View>
@@ -40,15 +80,13 @@ export default class GreetingPage extends Component {
</TouchableHighlight>
- <TouchableHighlight
- style={styles.second_button_container}
- onPress={() => this.props.navigation.navigate('FormPage')}>
+ <TouchableHighlight style={styles.second_button_container}>
<View style={styles.press_button}>
<View>
- <Text style={styles.current_location_title}>
- Drop Pin
- </Text>
+ <Text style={styles.current_location_title}>
+ Drop Pin
+ </Text>
</View>
<View marginTop = {20}>
@@ -82,7 +120,8 @@ const styles = StyleSheet.create( {
marginTop: 10,
textAlign: 'center',
opacity: 0.9,
- fontSize: 30
+ fontSize: 18,
+ fontStyle: 'italic'
},
current_location_title: {
color: '#FFF',
diff --git a/mobile/package.json b/mobile/package.json
index 0c3b6c2..488e885 100644
--- a/mobile/package.json
+++ b/mobile/package.json
@@ -15,6 +15,7 @@
"expo": "^32.0.0",
"react": "16.5.0",
"react-native": "https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz",
+ "react-native-elements": "^1.1.0",
"react-navigation": "^3.0.9"
},
"devDependencies": {
diff --git a/mobile/screens/Form1.js b/mobile/screens/Form1.js
new file mode 100644
index 0000000..16ced64
--- /dev/null
+++ b/mobile/screens/Form1.js
@@ -0,0 +1,86 @@
+import React, { Component } from 'react';
+import {Text, Alert, AppRegistry, StyleSheet, View } from 'react-native';
+import { Button, Input, CheckBox } from 'react-native-elements';
+
+export default class Form1 extends Component {
+ _onPressButton1() {
+ const { navigation } = this.props;
+ const coordinates = navigation.getParam('coordinates');
+ //var coordinates = this.coordinates ? coordinates : [];
+ fetch('https://helpthehome-qa.herokuapp.com/mobilerequest', {
+ method: 'POST',
+ headers: {
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ 'coordinates': coordinates,
+ 'type': "Point",
+ 'isInjured': this.state.injured,
+ 'reasonForHelp': this.state.why,
+ 'ageRange': this.state.age,
+ 'clothingDescription': this.state.appearance
+ }),
+ });
+ // TODO: handle the response from the serve and decide what to display
+ // based on that
+ // for now just to back to the home page
+ Alert.alert("You will now be redirected to the main page");
+ this.props.navigation.navigate('GreetingPage');
+}
+ _onPressButton2() {
+ Alert.alert('Continue:')
+ }
+ constructor(props) {
+ super(props);
+ this.state = {
+ age: '',
+ appearance: '',
+ injured: false,
+ why: ''
+ };
+ }
+
+ render() {
+ return (
+ <View style={{padding: 40}}>
+ <Text>Age:</Text>
+ <Input
+ style={{height: 40}}
+ placeholder="Estimate is fine"
+ onChangeText={(age) => this.setState({age})}
+ />
+ <Text>Appearance:</Text>
+ <Input
+ style={{height: 40}}
+ placeholder="What are they wearing?"
+ onChangeText={(appearance) => this.setState({appearance})}
+ />
+ <CheckBox
+ center
+ title="Are they injured?"
+ checked={this.state.injured}
+ onPress={() => this.setState({ injured: !this.state.injured })}
+ />
+ <Text>Reason for help?</Text>
+ <Input
+ style={{height: 40}}
+ placeholder="Please keep it short"
+ onChangeText={(why) => this.setState({why})}
+ />
+ <View style={{padding: 40}}>
+ <Button
+ buttonStyle={{backgroundColor:"green"}}
+ onPress={() => this._onPressButton1()}
+ title="Submit!"
+ />
+ <Button
+ containerStyle={{paddingTop: 10}}
+ onPress={() => this.props.navigation.navigate('GreetingPage')}
+ title="Go Back"
+ />
+ </View>
+ </View>
+ );
+ }
+}