11// @flow
22import * as React from 'react'
33import { Text , ScrollView , StyleSheet } from 'react-native'
4- import type { CleanedEventType , PoweredBy } from './types'
4+ import type { EventType , PoweredBy } from './types'
55import type { TopLevelViewPropsType } from '../types'
66import { ShareButton } from '../components/nav-buttons'
77import openUrl from '../components/open-url'
88import { Card } from '../components/card'
9- import { getLinksFromEvent } from './clean-event'
109import * as c from '../components/colors'
1110import { ButtonCell } from '../components/cells/button'
12- import { addToCalendar , shareEvent } from './calendar-util'
11+ import {
12+ getLinksFromEvent ,
13+ addToCalendar ,
14+ shareEvent ,
15+ getTimes ,
16+ } from './calendar-util'
1317import delay from 'delay'
1418import { ListFooter } from '../components/list'
1519
@@ -36,39 +40,22 @@ const styles = StyleSheet.create({
3640 } ,
3741} )
3842
39- function Title ( { event} : { event : CleanedEventType } ) {
40- return event . title ? < Text style = { styles . name } > { event . title } </ Text > : null
41- }
42-
43- function Description ( { event} : { event : CleanedEventType } ) {
44- return event . rawSummary ? (
45- < Card header = "Description" style = { styles . card } >
46- < Text style = { styles . cardBody } > { event . rawSummary } </ Text >
47- </ Card >
48- ) : null
49- }
50-
51- function When ( { event} : { event : CleanedEventType } ) {
52- return event . times ? (
53- < Card header = "When" style = { styles . card } >
54- < Text style = { styles . cardBody } > { event . times } </ Text >
43+ function MaybeCard ( { header, content} : { header : string , content : string } ) {
44+ return content . trim ( ) ? (
45+ < Card header = { header } style = { styles . card } >
46+ < Text style = { styles . cardBody } > { content } </ Text >
5547 </ Card >
5648 ) : null
5749}
5850
59- function Location ( { event} : { event : CleanedEventType } ) {
60- return event . location ? (
61- < Card header = "Location" style = { styles . card } >
62- < Text style = { styles . cardBody } > { event . location } </ Text >
63- </ Card >
64- ) : null
51+ function Title ( { title} : { title : EventType } ) {
52+ return title ? < Text style = { styles . name } > { title } </ Text > : null
6553}
6654
67- function Links ( { event} : { event : CleanedEventType } ) {
68- const links = getLinksFromEvent ( event )
69- return links . length ? (
55+ function Links ( { urls} : { urls : Array < string > } ) {
56+ return urls . length ? (
7057 < Card header = "Links" style = { styles . card } >
71- { links . map ( url => (
58+ { urls . map ( url => (
7259 < Text key = { url } onPress = { ( ) => openUrl ( url ) } style = { styles . cardBody } >
7360 { url }
7461 </ Text >
@@ -91,7 +78,7 @@ const CalendarButton = ({message, disabled, onPress}) => {
9178
9279type Props = TopLevelViewPropsType & {
9380 navigation : {
94- state : { params : { event : CleanedEventType , poweredBy : ?PoweredBy } } ,
81+ state : { params : { event : EventType , poweredBy : ?PoweredBy } } ,
9582 } ,
9683}
9784
@@ -114,7 +101,7 @@ export class EventDetail extends React.PureComponent<Props, State> {
114101 disabled : false ,
115102 }
116103
117- addEvent = async ( event : CleanedEventType ) => {
104+ addEvent = async ( event : EventType ) => {
118105 const start = Date . now ( )
119106 this . setState ( ( ) => ( { message : 'Adding event to calendar…' } ) )
120107
@@ -146,11 +133,13 @@ export class EventDetail extends React.PureComponent<Props, State> {
146133
147134 return (
148135 < ScrollView >
149- < Title event = { event } />
150- < When event = { event } />
151- < Location event = { event } />
152- < Description event = { event } />
153- < Links event = { event } />
136+ < Title title = { event . title } />
137+ < MaybeCard content = { getTimes ( event ) } header = "When" />
138+ < MaybeCard content = { event . location } header = "Location" />
139+ < MaybeCard content = { event . description } header = "Description" />
140+
141+ < Links urls = { getLinksFromEvent ( event ) } />
142+
154143 < CalendarButton
155144 disabled = { this . state . disabled }
156145 message = { this . state . message }
0 commit comments