class Decidim::Core::ComponentListBase

A very basic resolver for the GraphQL endpoint for listing components Used in the keyword that lists some type of a specific component. For instance, “proposals” if it is a Proposal:

participatoryProcesses {

components {
... on Proposals {
     proposals(...)
  }
}

}

Needs to be extended and add arguments Usually something like:

class ProposalListHelper < Decidim::Core::ComponentListBase
  argument :order, ProposalInputSort, "Provides several methods to order the results"
  argument :filter, ProposalInputFilter, "Provides several methods to filter the results"
end

For an example check decidim-proposals/app/types/decidim/proposals/proposals_type.rb

Attributes

model_class[R]

Public Class Methods

new(model_class:) click to toggle source
# File lib/decidim/api/functions/component_list_base.rb, line 33
def initialize(model_class:)
  @model_class = model_class
end

Public Instance Methods

call(component, args, _ctx) click to toggle source
# File lib/decidim/api/functions/component_list_base.rb, line 37
def call(component, args, _ctx)
  @query = query_scope.where(component: component)
                      .includes(:component)

  add_filter_keys(args[:filter])
  order = filter_keys_by_settings(args[:order].to_h, component)
  add_order_keys(order)
  add_default_order
  @query
end
query_scope() click to toggle source

By default, any model uses the default scope for queries Particular implementations may restrict this by adding additional constrains

# File lib/decidim/api/functions/component_list_base.rb, line 51
def query_scope
  model_class
end

Private Instance Methods

filter_keys_by_settings(kwargs, component) click to toggle source
# File lib/decidim/api/functions/component_list_base.rb, line 57
def filter_keys_by_settings(kwargs, component)
  kwargs.select do |key, _value|
    case key
    when :vote_count
      !component.current_settings.votes_hidden?
    else
      true
    end
  end
end