defmodule PostlandWeb.FollowersLive do use PostlandWeb, :live_view alias Postland.Actors alias Postland.Follows def render(assigns) do ~H"""

Followers

No one follows you.

<.profile_card id={dom_id} dom_id={dom_id} account={account} status={if confirmed, do: :follower_confirmed, else: :follower_pending} />
""" 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 def handle_event("confirm", %{"id" => id}, socket) do request = Follows.get(id, Postland.my_actor_id()) socket = case Follows.record_and_send_acceptance(request) do {:ok, _} -> request = Follows.get(id, Postland.my_actor_id()) acct = %{ id: request.follower, confirmed: !!request.confirmed_at, account: Actors.actor(request.follower) } socket |> stream_insert(:accounts, acct) _ -> put_flash(socket, :error, "An unexpected error occurred.") end {:noreply, socket} end def handle_event("reject", %{"id" => id}, socket) do request = Follows.get(id, Postland.my_actor_id()) socket = case Follows.record_and_reject(request) do {:ok, _} -> acct = %{ id: request.follower, confirmed: true, account: Actors.actor(request.follower) } socket |> stream_delete(:accounts, acct) |> assign(count: socket.assigns.count - 1) _ -> put_flash(socket, :error, "An unexpected error occurred.") end {:noreply, socket} end def handle_event("ignore", %{"id" => id}, socket) do request = Follows.get(id, Postland.my_actor_id()) case Postland.Repo.delete(request) do {:ok, _} -> acct = %{ id: request.follower, confirmed: true, account: Actors.actor(request.follower) } {:noreply, socket |> stream_delete(:accounts, acct) |> assign(count: socket.assigns.count - 1)} _ -> {:noreply, put_flash(socket, :error, "An unexpected error occurred.")} end end end