diff --git a/CHANGELOG.md b/CHANGELOG.md index 67b67dd..dc877fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ ### Enhancements * [[`ISSUE-19`](https://github.com/thiagoesteves/observer_web/issues/19)] Adding copy to clipboard button to copy tracing text. + * [[`ISSUE-21`](https://github.com/thiagoesteves/observer_web/issues/21)] Add non case sensitive search for modules and functions for tracing. ## 0.1.10 🚀 (2025-05-26) diff --git a/lib/web/components/multi_select_list.ex b/lib/web/components/multi_select_list.ex index 0e9e008..ded8a92 100644 --- a/lib/web/components/multi_select_list.ex +++ b/lib/web/components/multi_select_list.ex @@ -25,8 +25,10 @@ defmodule Observer.Web.Components.MultiSelectList do filtered_unselected = Enum.map(assigns.unselected, fn %{name: name, keys: keys} = element -> if name in elements_to_filter do + key_to_find = String.downcase(assigns.form_search.params[name]) + filtered_keys = - Enum.filter(keys, &String.contains?(&1, assigns.form_search.params[name])) + Enum.filter(keys, &String.contains?(String.downcase(&1), key_to_find)) %{element | keys: filtered_keys} else diff --git a/test/observer_web/web/live/tracing/page_test.exs b/test/observer_web/web/live/tracing/page_test.exs index a8046d4..124431d 100644 --- a/test/observer_web/web/live/tracing/page_test.exs +++ b/test/observer_web/web/live/tracing/page_test.exs @@ -144,6 +144,38 @@ defmodule Observer.Web.Tracing.PageLiveTest do refute html =~ "Elixir.Agent" end + test "Filtering by Module non sensitive", %{conn: conn} do + node = Node.self() |> to_string + service = Helpers.normalize_id(node) + + RpcStubber.defaults() + TelemetryStubber.defaults() + + {:ok, index_live, _html} = live(conn, "/observer/tracing") + + index_live + |> element("#tracing-multi-select-toggle-options") + |> render_click() + + index_live + |> element("#tracing-multi-select-services-#{service}-add-item") + |> render_click() + + html = + index_live + |> element("#tracing-multi-select-modules-Elixir-Enum-add-item") + |> render_click() + + assert html =~ "Elixir.Agent" + + html = + index_live + |> element("#multi-select-list-search-form-tracing-multi-select-modules") + |> render_change(%{"_target" => "modules", "modules" => "agent"}) + + assert html =~ "Elixir.Agent" + end + test "Filtering by Function", %{conn: conn} do node = Node.self() |> to_string service = Helpers.normalize_id(node)