Как добавить переменную во фрагмент при объединении схем с Apollo GraphQL - PullRequest
1 голос
/ 08 октября 2019

Я работаю над проектом, который объединяет несколько удаленных схем в службе шлюза и расширяет типы из этих схем. Это достигается с помощью mergeSchemas из graphql-tools, где мы указываем необходимые фрагменты и пользовательские преобразователи для делегирования соответствующим схемам. Часть этой реализации:

const typeExtensions = `
extend type VsStatistics {
  commonCompetitors(filter: DateRangeFilter): [Player!]!
}
`

const mergedSchema = mergeSchemas({
  schemas: [ playerSchema, resultsSchema, typeExtensions ],
  resolvers: {
    VsStatistics: {
      commonCompetitors: {
        fragment: `fragment CommonCompetitorsFragment on VsStatistics { commonCompetitorIds }`,
        resolve (parent, _args, context, info) {
          return info.mergeInfo.delegateToSchema({
            schema: playerSchema,
            operation: 'query',
            fieldName: 'players',
            args: { idArray: parent.commonCompetitorIds },
            context,
            info
          })
        }
      }
    }
  }
})

commonCompetitorIds - это массив идентификаторов, который доступен для объекта VsStatistics. Это прекрасно сшивается, когда мне не нужно передавать какие-либо параметры фрагменту, как показано выше, но с тех пор я добавил аргумент фильтра типа DateRangeFilter в commonCompetitorIds. Расширение типа commonCompetitors принимает этот фильтр в качестве аргумента, и мне нужно как-то передать его фрагменту, чтобы применить фильтр к commonCompetitorIds. Я попробовал следующее ...

      commonCompetitors: {
        fragment: `fragment CommonCompetitorsFragment on VsStatistics { commonCompetitorIds(filter: $filter) }`
        ...

... в надежде, что родительские аргументы могут быть автоматически доступны фрагменту, но я получаю сообщение об ошибке Variable "$filter" is not defined. Как я могу передать этот фильтр во фрагмент, чтобы получить отфильтрованный commonCompetitorIds, который затем будет использоваться в преобразователе?

...