defmodule PetalComponents.Alert do use Phoenix.Component import PetalComponents.Helpers attr(:color, :string, default: "info", values: ["info", "success", "warning", "danger"] ) attr(:with_icon, :boolean, default: false, doc: "adds some icon base classes") attr(:class, :string, default: "", doc: "CSS class for parent div") attr(:heading, :string, default: nil, doc: "label your heading") attr(:label, :string, default: nil, doc: "label your alert") attr(:rest, :global) attr(:close_button_properties, :list, default: nil, doc: "a list of properties passed to the close button" ) slot(:inner_block) def alert(assigns) do assigns = assigns |> assign(:classes, alert_classes(assigns)) ~H""" <%= unless label_blank?(@label, @inner_block) do %>
<%= if @with_icon do %>
<.get_icon color={@color} />
<% end %>
<%= if @heading do %>
<%= @heading %>
<% end %>
<%= render_slot(@inner_block) || @label %>
<%= if @close_button_properties do %> <% end %>
<% end %> """ end defp alert_classes(opts) do opts = %{ color: opts[:color] || "info", class: opts[:class] || "" } base_classes = "pc-alert-base-classes" color_css = get_color_classes(opts.color) custom_classes = opts.class build_class([base_classes, color_css, custom_classes]) end defp get_color_classes("info"), do: "pc-alert--info" defp get_color_classes("success"), do: "pc-alert--success" defp get_color_classes("warning"), do: "pc-alert--warning" defp get_color_classes("danger"), do: "pc-alert--danger" defp get_dismiss_icon_classes("info"), do: "pc-alert__dismiss-button--info" defp get_dismiss_icon_classes("success"), do: "pc-alert__dismiss-button--success" defp get_dismiss_icon_classes("warning"), do: "pc-alert__dismiss-button--warning" defp get_dismiss_icon_classes("danger"), do: "pc-alert__dismiss-button--danger" defp get_icon(%{color: "info"} = assigns) do ~H""" """ end defp get_icon(%{color: "success"} = assigns) do ~H""" """ end defp get_icon(%{color: "warning"} = assigns) do ~H""" """ end defp get_icon(%{color: "danger"} = assigns) do ~H""" """ end defp label_blank?(label, inner_block) do (!label || label == "") && inner_block == [] end end