defmodule AshHqWeb.Components.DslRightNav do
@moduledoc "The right nav shown for Dsls."
use Surface.Component
prop dsls, :list, default: []
prop dsl_target, :string, required: true
def render(assigns) do
~F"""
"""
end
defp render_dsl_nav(assigns, dsl) do
~F"""
<.nav_link dsl={dsl} />
{#for dsl <- child_dsls(@dsls, dsl)}
{render_dsl_nav(assigns, dsl)}
{/for}
"""
end
def nav_link(assigns) do
~F"""
{"#{@dsl.name}"}
"""
end
defp child_dsls(dsls, dsl) do
dsl_path = dsl.path ++ [dsl.name]
dsl_path_count = Enum.count(dsl_path)
Enum.filter(dsls, fn potential_child ->
potential_child_path = potential_child.path ++ [potential_child.name]
List.starts_with?(potential_child_path, dsl_path) &&
Enum.count(potential_child_path) - dsl_path_count == 1
end)
end
end