defmodule LiveDebugger.App.Debugger.Web.Components do @moduledoc """ Components used in the debugger page of the LiveDebugger application. """ use LiveDebugger.App.Web, :component alias LiveDebugger.Structs.LvProcess alias LiveDebugger.App.Utils.Parsers alias LiveDebugger.App.Web.Helpers.Routes, as: RoutesHelper attr(:lv_process, LvProcess, required: true) attr(:id, :string, required: true) attr(:icon, :string, default: "", doc: "Icon to add before module name. If empty string no icon added." ) def live_view_link(assigns) do assigns = assign(assigns, :module_string, Parsers.module_to_string(assigns.lv_process.module)) ~H""" <.link href={RoutesHelper.debugger_node_inspector(@lv_process.pid)} class="w-full flex gap-1 text-primary-text" > <.icon :if={@icon != ""} name={@icon} class="w-4 h-4 shrink-0 text-link-primary" /> <.tooltip id={@id} content={"#{@module_string} | #{@lv_process.socket_id} | #{Parsers.pid_to_string(@lv_process.pid)}"} > """ end attr(:lv_processes, :map, required: true) attr(:current_lv_process_pid, :any, default: nil) def associated_lv_processes_tree(assigns) do ~H""" <.list elements={@lv_processes} class="!p-0 overflow-x-hidden"> <:item :let={{parent_lv_process, lv_processes}}>
<.list_element lv_process={parent_lv_process} current_lv_process_pid={@current_lv_process_pid} />
<.lv_processes_tree lv_processes={lv_processes} current_lv_process_pid={@current_lv_process_pid} /> """ end attr(:lv_processes, :map, required: true) attr(:current_lv_process_pid, :any, default: nil) def lv_processes_tree(assigns) do ~H""" <.list :if={@lv_processes} elements={@lv_processes} item_class="group" class="!p-0 overflow-x-hidden" > <:item :let={{parent_lv_process, lv_processes}}>
<.nested_indent /> <.list_element lv_process={parent_lv_process} current_lv_process_pid={@current_lv_process_pid} />
<.nested_indent single_entry?={false} /> <.lv_processes_tree lv_processes={lv_processes} current_lv_process_pid={@current_lv_process_pid} />
""" end attr(:single_entry?, :boolean, default: true) def nested_indent(assigns) do ~H"""
""" end attr(:lv_process, LvProcess, required: true) attr(:current_lv_process_pid, :any, default: nil) def list_element(assigns) do assigns = assign(assigns, :module_string, Parsers.module_to_string(assigns.lv_process.module)) ~H"""
<.tooltip id={Parsers.pid_to_string(@lv_process.pid) <> "_tooltip"} content={"#{@module_string} | #{@lv_process.socket_id}"} position="left" class="w-full" >
""" end end