2021-04-02 20:00:49 +08:00
|
|
|
defmodule LivebookWeb.SessionLive.SectionComponent do
|
2021-03-04 05:56:28 +08:00
|
|
|
use LivebookWeb, :live_component
|
2021-02-11 23:35:32 +08:00
|
|
|
|
|
|
|
def render(assigns) do
|
2021-07-07 20:32:49 +08:00
|
|
|
~H"""
|
|
|
|
<div data-element="section" data-section-id={@section_view.id}>
|
2021-03-20 21:10:15 +08:00
|
|
|
<div class="flex space-x-4 items-center" data-element="section-headline">
|
2021-07-07 20:32:49 +08:00
|
|
|
<h2 class="flex-grow text-gray-800 font-semibold text-2xl px-1 -ml-1 rounded-lg border
|
|
|
|
border-transparent hover:border-blue-200 focus:border-blue-300"
|
2021-03-20 21:10:15 +08:00
|
|
|
data-element="section-name"
|
2021-07-07 20:32:49 +08:00
|
|
|
id={@section_view.html_id}
|
2021-03-20 21:10:15 +08:00
|
|
|
contenteditable
|
|
|
|
spellcheck="false"
|
|
|
|
phx-blur="set_section_name"
|
2021-07-07 20:32:49 +08:00
|
|
|
phx-value-section_id={@section_view.id}
|
2021-03-20 21:10:15 +08:00
|
|
|
phx-hook="ContentEditable"
|
2021-03-26 06:29:22 +08:00
|
|
|
data-update-attribute="phx-value-name"><%= @section_view.name %></h2>
|
2021-03-20 21:10:15 +08:00
|
|
|
<%# ^ Note it's important there's no space between <h2> and </h2>
|
2021-03-26 06:29:22 +08:00
|
|
|
because we want the content to exactly match section name. %>
|
2021-03-20 21:10:15 +08:00
|
|
|
<div class="flex space-x-2 items-center" data-element="section-actions">
|
2021-04-26 21:24:43 +08:00
|
|
|
<span class="tooltip top" aria-label="Link">
|
2021-07-07 20:32:49 +08:00
|
|
|
<a href={"##{@section_view.html_id}"} class="icon-button">
|
|
|
|
<.remix_icon icon="link" class="text-xl" />
|
2021-04-26 21:24:43 +08:00
|
|
|
</a>
|
|
|
|
</span>
|
2021-07-16 00:19:36 +08:00
|
|
|
<%= if @section_view.valid_parents != [] and not @section_view.has_children? do %>
|
|
|
|
<div class="relative" id={"section-#{@section_view.id}-branch-menu"} phx-hook="Menu" data-element="menu">
|
|
|
|
<span class="tooltip top" aria-label="Branch out from">
|
|
|
|
<button class="icon-button" data-toggle>
|
|
|
|
<.remix_icon icon="git-branch-line" class="text-xl flip-horizontally" />
|
|
|
|
</button>
|
|
|
|
</span>
|
|
|
|
<div class="menu" data-content>
|
|
|
|
<%= for parent <- @section_view.valid_parents do %>
|
|
|
|
<%= if @section_view.parent && @section_view.parent.id == parent.id do %>
|
|
|
|
<button class="menu__item text-gray-900"
|
|
|
|
phx-click="unset_section_parent"
|
|
|
|
phx-value-section_id={@section_view.id}>
|
|
|
|
<.remix_icon icon="arrow-right-s-line" />
|
|
|
|
<span class="font-medium"><%= parent.name %></span>
|
|
|
|
</button>
|
|
|
|
<% else %>
|
|
|
|
<button class="menu__item text-gray-500"
|
|
|
|
phx-click="set_section_parent"
|
|
|
|
phx-value-section_id={@section_view.id}
|
|
|
|
phx-value-parent_id={parent.id}>
|
|
|
|
<.remix_icon icon="arrow-right-s-line" />
|
|
|
|
<span class="font-medium"><%= parent.name %></span>
|
|
|
|
</button>
|
|
|
|
<% end %>
|
|
|
|
<% end %>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<% end %>
|
2021-04-20 18:12:29 +08:00
|
|
|
<span class="tooltip top" aria-label="Move up">
|
|
|
|
<button class="icon-button"
|
|
|
|
phx-click="move_section"
|
2021-07-07 20:32:49 +08:00
|
|
|
phx-value-section_id={@section_view.id}
|
2021-04-20 18:12:29 +08:00
|
|
|
phx-value-offset="-1">
|
2021-07-07 20:32:49 +08:00
|
|
|
<.remix_icon icon="arrow-up-s-line" class="text-xl" />
|
2021-04-20 18:12:29 +08:00
|
|
|
</button>
|
|
|
|
</span>
|
|
|
|
<span class="tooltip top" aria-label="Move down">
|
|
|
|
<button class="icon-button"
|
|
|
|
phx-click="move_section"
|
2021-07-07 20:32:49 +08:00
|
|
|
phx-value-section_id={@section_view.id}
|
2021-04-20 18:12:29 +08:00
|
|
|
phx-value-offset="1">
|
2021-07-07 20:32:49 +08:00
|
|
|
<.remix_icon icon="arrow-down-s-line" class="text-xl" />
|
2021-04-20 18:12:29 +08:00
|
|
|
</button>
|
|
|
|
</span>
|
2021-07-16 00:19:36 +08:00
|
|
|
<%= unless @section_view.has_children? do %>
|
|
|
|
<span class="tooltip top" aria-label="Delete">
|
|
|
|
<%= live_patch to: Routes.session_path(@socket, :delete_section, @session_id, @section_view.id),
|
|
|
|
class: "icon-button" do %>
|
|
|
|
<.remix_icon icon="delete-bin-6-line" class="text-xl" />
|
|
|
|
<% end %>
|
|
|
|
</span>
|
|
|
|
<% end %>
|
2021-02-11 23:35:32 +08:00
|
|
|
</div>
|
|
|
|
</div>
|
2021-07-16 00:19:36 +08:00
|
|
|
<%= if @section_view.parent do %>
|
|
|
|
<h3 class="mt-1 flex items-end space-x-1 text-sm font-semibold text-gray-800">
|
|
|
|
<span class="tooltip bottom" aria-label={"This section branches out from the main flow\nand can be evaluated in parallel"}>
|
|
|
|
<.remix_icon icon="git-branch-line" class="text-lg font-normal flip-horizontally leading-none" />
|
|
|
|
</span>
|
|
|
|
<span class="leading-none">from ”<%= @section_view.parent.name %>”</span>
|
|
|
|
</h3>
|
|
|
|
<% end %>
|
2021-03-30 18:35:11 +08:00
|
|
|
<div class="container">
|
2021-03-20 21:10:15 +08:00
|
|
|
<div class="flex flex-col space-y-1">
|
2021-03-26 06:29:22 +08:00
|
|
|
<%= for {cell_view, index} <- Enum.with_index(@section_view.cell_views) do %>
|
2021-06-03 19:53:03 +08:00
|
|
|
<%= live_component LivebookWeb.SessionLive.InsertButtonsComponent,
|
2021-03-26 06:29:22 +08:00
|
|
|
id: "#{@section_view.id}:#{index}",
|
2021-03-25 05:26:26 +08:00
|
|
|
persistent: false,
|
2021-03-26 06:29:22 +08:00
|
|
|
section_id: @section_view.id,
|
2021-06-29 05:46:50 +08:00
|
|
|
insert_cell_index: index %>
|
2021-07-07 20:32:49 +08:00
|
|
|
|
2021-06-03 19:53:03 +08:00
|
|
|
<%= live_component LivebookWeb.SessionLive.CellComponent,
|
2021-03-26 06:29:22 +08:00
|
|
|
id: cell_view.id,
|
2021-03-04 05:23:48 +08:00
|
|
|
session_id: @session_id,
|
2021-03-26 06:29:22 +08:00
|
|
|
cell_view: cell_view %>
|
2021-03-25 01:37:50 +08:00
|
|
|
<% end %>
|
2021-07-07 20:32:49 +08:00
|
|
|
|
2021-06-03 19:53:03 +08:00
|
|
|
<%= live_component LivebookWeb.SessionLive.InsertButtonsComponent,
|
2021-03-26 06:29:22 +08:00
|
|
|
id: "#{@section_view.id}:last",
|
|
|
|
persistent: @section_view.cell_views == [],
|
|
|
|
section_id: @section_view.id,
|
2021-06-29 05:46:50 +08:00
|
|
|
insert_cell_index: length(@section_view.cell_views) %>
|
2021-02-11 23:35:32 +08:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
"""
|
|
|
|
end
|
|
|
|
end
|