Cursos / Informática para Internet / Plataformas de aplicações Web / Aula

arrow_back Aula 12 - PetTopStore - PDV - Parte 1

Componente src/Login.js

Esse componente recebe o "employee" e a função setEmployee como atributo (props) e é responsável por realizar o login, também chamado de sign-in do funcionário na API que criamos no admin. Caso o login seja efetivado com sucesso o valor de employee deve ser alterado com a função setEmployee.

Verifique o código e os comentários explicativos de cada comando no src/Login.js para entender como funciona todo o processo

Conteúdo comentado de src/Login.js:

import './Login.css';
import { useState } from "react";

// Componente login
function Login(props) {

  // variáveis de estado (email e password) com valores iniciais em branco
  const [email, setEmail] = useState('');
  const [password, setPassword] = useState('');

  // função que realiza o login na API com o uso do fetch
  function do_login() {
    fetch('http://localhost:3000/api/auth/employee/sign_in', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({ email, password })
    })
    .then((res) => {
      if (res.ok) {
        // caso o login tenha acontecido com sucesso
        // altera o valor de employee com o uso do setEmployee
        res.json().then(json => {
          props.setEmployee(json.employee);
        })        
      } else {
        // Em caso de falha, exibir uma mensagem de erro
        alert('E-mail/senha iválidos');
      }
    })
  }

  // Retorna um JSX que mostra um formulário de login com os INPUTS associados às variáveis 
  // de estado email e password
  // o botão "Entrar" inicial o processo de login chamando "do_login" quando clicado.
  return (
    <div className="Login">
      <h1>PetTopStore</h1>
      <h2>PDV - Autenticação</h2>
      <div className="LoginBox">
        Email:
        <input
          name="email"
          type="email"
          value={email}
          onInput={e => setEmail(e.target.value)}
        /><br/>
        Password:
        <input
          name="password"
          type="password"
          value={password}
          onInput={e => setPassword(e.target.value)}
        /><br/>
        <button
          onClick={do_login}
        >
          Entrar
        </button>
      </div>
    </div>
  );
}

export default Login;

Aqui o conteúdo do Login.css para a estilização básica:

.Login
{
  display: flex;
  justify-content: center;
  flex-direction: column;
  align-items: center;
  color: cadetblue;
}

.LoginBox {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: flex-start;
  padding: 20px;
  border: 2px solid cornflowerblue ;
  color: cadetblue;
}

input {
  color: cadetblue;
  border: 1px solid cornflowerblue;
  padding: 10px;
  font-size: 1.2em
}

button {
  color: cadetblue;
  border: 1px solid cornflowerblue;
  background-color: white;
  padding: 10px;
  font-size: 1em;
}

Iremos implementar src/Sale.js na próxima aula, mas por enquanto coloque no arquivo src/Sale.js um conteúdo vazio assim:

Conteúdo temporário de src/Sale.js:

function Sale(props) {
  return <div>Realizar venda não implementado ainda</div>
}

export default Sale;

Execute novamente o app PDV Rect com o comando:

npm start

E acesse http://localhost:4000/

Você deverá ver algo assim: Descrição imagem

Se você logou com um funcionário correto (email e senha) criado na aula anterior no seu banco de dados através das seeds, você deverá conseguir logar no sistema e verá algo assim:

Descrição imagem

Não se preocupe, vamos implementar a tela de vendas na próxima a


Versão 5.3 - Todos os Direitos reservados