docs: formatting, docs and accessibility fix
This commit is contained in:
parent
d9e48a37d2
commit
c3502a326e
2 changed files with 26 additions and 35 deletions
|
|
@ -14,32 +14,29 @@ defmodule MvWeb.Components.SortHeaderComponent do
|
||||||
{:ok, assign(socket, assigns)}
|
{:ok, assign(socket, assigns)}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Check if we can add the aria-sort label directly to the daisyUI header
|
||||||
|
# aria-sort={aria_sort(@field, @sort_field, @sort_order)}
|
||||||
@impl true
|
@impl true
|
||||||
def render(assigns) do
|
def render(assigns) do
|
||||||
~H"""
|
~H"""
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
aria-sort={aria_sort(@field, @sort_field, @sort_order)}
|
aria-label={aria_sort(@field, @sort_field, @sort_order)}
|
||||||
class="btn btn-ghost select-none"
|
class="btn btn-ghost select-none"
|
||||||
phx-click="sort"
|
phx-click="sort"
|
||||||
phx-value-field={@field}
|
phx-value-field={@field}
|
||||||
phx-target={@myself}
|
phx-target={@myself}
|
||||||
|
data-testid={@field}
|
||||||
>
|
>
|
||||||
{@label}
|
{@label}
|
||||||
<%= if @sort_field == @field do %>
|
<%= if @sort_field == @field do %>
|
||||||
<.icon name={if @sort_order == :asc, do: "hero-chevron-up", else: "hero-chevron-down"} />
|
<.icon name={if @sort_order == :asc, do: "hero-chevron-up", else: "hero-chevron-down"} />
|
||||||
<% else %>
|
<% else %>
|
||||||
<.icon name="hero-chevron-up-down" class="opacity-40" />
|
<.icon
|
||||||
|
name="hero-chevron-up-down"
|
||||||
|
class="opacity-40"
|
||||||
|
/>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<!-- Screen Reader Info -->
|
|
||||||
<span class="sr-only">
|
|
||||||
({if @sort_field == @field do
|
|
||||||
if @sort_order == :asc, do: gettext("ascending"), else: gettext("descending")
|
|
||||||
else
|
|
||||||
gettext("not sorted")
|
|
||||||
end})
|
|
||||||
</span>
|
|
||||||
</button>
|
</button>
|
||||||
"""
|
"""
|
||||||
end
|
end
|
||||||
|
|
@ -55,10 +52,10 @@ defmodule MvWeb.Components.SortHeaderComponent do
|
||||||
# -------------------------------------------------
|
# -------------------------------------------------
|
||||||
defp aria_sort(field, sort_field, dir) when field == sort_field do
|
defp aria_sort(field, sort_field, dir) when field == sort_field do
|
||||||
case dir do
|
case dir do
|
||||||
:asc -> "ascending"
|
:asc -> gettext("ascending")
|
||||||
:desc -> "descending"
|
:desc -> gettext("descending")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp aria_sort(_, _, _), do: "none"
|
defp aria_sort(_, _, _), do: gettext("Click to sort")
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -171,6 +171,21 @@ defmodule MvWeb.MemberLive.Index do
|
||||||
assign(socket, :members, members)
|
assign(socket, :members, members)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# -------------------------------------------------------------
|
||||||
|
# Helper Functions
|
||||||
|
# -------------------------------------------------------------
|
||||||
|
|
||||||
|
# Functions to toggle sorting order
|
||||||
|
defp toggle_order(:asc), do: :desc
|
||||||
|
defp toggle_order(:desc), do: :asc
|
||||||
|
defp toggle_order(nil), do: :asc
|
||||||
|
|
||||||
|
# Function to sort the column if needed
|
||||||
|
defp maybe_sort(query, nil, _), do: query
|
||||||
|
defp maybe_sort(query, field, :asc), do: Ash.Query.sort(query, [{field, :asc}])
|
||||||
|
defp maybe_sort(query, field, :desc), do: Ash.Query.sort(query, [{field, :desc}])
|
||||||
|
|
||||||
|
# Function to maybe update the sort
|
||||||
defp maybe_update_sort(socket, %{"sort_field" => sf, "sort_order" => so}) do
|
defp maybe_update_sort(socket, %{"sort_field" => sf, "sort_order" => so}) do
|
||||||
field =
|
field =
|
||||||
try do
|
try do
|
||||||
|
|
@ -181,31 +196,10 @@ defmodule MvWeb.MemberLive.Index do
|
||||||
|
|
||||||
order = if so in ["asc", "desc"], do: String.to_atom(so), else: socket.assigns.sort_order
|
order = if so in ["asc", "desc"], do: String.to_atom(so), else: socket.assigns.sort_order
|
||||||
|
|
||||||
IO.inspect(order)
|
|
||||||
|
|
||||||
socket
|
socket
|
||||||
|> assign(:sort_field, field)
|
|> assign(:sort_field, field)
|
||||||
|> assign(:sort_order, order)
|
|> assign(:sort_order, order)
|
||||||
end
|
end
|
||||||
|
|
||||||
# -------------------------------------------------------------
|
|
||||||
# Helper Functions
|
|
||||||
# -------------------------------------------------------------
|
|
||||||
|
|
||||||
# Functions to toggle sorting order
|
|
||||||
defp toggle_order(:asc), do: :desc
|
|
||||||
defp toggle_order(:desc), do: :asc
|
|
||||||
defp toggle_order(nil), do: :asc
|
|
||||||
|
|
||||||
# Function to turn a string into an atom only if it already exists
|
|
||||||
defp maybe_atom(nil), do: nil
|
|
||||||
defp maybe_atom(atom) when is_atom(atom), do: atom
|
|
||||||
defp maybe_atom(str) when is_binary(str), do: String.to_existing_atom(str)
|
|
||||||
|
|
||||||
# Function to sort the column if needed
|
|
||||||
defp maybe_sort(query, nil, _), do: query
|
|
||||||
defp maybe_sort(query, field, :asc), do: Ash.Query.sort(query, [{field, :asc}])
|
|
||||||
defp maybe_sort(query, field, :desc), do: Ash.Query.sort(query, [{field, :desc}])
|
|
||||||
# no changes
|
|
||||||
defp maybe_update_sort(socket, _), do: socket
|
defp maybe_update_sort(socket, _), do: socket
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue