defmodule Oban.Web.Queues.DetailInsanceComponent do use Oban.Web, :live_component import Oban.Web.Helpers.QueueHelper alias Oban.Web.Components.Core @impl Phoenix.LiveComponent def update(%{local_limit: local_limit}, socket) do {:ok, assign(socket, local_limit: local_limit)} end def update(assigns, socket) do socket = socket |> assign(access: assigns.access, checks: assigns.checks) |> assign_new(:queue, fn -> assigns.checks["queue"] end) |> assign_new(:paused, fn -> assigns.checks["paused"] end) |> assign_new(:local_limit, fn -> assigns.checks["local_limit"] end) {:ok, socket} end @impl Phoenix.LiveComponent def render(assigns) do ~H""" {node_name(@checks)} {executing_count(@checks)} {started_at(@checks)} <.pause_button disabled={not can?(:pause_queues, @access)} node={node_name(@checks)} paused={@paused} queue={@queue} target={@myself} />
""" end defp pause_button(assigns) do assigns = assigns |> assign_new(:id, fn -> "#{assigns.queue}-toggle-pause" end) |> assign_new(:title, fn -> if assigns.paused, do: "Resume queue", else: "Pause queue" end) ~H""" """ end @impl Phoenix.LiveComponent def handle_event("toggle-pause", _params, socket) do enforce_access!(:pause_queues, socket.assigns.access) checks = socket.assigns.checks action = if socket.assigns.paused, do: :resume_queue, else: :pause_queue send(self(), {action, checks["queue"], checks["name"], checks["node"]}) {:noreply, assign(socket, paused: not socket.assigns.paused)} end def handle_event("update", %{"local_limit" => limit}, socket) do enforce_access!(:scale_queues, socket.assigns.access) limit = String.to_integer(limit) checks = socket.assigns.checks send(self(), {:scale_queue, checks["queue"], checks["name"], checks["node"], limit}) {:noreply, assign(socket, local_limit: limit)} end def handle_event("increment", _params, socket) do {:noreply, assign(socket, local_limit: socket.assigns.local_limit + 1)} end def handle_event("decrement", _params, socket) do if socket.assigns.local_limit > 1 do {:noreply, assign(socket, local_limit: socket.assigns.local_limit - 1)} else {:noreply, socket} end end end