#VemProReact #JEP #7

#VemProReact

Correção da atividade!

App.js

#VemProReact

Correção da atividade!

Dados.js

<Input 
  fullWidth={true} 
  name="id" 
  label="ID" 
  placeholder="id" 
  size="small" 
  value={usuarioForm?.id || ''} 
  disabled={true} 
/>

LotacaoPrincipal.js

#VemProReact

Correção da atividade!

mutations.js

import gql from 'graphql-tag';

export const UPDATE_USUARIO = gql`
  mutation(
    $id: String!
    $nome: String!
    $documento: String!
    $genero: USR_e_genero_type!
    $contato: USR_contato_input_type_input
    $cargo: USR_cargo_input_type_input
  ) {
    update_usuario(
      input: {
        id: $id
        nome: $nome
        documento: $documento
        genero: $genero
        contato: $contato
        cargo: $cargo
      }
    ) {
...
...
      id
      nome
      documento
      genero
      contato {
        email
        telefone
      }
      cargo {
        id
        descricao
      }
    }
  }
`;

#VemProReact

Correção da atividade!

Dados.js

<Mutation 
        mutation={UPDATE_USUARIO} 
        onCompleted={({ update_usuario }) => {
          setUsuarioForm(update_usuario)

          enqueueToast('Usuário atualizado com sucesso!', { type: 'success' });
        }}
        onError={() => {
          setUsuarioForm(usuario);

          enqueueToast('Não foi possível atualizar o usuário!', { type: 'error' });
        }}
      >
        {(updateUsuario, { loading }) => (
          <>
            <form
              onSubmit={e => {
                e.preventDefault();

                updateUsuario({ variables: usuarioForm });
              }}
            >
...

#VemProReact

Correção da atividade!

Dados.js

...
<Button 
  type="submit" 
  loading={loading} 
  disabled={loading}
>
  Atualizar os dados do usuário
</Button>
...

#VemProReact

localStorage

  • É um objeto do tipo Storage
     
  • Dados válidos e acessíveis para todas as abas (do mesmo domínio)
     
  • Não expiram
     
  • Não é limpo ao fechar o navegador ou reiniciar o PC

#VemProReact

localStorage

Atribuir valores:

localStorage.setItem('chave', 'valor'); // RECOMENDADO

localStorage['chave'] = 'valor';
localStorage.chave = 'valor';

Recuperar valores:

localStorage.getItem('chave'); // RECOMENDADO

localStorage['chave'];
localStorage.chave;

#VemProReact

sessionStorage

  • Similar ao localStorage
     
  • Também é um objeto do tipo Storage
     
  • Dados válidos e acessíveis somente na aba atual
     
  • Expiram (quando o navegador/aba é fechado)
     
  • Uma nova aba gera uma nova sessão

#VemProReact

sessionStorage

Atribuir valores:

sessionStorage.setItem('chave', 'valor'); // RECOMENDADO

sessionStorage['chave'] = 'valor';
sessionStorage.chave = 'valor';

Recuperar valores:

sessionStorage.getItem('chave'); // RECOMENDADO

sessionStorage['chave'];
sessionStorage.chave;

#VemProReact

Estrutura de pastas

  • Depende do cenário/projeto
     
  • Existem algumas abordagens possíveis
     
  • O que funciona melhor, geralmente, é um misto de separação por responsabilidade e domínios
     
  • Estamos definindo oficialmente um padrão Softplan

Na teoria:

#VemProReact

Estrutura de pastas

Na prática (projeto Dashboard Usuário):

  • Podemos ter uma pasta para os arquivos principais e essenciais (core)
     
  • Podemos ter uma pasta para os components
     
  • Podemos transformar um arquivo de componente
     em pasta e ter outra pasta components lá dentro
     
  • Podemos ter uma pasta para os services (GraphQL)
     
  • Podemos manter alguns arquivos na raiz

#VemProReact

Dúvidas?

#VemProReact

Atividade!

  1. Mover token e lotacao para o localStorage
  2. Criar as pastas core, components e services/graphql, movendo os arquivos necessários para cada uma 
  3. Criar 3 divisões no componente Dados para melhor organizar os campos
  4. Transformar o campo gênero em um Select, exibindo apenas opções válidas (fixo)
  5. Transformar o campo cargo em um Select, exibindo apenas opções válidas (dinâmico)
  6. Definir os campos ID, nome, documento e gênero como obrigatórios
  7. Resolver ou justificar todos os erros e warnings exibidos no console do navegador

#VemProReact

Obrigado!

#VemProReact #JEP #7

By Softplan Planejamento e Sistemas

#VemProReact #JEP #7

localStorage; sessionStorage; Project folder structure

  • 372