diff --git a/src/modules/membership/Proof.js b/src/modules/membership/Proof.js index e42d4e3..fba071b 100644 --- a/src/modules/membership/Proof.js +++ b/src/modules/membership/Proof.js @@ -1,192 +1,181 @@ -import React, { Component } from 'react'; +import React, { useEffect, useState, useRef } from 'react'; import { Image, ScrollView, StyleSheet, Text, TouchableOpacity, View } from 'react-native'; import { Button, Text as NBText, Spinner } from 'native-base'; import Confetti from 'react-native-confetti'; import theme from '../../theme'; -export default class Proof extends Component { - CONFETTI_TIMEOUT = 15000; - - constructor(props) { - super(props); - this.state = { - stopConfetti: false, - }; +const MembershipValidTo = ({ user }) => { + if (!user.last_membership) { + return null; } - componentDidUpdate() { - if (this._confettiView && this.state.stopConfetti) { - this._confettiView.stopConfetti(); - this.setState({ stopConfetti: false }); + let validTo = user.last_membership.end_date; + if (user.last_membership.membership_type === 'lifelong') { + validTo = 'Livsvarig'; + } + + return ( + + Gyldig til: + {validTo} + + ); +}; + +const MembershipStatus = ({ user, onMembershipPress }) => { + if (!user.is_member) { + if (!user.last_membership) { + return null; } + + return ( + + Utløpt + + ); } - componentWillUnmount() { - if (this._confettiView) { - this._confettiView.stopConfetti(); - } + const statusText = user.is_volunteer ? '❤️ AKTIV ❤️ ' : 'MEDLEM'; + + return ( + + + {statusText} + + + ); +}; + +const PurchaseButton = ({ user, isChargingMembership, isLoadingMembershipType, onChargePress, membershipPrice }) => { + if (user.is_member) { + return null; } - onMembershipPress = () => { - this.setState({ showConfetti: true }, () => { - if (this._confettiView) { - this._confettiView.startConfetti(); - setTimeout( - function() { - this.setState({ stopConfetti: true }); - }.bind(this), - this.CONFETTI_TIMEOUT - ); + return ( + + {isChargingMembership && } + + + Medlemskapet er gyldig i ett år + + + ); +}; + +const UserConfetti = ({ user, confettiRef }) => { + if (!user.is_member) { + return null; + } + + // Confetti!!!! + return ; +}; +const Logo = ({ user }) => { + if (!user.is_member) { + return null; + } + + return ( + + + + ); +}; + +const ChargeError = ({ chargeError }) => { + if (!chargeError) { + return null; + } + + return ( + + {chargeError} + + ); +}; + +const MembershipName = ({ user }) => { + let name = `${user.first_name} ${user.last_name}`; + if (name === ' ') { + name = user.email; + } + return ( + + {name} + + ); +}; + +const Proof = ({ + chargeError, + user, + isChargingMembership, + isLoadingMembershipType, + membershipPrice, + onChargePress, + onLogoutPress, +}) => { + const CONFETTI_TIMEOUT = 15000; + + const confettiRef = useRef(null); + + useEffect(() => { + return () => { + if (confettiRef && confettiRef.current) { + confettiRef.current.stopConfetti(); } - }); + }; + }); + + const onMembershipPress = () => { + confettiRef.current.startConfetti(); + setTimeout(() => { + if (confettiRef && confettiRef.current) { + confettiRef.current.stopConfetti(); + } + }, CONFETTI_TIMEOUT); }; - membershipValidTo() { - if (!this.props.user.last_membership) { - return null; - } - - let validTo = this.props.user.last_membership.end_date; - if (this.props.user.last_membership.membership_type === 'lifelong') { - validTo = 'Livsvarig'; - } - - return ( - - Gyldig til: - {validTo} - - ); - } - - membershipStatus() { - if (!this.props.user.is_member) { - if (!this.props.user.last_membership) { - return null; - } - - return ( - - Utløpt + return ( + + + + + + + + + + - ); - } - - const statusText = this.props.user.is_volunteer ? '❤️ AKTIV ❤️ ' : 'MEDLEM'; - - return ( - - - {statusText} - - - ); - } - - purchaseButton() { - if (this.props.user.is_member) { - return null; - } - - return ( - - {this.props.isChargingMembership && } - - - Medlemskapet er gyldig i ett år + + - - ); - } - - confetti() { - if (!this.props.user.is_member) { - return null; - } - - // Confetti!!!! - return ( - { - this._confettiView = node; - }} - confettiCount={Number.MAX_SAFE_INTEGER} - /> - ); - } - - logo() { - if (!this.props.user.is_member) { - return null; - } - - // FIXME: URL to config - return ( - - - - ); - } - - chargeError() { - if (!this.props.chargeError) { - return null; - } - - return ( - - {this.props.chargeError} - - ); - } - - render() { - return ( - - {this.confetti()} - - - {this.membershipName()} - {this.logo()} - {this.membershipStatus()} - {this.chargeError()} - {this.purchaseButton()} - {this.membershipValidTo()} - - - - - - - ); - } - - membershipName() { - let name = `${this.props.user.first_name} ${this.props.user.last_name}`; - if (name === ' ') { - name = this.props.user.email; - } - return ( - - {name} - - ); - } -} + + + ); +}; +export default Proof; const styles = StyleSheet.create({ card: theme.card,