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,