Aula 3: Front-end com React (parte 2) – SpotCode | OneBitCode

Aula 3: Front-end com React (parte 2) – SpotCode | OneBitCode

 

Códigos completos: https://github.com/OneBitCodeBlog/SpotcodeV2

• Conectando a página discovery com o Backend – 00:00:57
• Criando a página Álbum – 00:14:29
• Conectando o Álbum com o Backend – 00:19:54
• Player de música (template básico) – 00:26:11
• Player de música (exibindo as músicas reais) – 00:34:37
• Player de música (Tocando as músicas) – 00:43:40
• Marcando uma música como ouvida – 00:55:34
• Incluindo o Favorites – 01:00:21
• Criando a página de Search – 01:09:46
• Criando a busca por texto e categoria – 01:13:09
• Criando os components Categories e SearchBar – 01:16:56
• Criando a Tab de resultados – 01:27:12
• Criando a página de favoritos – 01:39:10
• Transformando o APP em um PWA – 01:43:31
• Desafios – 01:57:21

 


 

Conectando a página discovery com o Backend

0 – Atualize o nome do service discovery para albums

1 – No discovery inclua o useState, o useEffect e importe o service que criamos

2 – Inclua os states no discovery

3 – Crie um método para baixar as informações do backend através do service e depois salvar nos states

4 – Chame ele sempre que o component iniciar

5 – Remova os dados mockados e coloque no lugar

6 – Atualize a estrutura (condicional para mostrar albuns apenas quando eles forem retornados da API)

 

 


Criando a página Álbum

1 – Mova o component album para /common

2 – Em discovery atualize o importe de Álbum colocando:

3 – Crie em um component chamado albums e dentro dele um arquivo chamado index.js e coloque nele:

4 – Na Screen Album importe o novo component deixando assim:

5 – Vamos deixar a estrutura do component album preparado:

 


 

Conectando o Album com o Backend

1 – No service Albums inclua:

2 – Importe o service no component Album:

3 – Para pegar o :id do album na URL inclua:

4 – Para chamar a API quando montar o component e armazenar o album como um estado inclua:

5 – Agora atualize o template pra que as informações reais sejam exibidas:

6 – No arquivo /views/albums/show.json.jbuilder inclua:

 


 

Player de música (template básico)

1 – Crie um component chamado Musics e coloque nele:

2 – Dentro da pasta do component Musics crie um component chamado Music e coloque nele:

3 – No component Album importe o novo component e chame ele no layout:

4 – No component Musics vamos incluir o layout básico:

5 – Importe o component Music em Musics:

6 – Agora vamos desenvolver o template básico de Music:

7 – Exiba o Músic no Musics:

 


 

Player de música (exibindo as músicas reais)

1 – No component Musics vamos gerar os components Music com valores reais e também vamos incluir o estado playing que serve para guardarmos a música que está sendo tocado agora:

2 – Para exibir as informações que foram passados para Music, altere ele para:

3 – Alterar o serializer albums show para incluir o artist_name

4 – Vamos alterar o icone quando a música estiver tocando, em Music coloque:

 


 

Player de música (Tocando as músicas)

0 – Em routes.rb atualize a rota do react:

1 – Em Musics vamos incluir um player de áudio (depois vamos oculta-lo):

2 – Vamos incluir nele um useEffect e o Ref para recarregar o player quando uma música for selecionada:

3 – Vamos incluir o toque aleatório das músicas:

4 – Agora para fazer a chamada da próxima música:

5 – Depos de testar esconda o Player:

 


 

Marcando uma música com ouvida

1 – Criar o service recently_heards.js e colocar:

2 – No json de retorno do search incluir o album id na song

3 – No json de retorno do album incluir o album id na song

4 – No controller dashboard atualize o load das músicas ouvidas recentemente

5 – No components Music inclua:

 


 

Incluindo o Favorites

  1. No model user.rb inclua:

  2. No jbuilder show do Album inclua dentro do nó songs:

  3. No Jbuilder index do search inclua no nó song:

  4. No Jbuilder index do favorites inclua no nó song:

  5. Em /common crie o component Favorite (favorite/index.js):

    6 – Em services crie o service favorites e coloque:

    7 – No nosso Favorite vamos adicionar o botão de favoritar e desfavoritar e o state que controla isso:

    8 – Vamos adicionar o nosso service Favorites e os métodos para chama-lo:

    9 – Vamos incluir a chamada para esses métodos nos botões:

    10 – Em Music importe o Favorite e exiba:

     


 

Criando a página de Search

1 – Crie um component chamado Search e coloque nele:

2 – Na Screen Search coloque:

3 – Dentro da pasta do component Search crie um component chamado SearchBar e coloque nele:

4 – Dentro de /common crie um component chamado Categories e coloque nele:

5 – Importe esses components em Search

4 – Inclua a estrutura agora

 


 

Criando a busca por texto e categoria

1 – Crie o service Search e coloque nele:

2 – Crie um service chamado Categories e coloque nele:

3 – No component Search inclua os services:

4 – Agora inclua os hooks:

5 – Inclua o método de busca por categoria:

6 – Inclua o método de busca por texto:

7 – Atualize a chamada do SearchBar e do Categories colocando:

 


 

Criando os components Categories e SearchBar

1 – No component SearchBar vamos incluir a estrutura:

2 – Vamos incluir o state query e o método de pesquisa:

3 – Agora vamos atualizar o nosso form input:

4 – No service Categories inclua:

5 – No component Category vamos incluir o state e o método para baixar as categorias:

6 – Vamos gerar uma lista de imagens baseado nas categorias que recebemos:

7 – Vamos criar uma Div customizada:

8 – Vamos injetar agora as categorias no template:

 


 

Criando a Tab de resultados

1 – Em /common crie um component chamada Results Tabs e coloque nele:

2 – Importe o component Tabs no Search e injete ele:

3 – Vamos incluir o template:

4 – Vamos customizar o component Tab:

5 – Vamos incluir o controlle das Tabs:

6 – Vamos gerar os components Album e injetar no template:

7 – Vamos importar o component Music e injetar ele:

 


 

Criando a página de favoritos

1 – Crie um component chamado Favorites e coloque nele:

2 – Em favorite Screen importe o component e acrescente ao template:

3 – No component Favorite vamos incluir o state favorites:

4 – Inclua o service Favorites e os métodos para baixar os favorites:

5 – Agora coloque o resultado no template:

 


 

Transformando o APP em PWA

1 – Vamos liberar o Cors, no gemfile coloque:

2 – Rode;

3 – Em initializers crie um arquivo chamado Cors e coloque nele:

4 – Vamos ajustar a URL base dos services, em api.js coloque:

5 – Coloque no Gemfile:

6 – Rode no console:

7 – Rode no terminal:

8 – Em app/assets/javascripts customize o manifeste.json:

9 – Em application.html.erb coloque:

10 – Em initializers/assets coloque:

11 – Em javascript/packs/application.js coloque:

12 – Baixe o ngrok: https://ngrok.com

13 – Adicione em config/application.rb:

 


 

Desafios

1 – Criar o component Artist

  • Exibir ele na busca

  • Exibir ele nos favoritos

2 – Criar a página Artist

  • Mostrar os detalhes do artista

  • Mostrar todas as músicas

  • Mostrar todos os albums

3 – Permitir o favorite em Artist e Album

4 – (Desafio Hard) Incluir um player mais robusto: https://github.com/lhz516/react-h5-audio-player#readme