defmodule LivebookWeb.SessionLive.SectionComponent do use LivebookWeb, :live_component alias Phoenix.LiveView.JS def render(assigns) do ~H"""
<.icon_button aria-label="collapse section" data-el-section-collapse-button phx-click={ JS.set_attribute({"data-js-collapsed", ""}, to: ~s/section[data-section-id="#{@section_view.id}"]/ ) } > <.remix_icon icon="arrow-down-s-line" /> <.icon_button aria-label="expand section" data-el-section-expand-button phx-click={ JS.remove_attribute("data-js-collapsed", to: ~s/section[data-section-id="#{@section_view.id}"]/ ) } > <.remix_icon icon="arrow-right-s-line" />

<%= @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}”

{LivebookWeb.HTMLHelpers.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_status={@runtime_status} 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_status={@runtime_status} 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_status={@runtime_status} 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, :string, 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