Nós iremos fazer uma seção que será apenas para os cursos que o usuário colocar como favoritos. Esses cursos vão ser configurados como favorito na página do curso, onde o usuário vai acessar para ver o episódio que quer.
Nós vamos então na página “homeAuth”, nela nós iremos criar uma pasta chamada “favoriteCategory”.
import styles from "../../../../styles/slideCategory.module.scss";
const FavoritesCourses = function () {
return <></>;
};
export default FavoritesCourses;
Nós iremos agora fazer a criação do método para colocar os cursos como favoritos. Iremos em “courseService”. Nós iremos criar o método assícrono “addToFav”, que irá chamar um id, que pode ser um número ou uma string.
addToFav: async (courseId: number | string) => {
},
Agora, nós iremos puxar o token fazer a criação do res, só que nós iremos colocar o post no lugar do get, que foi o que fizemos nas outras categorias.
const token = sessionStorage.getItem("onebitflix-token");
const res = await api.post("/favorites")
Agora, além de “headers”, nós iremos colocar “courseId”, que vai ser enviado para o body no backend, pois nós iremos colocar como parâmetro desse método o id do curso que a pessoa está adicionando aos favoritos.
const res = await api.post("/favorites", {courseId}, {
headers: {
Authorization: `Bearer ${token}`,
},
}
)
.catch((error) => {
console.log(error.response.data.message);
return error.response;
});
return res;
},
Agora, nós iremos fazer o método de remover dos favoritos. Nós faremos a criação do método normal, recebendo o “courseId” como parâmetro, só que, não iremos passar o “courseId” que nem passamos no método de adicionar.
removeFav: async (courseId: number | string) => {
const token = sessionStorage.getItem("onebitflix-token");
const res = await api
delete("/favorites", {
headers: {
Authorization: `Bearer ${token}`,
}
})
.catch((error) => {
console.log(error.response.data.message);
return error.response;
});
return res;
},
Agora, iremos colocar abaixo do “headers” um “data”, que vai receber o “courseId”, e vai ser pego pelo backend. Quando fazemos o uso do delete com o axios, nós precisamos colocar dessa forma o parâmetro que for para o body.
removeFav: async (courseId: number | string) => {
const token = sessionStorage.getItem("onebitflix-token");
const res = await api
delete("/favorites", {
headers: {
Authorization: `Bearer ${token}`,
},
data: { courseId }
})
.catch((error) => {
console.log(error.response.data.message);
return error.response;
});
return res;
},
Por último, nós faremos o método de pegar o curso, que será igual aos outros que fizemos, só que mudando a url que é utilizada.
getFavCourses: async () => {
const token = sessionStorage.getItem("onebitflix-token");
const res = await api
.get("/favorites", {
headers: {
Authorization: `Bearer ${token}`,
},
})
.catch((error) => {
console.log(error.response.data.message);
return error.response;
});
return res;
},
Nós iremos agora fazer a criação da lista de fato. Vamos começar colocar o título.
return (
<>
<p className={styles.titleCategory}>Minha Lista</p>
</>
);
Agora iremos fazer o uso do SWR para pegar o “getFavCourses”
const { data, error } = useSWR("/favCourses", courseService.getFavCourses);
if (error) return error;
if (!data) return <SwrSpinner />;
Nós iremos agora fazer uma renderização condicional. Nós vamos verificar se existem cursos na lista, se não existir, nós vamos retornar uma mensagem. O array de cursos que temos, nesse método, não vai estar só em “data.data”, vai estar em “data.data.courses”, então vamos verificar se o length é maior ou igual a 1, e se não for, vamos retornar a mensagem.
{data.data.courses.length >= 1 ? (
<SlideComponent course={data.data.courses} />
) : (
<p className="h5 text-center pt-3">
<strong>Você não tem nenhum curso na lista</strong>
</p>
)}
Como não colocamos nenhum curso na lista, vai ser retornada a mensagem, mas vamos poder testar isso quando tivermos os cursos com páginas para eles.
Agora, nós finalizamos a nossa categoria de favoritos, então vamos dar um commit final para isso.
git add -A
git commit -m "Criação dos elementos da seção de favoritos, do seu estilo visual e também dos métodos de favorito - Seção favoritos"
O que foi feito/visto nessa aula: