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