26 lines
699 B
1
defmodule BlogWeb.ReaderCountComponent do
2
use BlogWeb, :live_component
3
alias BlogWeb.Presence
4
5
@presence_topic "blog_presence"
6
7
def mount(socket) do
8
if connected?(socket) do
9
Phoenix.PubSub.subscribe(Blog.PubSub, @presence_topic)
10
end
11
12
{:ok, assign(socket, total_readers: Presence.list(@presence_topic) |> map_size())}
13
end
14
15
def handle_info(%{event: "presence_diff"}, socket) do
16
{:noreply, assign(socket, total_readers: Presence.list(@presence_topic) |> map_size())}
17
end
18
19
def render(assigns) do
20
~H"""
21
<div class="text-sm text-gray-500 mb-6">
22
{@total_readers} {if @total_readers == 1, do: "person", else: "people"} online
23
</div>
24
"""
25
end
26
end
27