From 10ad32eb6feb681deebeb8886de36afcdd4060ca Mon Sep 17 00:00:00 2001 From: Moritz Date: Tue, 24 Feb 2026 09:42:10 +0100 Subject: [PATCH] fix: treat URL with only custom fields as valid in ?fields= mode Consider visible custom fields in compute_final_field_selection so that a link with only custom_field_X is not wrongly treated as invalid and reverted to session/global. Add test for URL containing only custom field. --- lib/mv_web/live/member_live/index.ex | 5 +++-- .../member_live/index_field_visibility_test.exs | 12 ++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/mv_web/live/member_live/index.ex b/lib/mv_web/live/member_live/index.ex index 8fb50b9..3283b5c 100644 --- a/lib/mv_web/live/member_live/index.ex +++ b/lib/mv_web/live/member_live/index.ex @@ -821,9 +821,10 @@ defmodule MvWeb.MemberLive.Index do only_url = FieldVisibility.selection_from_url_only(url_selection, socket.assigns.all_custom_fields) - visible = FieldVisibility.get_visible_member_fields(only_url) + visible_members = FieldVisibility.get_visible_member_fields(only_url) + visible_custom = FieldVisibility.get_visible_custom_fields(only_url) - if visible == [] do + if visible_members == [] and visible_custom == [] do # URL had only invalid field names; fall back to session + global. compute_final_field_selection(false, url_selection, socket) else diff --git a/test/mv_web/member_live/index_field_visibility_test.exs b/test/mv_web/member_live/index_field_visibility_test.exs index 8de9c7e..79d078b 100644 --- a/test/mv_web/member_live/index_field_visibility_test.exs +++ b/test/mv_web/member_live/index_field_visibility_test.exs @@ -361,6 +361,18 @@ defmodule MvWeb.MemberLive.IndexFieldVisibilityTest do assert html =~ "Alice" end + test "URL with only custom field keeps custom field visible (no invalid fallback)", %{ + conn: conn, + custom_field: custom_field + } do + conn = conn_with_oidc_user(conn) + id = custom_field.id + {:ok, _view, html} = live(conn, "/members?fields=custom_field_#{id}") + + # Selection must not be treated as invalid; custom field column stays visible + assert html =~ "M001" or html =~ custom_field.name + end + test "handles rapid toggling", %{conn: conn} do conn = conn_with_oidc_user(conn) {:ok, view, _html} = live(conn, "/members")