defmodule Oban.Web.RefreshComponent do
use Oban.Web, :live_component
@options [
{01, "1s"},
{02, "2s"},
{05, "5s"},
{15, "15s"},
{60, "1m"},
{-1, "Off"}
]
@impl Phoenix.LiveComponent
def mount(socket) do
{:ok, assign(socket, :options, @options)}
end
@impl Phoenix.LiveComponent
def render(assigns) do
~H"""
<%= for {value, display} <- @options do %>
<.option value={value} display={display} refresh={@refresh} />
<% end %>
"""
end
attr :refresh, :integer, required: true
attr :value, :integer, required: true
attr :display, :string, required: true
defp option(assigns) do
class =
if assigns.refresh == assigns.value do
"text-blue-500 dark:text-blue-400"
else
"text-gray-500 dark:text-gray-400 "
end
assigns = assign(assigns, :class, class)
~H"""
<%= if @value == @refresh do %>
<% else %>
<% end %>
{@display}
"""
end
# Handlers
@impl Phoenix.LiveComponent
def handle_event("pause-refresh", _params, socket) do
send(self(), :pause_refresh)
{:noreply, socket}
end
def handle_event("resume-refresh", _params, socket) do
send(self(), :resume_refresh)
{:noreply, socket}
end
def handle_event("select-refresh", %{"interval" => interval}, socket) do
value = if is_binary(interval), do: String.to_integer(interval), else: interval
send(self(), {:update_refresh, value})
{:noreply, socket}
end
def handle_event("toggle-refresh", _params, socket) do
send(self(), :toggle_refresh)
{:noreply, socket}
end
end