Bug: reação e reação-recebida falham ao carregar a próxima página

Na página de reação/reação recebida em atividade/notificação, existe um bug.

Quando o usuário tenta rolar para baixo e carregar a próxima página, os mesmos itens são adicionados à lista, causando duplicação.

O problema decorre de um desalinhamento entre o frontend e o backend. O id definido no frontend é post_id, enquanto o backend exige reaction_id.

Um PR (Pull Request) rascunho está aqui, por favor, revise-o quando for conveniente.

3 curtidas

Obrigado pelo rascunho do PR, parece que a paginação para reações está imprecisa agora e parece se repetir.

Não tenho certeza se a correção correta é definir o post_id. Parece que a paginação usa before_reaction_user_id (veja aqui). Potencialmente, até mesmo remover a linha 27 (o PR) ajudaria, já que provavelmente está definida na reação achatada (reaction) acima.

Obrigado pela sua resposta.
Vou inspecionar amanhã e ver se algo resolve isso.

1 curtida

Legal, obrigado!

Para ser claro, acho que o before_reaction_user_id deveria ser o ID de discourse_reactions_reaction_users - acho que esse nome de variável é um pouco confuso. Sinta-se à vontade para esclarecer qualquer coisa aqui ou no chat.

1 curtida

Investiguei e descobri por que o rspec falhou.

A especificação original está verificando um componente com a propriedade expect(page).to have_css(\".user-stream-item [data-post-id='#{post_1.id}']\").

No entanto, o #{post_1.id} foi alterado para reaction_user_id no último commit, o que causou uma incompatibilidade, levando à falha.


A ideia original era alterar o id para atender à necessidade da API, no entanto, eu perdi o fato de que o id também é usado no PostList como post_id, como segue:

<PostList
    @posts={{@model}}
    @fetchMorePosts={{@controller.loadMore}}
    @emptyText={{i18n "notifications.empty"}}
    @additionalItemClasses="user-stream-item"
    @showUserInfo={{false}}
    class="user-stream"
  >

E o id usado nele é mapeado no componente post.gjs

data-post-id={{@post.id}}
data-topic-id={{@post.topicId}}
data-user-id={{@post.user_id}}

Portanto, o comportamento original do id não deve ser alterado, pois isso pode causar incompatibilidades graves no postList, o que leva diretamente à falha do rspec de ontem.


Como solução alternativa, pode haver outra maneira de resolver isso:

Adicionar um novo campo reaction_user_id: reaction.id ao chamar flattenForPostList, e então alterar a função #getLastIdFrom(array) de return array.length ? array[array.length - 1].id : null; para return array.length ? array[array.length - 1].reaction_user_id.


TL:DR;
O reaction_id, post_id e agora o reaction_user_id são totalmente diferentes, mas o id usado no componente postList precisa ser post_id. Enquanto o id necessário para buscar a próxima página deve ser reaction_user_id, o que é extremamente confuso.

@nat

Obrigado pela investigação e PR @small-lovely-cat :+1:

Adicionei uma especificação ao PR e farei o merge.

2 curtidas

Este tópico foi fechado automaticamente após 19 horas. Novas respostas não são mais permitidas.