diff --git a/app/controllers/admin/ahoy_activities_controller.rb b/app/controllers/admin/ahoy_activities_controller.rb index 593ff8e5e..3c2b2a24b 100644 --- a/app/controllers/admin/ahoy_activities_controller.rb +++ b/app/controllers/admin/ahoy_activities_controller.rb @@ -23,6 +23,11 @@ def index *prefixes.map { |p| "#{p}.%" }) end + # Filter by event name + if params[:event_name].present? + scope = scope.where("ahoy_events.name LIKE ?", "%#{Ahoy::Event.sanitize_sql_like(params[:event_name])}%") + end + # Filter by user (if viewing specific user activity) scope = scope.where(user: @users) if @users.present? diff --git a/app/views/admin/ahoy_activities/index.html.erb b/app/views/admin/ahoy_activities/index.html.erb index 46084f98f..06ffdf8c1 100644 --- a/app/views/admin/ahoy_activities/index.html.erb +++ b/app/views/admin/ahoy_activities/index.html.erb @@ -25,8 +25,8 @@ - <%= text_field_tag :name, - params[:name], + <%= text_field_tag :event_name, + params[:event_name], placeholder: "e.g. Viewed Workshop", class: "w-full px-3 py-2 border-gray-300 rounded-md shadow-sm focus:ring-indigo-500 focus:border-indigo-500" %> @@ -112,7 +112,7 @@
Quick: - <% safe_params = params.slice(:name, :visit_id, :props, :user_id, :from, :to).to_unsafe_h %> + <% safe_params = params.slice(:event_name, :visit_id, :props, :user_id, :from, :to).to_unsafe_h %> <%= link_to "24h", url_for(safe_params.merge(from: 1.day.ago.to_date)), class: "text-indigo-600 hover:underline" %> diff --git a/spec/requests/admin/ahoy_activities_spec.rb b/spec/requests/admin/ahoy_activities_spec.rb index d8b2ea769..67db19eee 100644 --- a/spec/requests/admin/ahoy_activities_spec.rb +++ b/spec/requests/admin/ahoy_activities_spec.rb @@ -158,6 +158,22 @@ expect(response.body).to include("create.bookmark") expect(response.body).to include("auth.login") end + + it "filters by event name" do + get index_path, params: { event_name: "auth.login", time_period: "all_time" } + + expect(response).to have_http_status(:ok) + expect(response.body).to include("auth.login") + expect(response.body).not_to include("create.bookmark") + end + + it "filters by partial event name" do + get index_path, params: { event_name: "bookmark", time_period: "all_time" } + + expect(response).to have_http_status(:ok) + expect(response.body).to include("create.bookmark") + expect(response.body).not_to include("auth.login") + end end describe "GET /admin/activities/visits" do