Pedro, vi o vídeo e o seu raciocínio inicial está correto. O que acontece é que o método gravar está responsável tanto por incluir um novo comentário quanto por trazer a lista de comentários existentes, atualizada inclusive com o último comentário adicionado.
gravar(): void {
const comentario = this.comentarioForm.get('comentario')?.value ?? '';
this.comentarios$ = this.comentariosService
.incluiComentario(this.id, comentario)
.pipe(
switchMap(() => this.comentariosService.buscaComentario(this.id)),
tap(() => {
this.comentarioForm.reset();
alert('Salvo Comentário');
})
);
}
- No método acima, o valor inserido no comentário é guardado numa constante e depois é feita a atribuição de valores ao observable comentarios$;
- Esse observable vai inserir um comentário através do método incluiComentario, presente no service, que utiliza o método post;
- Após isso, para conseguir mudar o fluxo, é utilizado o operador switchMap. Por isso, o instrutor fala que "o fluxo que está vindo é o de inclusão, quero convertê-lo para o fluxo de buscar os comentários do servidor";
- O switchMap, por sua vez, vai cancelar a requisição anterior do Observable Comentario e trocar pela emissão de valores do Observable Comentarios;
- Assim, é possível agora consumir o outro método do service, o buscaComentario, que utiliza o get para trazer os dados da API, no caso, os comentários, já contendo o comentário que a pessoa acabou de adicionar.
No finalzinho do vídeo Incluindo na página de detalhes, quando o instrutor adiciona alguns comentários, perceba que ao adicionar, quando aparece o alert, os comentários ainda não estão renderizados na aplicação, aparecem depois da confirmação, após a busca da lista de comentários atualizados.
Espero ter ajudado, bons estudos! :)