diff --git a/app/graphql/resolvers/question_filter_options_query_resolver.rb b/app/graphql/resolvers/question_filter_options_query_resolver.rb new file mode 100644 index 0000000..2ae099c --- /dev/null +++ b/app/graphql/resolvers/question_filter_options_query_resolver.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +module Resolvers + class QuestionFilterOptionsQueryResolver + def initialize; end + + def resolve + { + years: Question.distinct(:authorship_year).pluck(:authorship_year) + } + end + end + end diff --git a/app/graphql/types/query_type.rb b/app/graphql/types/query_type.rb index 540431b..4e0b278 100644 --- a/app/graphql/types/query_type.rb +++ b/app/graphql/types/query_type.rb @@ -8,6 +8,7 @@ module Types end field :subjects, SubjectType.connection_type, null: false field :reviewers, UserType.connection_type, null: false + field :question_filter_options, QuestionFilterOptionsType, null: false field :current_user, Types::UserType, null: true def questions(where: nil) @@ -22,6 +23,11 @@ module Types Resolvers::ReviewersQueryResolver.new(context).resolve end + + def question_filter_options + Resolvers::QuestionFilterOptionsQueryResolver.new.resolve + end + def current_user context[:current_user] end diff --git a/app/graphql/types/question_filter_options_type.rb b/app/graphql/types/question_filter_options_type.rb new file mode 100644 index 0000000..5889301 --- /dev/null +++ b/app/graphql/types/question_filter_options_type.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +module Types + class QuestionFilterOptionsType < Types::BaseObject + field :years, [String], null: false + end + end diff --git a/app/javascript/__generated__/graphql-schema.ts b/app/javascript/__generated__/graphql-schema.ts index a983db9..5aec043 100644 --- a/app/javascript/__generated__/graphql-schema.ts +++ b/app/javascript/__generated__/graphql-schema.ts @@ -163,6 +163,7 @@ export type Query = { node?: Maybe; /** Fetches a list of objects given a list of IDs. */ nodes: Array>; + questionFilterOptions: QuestionFilterOptions; questions: QuestionConnection; reviewers: UserConnection; subjects: SubjectConnection; @@ -313,6 +314,11 @@ export type QuestionEdge = { node?: Maybe; }; +export type QuestionFilterOptions = { + __typename?: 'QuestionFilterOptions'; + years: Array; +}; + export enum QuestionStatus { Approved = 'APPROVED', Draft = 'DRAFT', diff --git a/app/javascript/__generated__/schema.graphql b/app/javascript/__generated__/schema.graphql index 0d8db9b..cff7616 100644 --- a/app/javascript/__generated__/schema.graphql +++ b/app/javascript/__generated__/schema.graphql @@ -223,6 +223,7 @@ type Query { """ ids: [ID!]! ): [Node]! + questionFilterOptions: QuestionFilterOptions! questions( """ Returns the elements in the list that come after the specified cursor. @@ -424,6 +425,10 @@ type QuestionEdge { node: Question } +type QuestionFilterOptions { + years: [String!]! +} + enum QuestionStatus { APPROVED DRAFT