From 04094efbdb0402cb81789ac00225bccc9ce24339 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A2u=20Cao?= Date: Tue, 27 May 2025 18:43:45 +0400 Subject: [PATCH] Add username filter with UI to admin donations page --- app/controllers/admin/donations_controller.rb | 16 ++++++++++++--- app/views/admin/donations/_list.html.erb | 6 ++++-- app/views/admin/donations/index.html.erb | 20 ++++++++++++++++--- app/views/icons/_filter.html.erb | 2 +- 4 files changed, 35 insertions(+), 9 deletions(-) diff --git a/app/controllers/admin/donations_controller.rb b/app/controllers/admin/donations_controller.rb index bdfff93..ca394e0 100644 --- a/app/controllers/admin/donations_controller.rb +++ b/app/controllers/admin/donations_controller.rb @@ -4,11 +4,21 @@ class Admin::DonationsController < Admin::BaseController # GET /donations def index - @pagy, @donations = pagy(Donation.completed.order('paid_at desc')) - @pending_donations = Donation.incomplete.order('paid_at desc') + @username = params[:username].presence + + pending_scope = Donation.incomplete.joins(:user).order('paid_at desc') + completed_scope = Donation.completed.joins(:user).order('paid_at desc') + + if @username + pending_scope = pending_scope.where(users: { cn: @username }) + completed_scope = completed_scope.where(users: { cn: @username }) + end + + @pending_donations = pending_scope + @pagy, @donations = pagy(completed_scope) @stats = { - overall_sats: @donations.sum("amount_sats"), + overall_sats: Donation.completed.sum("amount_sats"), donor_count: Donation.completed.count(:user_id) } end diff --git a/app/views/admin/donations/_list.html.erb b/app/views/admin/donations/_list.html.erb index 8a75699..aa405ec 100644 --- a/app/views/admin/donations/_list.html.erb +++ b/app/views/admin/donations/_list.html.erb @@ -1,4 +1,4 @@ - +
@@ -28,5 +28,7 @@
User
<% if defined?(pagy) %> -<%== pagy_nav pagy %> +
+ <%== pagy_nav pagy %> +
<% end %> diff --git a/app/views/admin/donations/index.html.erb b/app/views/admin/donations/index.html.erb index 2fa6f91..8003568 100644 --- a/app/views/admin/donations/index.html.erb +++ b/app/views/admin/donations/index.html.erb @@ -18,7 +18,21 @@ <% end %> - <% if @pending_donations.any? %> +
+ <%= form_with url: admin_donations_path, method: :get, local: true, class: "flex gap-1" do %> + <%= text_field_tag :username, @username, placeholder: 'Filter by username' %> + <%= button_tag type: 'submit', name: nil, title: "Filter", class: 'btn-md btn-icon btn-outline' do %> + <%= render partial: "icons/filter", locals: { custom_class: "text-blue-600 h-4 w-4 inline" } %> + <% end %> + <% if @username %> + <%= link_to admin_donations_path, title: "Remove filter", class: 'btn-md btn-icon btn-outline' do %> + <%= render partial: "icons/x", locals: { custom_class: "text-red-600 h-4 w-4 inline" } %> + <% end %> + <% end %> + <% end %> +
+ + <% if @pending_donations.present? %>

Pending

<%= render partial: "admin/donations/list", locals: { @@ -28,8 +42,8 @@ <% end %>
- <% if @donations.any? %> -

Recent

+ <% if @donations.present? %> +

Received

<%= render partial: "admin/donations/list", locals: { donations: @donations, pagy: @pagy } %> diff --git a/app/views/icons/_filter.html.erb b/app/views/icons/_filter.html.erb index 38a47e0..5adc889 100644 --- a/app/views/icons/_filter.html.erb +++ b/app/views/icons/_filter.html.erb @@ -1 +1 @@ - \ No newline at end of file +