From 101a4143fde0b3753fe0070bc4382f8274d2fdd0 Mon Sep 17 00:00:00 2001 From: Nikolai R Kristiansen Date: Mon, 6 Nov 2017 00:36:32 +0100 Subject: [PATCH] refactor: Extract card style to theme file --- src/modules/about/About.js | 20 +------ src/modules/events/EventDetail.js | 43 +++----------- src/modules/events/EventList.js | 9 ++- src/modules/login/Login.js | 20 +------ src/modules/membership/Membership.js | 20 +------ src/modules/membership/Proof.js | 87 +++++++++++++++------------- src/modules/register/UserRegister.js | 20 +------ src/theme.js | 21 +++++++ 8 files changed, 87 insertions(+), 153 deletions(-) create mode 100644 src/theme.js diff --git a/src/modules/about/About.js b/src/modules/about/About.js index 2688bef..8301c7d 100644 --- a/src/modules/about/About.js +++ b/src/modules/about/About.js @@ -3,6 +3,7 @@ import {Text, ScrollView, View, Platform, StyleSheet, Image, Linking, TouchableO // import HTMLView from 'react-native-htmlview'; import {Button, Text as NBText, Icon} from 'native-base'; +import theme from "../../theme"; const CHATEAU_NEUF_ADDRESS = 'Det Norske Studentersamfund, Slemdalsveien 15, 0369 Oslo'; @@ -125,24 +126,7 @@ const styles = StyleSheet.create({ paddingBottom: 10, lineHeight: 25, }, - card: { - borderColor: '#e1e8ee', - borderWidth: 1, - ...Platform.select({ - ios: { - shadowColor: 'rgba(0,0,0, .2)', - shadowOffset: {height: 0, width: 0}, - shadowOpacity: 1, - shadowRadius: 1, - }, - android: { - elevation: 1, - }, - }), - padding: 8, - margin: 8, - backgroundColor: '#fff', - }, + card: theme.card, featuredImage: { height: 230, width: null, diff --git a/src/modules/events/EventDetail.js b/src/modules/events/EventDetail.js index 5c37622..0d69ed1 100644 --- a/src/modules/events/EventDetail.js +++ b/src/modules/events/EventDetail.js @@ -1,9 +1,9 @@ import React, { Component } from 'react'; -import {Linking, StyleSheet, ScrollView, Text, Platform, View, Image, TouchableHighlight, - TouchableOpacity} from "react-native"; +import {Linking, StyleSheet, ScrollView, Text, Platform, View, Image, TouchableOpacity} from "react-native"; import HTMLView from 'react-native-htmlview'; import moment from "moment"; -import {Button, Icon, Text as NBText} from "native-base"; +import {Icon} from "native-base"; +import theme from "../../theme"; moment.locale('nb'); @@ -172,7 +172,7 @@ export default class EventDetail extends Component { {/* Date and title */} - + {this._formatDay(item.start_time)} {this._formatMonth(item.start_time)} {this.showYear()} @@ -222,24 +222,7 @@ const styles = StyleSheet.create({ fontWeight: 'bold', color: '#000', }, - card: { - borderColor: '#e1e8ee', - borderWidth: 1, - ...Platform.select({ - ios: { - shadowColor: 'rgba(0,0,0, .2)', - shadowOffset: {height: 0, width: 0}, - shadowOpacity: 1, - shadowRadius: 1, - }, - android: { - elevation: 1, - }, - }), - padding: 8, - margin: 8, - backgroundColor: '#fff', - }, + card: theme.card, image: { height: 260, width: null @@ -275,20 +258,8 @@ const styles = StyleSheet.create({ justifyContent: 'center', }, dateCard: { - borderColor: '#e1e8ee', - borderWidth: 1, - ...Platform.select({ - ios: { - shadowColor: 'rgba(0,0,0, .2)', - shadowOffset: {height: 0, width: 0}, - shadowOpacity: 2, - shadowRadius: 2, - }, - android: { - elevation: 1, - }, - }), - backgroundColor: '#fff', + margin: 0, + padding: 0, paddingBottom: 6, width: 62, }, diff --git a/src/modules/events/EventList.js b/src/modules/events/EventList.js index 3b383fb..4d89d2b 100644 --- a/src/modules/events/EventList.js +++ b/src/modules/events/EventList.js @@ -3,6 +3,7 @@ import {Card, ListItem, CardItem, Body, Text as Text, Left, Right, Icon, Button, import React, { Component } from 'react'; import moment from "moment"; import 'moment/locale/nb'; +import theme from "../../theme"; moment.locale('nb'); @@ -20,7 +21,7 @@ export default class EventList extends Component { ); _renderSectionHeader = ({section}) => { - return ( + return ( {section.title} @@ -71,7 +72,7 @@ export default class EventList extends Component { onEndReachedThreshould={10} initialNumToRender={10} ListFooterComponent={this._renderFooter} - style={styles.list} + style={[styles.list, {paddingRight: 0}]} />); } } @@ -96,7 +97,5 @@ const styles = StyleSheet.create({ textAlign: 'center', paddingBottom: 8 }, - list: { - backgroundColor: 'white' - } + list: theme.card, }); \ No newline at end of file diff --git a/src/modules/login/Login.js b/src/modules/login/Login.js index 49ff23f..90c2ed2 100644 --- a/src/modules/login/Login.js +++ b/src/modules/login/Login.js @@ -3,6 +3,7 @@ import {Linking, StyleSheet, View, Platform} from 'react-native'; import {Container, Header, Content, Form, Item, Input, Label, Spinner, Button, Text, Icon} from 'native-base'; import Config from 'react-native-config'; +import theme from "../../theme"; export default class Login extends Component { constructor(props) { @@ -157,22 +158,5 @@ const styles = StyleSheet.create({ textAlign: 'center', color: 'red', }, - card: { - borderColor: '#e1e8ee', - borderWidth: 1, - ...Platform.select({ - ios: { - shadowColor: 'rgba(0,0,0, .2)', - shadowOffset: {height: 0, width: 0}, - shadowOpacity: 1, - shadowRadius: 1, - }, - android: { - elevation: 1, - }, - }), - padding: 8, - margin: 8, - backgroundColor: '#fff', - }, + card: theme.card, }); \ No newline at end of file diff --git a/src/modules/membership/Membership.js b/src/modules/membership/Membership.js index 7925a69..3454958 100644 --- a/src/modules/membership/Membership.js +++ b/src/modules/membership/Membership.js @@ -1,6 +1,7 @@ import React, {Component} from 'react'; import {ScrollView, Text, View, Linking, StyleSheet, Platform} from "react-native"; import {Button, Text as NBText} from "native-base"; +import theme from "../../theme"; export default class Membership extends Component { render() { return ( @@ -31,24 +32,7 @@ export default class Membership extends Component { const styles = StyleSheet.create({ - card: { - borderColor: '#e1e8ee', - borderWidth: 1, - ...Platform.select({ - ios: { - shadowColor: 'rgba(0,0,0, .2)', - shadowOffset: {height: 0, width: 0}, - shadowOpacity: 1, - shadowRadius: 1, - }, - android: { - elevation: 1, - }, - }), - padding: 8, - margin: 8, - backgroundColor: '#fff', - }, + card: theme.card, paragraph: { textAlign: 'center', fontSize: 16, diff --git a/src/modules/membership/Proof.js b/src/modules/membership/Proof.js index 2950ac2..16d2f3b 100644 --- a/src/modules/membership/Proof.js +++ b/src/modules/membership/Proof.js @@ -1,7 +1,8 @@ import React, {Component} from 'react'; -import {Image, StyleSheet, TouchableOpacity, View} from "react-native"; -import {Button, Body, Card, CardItem, Container, Content, Text} from 'native-base'; +import {Image, Platform, ScrollView, StyleSheet, Text, TouchableOpacity, View} from "react-native"; +import {Button, Text as NBText} from 'native-base'; import Confetti from 'react-native-confetti'; +import theme from "../../theme"; export default class Proof extends Component { CONFETTI_TIMEOUT = 15000; @@ -48,57 +49,52 @@ export default class Proof extends Component { } return ( - - - Gyldig til: - {validTo} - - + + Gyldig til: + {validTo} + ) } membershipStatus() { if (!this.props.user.is_member) { if ( !this.props.user.last_membership ) { - return ( - - - Ikke medlem - - ) + return; } - return Utløpt + return ( + + Utløpt + ) } - let statusText = 'Medlem'; - if (this.props.user.is_volunteer) { - statusText = 'Aktiv'; - } + const statusText = this.props.user.is_volunteer ? 'Aktiv' : 'Medlem'; return ( - + {statusText} - ); + ); } purchaseButton() { if (this.props.user.is_member) { return; } - return - + return ( + - - + + Medlemskapet er gyldig i ett år + + ) } confetti() { @@ -123,21 +119,21 @@ export default class Proof extends Component { render() { return ( - + {this.confetti()} - - - {this.membershipName()} - {this.logo()} - {this.membershipStatus()} - {this.purchaseButton()} - {this.membershipValidTo()} - + + {this.membershipName()} + {this.logo()} + {this.membershipStatus()} + {this.purchaseButton()} + {this.membershipValidTo()} + + - - + + ) }; @@ -146,13 +142,14 @@ export default class Proof extends Component { if(name === ' ') { name = this.props.user.email; } - return + return {name} - + } } const styles = StyleSheet.create({ + card: theme.card, nameText: { flex: 1, textAlign: 'center', @@ -203,4 +200,14 @@ const styles = StyleSheet.create({ alignSelf: 'center', marginVertical: 20, }, + purchaseText: { + alignItems: 'center' + }, + purchaseTextInner: { + fontStyle: 'italic', + fontSize: 16, + textAlign: 'center', + paddingTop: 10, + paddingBottom: 8 + } }); \ No newline at end of file diff --git a/src/modules/register/UserRegister.js b/src/modules/register/UserRegister.js index c7a8e3e..315b1e6 100644 --- a/src/modules/register/UserRegister.js +++ b/src/modules/register/UserRegister.js @@ -3,6 +3,7 @@ import {Container, Header, Content, Form, Item, Input, Label, Spinner, Button, T import {Platform, StyleSheet, View} from "react-native"; import EmailValidator from 'email-validator'; import platform from "native-base/src/theme/variables/platform"; +import theme from "../../theme"; export default class UserRegister extends Component { constructor(props) { @@ -250,24 +251,7 @@ const styles = StyleSheet.create({ color: platform.btnDangerBg, fontSize: 14, }, - card: { - borderColor: '#e1e8ee', - borderWidth: 1, - ...Platform.select({ - ios: { - shadowColor: 'rgba(0,0,0, .2)', - shadowOffset: {height: 0, width: 0}, - shadowOpacity: 1, - shadowRadius: 1, - }, - android: { - elevation: 1, - }, - }), - padding: 8, - margin: 8, - backgroundColor: '#fff', - }, + card: theme.card, errorText: { paddingTop: 2, paddingBottom: 12, diff --git a/src/theme.js b/src/theme.js new file mode 100644 index 0000000..fdde701 --- /dev/null +++ b/src/theme.js @@ -0,0 +1,21 @@ +import { Platform } from "react-native"; + +const card = { + borderColor: '#e1e8ee', + borderWidth: 1, + ...Platform.select({ + ios: { + shadowColor: 'rgba(0,0,0, .2)', + shadowOffset: {height: 0, width: 0}, + shadowOpacity: 1, + shadowRadius: 1, + }, + android: { + elevation: 1, + }, + }), + padding: 8, + margin: 8, + backgroundColor: '#fff', +}; +export default {card}; \ No newline at end of file