defmodule MoonWeb.Pages.Components.IconsPage do @moduledoc false use MoonWeb, :live_view alias MoonIcons.Helpers.Icons alias Moon.Icon alias MoonWeb.Components.Page alias MoonWeb.Components.ComponentPageDescription alias MoonWeb.Components.ExampleAndCode alias MoonWeb.Components.IconsBlock alias MoonWeb.Components.IconItem alias MoonWeb.Components.PageSection alias MoonWeb.Pages.IconsPage.IconsImportDisplay data(selected_icons, :list, default: []) data(breadcrumbs, :any, default: [ %{ to: "#", name: "Components" }, %{ to: "/components/icons", name: "Icons" } ] ) def handle_params(_params, uri, socket) do {:noreply, assign(socket, uri: uri)} end def render(assigns) do ~F"""

Moon DS provides a set of commonly used interface icons you can use in your project.

<:example> <:code>{default_code()} <:example> <:code>{icons_code()}

Please select icons for Import.

{get_import_text_by_attribute(assigns, @selected_icons)} {get_import_text_by_name(assigns, @selected_icons)} {#for name <- Icons.group_names()} {#for icon_name <- apply(Icons, String.to_existing_atom("list_#{name}"), [])} {/for} {/for}
""" end def default_code do """ """ end def icons_code do """ """ end def handle_event( "add_selected_icon", %{"icon-value" => value}, socket ) do selected_icons = Enum.concat(socket.assigns.selected_icons, [value]) socket = socket |> assign(:selected_icons, selected_icons) {:noreply, socket} end defp get_import_text_by_attribute(assigns, selected_icons) do ~F""" alias Moon.Icon {#for icon <- selected_icons}{icon_string(icon)}{/for} """ end defp icon_string(name) do """ """ end defp get_import_text_by_name(assigns, selected_icons) do case_converted_list = Enum.map(selected_icons, fn i -> Macro.camelize(i) end) import_name_string = Enum.join(case_converted_list, ", ") ~F""" {get_alias_string(import_name_string)} {#for icon <- case_converted_list}{get_icon_tag(icon)}{/for} """ end defp get_alias_string(names) do # credo:disable-for-next-line Credo.Check.Consistency.SpaceInParentheses "alias Moon.Icons.{#{names}}" end defp get_icon_tag(name) do "<#{name} />\n" end end