diff --git a/.gitignore b/.gitignore index a432dc9..30d9271 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,4 @@ node_modules # Ignore Surface generated files assets/js/_hooks/ assets/css/_components.css +assets/css/_variants.js diff --git a/lib/surface/catalogue/components/component_tree.ex b/lib/surface/catalogue/components/component_tree.ex index 4888434..3964396 100644 --- a/lib/surface/catalogue/components/component_tree.ex +++ b/lib/surface/catalogue/components/component_tree.ex @@ -8,6 +8,7 @@ defmodule Surface.Catalogue.Components.ComponentTree do prop selected_component, :string prop single_catalogue?, :boolean prop components, :map + prop examples_and_playgrounds, :map def render(assigns) do ~F""" @@ -15,61 +16,167 @@ defmodule Surface.Catalogue.Components.ComponentTree do class="section column is-narrow is-narrow-mobile is-fullheight is-hidden-mobile" style="background-color: #f5f5f5; min-width: 270px;" > - {render_node(assigns, @components, @selected_component, @single_catalogue?)} + {render_node( + assigns, + @components, + @selected_component, + @single_catalogue?, + @examples_and_playgrounds + )} """ end - def render_node(assigns, node, selected_component, single_catalogue?, parent_keys \\ []) do + def render_node( + assigns, + node, + selected_component, + single_catalogue?, + parent_keys \\ [], + examples_and_playgrounds + ) do ~F""" """ end + def maybe_render_home_entry(assigns, parent_keys, selected_component) do + ~F""" +
  • + + + + + Home + +
  • + """ + end + + def maybe_render_component_entry( + assigns, + module, + mod_path, + selected_component, + component_type, + key, + examples_and_playgrounds + ) do + ~F""" +
  • + + + + + {key} + +
  • + """ + end + + def maybe_render_single_catalog_components_entry( + assigns, + value, + selected_component, + single_catalogue?, + parent_keys, + mod_path, + examples_and_playgrounds + ) do + ~F""" +
  • + + + + + Components + + {render_node( + assigns, + value, + selected_component, + single_catalogue?, + mod_path, + examples_and_playgrounds + )} +
  • + """ + end + + def maybe_render_folder_entry( + assigns, + has_child_selected?, + key, + value, + selected_component, + single_catalogue?, + parent_keys, + mod_path, + examples_and_playgrounds + ) do + ~F""" +
  • + + + + + {key} + + {render_node( + assigns, + value, + selected_component, + single_catalogue?, + mod_path, + examples_and_playgrounds + )} +
  • + """ + end + defp component_icon(type) do case type do Surface.MacroComponent -> @@ -111,4 +218,12 @@ defmodule Surface.Catalogue.Components.ComponentTree do has_child_selected?(parent_keys, selected_component) or (single_catalogue? and length(parent_keys) == 1) end + + defp has_examples_or_playground?(module, examples_and_playgrounds) do + case examples_and_playgrounds[module] do + %{examples: [_one | _rest]} -> true + %{playgrounds: [_one | _rest]} -> true + _ -> false + end + end end diff --git a/lib/surface/catalogue/live/page_live.ex b/lib/surface/catalogue/live/page_live.ex index 11356bb..0b14372 100644 --- a/lib/surface/catalogue/live/page_live.ex +++ b/lib/surface/catalogue/live/page_live.ex @@ -81,6 +81,7 @@ defmodule Surface.Catalogue.PageLive do components={@components} selected_component={@component_name} single_catalogue?={@single_catalogue?} + examples_and_playgrounds={@examples_and_playgrounds} />