Skip to content
Snippets Groups Projects
index.tsx 2.73 KiB
Newer Older
Defendi Alberto's avatar
Defendi Alberto committed
import React, { useState } from 'react';
Defendi Alberto's avatar
Defendi Alberto committed
import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';
import TextField from '@material-ui/core/TextField';
import Button from '@material-ui/core/Button';
import FormControlLabel from '@material-ui/core/FormControlLabel';
import Checkbox from '@material-ui/core/Checkbox';

const useStyles = makeStyles((theme: Theme) =>
  createStyles({
    root: {
      '& > *': {
        margin: theme.spacing(0),
      },
    },
    form: {
      width: '100%', // Fix IE 11 issue.
      marginTop: theme.spacing(1),
    },
    submit: {
      margin: theme.spacing(3, 0, 2),
    },
  }),
);

export const Form: React.FC = () => {
Defendi Alberto's avatar
Defendi Alberto committed
  interface formData {
    email: string;
    password: string;
Defendi Alberto's avatar
Defendi Alberto committed
    errors: Array<string>;
Defendi Alberto's avatar
Defendi Alberto committed
  }

  const defaultValues: formData = {
    email: '',
    password: '',
Defendi Alberto's avatar
Defendi Alberto committed
    errors: [],
Defendi Alberto's avatar
Defendi Alberto committed
  };
  const [formValues, setFormValues] = useState<formData>(defaultValues);

Defendi Alberto's avatar
Defendi Alberto committed
  const isEmailValid: any = () => {
    /**
     * The following is the RFC 5322 valid email regex
     * Hinted from question https://stackoverflow.com/questions/201323/how-to-validate-an-email-address-using-a-regular-expression
     * More on http://emailregex.com/
     */
    // eslint-disable-next-line
    const VALID_EMAIL_REGEX = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return VALID_EMAIL_REGEX.test(String(formValues.email).toLowerCase());
  };

Defendi Alberto's avatar
Defendi Alberto committed
  const handleSubmit: any = (event: any) => {
    event.preventDefault();
Defendi Alberto's avatar
Defendi Alberto committed
    const errors: Array<string> = [];
    if (!isEmailValid()) {
      errors.push('email');
      console.log('Email address not valid');
    } else {
      console.log(formValues);
    }
Defendi Alberto's avatar
Defendi Alberto committed
  };

Defendi Alberto's avatar
Defendi Alberto committed
  const classes = useStyles();

  return (
Defendi Alberto's avatar
Defendi Alberto committed
    <form className={classes.form} onSubmit={handleSubmit}>
Defendi Alberto's avatar
Defendi Alberto committed
      <TextField
        variant="outlined"
        margin="normal"
        required
        fullWidth
        id="email"
        label="Email Address"
        name="email"
        autoComplete="email"
        autoFocus
Defendi Alberto's avatar
Defendi Alberto committed
        onChange={(event) =>
          setFormValues({ ...formValues, email: String(event.target.value) })
        }
Defendi Alberto's avatar
Defendi Alberto committed
      />
      <TextField
        variant="outlined"
        margin="normal"
        required
        fullWidth
        name="password"
        label="Password"
        type="password"
        id="password"
        autoComplete="current-password"
Defendi Alberto's avatar
Defendi Alberto committed
        onChange={(event) =>
          setFormValues({ ...formValues, password: String(event.target.value) })
        }
Defendi Alberto's avatar
Defendi Alberto committed
      />
      <Button
        type="submit"
        fullWidth
        variant="contained"
        color="primary"
        className={classes.submit}
      >
        Sign In
      </Button>
    </form>
  );
};