Add invite filter (#5862)
This commit is contained in:
		
				
					committed by
					
						 Eugen Rochko
						Eugen Rochko
					
				
			
			
				
	
			
			
			
						parent
						
							eee3b32b77
						
					
				
				
					commit
					74320971e2
				
			| @@ -5,7 +5,7 @@ module Admin | ||||
|     def index | ||||
|       authorize :invite, :index? | ||||
|  | ||||
|       @invites = Invite.includes(user: :account).page(params[:page]) | ||||
|       @invites = filtered_invites.includes(user: :account).page(params[:page]) | ||||
|       @invite  = Invite.new | ||||
|     end | ||||
|  | ||||
| @@ -35,5 +35,13 @@ module Admin | ||||
|     def resource_params | ||||
|       params.require(:invite).permit(:max_uses, :expires_in) | ||||
|     end | ||||
|  | ||||
|     def filtered_invites | ||||
|       InviteFilter.new(filter_params).results | ||||
|     end | ||||
|  | ||||
|     def filter_params | ||||
|       params.permit(:available, :expired) | ||||
|     end | ||||
|   end | ||||
| end | ||||
|   | ||||
| @@ -3,8 +3,9 @@ | ||||
| module Admin::FilterHelper | ||||
|   ACCOUNT_FILTERS = %i(local remote by_domain silenced suspended recent username display_name email ip).freeze | ||||
|   REPORT_FILTERS = %i(resolved account_id target_account_id).freeze | ||||
|   INVITE_FILTER = %i(available expired).freeze | ||||
|  | ||||
|   FILTERS = ACCOUNT_FILTERS + REPORT_FILTERS | ||||
|   FILTERS = ACCOUNT_FILTERS + REPORT_FILTERS + INVITE_FILTER | ||||
|  | ||||
|   def filter_link_to(text, link_to_params, link_class_params = link_to_params) | ||||
|     new_url = filtered_url_for(link_to_params) | ||||
|   | ||||
| @@ -17,6 +17,9 @@ class Invite < ApplicationRecord | ||||
|   belongs_to :user, required: true | ||||
|   has_many :users, inverse_of: :invite | ||||
|  | ||||
|   scope :available, -> { where(expires_at: nil).or(where('expires_at >= ?', Time.now.utc)) } | ||||
|   scope :expired, -> { where.not(expires_at: nil).where('expires_at < ?', Time.now.utc) } | ||||
|  | ||||
|   before_validation :set_code | ||||
|  | ||||
|   attr_reader :expires_in | ||||
|   | ||||
							
								
								
									
										32
									
								
								app/models/invite_filter.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								app/models/invite_filter.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| # frozen_string_literal: true | ||||
|  | ||||
| class InviteFilter | ||||
|   attr_reader :params | ||||
|  | ||||
|   def initialize(params) | ||||
|     @params = params | ||||
|   end | ||||
|  | ||||
|   def results | ||||
|     scope = Invite.order(created_at: :desc) | ||||
|  | ||||
|     params.each do |key, value| | ||||
|       scope.merge!(scope_for(key, value)) if value.present? | ||||
|     end | ||||
|  | ||||
|     scope | ||||
|   end | ||||
|  | ||||
|   private | ||||
|  | ||||
|   def scope_for(key, _value) | ||||
|     case key.to_s | ||||
|     when 'available' | ||||
|       Invite.available | ||||
|     when 'expired' | ||||
|       Invite.expired | ||||
|     else | ||||
|       raise "Unknown filter: #{key}" | ||||
|     end | ||||
|   end | ||||
| end | ||||
| @@ -1,6 +1,14 @@ | ||||
| - content_for :page_title do | ||||
|   = t('admin.invites.title') | ||||
|  | ||||
| .filters | ||||
|   .filter-subset | ||||
|     %strong= t('admin.invites.filter.title') | ||||
|     %ul | ||||
|       %li= filter_link_to t('admin.invites.filter.all'), available: nil, expired: nil | ||||
|       %li= filter_link_to t('admin.invites.filter.available'), available: 1, expired: nil | ||||
|       %li= filter_link_to t('admin.invites.filter.expired'), available: nil, expired: 1 | ||||
|  | ||||
| - if policy(:invite).create? | ||||
|   %p= t('invites.prompt') | ||||
|  | ||||
|   | ||||
| @@ -232,6 +232,11 @@ en: | ||||
|       search: Search | ||||
|       title: Known instances | ||||
|     invites: | ||||
|       filter: | ||||
|         all: All | ||||
|         available: Available | ||||
|         expired: Expired | ||||
|         title: Filter | ||||
|       title: Invites | ||||
|     reports: | ||||
|       action_taken_by: Action taken by | ||||
|   | ||||
		Reference in New Issue
	
	Block a user