63 lines
1.5 KiB
Elixir
63 lines
1.5 KiB
Elixir
defmodule PostlandWeb.FollowingLive 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">Following</h3>
|
|
<p :if={@count == 0} class="text-gray-400">
|
|
You aren't following anyone.
|
|
</p>
|
|
<div :for={{dom_id, %{confirmed: confirmed, account: acct}} <- @streams.accounts} class="mt-2">
|
|
<.profile_card
|
|
id={dom_id}
|
|
account={acct}
|
|
dom_id={dom_id}
|
|
status={if confirmed, do: :following_confirmed, else: :following_pending}
|
|
/>
|
|
</div>
|
|
</div>
|
|
"""
|
|
end
|
|
|
|
def mount(_params, _session, socket) do
|
|
follows =
|
|
Follows.all_following()
|
|
|> Enum.map(fn follow ->
|
|
%{
|
|
id: follow.followee,
|
|
confirmed: !!follow.confirmed_at,
|
|
account: Actors.actor(follow.followee)
|
|
}
|
|
end)
|
|
|
|
account_count = Enum.count(follows)
|
|
|
|
socket =
|
|
socket
|
|
|> stream(:accounts, follows)
|
|
|> assign(:count, account_count)
|
|
|
|
{:ok, socket}
|
|
end
|
|
|
|
def handle_event("withdraw", %{"id" => id, "dom-id" => dom_id}, socket) do
|
|
request = Follows.get(Postland.my_actor_id(), id)
|
|
|
|
socket =
|
|
case Follows.record_and_send_withdrawl(request) do
|
|
{:ok, _} ->
|
|
socket
|
|
|> stream_delete_by_dom_id(:accounts, dom_id)
|
|
|> assign(:count, socket.assigns.count - 1)
|
|
|
|
_ ->
|
|
put_flash(socket, :error, "An unexpected error occurred.")
|
|
end
|
|
|
|
{:noreply, socket}
|
|
end
|
|
end
|