diff --git a/src/modules/events/EventDetail.js b/src/modules/events/EventDetail.js index 4bcc5ed..806c280 100644 --- a/src/modules/events/EventDetail.js +++ b/src/modules/events/EventDetail.js @@ -1,11 +1,14 @@ import React, { Component } from 'react'; -import {Linking, StyleSheet, ScrollView, Text, Platform, View, Image, TouchableHighlight} from "react-native"; +import {Linking, StyleSheet, ScrollView, Text, Platform, View, Image, TouchableHighlight, + TouchableOpacity} from "react-native"; import HTMLView from 'react-native-htmlview'; import moment from "moment"; import {Button, Icon, Text as NBText} from "native-base"; moment.locale('nb'); +const CHATEAU_NEUF_ADDRESS = 'Chateau Neuf, Slemdalsveien 15, 0369 Oslo'; + export default class EventDetail extends Component { _formatTime(time) { @@ -31,94 +34,143 @@ export default class EventDetail extends Component { return moment(time).fromNow(); } - _onUrlPress(link) { - Linking.openURL(link); - } - - price() { - let item = this.props.item; - let reg_kr = null; - let mem_kr = null; + _formatTicketText() { + /* FIXME: This should be handled by API */ + const {item} = this.props; + let reg_kr = ''; + let mem_kr = ''; if (item.price_regular === '0') { item.price_regular = 'Gratis' } if (item.price_member === '0') { item.price_member = 'Gratis' } - if (item.price_regular != 'Gratis') { + if (item.price_regular !== 'Gratis') { reg_kr = " kr" } - if (item.price_member != 'Gratis') { + if (item.price_member !== 'Gratis') { mem_kr = " kr" } + + let text = ''; if (item.price_regular && item.price_member) { - return Pris: {item.price_regular}{reg_kr} - Medlemmer: {item.price_member}{mem_kr}; + text = `Pris: ${item.price_regular}${reg_kr} / Medlemmer: ${item.price_member}${mem_kr}`; } - if (item.price_regular) { - return Pris: {item.price_regular}{reg_kr} + else if (item.price_regular) { + text = `Pris: ${item.price_regular}${reg_kr}`; } - if (item.price_member) { - return Pris (Medlemmer): {item.price_member}{mem_kr} + else if (item.price_member) { + text = `Pris (Medlemmer): ${item.price_member}${mem_kr}`; + } else { + return ''; + } + return text; + } + + onUrlPress(link) { + Linking.openURL(link); + } + onLocationPress() { + Linking.openURL(`https://www.google.com/maps/dir/?api=1&destination=${CHATEAU_NEUF_ADDRESS}`); + } + + showPriceAndTicket() { + const {item} = this.props; + const text = this._formatTicketText(); + + if(text === '') { + return; + } + + if(item.ticket_url) { + return ( + this.onUrlPress(item.ticket_url)}> + + + {text} + Kjøp billett + + ); + } + + return ( + + + + {text} + Billett i døra + + ) + } + + showFacebutton() { + const {item} = this.props; + if (!item.facebook_url) { return;} + + return ( + this.onUrlPress(item.facebook_url)} style={styles.metaInner}> + + + På Facebook + + + ); + } + + showImage() { + const {item} = this.props; + + if (item.thumbnail.medium_large) { + return ; + } + } + + showYear() { + const {item} = this.props; + + if(moment().year() !== moment(item.start_time).year()) { + return {this._formatYear(item.start_time)} } } render() { - const item = this.props.item; - let image = null; - if (item.thumbnail.medium_large) { - image = ; - } - - let faceButton = null; - if (item.facebook_url) { - faceButton = this._onUrlPress(item.facebook_url)}> - - På Facebook - - ; - } - let ticket = null; - if (item.ticket_url) { - ticket = - - ; - } - - let year = null; - if(moment().year() !== moment(item.start_time).year()) { - year = {this._formatYear(item.start_time)} - } + const {item} = this.props; return ( - {image} + {this.showImage()} - {item.title.decoded} - + {/* Date and title */} + {this._formatDay(item.start_time)} {this._formatMonth(item.start_time)} - {year} + {this.showYear()} - - - - {item.venue} - - - - {this._formatLocalDay(item.start_time)} kl. {this._formatTime(item.start_time)} - {this._formatTime(item.end_time)}, - {this._formatRelative(item.start_time)} - - {this.price()} + + {item.title.decoded} - - {faceButton} - - {ticket} + {/* Time and calendar */} + + + + {this._formatLocalDay(item.start_time)} kl. {this._formatTime(item.start_time)} - {this._formatTime(item.end_time)} + {this._formatRelative(item.start_time)} + + + {/* Location and maps */} + + + + {item.venue} + {CHATEAU_NEUF_ADDRESS} + + + {this.showPriceAndTicket()} + {this.showFacebutton()} @@ -127,7 +179,16 @@ export default class EventDetail extends Component { } const styles = StyleSheet.create({ - header: { + dateAndTitle: { + flexDirection: 'row', + marginBottom: 8 + }, + titleContainer: { + paddingLeft: 10, + justifyContent: 'center', + flex: 5, + }, + title: { fontSize: 20, fontWeight: 'bold', color: '#000', @@ -158,31 +219,30 @@ const styles = StyleSheet.create({ fontSize: 14, color: '#666' }, + metaInner: { + flexDirection: 'row', + marginVertical: 8, + }, metaIcon: { width: 16, paddingTop: 3, - }, - metaContainer: { - flex: 3, - paddingLeft: 10, - }, - metaInner: { - flexDirection: 'row' + marginHorizontal: 8, + marginVertical: 8, }, metaText: { color: '#000', }, - timeRelative: { + metaSubtitle: { color: '#666', }, content: { borderTopWidth: 0.5, borderColor: '#999', - marginTop: 16, + marginTop: 8, paddingTop: 10, }, dateContainer: { - width: 62, + flex: 1, justifyContent: 'center', }, dateCard: { @@ -222,26 +282,9 @@ const styles = StyleSheet.create({ paddingLeft: 20, paddingTop: 3, }, - buttonContainer: { - flex: 1, - justifyContent: 'center', - }, - faceText: { - textAlign: 'center', - fontSize: 14, - marginTop: 10, - }, - faceIcon: { - fontSize: 25, - color: '#3B5998', - alignSelf: 'center', - }, - ticketButton: { - paddingTop: 20, - }, icons: { - fontSize: 14, - } + fontSize: 16, + }, });