Packages
livebook
0.7.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, type: nil)}
end
@impl true
def update(assigns, socket) do
assigns =
if socket.assigns.type == nil do
type = runtime_type(assigns.runtime)
Map.put(assigns, :type, type)
else
assigns
end
{:ok, assign(socket, assigns)}
end
@impl true
def render(assigns) do
~H"""
<div class="p-6 max-w-4xl 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">
<%= if Livebook.Config. runtime_enabled?(Livebook.Runtime.ElixirStandalone) do %>
<.choice_button
active={@type == "elixir_standalone"}
phx-click="set_runtime_type"
phx-value-type="elixir_standalone"
phx-target={@myself}
>
Elixir standalone
</.choice_button>
<% end %>
<%= if Livebook.Config. runtime_enabled?(Livebook.Runtime.Attached) do %>
<.choice_button
active={@type == "attached"}
phx-click="set_runtime_type"
phx-value-type="attached"
phx-target={@myself}
>
Attached node
</.choice_button>
<% end %>
<%= if Livebook.Config. runtime_enabled?(Livebook.Runtime.Embedded) do %>
<.choice_button
active={@type == "embedded"}
phx-click="set_runtime_type"
phx-value-type="embedded"
phx-target={@myself}
>
Embedded
</.choice_button>
<% end %>
</div>
<div>
<%= live_render(@socket, live_view_for_type(@type),
id: "runtime-config-#{@type}",
session: %{"session" => @session, "current_runtime" => @runtime}
) %>
</div>
</div>
</div>
"""
end
defp runtime_type(%Runtime.ElixirStandalone{}), do: "elixir_standalone"
defp runtime_type(%Runtime.Attached{}), do: "attached"
defp runtime_type(%Runtime.Embedded{}), do: "embedded"
defp live_view_for_type("elixir_standalone"), do: LivebookWeb.SessionLive.ElixirStandaloneLive
defp live_view_for_type("attached"), do: LivebookWeb.SessionLive.AttachedLive
defp live_view_for_type("embedded"), do: LivebookWeb.SessionLive.EmbeddedLive
@impl true
def handle_event("set_runtime_type", %{"type" => type}, socket) do
{:noreply, assign(socket, type: type)}
end
end