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"
>