45 lines
1.1 KiB
Elixir
45 lines
1.1 KiB
Elixir
defmodule PostlandWeb.FollowersLive do
|
|
use PostlandWeb, :live_view
|
|
|
|
alias Postland.Actors
|
|
alias Postland.Follows
|
|
|
|
def render(assigns) do
|
|
~H"""
|
|
<div class="py-4">
|
|
<h3 class="text-base font-semibold">Followers</h3>
|
|
<p :if={@count == 0} class="text-gray-400">
|
|
No one follows you.
|
|
</p>
|
|
<div
|
|
:for={{dom_id, %{confirmed: confirmed, account: account}} <- @streams.accounts}
|
|
class="mt-2"
|
|
>
|
|
<.profile_card
|
|
id={dom_id}
|
|
dom_id={dom_id}
|
|
account={account}
|
|
status={if confirmed, do: :follower_confirmed, else: :follower_pending}
|
|
/>
|
|
</div>
|
|
</div>
|
|
"""
|
|
end
|
|
|
|
def mount(_params, _session, socket) do
|
|
followers =
|
|
Follows.all_followers()
|
|
|> Enum.map(fn follow ->
|
|
%{
|
|
id: follow.follower,
|
|
confirmed: !!follow.confirmed_at,
|
|
account: Actors.actor(follow.follower)
|
|
}
|
|
end)
|
|
|> Enum.reject(&is_nil(&1.account))
|
|
|
|
account_count = Enum.count(followers)
|
|
|
|
{:ok, socket |> stream(:accounts, followers) |> assign(count: account_count)}
|
|
end
|
|
end
|