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