defmodule OutlookWeb.HtmlTreeComponent do
use Phoenix.Component
# use OutlookWeb, :html
import OutlookWeb.CoreComponents
alias Phoenix.LiveView.JS
attr :tree_items, :list, required: true
def treeview(assigns) do
~H"""
<%= for tree_item <- @tree_items do %>
<%= case tree_item do %>
<% %{node: %{type: :element}} = item -> %>
<.tree_element node={item.node} level={item.level}>
<% %{node: %{type: :text}} = item -> %>
<.tree_text node={item.node} level={item.level}>
<% %{node: %{type: :comment}} = item -> %>
<.tree_comment node={item.node} level={item.level}>
<% end %>
<% end %>
<.link phx-click={JS.push("apply_modifier", value: %{modifier: :unwrap})}>
<.button title="unwraps selected elements">Unwrap
<.link phx-click={JS.push("partition_text", value: %{modifier: :unwrap})}>
<.button title="splits text into sentences">Partition
"""
end
def tree_element(assigns) do
~H"""
<%= "#{String.duplicate(" ", @level)}<#{@node.name}>" %>
"""
end
def tree_text(assigns) do
~H"""
<%= "#{String.duplicate(" ", @level)}\"#{String.slice(@node.content, 0, 15)}...\"\n" %>
"""
end
def tree_comment(assigns) do
~H"""
<%= "#{String.duplicate(" ", @level)}\n" %>
"""
end
end