Personal Dashboard

Login.jsx 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import React from 'react'
  2. import { connect } from 'react-redux'
  3. import axios from 'axios'
  4. import firebase from 'firebase'
  5. import { Card } from '../../Shared/Components'
  6. import { InputGroup, Tooltip, Button, Classes, Intent } from '@blueprintjs/core'
  7. import { LOGIN } from '../../Store/Actions'
  8. import './Login.scss'
  9. import { Map } from '../../utils'
  10. const PasswordToggler = ({show, toggle}) =>
  11. <Tooltip content={`${show ? "Hide" : "Show"} Password`}>
  12. <Button className={Classes.MINIMAL} intent={Intent.WARNING}
  13. iconName={show ? "eye-off" : "eye-open"} onClick={toggle} />
  14. </Tooltip>
  15. const Logo = () => <h1 className="logo"><img src="lighthouse.png"/><span>Lighthouse</span></h1>
  16. const LoginTemplate = ({ togglePassword, showPassword, connect }) =>
  17. <div className="flex-frame center">
  18. <Logo />
  19. <Card>
  20. <form onSubmit={e => connect('test', e)}>
  21. <InputGroup name="email" placeholder="Email" leftIconName="user"/>
  22. <InputGroup name="password" placeholder="Enter your password..." leftIconName="lock"
  23. type={showPassword ? "text" : "password"}
  24. rightElement={<PasswordToggler show={showPassword} toggle={togglePassword} />}
  25. />
  26. <Button iconName="log-in" type="submit">Login</Button>
  27. </form>
  28. </Card>
  29. </div>
  30. class LoginContainer extends React.Component {
  31. state = { showPassword: false }
  32. togglePassword = () => this.setState({ showPassword: !this.state.showPassword })
  33. connect = (test, e) => {
  34. e.preventDefault()
  35. let data = (new Map(new FormData(e.target))).toObj()
  36. firebase.auth().signInWithEmailAndPassword(data.email, data.password)
  37. .catch(e => { console.error(`Firebase auth error: [${e.code}] ${e.message}`) })
  38. }
  39. render() {
  40. return <LoginTemplate
  41. showPassword={this.state.showPassword}
  42. togglePassword={this.togglePassword}
  43. connect={this.connect}
  44. />
  45. }
  46. }
  47. const Login = connect(null, dispatch => ({ login: user => dispatch(LOGIN(user)) }))(LoginContainer)
  48. export default Login