Error: la reacción y reacción-recibida no cargan la siguiente página

En la página de reacción/reacción recibida en actividad/notificación, existe un error.

Cuando el usuario intenta desplazarse hacia abajo y cargar la siguiente página, se añadirán los mismos elementos a la lista, provocando duplicación.

El problema se debe a una falta de correspondencia entre el frontend y el backend. El id definido en el frontend es post_id mientras que el backend requiere reaction_id.

Hay un PR (Pull Request) preliminar aquí, por favor revíselo cuando le sea conveniente.

3 Me gusta

Gracias por el PR preliminar, parece que la paginación para las reacciones es ahora inexacta y se repite.

No estoy seguro de si la solución correcta es establecer el post_id. Parece que la paginación utiliza before_reaction_user_id (ver aquí). Potencialmente, incluso eliminar la línea 27 (el PR) ayudaría, ya que probablemente se establece en la reaction aplanada anterior.

Gracias por tu respuesta.
Lo inspeccionaré mañana y veré si algo lo soluciona.

1 me gusta

¡Genial, gracias!

Para ser claros, creo que before_reaction_user_id debería ser el id de discourse_reactions_reaction_users; creo que ese nombre de variable es algo confuso. No dudes en aclarar cualquier cosa aquí o en el chat.

1 me gusta

He investigado y he descubierto por qué falló el rspec.

La especificación original está afirmando un componente con la propiedad expect(page).to have_css(\".user-stream-item [data-post-id='#{post_1.id}']\").

Sin embargo, el #{post_1.id} se cambió a reaction_user_id en el último commit, esto causó una falta de coincidencia, lo que provocó el fallo.


La idea original era cambiar id para satisfacer la necesidad de la API, sin embargo, omití el hecho de que el id también se usa en PostList como post_id, como se muestra a continuación:

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

Y el id utilizado en él se mapea en el componente post.gjs

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

Por lo tanto, el comportamiento original de id no debe cambiarse, ya que esto puede causar graves discrepancias en el postList, lo que conduce directamente al fallo del rspec de ayer.


Como solución alternativa, podría haber otra forma de resolver esto:

Añadir un nuevo campo reaction_user_id: reaction.id cuando se aplane para PostList (flattenForPostList), luego modificar la función #getLastIdFrom(array) de return array.length ? array[array.length - 1].id : null; a return array.length ? array[array.length - 1].reaction_user_id.


En resumen (TL:DR);
El reaction_id, post_id y ahora el reaction_user_id son totalmente diferentes, pero el id utilizado en el componente postList debe ser post_id. Mientras que el id necesario para obtener la siguiente página debe ser reaction_user_id, lo cual es extremadamente desconcertante.

@nat

Gracias por la investigación y la PR @small-lovely-cat :+1:

He añadido una especificación a la PR y la fusionaré.

2 Me gusta

Este tema se cerró automáticamente después de 19 horas. Ya no se permiten nuevas respuestas.