Module: Decidim::QueryExtensions

Defined in:
decidim-core/lib/decidim/query_extensions.rb

Overview

This module’s job is to extend the API with custom fields related to decidim-core.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(type) ⇒ Object

Public: Extends a type with ‘decidim-core`’s fields.

type - A GraphQL::BaseType to extend.

Returns nothing.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'decidim-core/lib/decidim/query_extensions.rb', line 12

def self.included(type)
  type.field :component, Decidim::Core::ComponentInterface, null: true do
    description "Lists the components this space contains."
    argument :id, GraphQL::Types::ID, required: true, description: "The ID of the component to be found"
  end

  type.field :session, Core::SessionType, description: "Return's information about the logged in user", null: true

  type.field :decidim, Core::DecidimType, "Decidim's framework properties.", null: true

  type.field :organization, Core::OrganizationType, "The current organization", null: true

  type.field :hashtags, [Core::HashtagType], null: true, description: "The hashtags for current organization" do
    argument :name, GraphQL::Types::String, "The name of the hashtag", required: false
  end

  type.field :user,
             type: Core::AuthorInterface, null: true,
             description: "A participant (user or group) in the current organization" do
    argument :id, GraphQL::Types::ID, "The ID of the participant", required: false
    argument :nickname, GraphQL::Types::String, "The @nickname of the participant", required: false
  end

  type.field :users,
             type: [Core::AuthorInterface], null: true,
             description: "The participants (users or groups) for the current organization" do
    argument :order, Decidim::Core::UserEntityInputSort, "Provides several methods to order the results", required: false
    argument :filter, Decidim::Core::UserEntityInputFilter, "Provides several methods to filter the results", required: false
  end
end

Instance Method Details

#component(id: {}) ⇒ Object



43
44
45
46
# File 'decidim-core/lib/decidim/query_extensions.rb', line 43

def component(id: {})
  component = Decidim::Component.published.find_by(id:)
  component&.organization == context[:current_organization] ? component : nil
end

#decidimObject



52
53
54
# File 'decidim-core/lib/decidim/query_extensions.rb', line 52

def decidim
  Decidim
end

#hashtags(name: nil) ⇒ Object



60
61
62
# File 'decidim-core/lib/decidim/query_extensions.rb', line 60

def hashtags(name: nil)
  Decidim::HashtagsResolver.new(context[:current_organization], name).hashtags
end

#organizationObject



56
57
58
# File 'decidim-core/lib/decidim/query_extensions.rb', line 56

def organization
  context[:current_organization]
end

#sessionObject



48
49
50
# File 'decidim-core/lib/decidim/query_extensions.rb', line 48

def session
  context[:current_user]
end

#user(id: nil, nickname: nil) ⇒ Object



64
65
66
# File 'decidim-core/lib/decidim/query_extensions.rb', line 64

def user(id: nil, nickname: nil)
  Core::UserEntityFinder.new.call(object, { id:, nickname: }, context)
end

#users(filter: {}, order: {}) ⇒ Object



68
69
70
# File 'decidim-core/lib/decidim/query_extensions.rb', line 68

def users(filter: {}, order: {})
  Core::UserEntityList.new.call(object, { filter:, order: }, context)
end