defmodule LivebookWeb.AppComponents do use LivebookWeb, :html @doc """ Renders page placeholder on unauthenticated dead render. """ def auth_placeholder(assigns) do ~H"""
livebook
""" end @doc """ Renders app status with indicator. """ attr :status, :map, required: true attr :show_label, :boolean, default: true def app_status(%{status: %{lifecycle: :shutting_down}} = assigns) do ~H""" <.app_status_indicator text={@show_label && "Shutting down"} variant="inactive" /> """ end def app_status(%{status: %{lifecycle: :deactivated}} = assigns) do ~H""" <.app_status_indicator text={@show_label && "Deactivated"} variant="inactive" /> """ end def app_status(%{status: %{execution: :executing}} = assigns) do ~H""" <.app_status_indicator text={@show_label && "Executing"} variant="progressing" /> """ end def app_status(%{status: %{execution: :executed}} = assigns) do ~H""" <.app_status_indicator text={@show_label && "Executed"} variant="success" /> """ end def app_status(%{status: %{execution: :error}} = assigns) do ~H""" <.app_status_indicator text={@show_label && "Error"} variant="error" /> """ end def app_status(%{status: %{execution: :interrupted}} = assigns) do ~H""" <.app_status_indicator text={@show_label && "Interrupted"} variant="waiting" /> """ end defp app_status_indicator(assigns) do ~H""" <.status_indicator variant={@variant} /> {@text} """ end @doc """ Shows a confirmation modal and closes the app on confirm. """ def confirm_app_termination(socket, app_pid, title \\ "app") do on_confirm = fn socket -> Livebook.App.close(app_pid) socket end confirm(socket, on_confirm, title: "Terminate #{title}", description: "All #{title} sessions will be immediately terminated.", confirm_text: "Terminate", confirm_icon: "delete-bin-6-line" ) end @doc """ Renders form fields for Deployment Group. """ attr :form, Phoenix.HTML.Form, required: true attr :hub, :map, required: true attr :disabled, :boolean, default: false def deployment_group_form_content(assigns) do ~H"""
<.select_field label="Clustering" help={ ~S''' When running multiple instances of Livebook, they need to be connected into a single cluster. You must either deploy it as a single instance or choose a strategy to connect the instances. ''' } field={@form[:clustering]} options={[ {"Automatic", "auto"}, {"DNS", "dns"}, {"Single instance", ""} ]} disabled={@disabled} />
See the Clustering docs for more information.

Automatic clustering is available when deploying to AWS ECS, Fly.io, and Kubernetes.

""" end @doc """ Lists all docker tag options. """ @docker_tag_options for image <- Livebook.Config.docker_images(), do: {image.tag, image.name} def docker_tag_options(), do: @docker_tag_options @doc """ Updates app list with the given apps event. """ def update_app_list(apps, event) def update_app_list(apps, {:app_created, app}) do if app in apps, do: apps, else: [app | apps] end def update_app_list(apps, {:app_updated, app}) do Enum.map(apps, fn other -> if other.slug == app.slug, do: app, else: other end) end def update_app_list(apps, {:app_closed, app}) do Enum.reject(apps, &(&1.slug == app.slug)) end end