UNPKG

react-modal-login

Version:

A highly customizable react login modal with social buttons

285 lines (254 loc) 6.92 kB
import React, { useState } from "react"; import ReactModalLogin from "../react-modal-login"; import { facebookConfig, googleConfig } from "./social-config"; const Sample = (props) => { const [state, setState] = useState({ showModal: false, loggedIn: null, loading: false, error: null, initialTab: null, recoverPasswordSuccess: null, }); const onLogin = async (e, a, c) => { console.log(e, a, c); console.log("onLogin()"); console.log("email: " + document.querySelector("#email").value); console.log("password: " + document.querySelector("#password").value); const email = document.querySelector("#email").value; const password = document.querySelector("#password").value; if (!email || !password) { setState({ error: true, }); } else { onLoginSuccess("form"); } }; const onRegister = () => { console.log("onRegister()"); console.log("login: " + document.querySelector("#login").value); console.log("email: " + document.querySelector("#email").value); console.log("password: " + document.querySelector("#password").value); const login = document.querySelector("#login").value; const email = document.querySelector("#email").value; const password = document.querySelector("#password").value; if (!login || !email || !password) { setState({ error: true, }); } else { onLoginSuccess("form"); } }; const onRecoverPassword = () => { console.log("onRecoverPassword()"); console.log("email: " + document.querySelector("#email").value); const email = document.querySelector("#email").value; if (!email) { setState({ ...state, error: true, recoverPasswordSuccess: false, }); } else { setState({ ...state, error: null, recoverPasswordSuccess: true, }); } }; const openModal = (initialTab) => { console.log("openModal()"); setState({ ...state, initialTab: initialTab, showModal: true, }); }; const onLoginSuccess = (method, response) => { console.log("onLoginSuccess()"); setState({ ...state, showModal: false, error: null, loggedIn: method, loading: false, }); }; const onLoginFail = (method, response) => { console.log("onLoginFail()"); setState({ ...state, loading: false, error: response, }); }; const startLoading = () => { console.log("startLoading()"); setState({ ...state, loading: true, }); }; const finishLoading = () => { console.log("finishLoading()"); setState({ ...state, loading: false, }); }; const afterTabsChange = () => { console.log("afterTabsChange()"); setState({ ...state, error: null, recoverPasswordSuccess: false, }); }; const closeModal = () => { console.log('closeModal()'); setState({ ...state, showModal: false, error: null, loading: false, }); }; const loggedIn = state.loggedIn ? ( <div> <p>You are signed in with: {state.loggedIn}</p> </div> ) : ( <div> <p>You are signed out</p> </div> ); const isLoading = state.loading; return ( <div> <button className="RML-btn" onClick={() => openModal("login")}> Login </button> <button className="RML-btn" onClick={() => openModal("register")}> Register </button> <ReactModalLogin visible={state.showModal} onCloseModal={closeModal} loading={isLoading} initialTab={state.initialTab} error={state.error} tabs={{ afterChange: afterTabsChange, }} startLoading={startLoading} finishLoading={finishLoading} form={{ onLogin: onLogin, onRegister: onRegister, onRecoverPassword: onRecoverPassword, recoverPasswordSuccessLabel: state.recoverPasswordSuccess ? { label: "New password has been sent to your mailbox!", } : null, recoverPasswordAnchor: { label: "Forgot your password?", }, loginBtn: { label: "Sign in", }, registerBtn: { label: "Sign up", }, recoverPasswordBtn: { label: "Send new password", }, loginInputs: [ { containerClass: "RML-form-group", label: "Email", type: "email", inputClass: "RML-form-control", id: "email", name: "email", placeholder: "Email", }, { containerClass: "RML-form-group", label: "Password", type: "password", inputClass: "RML-form-control", id: "password", name: "password", placeholder: "Password", }, ], registerInputs: [ { containerClass: "RML-form-group", label: "Nickname", type: "text", inputClass: "RML-form-control", id: "login", name: "login", placeholder: "Nickname", }, { containerClass: "RML-form-group", label: "Email", type: "email", inputClass: "RML-form-control", id: "email", name: "email", placeholder: "Email", }, { containerClass: "RML-form-group", label: "Password", type: "password", inputClass: "RML-form-control", id: "password", name: "password", placeholder: "Password", }, ], recoverPasswordInputs: [ { containerClass: "RML-form-group", label: "Email", type: "email", inputClass: "RML-form-control", id: "email", name: "email", placeholder: "Email", }, ], }} separator={{ label: "or", }} providers={{ facebook: { config: facebookConfig, onLoginSuccess: onLoginSuccess, onLoginFail: onLoginFail, inactive: isLoading, label: "Continue with Facebook", }, google: { config: googleConfig, onLoginSuccess: onLoginSuccess, onLoginFail: onLoginFail, inactive: isLoading, label: "Continue with Google", }, }} /> {loggedIn} </div> ); }; export default Sample;