1# frozen_string_literal: true 2 3module Resolvers 4 class BoardListsResolver < BaseResolver 5 include BoardItemFilterable 6 include Gitlab::Graphql::Authorize::AuthorizeResource 7 include LooksAhead 8 9 type Types::BoardListType, null: true 10 authorize :read_issue_board_list 11 authorizes_object! 12 13 argument :id, Types::GlobalIDType[List], 14 required: false, 15 description: 'Find a list by its global ID.' 16 17 argument :issue_filters, Types::Boards::BoardIssueInputType, 18 required: false, 19 description: 'Filters applied when getting issue metadata in the board list.' 20 21 alias_method :board, :object 22 23 def resolve_with_lookahead(id: nil, issue_filters: {}) 24 lists = board_lists(id) 25 context.scoped_set!(:issue_filters, item_filters(issue_filters)) 26 27 List.preload_preferences_for_user(lists, current_user) if load_preferences? 28 29 offset_pagination(lists) 30 end 31 32 private 33 34 def board_lists(id) 35 service = ::Boards::Lists::ListService.new( 36 board.resource_parent, 37 current_user, 38 list_id: extract_list_id(id) 39 ) 40 41 service.execute(board, create_default_lists: false) 42 end 43 44 def load_preferences? 45 node_selection&.selects?(:collapsed) 46 end 47 48 def extract_list_id(gid) 49 return unless gid.present? 50 51 GitlabSchema.parse_gid(gid, expected_type: ::List).model_id 52 end 53 end 54end 55