fix: catch invalid sorting order
This commit is contained in:
parent
b858263176
commit
0d9da9543b
1 changed files with 36 additions and 9 deletions
|
|
@ -207,19 +207,46 @@ defmodule MvWeb.MemberLive.Index do
|
||||||
|
|
||||||
# Function to sort the column if needed
|
# Function to sort the column if needed
|
||||||
defp maybe_sort(query, nil, _), do: query
|
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, :asc) when not is_nil(field), do: Ash.Query.sort(query, [{field, :asc}])
|
||||||
defp maybe_sort(query, field, :desc), do: Ash.Query.sort(query, [{field, :desc}])
|
defp maybe_sort(query, field, :desc) when not is_nil(field), do: Ash.Query.sort(query, [{field, :desc}])
|
||||||
|
defp maybe_sort(query, _, _), do: query
|
||||||
|
|
||||||
|
# Validate that a field is sortable
|
||||||
|
defp valid_sort_field?(field) when is_atom(field) do
|
||||||
|
valid_fields = [
|
||||||
|
:first_name, :last_name, :email, :street, :house_number,
|
||||||
|
:postal_code, :city, :phone_number, :join_date
|
||||||
|
]
|
||||||
|
field in valid_fields
|
||||||
|
end
|
||||||
|
defp valid_sort_field?(_), do: false
|
||||||
|
|
||||||
# Function to maybe update the sort
|
# 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 =
|
# Handle empty strings and nil values
|
||||||
try do
|
field = case sf do
|
||||||
String.to_existing_atom(sf)
|
"" -> socket.assigns.sort_field
|
||||||
rescue
|
nil -> socket.assigns.sort_field
|
||||||
ArgumentError -> socket.assigns.sort_field
|
sf when is_binary(sf) ->
|
||||||
end
|
try do
|
||||||
|
String.to_existing_atom(sf)
|
||||||
|
rescue
|
||||||
|
ArgumentError -> socket.assigns.sort_field
|
||||||
|
end
|
||||||
|
sf when is_atom(sf) -> sf
|
||||||
|
_ -> socket.assigns.sort_field
|
||||||
|
end
|
||||||
|
|
||||||
order = if so in ["asc", "desc"], do: String.to_atom(so), else: socket.assigns.sort_order
|
# Validate that the field is actually sortable
|
||||||
|
field = if valid_sort_field?(field), do: field, else: socket.assigns.sort_field
|
||||||
|
|
||||||
|
# Handle empty strings and nil values for sort order
|
||||||
|
order = case so do
|
||||||
|
"" -> socket.assigns.sort_order
|
||||||
|
nil -> socket.assigns.sort_order
|
||||||
|
so when so in ["asc", "desc"] -> String.to_atom(so)
|
||||||
|
_ -> socket.assigns.sort_order
|
||||||
|
end
|
||||||
|
|
||||||
socket
|
socket
|
||||||
|> assign(:sort_field, field)
|
|> assign(:sort_field, field)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue