fix(moderation): keep signal pagination with its queue

This commit is contained in:
SimpleTest 2026-07-24 20:56:15 +03:00
parent 4f8677927a
commit 504c0af867
2 changed files with 57 additions and 10 deletions

View File

@ -396,7 +396,11 @@ defmodule WhoNeedHelpWeb.ModerationLive do
</button>
</section>
<section :if={@evidence} class="mt-8 rounded-3xl bg-neutral p-6 text-neutral-content">
<section
:if={@evidence}
id="report-evidence"
class="mt-8 rounded-3xl bg-neutral p-6 text-neutral-content"
>
<div class="flex items-center justify-between">
<h2 class="text-xl font-bold">{gettext("Reported evidence")}</h2>
<button phx-click="close-evidence" class="btn btn-sm">{gettext("Close")}</button>
@ -421,17 +425,9 @@ defmodule WhoNeedHelpWeb.ModerationLive do
{gettext("This report has no linked conversation.")}
</p>
</div>
<button
:if={@signals_cursor}
type="button"
phx-click="load-more-signals"
class="btn btn-outline btn-sm mt-4"
>
{gettext("Load more")}
</button>
</section>
<section class="mt-10">
<section id="abuse-signals" class="mt-10">
<h2 class="text-2xl font-bold">{gettext("Open abuse signals")}</h2>
<div class="mt-4 space-y-3">
<article :for={signal <- @signals} class="rounded-2xl bg-base-200 p-5">
@ -471,6 +467,14 @@ defmodule WhoNeedHelpWeb.ModerationLive do
{gettext("No open signals.")}
</p>
</div>
<button
:if={@signals_cursor}
type="button"
phx-click="load-more-signals"
class="btn btn-outline btn-sm mt-4"
>
{gettext("Load more")}
</button>
</section>
<section class="mt-10">

View File

@ -6,6 +6,7 @@ defmodule WhoNeedHelpWeb.MutualAidLiveTest do
alias WhoNeedHelp.{Accounts, Activities, Catalog, Help, Messaging, Notifications, Trust}
alias WhoNeedHelp.Repo
alias WhoNeedHelp.Trust.AbuseSignal
setup :register_and_log_in_user
@ -1147,6 +1148,48 @@ defmodule WhoNeedHelpWeb.MutualAidLiveTest do
assert evidence_html =~ "Evidence message"
end
test "abuse-signal pagination stays available without opening report evidence", %{
conn: conn,
user: user
} do
user |> Ecto.Changeset.change(role: :moderator) |> Repo.update!()
subject = user_fixture(display_name: "Signal subject")
for sequence <- 1..25 do
%AbuseSignal{}
|> AbuseSignal.changeset(%{
kind: :manual,
subject_id: subject.id,
metadata: %{"sequence" => sequence}
})
|> Repo.insert!()
end
{:ok, view, _html} = live(conn, ~p"/moderation")
assert has_element?(
view,
"#abuse-signals > button[phx-click='load-more-signals']"
)
refute has_element?(view, "#report-evidence button[phx-click='load-more-signals']")
view
|> element("#abuse-signals > button[phx-click='load-more-signals']")
|> render_click()
assert view
|> render()
|> LazyHTML.from_document()
|> LazyHTML.query("#abuse-signals article")
|> Enum.count() == 25
refute has_element?(
view,
"#abuse-signals > button[phx-click='load-more-signals']"
)
end
test "request page exposes report and block controls for another user", %{conn: conn} do
category = Catalog.seed_defaults()
requester = user_fixture(display_name: "Requester")