defmodule Oban.Web.InstancesComponent do use Oban.Web, :live_component alias Oban.Web.Resolver @impl Phoenix.LiveComponent def update(assigns, socket) do instances = available_instances(assigns.resolver, assigns.user) active = inspect(assigns.conf.name) socket = socket |> assign(conf: assigns.conf, id: assigns.id) |> assign(resolver: assigns.resolver, user: assigns.user) |> assign(active: active, instances: instances) {:ok, socket} end defp available_instances(resolver, user) do instances = oban_instances() available = case Resolver.call_with_fallback(resolver, :resolve_instances, [user]) do :all -> instances list -> Enum.filter(instances, &(&1 in list)) end available |> Enum.map(&inspect/1) |> Enum.sort() end @impl Phoenix.LiveComponent def render(assigns) do ~H"""
""" end @impl Phoenix.LiveComponent def handle_event("select-instance", %{"name" => name}, socket) do %{resolver: resolver, user: user} = socket.assigns allowed = Resolver.call_with_fallback(resolver, :resolve_instances, [user]) if allowed == :all or name in Enum.map(allowed, &inspect/1) do send(self(), {:select_instance, name}) end {:noreply, socket} end end