Packages
livebook
0.14.0-rc.0
0.19.8
0.19.7
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.14.0-rc.1
0.14.0-rc.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
Automate code & data workflows with interactive notebooks
Current section
Files
Jump to
Current section
Files
lib/livebook_web/live/session_live/runtime_component.ex
defmodule LivebookWeb.SessionLive.RuntimeComponent do
use LivebookWeb, :live_component
alias Livebook.Runtime
@impl true
def mount(socket) do
{:ok, assign(socket, error_message: nil)}
end
@impl true
def update(%{event: {:error, message}}, socket) do
{:ok, assign(socket, error_message: message)}
end
def update(assigns, socket) do
socket =
socket
|> assign(assigns)
|> assign_new(:type, fn -> runtime_type(assigns.runtime) end)
{:ok, socket}
end
@impl true
def render(assigns) do
~H"""
<div class="flex flex-col space-y-5">
<h3 class="text-2xl font-semibold text-gray-800">
Runtime settings
</h3>
<div class="w-full flex-col space-y-5">
<div class="flex space-x-4">
<.choice_button
:if={Livebook.Config.runtime_enabled?(Livebook.Runtime.Standalone)}
active={@type == "standalone"}
phx-click="set_runtime_type"
phx-value-type="standalone"
phx-target={@myself}
>
Standalone
</.choice_button>
<.choice_button
:if={Livebook.Config.runtime_enabled?(Livebook.Runtime.Attached)}
active={@type == "attached"}
phx-click="set_runtime_type"
phx-value-type="attached"
phx-target={@myself}
>
Attached node
</.choice_button>
<.choice_button
:if={Livebook.Config.runtime_enabled?(Livebook.Runtime.Embedded)}
active={@type == "embedded"}
phx-click="set_runtime_type"
phx-value-type="embedded"
phx-target={@myself}
>
Embedded
</.choice_button>
<.choice_button
:if={Livebook.Config.runtime_enabled?(Livebook.Runtime.Fly)}
active={@type == "fly"}
phx-click="set_runtime_type"
phx-value-type="fly"
phx-target={@myself}
>
Fly.io machine
</.choice_button>
</div>
<div
:if={@error_message && @type == runtime_type(@runtime) && @runtime_status == :disconnected}
class="error-box"
>
<%= @error_message %>
</div>
<div>
<.live_component
id={"runtime-config-#{@type}"}
module={component_for_type(@type)}
session={@session}
runtime={@runtime}
runtime_status={@runtime_status}
runtime_connect_info={@runtime_connect_info}
hub={@hub}
hub_secrets={@hub_secrets}
/>
</div>
</div>
</div>
"""
end
defp runtime_type(%Runtime.Standalone{}), do: "standalone"
defp runtime_type(%Runtime.Attached{}), do: "attached"
defp runtime_type(%Runtime.Embedded{}), do: "embedded"
defp runtime_type(%Runtime.Fly{}), do: "fly"
defp component_for_type("standalone"), do: LivebookWeb.SessionLive.StandaloneRuntimeComponent
defp component_for_type("attached"), do: LivebookWeb.SessionLive.AttachedRuntimeComponent
defp component_for_type("embedded"), do: LivebookWeb.SessionLive.EmbeddedRuntimeComponent
defp component_for_type("fly"), do: LivebookWeb.SessionLive.FlyRuntimeComponent
@impl true
def handle_event("set_runtime_type", %{"type" => type}, socket) do
{:noreply, assign(socket, type: type)}
end
end