defmodule Paleta.Components.Link do use Phoenix.Component alias Paleta.Components.ShortId attr(:path, :string, required: true) attr(:type, :atom, default: :patch, values: [:href, :patch, :navigate]) attr(:rest, :global) attr(:permission, :string, default: "") attr(:permissions, :any, default: []) def view_link(assigns) do assigns = assigns |> assign( :class, "btn h-8 w-8 p-0 text-info hover:bg-info/20 focus:bg-info/20 active:bg-info/25" ) |> assign(:icon, "fa-regular fa-eye") Paleta.Auth.Restricter.do_render(__MODULE__, :_do_link, assigns) end attr(:path, :string, required: true) attr(:type, :atom, default: :patch) attr(:class, :string, default: "") attr(:rest, :global) attr(:permission, :string, default: "") attr(:permissions, :any, default: []) def delete_link(%{class: class} = assigns) do assigns = assigns |> assign( :class, "btn h-8 w-8 p-0 text-error hover:bg-error/20 focus:bg-error/20 active:bg-error/25 #{class}" ) |> assign(:icon, "fa fa-trash-alt") Paleta.Auth.Restricter.do_render(__MODULE__, :_do_link, assigns) end attr(:path, :string, required: true) attr(:type, :atom, default: :patch, values: [:patch, :navigate]) attr(:rest, :global) attr(:permission, :string, default: "") attr(:permissions, :any, default: []) def edit_link(assigns) do assigns = assigns |> assign( :class, "btn h-8 w-8 p-0 text-info hover:bg-info/20 focus:bg-info/20 active:bg-info/25" ) |> assign(:icon, "fa fa-edit") Paleta.Auth.Restricter.do_render(__MODULE__, :_do_link, assigns) end attr(:path, :string, required: true) attr(:id, :string, required: true) attr(:rest, :global) attr(:permission, :string) attr(:permissions, :any, default: []) def id_link(assigns) do Paleta.Auth.Restricter.do_render(__MODULE__, :_do_id_link, assigns) end def _do_id_link(assigns) do ~H""" <.link navigate={@path} class="text-primary transition-colors hover:text-primary-focus dark:text-accent-light dark:hover:text-accent" > """ end @doc """ Renders a back navigation link. ## Examples <.back_link navigate={~p"/posts"}>Back to posts """ attr(:navigate, :any, required: true) slot(:inner_block, required: true) def back_link(assigns) do ~H"""
<.link navigate={@navigate} class="text-sm font-semibold leading-6 text-zinc-900 hover:text-zinc-700" > <%= render_slot(@inner_block) %>
""" end def _do_link(%{type: :href} = assigns) do ~H""" <.link href={@path} class={@class} {@rest}> """ end def _do_link(%{type: :patch} = assigns) do ~H""" <.link patch={@path} class={@class} {@rest}> """ end def _do_link(%{type: :navigate} = assigns) do ~H""" <.link navigate={@path} class={@class} {@rest}> """ end end