diff --git a/lib/mv_web/controllers/member_export_controller.ex b/lib/mv_web/controllers/member_export_controller.ex index e9c4a2a..1f70a18 100644 --- a/lib/mv_web/controllers/member_export_controller.ex +++ b/lib/mv_web/controllers/member_export_controller.ex @@ -12,6 +12,7 @@ defmodule MvWeb.MemberExportController do alias Mv.Authorization.Actor alias Mv.Membership.CustomField + alias Mv.Membership.CustomFieldSort alias Mv.Membership.Member alias Mv.Membership.MemberExport alias Mv.Membership.MembersCSV @@ -523,18 +524,22 @@ defmodule MvWeb.MemberExportController do false cfv -> - extracted = extract_sort_value(cfv.value, custom_field.value_type) - not empty_value?(extracted, custom_field.value_type) + not empty_custom_field_value?(cfv.value, custom_field.value_type) end end - defp empty_value?(nil, _type), do: true + defp empty_custom_field_value?(%Ash.Union{value: value, type: type}, _expected_type) do + empty_custom_field_value?(value, type) + end - defp empty_value?(value, type) when type in [:string, :email] and is_binary(value) do + defp empty_custom_field_value?(nil, _type), do: true + + defp empty_custom_field_value?(value, type) + when type in [:string, :email] and is_binary(value) do String.trim(value) == "" end - defp empty_value?(_value, _type), do: false + defp empty_custom_field_value?(_value, _type), do: false defp find_cfv(member, custom_field) do (member.custom_field_values || []) @@ -548,7 +553,7 @@ defmodule MvWeb.MemberExportController do defp extract_member_sort_value(member, custom_field) do case find_cfv(member, custom_field) do nil -> nil - cfv -> extract_sort_value(cfv.value, custom_field.value_type) + cfv -> CustomFieldSort.sort_key(cfv.value, custom_field.value_type) end end @@ -670,15 +675,4 @@ defmodule MvWeb.MemberExportController do |> String.split() |> Enum.map_join(" ", &String.capitalize/1) end - - defp extract_sort_value(%Ash.Union{value: value, type: type}, _), - do: extract_sort_value(value, type) - - defp extract_sort_value(nil, _), do: nil - defp extract_sort_value(value, :string) when is_binary(value), do: value - defp extract_sort_value(value, :integer) when is_integer(value), do: value - defp extract_sort_value(value, :boolean) when is_boolean(value), do: value - defp extract_sort_value(%Date{} = d, :date), do: d - defp extract_sort_value(value, :email) when is_binary(value), do: value - defp extract_sort_value(value, _), do: to_string(value) end