Mostrando a tag de gêneros
Nos exemplos anteriores, foram exibidos apenas os ids dos gêneros na listagem de filmes (e programas de TV). Neste exemplo, vamos exibir a tag de cada gênero na listagem. Para isso, vamos alterar o método listMovies para que ele substitua o id do gênero pelo nome do gênero.
Inicialmente, vamos criar uma função que retorna o nome do gênero a partir do id do gênero. Para isso, vamos abrir o arquivo MoviesView.vue e adicionar o seguinte conteúdo no bloco script:
<script setup>
const getGenreName = (id) => genres.value.find((genre) => genre.id === id).name
Note que a função getGenreName recebe o id do gênero como parâmetro e retorna o nome do gênero. Para isso, usamos a função find do JavaScript para encontrar o gênero com o id informado e retornar o nome do gênero.
Esse código poderia ser escrito de uma forma diferente, um pouco mais detalhada, como segue:
<script setup>
function getGenreName(id) {
const genero = genres.value.find((genre) => genre.id === id);
return genero.name;
}
Você pode escolher a forma que preferir. O importante é entender o que está sendo feito e usar apenas uma das formas.
Agora, vamos alterar a listagem de filmes para que ele substitua o id do gênero pelo nome do gênero. Para isso, vamos abrir o arquivo MoviesView.vue e alterar o seguinte conteúdo no bloco template:
<p class="movie-genres">
<span
v-for="genre_id in movie.genre_ids"
:key="genre_id"
@click="listMovies(genre_id)"
>
{{ getGenreName(genre_id) }}
</span>
</p>
Note que localizamos a tag p com a classe movie-genres e substituímos o conteúdo {{ movie.genre_ids }} pela tag span acima. No caso do exemplo, a tag span é criada para cada id de gênero do filme (comportamento garantido pelo v-for). Além disso, adicionamos um listener ao evento click da tag span que chama o método listMovies passando o id do gênero como parâmetro. Por fim, adicionamos o conteúdo {{ getGenreById(genre_id) }} que exibe o nome do gênero a partir do id do gênero.
Por fim, vamos fazer uma estilização para a exibição dos gêneros. Para tal, vamos editar o bloco style do arquivo MoviesView.vue e adicionar o seguinte conteúdo:
.movie-genres {
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items: flex-start;
justify-content: center;
gap: 0.2rem;
}
.movie-genres span {
background-color: #748708;
border-radius: 0.5rem;
padding: 0.2rem 0.5rem;
color: #fff;
font-size: 0.8rem;
font-weight: bold;
}
.movie-genres span:hover {
cursor: pointer;
background-color: #455a08;
box-shadow: 0 0 0.5rem #748708;
}
Note que a classe .movie-genres já existia no bloco style do arquivo MoviesView.vue. Neste caso, apenas alteramos o valor do atributo display para flex e adicionamos os demais atributos para que os gêneros sejam exibidos em uma única linha, com um pequeno espaçamento entre eles.
Formatando a data para o padrão brasileiro
Neste exemplo, vamos alterar a forma como a data de lançamento dos filmes é exibida. Para isso, vamos abrir o arquivo MoviesView.vue e alterar o seguinte conteúdo no bloco template:
<p class="movie-release-date">{{ formatDate(movie.release_date) }}</p>
Note que localizamos a tag p com a classe .movie-release-date e substituímos o conteúdo `` pelo conteúdo {{ formatDate(movie.release_date) }}. Além disso, vamos adicionar o seguinte conteúdo no bloco script:
const formatDate = (date) => new Date(date).toLocaleDateString('pt-BR');
Note que criamos uma função formatDate que recebe a data de lançamento como parâmetro e retorna a data formatada para o padrão brasileiro. Para isso, usamos a função toLocaleDateString do JavaScript para formatar a data para o padrão brasileiro. Sugiro colocar a função formatDate logo após a função getGenreName.
< TMDB: visualizar carregando TMDB: Gerenciamento de estados com Pinia >