defmodule AshHqWeb.Components.DocSidebar do @moduledoc "The left sidebar of the docs pages" use Surface.Component alias AshHqWeb.DocRoutes alias Surface.Components.LiveRedirect prop class, :css_class, default: "" prop libraries, :list, required: true prop extension, :any, default: nil prop guide, :any, default: nil prop library, :any, default: nil prop library_version, :any, default: nil prop selected_versions, :map, default: %{} prop id, :string, required: true prop dsl, :any, required: true prop module, :any, required: true prop sidebar_state, :map, required: true prop collapse_sidebar, :event, required: true prop expand_sidebar, :event, required: true @spec render(any) :: Phoenix.LiveView.Rendered.t() def render(assigns) do ~F""" """ end defp modules_and_categories(libraries) do libraries |> Enum.flat_map(fn library -> library.versions |> Enum.find(&Ash.Resource.loaded?(&1, :modules)) |> case do nil -> [] %{modules: modules} -> modules end end) |> Enum.group_by(&{&1.category_index, &1.category}) |> Enum.sort_by(fn {{index, _}, _} -> index end) |> Enum.map(fn {{_, category}, list} -> {category, list} end) end defp render_dsls(assigns, dsls, path) do ~F""" """ end def render_icon(assigns, "Resource") do ~F""" """ end def render_icon(assigns, "Api") do ~F""" """ end def render_icon(assigns, "DataLayer") do ~F""" """ end def render_icon(assigns, "Flow") do ~F""" """ end def render_icon(assigns, "Notifier") do ~F""" """ end def render_icon(assigns, "Registry") do ~F""" """ end def render_icon(assigns, _) do ~F""" """ end defp guides_by_category(libraries) do libraries |> Enum.flat_map(fn library -> library.versions |> Enum.find(&Ash.Resource.loaded?(&1, :guides)) |> case do nil -> [] %{guides: guides} -> guides end end) |> Enum.group_by(& &1.category) |> Enum.sort_by(fn {category, _guides} -> Enum.find_index(["Tutorials", "Topics", "How To", "Misc"], &(&1 == category)) || :infinity end) |> Enum.map(fn {category, guides} -> {category, Enum.sort_by(guides, & &1.order)} end) end defp get_extensions(libraries) do Enum.flat_map(libraries, fn library -> library.versions |> Enum.find(&Ash.Resource.loaded?(&1, :extensions)) |> case do nil -> [] %{extensions: extensions} -> extensions end end) end end