feat(member): make overview columns sortable through accessible sort headers
This commit is contained in:
parent
dfc616257d
commit
0c375234c8
9 changed files with 350 additions and 51 deletions
|
|
@ -1450,7 +1450,9 @@ defmodule MvWeb.MemberLive.Index do
|
|||
defp valid_sort_field_db_or_custom?(field) when is_atom(field) do
|
||||
non_sortable_fields = [:notes]
|
||||
valid_fields = Mv.Constants.member_fields() -- non_sortable_fields
|
||||
field in valid_fields or custom_field_sort?(field) or field in [:groups, :membership_fee_type]
|
||||
|
||||
field in valid_fields or custom_field_sort?(field) or
|
||||
field in [:groups, :membership_fee_type, :name, :address]
|
||||
end
|
||||
|
||||
defp valid_sort_field_db_or_custom?(field) when is_binary(field) do
|
||||
|
|
@ -1458,6 +1460,8 @@ defmodule MvWeb.MemberLive.Index do
|
|||
cond do
|
||||
field == "groups" -> :groups
|
||||
field == "membership_fee_type" -> :membership_fee_type
|
||||
field == "name" -> :name
|
||||
field == "address" -> :address
|
||||
true -> safe_member_field_atom_only(field)
|
||||
end
|
||||
|
||||
|
|
@ -1508,10 +1512,16 @@ defmodule MvWeb.MemberLive.Index do
|
|||
defp determine_field(default, ""), do: default
|
||||
defp determine_field(default, nil), do: default
|
||||
|
||||
# Computed/pseudo fields that are nonetheless sortable (they resolve to DB
|
||||
# sort keys in OverviewQuery): groups aggregate and the composite Name/Address
|
||||
# columns. Other computed fields (e.g. membership_fee_status) are not sortable.
|
||||
@sortable_computed_fields [:groups, :name, :address]
|
||||
|
||||
defp determine_field(default, sf) when is_binary(sf) do
|
||||
# Handle "groups" specially - it's in computed_member_fields() but can be sorted
|
||||
if sf == "groups" do
|
||||
:groups
|
||||
sortable_strings = Enum.map(@sortable_computed_fields, &Atom.to_string/1)
|
||||
|
||||
if sf in sortable_strings do
|
||||
String.to_existing_atom(sf)
|
||||
else
|
||||
computed_strings = Enum.map(FieldVisibility.computed_member_fields(), &Atom.to_string/1)
|
||||
|
||||
|
|
@ -1522,9 +1532,8 @@ defmodule MvWeb.MemberLive.Index do
|
|||
end
|
||||
|
||||
defp determine_field(default, sf) when is_atom(sf) do
|
||||
# Handle :groups specially - it's in computed_member_fields() but can be sorted
|
||||
if sf == :groups do
|
||||
:groups
|
||||
if sf in @sortable_computed_fields do
|
||||
sf
|
||||
else
|
||||
if sf in FieldVisibility.computed_member_fields(),
|
||||
do: default,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue