defmodule SomethingErlangWeb.ThreadLive.Show do
use SomethingErlangWeb, :live_view
on_mount SomethingErlangWeb.UserLiveAuth
alias SomethingErlang.Forums
alias SomethingErlang.Grover
require Logger
@impl true
def mount(%{"id" => id} = _params, _session, socket) do
Grover.mount(socket.assigns.current_user, id)
{:ok, socket}
end
@impl true
def handle_params(%{"id" => id, "page" => page}, _, socket) do
thread = Grover.get_thread!(id, page |> String.to_integer())
{:noreply,
socket
|> assign(:thread, thread)}
end
@impl true
def handle_params(%{"id" => id}, _, socket) do
{:noreply, push_redirect(socket,
to: Routes.thread_show_path(socket, :show, id, page: 1))}
end
def post(assigns) do
~H"""
<.user info={@author} />
<%= raw @article %>
"""
end
def user(assigns) do
~H"""
"""
end
def pagination(assigns) do
%{page: page_number, page_count: page_count} = assigns.thread
first_page_disabled_button = if page_number == 1, do: " btn-disabled", else: ""
last_page_disabled_button = if page_number == page_count, do: " btn-disabled", else: ""
active_page_button = " btn-active"
prev_button_target = if page_number >= 1, do: page_number - 1, else: 1
next_button_target = if page_number < page_count, do: page_number + 1, else: page_count
buttons = [
%{label: "«", page: 1, special: first_page_disabled_button},
%{label: "‹", page: prev_button_target, special: first_page_disabled_button},
%{label: "#{page_number}", page: page_number, special: active_page_button},
%{label: "›", page: next_button_target, special: last_page_disabled_button},
%{label: "»", page: page_count, special: last_page_disabled_button}
]
~H"""
<%= for btn <- buttons do %>
<%= live_redirect btn.label, class: "btn btn-sm" <> btn.special,
to: Routes.thread_show_path(@socket, :show, @thread.id, page: btn.page) %>
<% end %>
"""
end
end