Criando um CRUD com THF (5/7) - Visualizando dados de um cliente

Jhosef Marks
TOTVS Developers
Published in
7 min readMay 7, 2019
Photo by Jack Sloop on Unsplash

Olá mundo!

Objetivo

Criar uma página para visualização das informações dos clientes já cadastrados; com isso, vamos conhecer o componente thf-page-detail e alguns componentes para exibição de dados.

Lista de posts da série THF CRUD

Pré-requisitos

Não deixe de ler os posts anteriores para ter uma compreensão mais completa do projeto e acompanhar a evolução passo-a-passo.

Para continuar do ponto anterior, basta clonar o projeto com o que já foi implementado.

git clone --branch post-4 https://github.com/jhosefmarks/sample-thf-crud-customers.git <sua-pasta-de-trabalho>

Passo 1 — Iniciando nossa página de visualização

Vamos iniciar criando o componente da nossa nova página.

ng g c customers/customer-view

Uma nova pasta será criada: a src/app/customers/customer-view. Dentro dela, os seguintes arquivos também devem ter sido criados após o comando:

  • customer-view.component.css
  • customer-view.component.html
  • customer-view.component.spec.ts
  • customer-view.component.ts
Criando componente customer-view

Além da nova pasta e dos novos arquivos, o arquivo src/app/customers/customers.module.ts também foi atualizado, adicionando o novo componente dentro do módulo:

Módulo atualizado com o componente customer-view

Configurando uma nova rota

Abra o arquivo customers-routing.module.ts e inclua a rota para visualização dos dados do nosso cliente:

Configuração da nova rota.

Observe que nessa nova rota, estamos usando um parâmetro chamado "id". Já que vamos visualizar os dados de um cliente já cadastrado precisamos dessa informação para buscar no backend os dados necessários para nossa página.

Já fizemos algo parecido no segundo e terceiro post, então, você já dev saber que isso ainda não é suficiente para gente ver algum resultado visual. Portanto, abra o arquivo customer-view.component.html e insira o componente thf-page-detail:

Configuração inicial do thf-page-detail

Com isso, já podemos acessar nossa nova página através da url http://localhost:4200/customers/view/0148093543698.

Esse id 0148093543698 está em nossa base de teste, mas pode ser outro id de acordo com seu exemplo.

Nova página em http://localhost:4200/customers/view/0148093543698

Passo 2— Abrindo a página de detalhes a partir da página de listagem

Vai ficar muito complicado se a gente ficar testando nossa página sem ter um id real em nossa base de teste, isso pode limitar nossos testes, então, vamos voltar na nossa página de listagem e, a partir de lá, vamos abrir nossa página de visualização. Assim, não vamos precisar nos preocupar em informar um id válido na url - inclusive, vamos poder visualizar um cliente cadastrado em nossos testes durante o desenvolvimento.

Vamos acessar o arquivo customer-list.component.ts, incluir uma lista de ações para nossa tabela e criar uma função para navegar para nossa página de detalhes, passando o id do cliente em nossa url.

Atualização do customer-list.component.ts

Agora, vamos associar a propriedade tableActions na nossa tabela:

Página customer-list.component.html atualizada

Com isso, teremos o seguinte resultado:

Navegação da página de listagem para a página de detalhes.

Passo 3 — Buscando os dados do backend para serem exibidos

Com a navegação pronta e a garantia de que o id passado vai nos retornar dados "reais" para exibição, vamos pegar o id da url (rota) e vamos fazer a chamada para o backend buscando os dados que deverão ser exibidos.

Vamos voltar para o nosso arquivo customer-view.component.ts e fazer as alterações necessárias.

Buscando os dados do backend

O arquivo todo foi reescrito nessa etapa. #ficadica

Aqui, nós apenas configuramos a chamada da API baseado no id passado na url. Notem que não fazemos nenhuma verificação se existe ou não o id, já que o mesmo é obrigatório em nossa rota para chegar na página de visualização.

Já na função loadData disparamos a requisição get do httpClient e apenas fazemos log dos dados que serão exibidos em nosso console. Com isso, já da pra verificar se os dados realmente estão sendo recebidos.

Requisição trazendo os dados do cliente e exibindo no console

Caso seja passado um id inválido direto para a url, você não precisa se preocupar; o THF vai exibir uma notificação para o usuário informando o problema, ou seja, o THF trabalha por você e para você. 😄

Para que isso funcione corretamente, seu backend precisa devolver um 404 com as mensagens de erros no corpo da requisição.

Exemplo de requisição inválida

Passo 4 — Finalmente exibindo os dados

Até que enfim chegamos a parte que realmente importa: vamos mostrar os dados para o usuário.

Vamos criar uma propriedade para salvar os dados do cliente e atribuir o resultado da requisição nessa propriedade.

Armazenando a resposta da requisição

Vamos incluir alguns componentes do tipo thf-info em nossa página.

Componente thf-info configurados na página

Recarregando nossa página, teremos o seguinte resultado:

Exibição de algumas informações usando o thf-info

Bom, já temos algumas informações sendo exibidas, o thf-info exibe os dados verticalmente por padrão, mas podemos usar o Grid System do THF para melhorar a organização dos nossos componentes.

E para a informação referente ao status do cliente, nós podemos usar o thf-tag para dar um pouco mais de destaque.

Inclusão do Grid System e do thf-tag

Com isso, nossa página já começa a ficar mais organizada e bacana; simples, mas bacana 😜

Página organizada com Grid System e com o thf-tag

Vamos, agora, incluir as demais informações na tela e deixar nossa página com todas as informações do cliente.

Todos os thf-info configurados em nosso HTML

Agora, podemos ver todas as informações na tela:

Todas as informações sendo exibidas na página

Mesmo usando o Grid System, as informações parecem estar bagunçadas; apenas jogadas na página. Mas nós podemos melhorar isso usando o thf-divider. Assim como fizemos com a nossa página de cadastro de clientes, podemos usar o componente para criar agrupamentos que melhoram a leitura e visualização das informações.

Adição do thf-divider
Página organizada com thf-divider

Passo 5 — Formatando melhor as informações

Se você notou, nós temos algumas informações que não estão sendo bem apresentadas, ou não estão da melhor forma possível. Uma delas é a data de nascimento.

O thf-info permite o uso de pipes para exibição das informações. Vamos usar o DatePipe padrão do Angular para formatar a data no formato brasileiro: dia, mês e ano.

Formatando a data usando DatePipe do Angular
Exibindo a data formatada em dia, mês e ano

Outros dados como status e gender têm valores padronizados e estão em inglês. Nós poderíamos usar tradução nesta página usando i18n do THF, mas não é o foco de hoje. Vamos ter outros artigos só sobre isso. Agora, vamos fazer apenas um map nos dados retornados pelo nosso backend, transformando os valores para serem exibidos de forma mais elegante.

Transformação dos dados vindos do backend usando o map do rxjs

Com isso, teremos os dados exibidos de forma mais significativa para o usuário.

Dados transformados via map do rxjs

Podemos melhorar um pouco mais nossa página configurando melhor o thf-tag, que possui alguns tipos pré-definidos que podem ajudar na visualização da informação, dando mais destaque para a mesma.

Configurando do tipo da tag
Exibindo tag com destaque

Passo 6 — Incluindo ações na página de visualização

Como no componente thf-page-edit, o thf-page-detail tem algumas ações padrões, por enquanto, vamos adicionar apenas a função de voltar em nossa página. Para isso, basta criar uma função chamada back e nela vamos fazer a navegação para nossa tela de listagem.

Função para retornar a página de listagem dos nossos clientes

Com isso, temos nosso fluxo de navegação completo entre as páginas de listagem e visualização dos dados do cliente:

Fluxo de navegação entre lista e visualização dos dados

Com isso, concluímos nossa página de visualização (por enquanto, pois voltaremos nela em outro post).

E agora, José?

Com mais essa etapa completa, já temos quase nosso CRUD pronto. Mas ainda dá pra fazer muita coisa. Agora, você já pode fazer páginas para exibir as informações cadastradas nos seus formulários e explorar outros componentes para criar layouts mais complexos.

Falta pouco agora para finalizar nosso CRUD. Nos vemos no próximo artigo.

Você pode encontrar os fontes do projeto no meu github.

Referências e dicas de leitura

Documentação oficial do THF:

Documentação oficial do Angular:

learnrxjs.io:

--

--

Jhosef Marks
TOTVS Developers

Desenvolvedor por vocação, e front end por opção. Projeto atual: http://thf.totvs.com.br