defmodule LivebookWeb.SessionLive.InputCellSettingsComponent do
use LivebookWeb, :live_component
alias Livebook.Session
@impl true
def update(assigns, socket) do
cell = assigns.cell
socket =
socket
|> assign(assigns)
|> assign_new(:name, fn -> cell.name end)
|> assign_new(:type, fn -> cell.type end)
|> assign_new(:reactive, fn -> cell.reactive end)
{:ok, socket}
end
@impl true
def render(assigns) do
~L"""
"""
end
@impl true
def handle_event("validate", params, socket) do
attrs = params_to_attrs(params)
{:noreply, assign(socket, attrs)}
end
def handle_event("save", params, socket) do
attrs = params_to_attrs(params)
Session.set_cell_attributes(socket.assigns.session_id, socket.assigns.cell.id, attrs)
{:noreply, push_patch(socket, to: socket.assigns.return_to)}
end
defp params_to_attrs(params) do
name = params["name"]
type = params["type"] |> String.to_existing_atom()
reactive = Map.has_key?(params, "reactive")
%{name: name, type: type, reactive: reactive}
end
end