Packages
livebook
0.19.8
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/code_cell_settings_component.ex
defmodule LivebookWeb.SessionLive.CodeCellSettingsComponent do
use LivebookWeb, :live_component
alias Livebook.Session
@impl true
def update(assigns, socket) do
cell = assigns.cell
socket =
socket
|> assign(assigns)
|> assign_new(:output_size, fn -> cell.output_size end)
|> assign_new(:output_size_options, fn ->
for %{name: label, size: value} <- Livebook.Notebook.Cell.output_sizes() do
{label, value}
end
end)
|> assign_new(:reevaluate_automatically, fn -> cell.reevaluate_automatically end)
|> assign_new(:continue_on_error, fn -> cell.continue_on_error end)
{:ok, socket}
end
@impl true
def render(assigns) do
~H"""
<div class="flex flex-col space-y-8">
<h3 class="text-2xl font-semibold text-gray-800">
Cell settings
</h3>
<form phx-submit="save" phx-target={@myself}>
<div class="flex flex-col w-full space-y-4 mt-4">
<.switch_field
name="reevaluate_automatically"
label="Reevaluate automatically"
value={@reevaluate_automatically}
/>
<.switch_field
name="continue_on_error"
label="Continue on error"
value={@continue_on_error}
/>
<div class="flex w-full justify-between">
<span class="text-gray-700 flex gap-1 items-center">
Cell output size
</span>
<.select_field
id="cell-output-size"
name="output_size"
aria-label="cell output size"
value={@output_size}
options={@output_size_options}
/>
</div>
</div>
<div class="mt-8 flex justify-begin space-x-2">
<.button type="submit">
Save
</.button>
<.button color="gray" outlined patch={@return_to}>
Cancel
</.button>
</div>
</form>
</div>
"""
end
@impl true
def handle_event(
"save",
%{
"output_size" => output_size,
"reevaluate_automatically" => reevaluate_automatically,
"continue_on_error" => continue_on_error
},
socket
) do
reevaluate_automatically = reevaluate_automatically == "true"
continue_on_error = continue_on_error == "true"
output_size =
case output_size do
"default" -> :default
"wide" -> :wide
"full" -> :full
end
Session.set_cell_attributes(socket.assigns.session.pid, socket.assigns.cell.id, %{
output_size: output_size,
reevaluate_automatically: reevaluate_automatically,
continue_on_error: continue_on_error
})
{:noreply, push_patch(socket, to: socket.assigns.return_to)}
end
end