import React, {FC, useState} from 'react'; // Routing import {Link, Redirect} from 'react-router-dom'; import Routes from '../constants/routes'; // Redux import {WithFirebaseProps} from 'react-redux-firebase'; import {enhance} from '../store/firebase'; import User, {newUser} from '../models/User'; // Style import GoogleButton from 'react-google-button'; import Alert from '../components/Alert'; import Header from '../components/Header'; // Form import useForm from '../hooks'; import {Dev} from '../models/Dev'; // extends withFirebaseProps type to ad profile info interface IProps extends Dev, WithFirebaseProps { isEmpty: boolean; isLoaded: boolean; } interface InitFormData { name: string; email: string; password: string; password2: string; } /** * Sign up form recieves firebase from withFirebase HOC */ const SignUp: FC = ({firebase, isEmpty, isLoaded, isActive}) => { const [error, setError] = useState(null); // handle form data const initFormData: InitFormData = { name: '', email: '', password: '', password2: '', }; const {formData, handleChange, resetForm} = useForm( initFormData, ); const {name, email, password, password2} = formData; // prevent submitting invalid forms const isDisabled: boolean = name === '' || email === '' || password === ''; /** create user with password */ const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); // pass the info to store into the second argument firebase .createUser({email, password}, newUser(name, email)) .then(() => { firebase.updateProfile(new Dev(), {useSet: true, merge: true}); resetForm(); }) .catch(err => setError(err)); }; const loginWithGoogle = () => firebase .login({provider: 'google', type: 'popup'}) .then(() => { // updateProfile only if user does not already exists in db const email = firebase.auth().currentUser?.email; let exists: boolean = false; firebase .firestore() .collection('users/') .where('email', '==', email) .get() .then(docs => docs.forEach(doc => { exists = doc.data().isActive !== undefined; }), ) .then(() => { if (!exists) firebase.updateProfile(new Dev(), {useSet: true, merge: true}); }); }) .catch(err => setError(err)); // redirect to dashboard if connected if (isLoaded && !isEmpty && isActive) { return ; } return (
{error && }
This site uses Gravatar, so use a Gravatar email.

Already have an account? Sign in

); }; /** subscribe to store and firebase */ export default enhance(SignUp);