import React, { Component } from "react"; import PropTypes from "prop-types"; import { withRouter } from "react-router"; import { Box, Button, TextInput, Text, Link, toastr, Checkbox, HelpButton, PasswordInput, FieldContainer } from "asc-web-components"; import PageLayout from "../../components/PageLayout"; import { connect } from "react-redux"; import styled from "styled-components"; import { withTranslation } from "react-i18next"; import i18n from "./i18n"; import ForgotPasswordModalDialog from "./sub-components/forgot-password-modal-dialog"; import { login, setIsLoaded } from "../../store/auth/actions"; import { sendInstructionsToChangePassword } from "../../api/people"; import Register from "./sub-components/register-container"; const LoginContainer = styled.div` display: flex; flex-direction: column; align-items: center; margin: 120px auto 0 auto; max-width: 960px; @media (max-width: 768px) { padding: 0 16px; max-width: 475px; } @media (max-width: 375px) { margin: 72px auto 0 auto; max-width: 311px; } .greeting-title { width: 100%; @media (max-width: 768px) { text-align: left; } @media (max-width: 375px) { font-size: 23px; } } .auth-form-container { margin: 32px 22.5% 0 22.5%; width: 32.4%; @media (max-width: 768px) { margin: 32px 0 0 0; width: 100% } @media (max-width: 375px) { margin: 32px 0 0 0; width: 100% } .login-forgot-wrapper { height: 36px; padding: 14px 0; .login-checkbox-wrapper { position: absolute; display: inline-flex; .login-checkbox { float: left; span { font-size: 12px; } } .login-tooltip { display: inline-flex; @media(min-width: 1025px) { margin-left: 8px; margin-top: 4px; } @media(max-width: 1024px) { padding: 4px 8px 8px 8px; } } } .login-link { float: right; line-height: 16px; } } .login-button { margin-bottom: 16px; } .login-button-dialog { margin-right: 8px; } .login-bottom-border { width: 100%; height: 1px; background: #ECEEF1; } .login-bottom-text { margin: 0 8px; } } `; class Form extends Component { constructor(props) { super(props); this.state = { identifierValid: true, identifier: "", isLoading: false, isDisabled: false, passwordValid: true, password: "", isChecked: false, openDialog: false, email: "", emailError: false, errorText: "", socialButtons: [] }; } onChangeLogin = event => { this.setState({ identifier: event.target.value }); !this.state.identifierValid && this.setState({ identifierValid: true }); this.state.errorText && this.setState({ errorText: "" }); }; onChangePassword = event => { this.setState({ password: event.target.value }); !this.state.passwordValid && this.setState({ passwordValid: true }); this.state.errorText && this.setState({ errorText: "" }); }; onChangeEmail = event => { this.setState({ email: event.target.value, emailError: false }); }; onChangeCheckbox = () => this.setState({ isChecked: !this.state.isChecked }); onClick = () => { this.setState({ openDialog: true, isDisabled: true, email: this.state.identifier }); }; onKeyPress = event => { if (event.key === "Enter") { !this.state.isDisabled ? this.onSubmit() : this.onSendPasswordInstructions(); } }; onSendPasswordInstructions = () => { if (!this.state.email.trim()) { this.setState({ emailError: true }); } else { this.setState({ isLoading: true }); sendInstructionsToChangePassword(this.state.email) .then( res => toastr.success(res), message => toastr.error(message) ) .finally(this.onDialogClose()); } }; onDialogClose = () => { this.setState({ openDialog: false, isDisabled: false, isLoading: false, email: "", emailError: false }); }; onSubmit = () => { const { errorText, identifier, password } = this.state; const { login, setIsLoaded, history } = this.props; errorText && this.setState({ errorText: "" }); let hasError = false; const userName = identifier.trim(); if (!userName) { hasError = true; this.setState({ identifierValid: !hasError }); } const pass = password.trim(); if (!pass) { hasError = true; this.setState({ passwordValid: !hasError }); } if (hasError) return false; this.setState({ isLoading: true }); login(userName, pass) .then(() => { setIsLoaded(true); history.push("/"); }) .catch(error => { this.setState({ errorText: error, isLoading: false }); }); }; componentDidMount() { const { match, t } = this.props; const { error, confirmedEmail } = match.params; document.title = `${t("Authorization")} – ${t("OrganizationName")}`; error && this.setState({ errorText: error }); confirmedEmail && this.setState({ identifier: confirmedEmail }); window.addEventListener("keyup", this.onKeyPress); } componentWillUnmount() { window.removeEventListener("keyup", this.onKeyPress); } settings = { minLength: 6, upperCase: false, digits: false, specSymbols: false } render() { const { greetingTitle, match, t } = this.props; const { identifierValid, identifier, isLoading, passwordValid, password, isChecked, openDialog, email, emailError, errorText, socialButtons } = this.state; const { params } = match; //console.log("Login render"); return ( <> {greetingTitle}
{t("Remember")}} /> {t("RememberHelper")} } />
{t("ForgotPassword")}
{openDialog && }