defmodule LivebookWeb.SessionLive.SectionComponent do use LivebookWeb, :live_component alias Phoenix.LiveView.JS def render(assigns) do ~H"""

<%= @section_view.name %>

<.remix_icon icon="git-branch-line" class="text-lg font-normal flip-horizontally leading-none" />
<.branching_menu section_view={@section_view} scope="subheading" position={:bottom_left}>
from ”<%= @section_view.parent.name %>”

<%= pluralize(length(@section_view.cell_views), "cell", "cells") %> collapsed

<.live_component module={LivebookWeb.SessionLive.InsertButtonsComponent} id={"insert-buttons-#{@section_view.id}-first"} persistent={@section_view.cell_views == []} smart_cell_definitions={@smart_cell_definitions} example_snippet_definitions={@example_snippet_definitions} runtime={@runtime} section_id={@section_view.id} cell_id={nil} session_id={@session_id} default_language={@default_language} /> <%= for {cell_view, index} <- Enum.with_index(@section_view.cell_views) do %> <.live_component module={LivebookWeb.SessionLive.CellComponent} id={cell_view.id} session_id={@session_id} session_pid={@session_pid} client_id={@client_id} runtime={@runtime} installing?={@installing?} allowed_uri_schemes={@allowed_uri_schemes} cell_view={cell_view} /> <.live_component module={LivebookWeb.SessionLive.InsertButtonsComponent} id={"insert-buttons-#{@section_view.id}-#{index}"} persistent={false} smart_cell_definitions={@smart_cell_definitions} example_snippet_definitions={@example_snippet_definitions} runtime={@runtime} section_id={@section_view.id} cell_id={cell_view.id} session_id={@session_id} default_language={@default_language} /> <% end %>
""" end attr :section_view, :map, required: true attr :scope, :string, required: true attr :position, :atom, required: true attr :disabled, :boolean, default: false slot :inner_block, required: true defp branching_menu(assigns) do ~H""" <.menu id={"section-#{@section_view.id}-branch-menu-#{@scope}"} position={@position} disabled={@disabled} > <:toggle> <%= render_slot(@inner_block) %> <%= if @section_view.parent do %> <.menu_item>
<% end %> <.menu_item :for={parent <- @section_view.valid_parents}> """ end defp cannot_branch_out_reason(%{valid_parents: []}), do: "No section to branch out from" defp cannot_branch_out_reason(%{has_children?: true}), do: "Cannot branch out this section because\nother sections branch from it" defp cannot_branch_out_reason(_section_view), do: nil end