class Avo::BaseController
def index
def index @page_title = resource_name.humanize add_breadcrumb resource_name.humanize set_index_params set_filters set_actions # If we don't get a query object predefined from a child controller like relations, just spin one up unless defined? @query @query = @resource.class.query_scope end # Remove default_scope for index view if @resource.unscoped_queries_on_index @query = @query.unscoped end # Eager load the relations if @resource.includes.present? @query = @query.includes(*@resource.includes) end # Eager load the active storage attachments @query = eager_load_files(@resource, @query) # Sort the items if @index_params[:sort_by].present? unless @index_params[:sort_by].eql? :created_at @query = @query.unscope(:order) end @query = @query.order("#{@resource.model_class.table_name}.#{@index_params[:sort_by]} #{@index_params[:sort_direction]}") end # Apply filters applied_filters.each do |filter_class, filter_value| @query = filter_class.safe_constantize.new.apply_query request, @query, filter_value end @pagy, @models = pagy(@query, items: @index_params[:per_page], link_extra: "data-turbo-frame=\"#{params[:turbo_frame]}\"", size: [1, 2, 2, 1]) # Create resources for each model @resources = @models.map do |model| @resource.hydrate(model: model, params: params).dup end end