Skip to content

Commit 37147ea

Browse files
authoredAug 21, 2022
Expand User filtering to developer & business (joemasilotti#608)
* Expand User filtering to developer & business * Update CHANGELOG * Pull out query string
1 parent bf6810c commit 37147ea

File tree

6 files changed

+18
-8
lines changed

6 files changed

+18
-8
lines changed
 

‎CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
## August
66

7+
* August 21 - Expand `User` filtering to developer & business #608
78
* August 19 - Removed developer Twitter handle from Open Graph tags #607
89
* August 19 - Convert reusable `/admin` components to View Components #605
910
* August 18 - Add basic admin user search #604

‎app/controllers/admin/users_controller.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ def index
1010
private
1111

1212
def users(query)
13-
User.filter_by_email(query)
13+
User.search(query)
1414
.includes(developer: {avatar_attachment: :blob}, business: {avatar_attachment: :blob})
1515
.order(:email)
1616
end

‎app/models/user.rb

+9-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,15 @@ class User < ApplicationRecord
2626
inverse_of: :user_with_unread_messages
2727

2828
scope :admin, -> { where(admin: true) }
29-
scope :filter_by_email, ->(email) { where("email ILIKE ?", "%#{email}%") }
29+
30+
scope :search, ->(query) do
31+
query = "%#{query}%"
32+
left_outer_joins(:developer, :business)
33+
.where("email ILIKE ?", query)
34+
.or(where("developers.name ILIKE ?", query))
35+
.or(where("businesses.contact_name ILIKE ?", query))
36+
.or(where("businesses.company ILIKE ?", query))
37+
end
3038

3139
# Always remember when signing in with Devise.
3240
def remember_me

‎app/views/admin/users/_search.html.erb

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<%= form.label :query, t(".help"), class: "block text-sm font-medium text-gray-700" %>
44
<div class="mt-1 flex rounded-md shadow-sm">
55
<div class="relative flex items-stretch flex-grow focus-within:z-10">
6-
<%= form.text_field :query, value: query, placeholder: "joe@railsdevs.com", autocomplete: "off", autofocus: true, class: "focus:ring-gray-500 focus:border-gray-500 block w-full rounded-none rounded-l-md sm:text-sm border-gray-300" %>
6+
<%= form.text_field :query, value: query, placeholder: "Joe Masilotti", autocomplete: "off", autofocus: true, class: "focus:ring-gray-500 focus:border-gray-500 block w-full rounded-none rounded-l-md sm:text-sm border-gray-300" %>
77
</div>
88
<%= form.button type: "submit", class: "-ml-px relative inline-flex items-center space-x-2 px-4 py-2 border border-gray-300 text-sm font-medium rounded-r-md text-gray-700 bg-gray-50 hover:bg-gray-100 focus:outline-none focus:ring-1 focus:ring-gray-500 focus:border-gray-500" do %>
99
<%= inline_svg_tag "icons/solid/search.svg", class: "h-5 w-5 text-gray-400", aria_hidden: true %>

‎config/locales/en.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ en:
116116
title: Users
117117
search:
118118
cta: Search
119-
help: Filter users by email
119+
help: Filter users by name, company, or email
120120
blocks:
121121
create:
122122
notice: "%{other_recipient} was blocked."

‎test/models/user_test.rb

+5-4
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,10 @@ class UserTest < ActiveSupport::TestCase
2727
assert_nil user.pay_customer_name
2828
end
2929

30-
test "searching via email" do
31-
assert_equal [users(:empty)], User.filter_by_email("user@EXAMPLE.com")
32-
assert_equal [users(:admin)], User.filter_by_email("admin@")
33-
assert_empty User.filter_by_email("joe")
30+
test "search" do
31+
assert_includes User.search("ADMIN@"), users(:admin)
32+
assert_includes User.search("one"), users(:developer)
33+
assert_includes User.search("owner"), users(:business)
34+
assert_includes User.search("company"), users(:business)
3435
end
3536
end

0 commit comments

Comments
 (0)