defmodule Oban.Web.RefreshComponent do use Oban.Web, :live_component @options [ {01, "1s"}, {02, "2s"}, {05, "5s"}, {15, "15s"}, {30, "30s"}, {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"""
""" 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