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