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