From 51629f67e2d7a6d823be611fff6a3a6e998ab461 Mon Sep 17 00:00:00 2001 From: Julia Friesel <julia.friesel@gmail.com> Date: Fri, 17 Aug 2018 16:26:00 +0200 Subject: [PATCH] Place header as component --- components/calendar.js | 16 +++++--- components/cycle-day/cycle-day-overview.js | 32 ++++------------ components/cycle-day/symptoms/index.js | 16 ++------ components/header.js | 43 ++++++++++++++++++++++ components/home.js | 2 + components/settings.js | 2 + components/stats.js | 2 + styles/index.js | 5 ++- 8 files changed, 73 insertions(+), 45 deletions(-) create mode 100644 components/header.js diff --git a/components/calendar.js b/components/calendar.js index 4aa7f135..dbff83c9 100644 --- a/components/calendar.js +++ b/components/calendar.js @@ -1,6 +1,7 @@ import React, { Component } from 'react' import { View } from 'react-native' import { CalendarList } from 'react-native-calendars' +import Header from './header' import * as styles from '../styles' import { getOrCreateCycleDay, bleedingDaysSortedByDate } from '../db' @@ -34,12 +35,15 @@ export default class CalendarView extends Component { render() { return ( - <View style={styles.container}> - <CalendarList - onDayPress={ this.passDateToDayView.bind(this) } - markedDates = { this.state.bleedingDaysInCalFormat } - markingType = {'period'} - /> + <View> + <Header title='Calendar' /> + <View style={styles.container}> + <CalendarList + onDayPress={this.passDateToDayView.bind(this)} + markedDates={this.state.bleedingDaysInCalFormat} + markingType={'period'} + /> + </View> </View> ) } diff --git a/components/cycle-day/cycle-day-overview.js b/components/cycle-day/cycle-day-overview.js index 35e1e3f6..78178fe8 100644 --- a/components/cycle-day/cycle-day-overview.js +++ b/components/cycle-day/cycle-day-overview.js @@ -7,11 +7,10 @@ import { Dimensions } from 'react-native' import { LocalDate } from 'js-joda' +import Header from '../header' import { getOrCreateCycleDay } from '../../db' import cycleModule from '../../lib/cycle' import Icon from 'react-native-vector-icons/FontAwesome' -import MaterialIcon from 'react-native-vector-icons/MaterialCommunityIcons' -import { formatDateForViewHeader } from './labels/format' import styles, { iconStyles } from '../../styles' import { bleeding as bleedingLabels, @@ -24,8 +23,6 @@ import { intensity as intensityLabels } from './labels/labels' -const getCycleDayNumber = cycleModule().getCycleDayNumber - export default class CycleDayOverView extends Component { constructor(props) { super(props) @@ -51,30 +48,15 @@ export default class CycleDayOverView extends Component { render() { const cycleDay = this.state.cycleDay + const getCycleDayNumber = cycleModule().getCycleDayNumber const cycleDayNumber = getCycleDayNumber(cycleDay.date) return ( <ScrollView> - <View style={ styles.cycleDayDateView }> - <MaterialIcon - name='arrow-left-drop-circle' - {...iconStyles.navigationArrow} - onPress={() => this.goToCycleDay('before')} - /> - <View> - <Text style={styles.dateHeader}> - {formatDateForViewHeader(cycleDay.date)} - </Text> - {cycleDayNumber && - <Text style={styles.cycleDayNumber} > - Cycle day {cycleDayNumber} - </Text>} - </View > - <MaterialIcon - name='arrow-right-drop-circle' - {...iconStyles.navigationArrow} - onPress={() => this.goToCycleDay('after')} - /> - </View > + <Header + cycleDayOverView={true} + cycleDayNumber={cycleDayNumber} + date={cycleDay.date} + /> <View style={styles.symptomBoxesView}> <SymptomBox title='Bleeding' diff --git a/components/cycle-day/symptoms/index.js b/components/cycle-day/symptoms/index.js index 3c0f834b..c2c050b6 100644 --- a/components/cycle-day/symptoms/index.js +++ b/components/cycle-day/symptoms/index.js @@ -1,10 +1,6 @@ import React, { Component } from 'react' -import { - View, - Text, - ScrollView -} from 'react-native' -import styles from '../../../styles' +import { ScrollView } from 'react-native' +import Header from '../../header' import actionButtonModule from '../action-buttons' import BleedingEditView from './bleeding' import TemperatureEditView from './temperature' @@ -51,13 +47,7 @@ export default class SymptomView extends Component { render() { return ( <ScrollView> - <View style={ styles.header }> - <View> - <Text style={styles.dateHeader}> - {titles[this.state.visibleComponent]} - </Text> - </View > - </View > + <Header title={titles[this.state.visibleComponent]}/> {React.createElement( symptomViews[this.state.visibleComponent], { diff --git a/components/header.js b/components/header.js new file mode 100644 index 00000000..1fd285eb --- /dev/null +++ b/components/header.js @@ -0,0 +1,43 @@ +import React, { Component } from 'react' +import { + View, + Text +} from 'react-native' +import styles, { iconStyles } from '../styles' +import Icon from 'react-native-vector-icons/MaterialCommunityIcons' +import { formatDateForViewHeader } from '../components/cycle-day/labels/format' + +export default class Header extends Component { + render() { + return ( + this.props.cycleDayOverView ? + <View style={[styles.header, styles.headerCycleDay]}> + <Icon + name='arrow-left-drop-circle' + {...iconStyles.navigationArrow} + onPress={() => this.goToCycleDay('before')} + /> + <View> + <Text style={styles.dateHeader}> + {formatDateForViewHeader(this.props.date)} + </Text> + {this.props.cycleDayNumber && + <Text style={styles.cycleDayNumber} > + Cycle day {this.props.cycleDayNumber} + </Text>} + </View > + <Icon + name='arrow-right-drop-circle' + {...iconStyles.navigationArrow} + onPress={() => this.goToCycleDay('after')} + /> + </View > + : + <View style={styles.header}> + <Text style={styles.dateHeader}> + {this.props.title} + </Text> + </View > + ) + } +} \ No newline at end of file diff --git a/components/home.js b/components/home.js index 5381e3be..9c8d14ff 100644 --- a/components/home.js +++ b/components/home.js @@ -6,6 +6,7 @@ import { ScrollView } from 'react-native' import { LocalDate } from 'js-joda' +import Header from './header' import styles from '../styles/index' import cycleModule from '../lib/cycle' import { getOrCreateCycleDay, bleedingDaysSortedByDate, fillWithDummyData, deleteAll } from '../db' @@ -48,6 +49,7 @@ export default class Home extends Component { render() { return ( <ScrollView> + <Header title='Home'/> <Text style={styles.welcome}>{this.state.welcomeText}</Text> <View style={styles.homeButtons}> <View style={styles.homeButton}> diff --git a/components/settings.js b/components/settings.js index 97907b10..3552872a 100644 --- a/components/settings.js +++ b/components/settings.js @@ -9,6 +9,7 @@ import { import Share from 'react-native-share' import { DocumentPicker, DocumentPickerUtil } from 'react-native-document-picker' import rnfs from 'react-native-fs' +import Header from './header' import styles from '../styles/index' import { settings as labels } from './labels' import getDataAsCsvDataUri from '../lib/import-export/export-to-csv' @@ -18,6 +19,7 @@ export default class Settings extends Component { render() { return ( <ScrollView> + <Header title='Settings'/> <View style={styles.homeButtons}> <View style={styles.homeButton}> <Button diff --git a/components/stats.js b/components/stats.js index 4021fdee..c37a518c 100644 --- a/components/stats.js +++ b/components/stats.js @@ -5,6 +5,7 @@ import { ScrollView } from 'react-native' import { LocalDate, ChronoUnit } from 'js-joda' +import Header from './header' import styles from '../styles/index' import cycleModule from '../lib/cycle' import getCycleInfo from '../lib/cycle-length' @@ -15,6 +16,7 @@ export default class Stats extends Component { const statsText = determineStatsText(allMensesStarts) return ( <ScrollView> + <Header title='Statistics' /> <View> <Text style={styles.stats}>{statsText}</Text> </View> diff --git a/styles/index.js b/styles/index.js index 087d20de..f55ef4e7 100644 --- a/styles/index.js +++ b/styles/index.js @@ -75,11 +75,14 @@ export default StyleSheet.create({ alignItems: 'center', height: 50 }, - cycleDayDateView: { + header: { backgroundColor: primaryColor, paddingVertical: 18, paddingHorizontal: 15, alignItems: 'center', + justifyContent: 'center' + }, + headerCycleDay: { flexDirection: 'row', justifyContent: 'space-between' }, -- GitLab