diff --git a/MobileApp/package.json b/MobileApp/package.json index cf64248..ba560c3 100644 --- a/MobileApp/package.json +++ b/MobileApp/package.json @@ -27,6 +27,6 @@ "react": "16.3.1", "react-native": "~0.55.2", "react-native-communications": "^2.2.1", - "react-navigation": "^2.2.5" + "react-navigation": "^2.3.1" } } diff --git a/MobileApp/src/components/app-navigator.js b/MobileApp/src/components/app-navigator.js index 976330b..fec4e8f 100644 --- a/MobileApp/src/components/app-navigator.js +++ b/MobileApp/src/components/app-navigator.js @@ -2,33 +2,45 @@ import {createStackNavigator, createBottomTabNavigator} from 'react-navigation' import AuthScreen from './screens/auth' import EventList from './screens/event-list' import PeopleList from './screens/people-list' +import PersonScreen from './screens/person' import EventScreen from './screens/event' import EventMapScreen from './screens/event-map' +import CameraScreen from "./screens/camera"; const ListsNavigator = createBottomTabNavigator({ - events: { - screen: EventList - }, - people: { - screen: PeopleList - } + events: { + screen: EventList + }, + people: { + screen: PeopleList + }, +/* camera: { + screen: CameraScreen, + }*/ }) export default createStackNavigator({ - auth: { - screen: AuthScreen, - navigationOptions: { - title: 'Auth' - } - }, - lists: { - screen: ListsNavigator, - navigationOptions: { - title: 'Lists' - } - }, - event: { - screen: EventMapScreen + auth: { + screen: AuthScreen, + navigationOptions: { + title: 'Auth' + } + }, + lists: { + screen: ListsNavigator, + navigationOptions: { + title: 'Lists' } + }, + event: { + screen: EventMapScreen + }, + person: { + screen: PersonScreen + }, + camera: { + screen: CameraScreen, + + }, }) \ No newline at end of file diff --git a/MobileApp/src/components/people/people-list.js b/MobileApp/src/components/people/people-list.js index e90c07a..08da6e5 100644 --- a/MobileApp/src/components/people/people-list.js +++ b/MobileApp/src/components/people/people-list.js @@ -7,7 +7,7 @@ import PersonCard from './person-card' @observer class PeopleList extends Component { static defaultProps = { - onPersonPress: () => {} + onPersonPress: () => {} }; componentDidMount() { @@ -22,7 +22,8 @@ class PeopleList extends Component { return {section.title}} - renderItem = {({item}) => + renderItem = {({item}) => + onPersonPress(item.person)}> } /> diff --git a/MobileApp/src/components/people/person-card.js b/MobileApp/src/components/people/person-card.js index 1c6bac7..1103815 100644 --- a/MobileApp/src/components/people/person-card.js +++ b/MobileApp/src/components/people/person-card.js @@ -1,43 +1,83 @@ -import React, { Component } from 'react' -import {View, Text, Image, StyleSheet} from 'react-native' +import React, {Component} from 'react' +import {View, Text, Image, StyleSheet, ActivityIndicator} from 'react-native' import Card from '../common/card' +import firebase from 'firebase/app' +import {config} from '../../config' +import {observable, action} from 'mobx' +import { observer, inject } from 'mobx-react' +@inject('people') +@observer class PersonCard extends Component { - static propTypes = { - - }; - - render() { - const { email, firstName, lastName } = this.props.person - return ( - - - - {email} - {firstName} {lastName} - - - ) + static propTypes = {}; + + @observable loading = false + @observable loaded = false + @observable avatarURL = null + + async componentDidMount() { + this.setLoading(true) + await this.getAvatar(this.props.person) + } + + @action setAvatar = (url) => this.avatarURL = url + @action setLoading = loading => this.loading = loading + @action setLoaded = loaded => this.loaded = loaded + + render() { + const {email, firstName, lastName} = this.props.person + const avatar = + const loader = + return ( + + {this.loading || !this.loaded || !this.avatarURL ? loader : avatar} + + {email} + {firstName} {lastName} + + + ) + } + async getAvatar({uid, avatar}) { + + if (!avatar) { + await this.setAvatar('https://picsum.photos/200/100/?random') + } else { + await firebase.storage() + .refFromURL(`gs://${config.storageBucket}/avatars/${uid}/${avatar}`) + .getDownloadURL() + .then(url => this.setAvatar(url)) } + + this.setLoading(false) + this.setLoaded(true) + + } } const styles = StyleSheet.create({ - container: { - flexDirection: 'row' - }, - avatar: { - width: 200, - height: 100, - margin: 5 - }, - content: { - flexDirection: 'column', - justifyContent: 'space-around', - alignItems: 'center' - }, - email: { - fontWeight: 'bold' - } + container: { + flexDirection: 'row', + flex: 1, + justifyContent: 'space-around', + }, + avatar: { + width: 200, + height: 100, + margin: 5, + justifyContent: 'center', + + }, + content: { + flexDirection: 'column', + justifyContent: 'space-around', + alignItems: 'center', + + }, + email: { + fontWeight: 'bold' + } }) + export default PersonCard \ No newline at end of file diff --git a/MobileApp/src/components/people/person.js b/MobileApp/src/components/people/person.js new file mode 100644 index 0000000..6034e1d --- /dev/null +++ b/MobileApp/src/components/people/person.js @@ -0,0 +1,77 @@ +import React, { Component } from 'react' +import {View, Text, Image, StyleSheet, Button, TouchableOpacity} from 'react-native' +import ConfirmModal from '../common/confirm-modal' +import {web} from 'react-native-communications' +import {observer, inject} from 'mobx-react' + + +class Person extends Component { + static propTypes = { + + }; + + state = { + confirmModal: false + } + + render() { + const {makePhoto, person} = this.props + // console.log(this.props.navigation) + return ( + + {person.email} +