Как условно применить фильтр GraphQL на основе значения переданного аргумента? - PullRequest
0 голосов
/ 03 декабря 2018

Обновление: для моего конкретного случая использования решение @ langpavel будет работать.Тем не менее, это позволяет избежать ответа на исходный вопрос ... возможно ли условно применить фильтр GraphQL на основе значения переданного аргумента?

Я передаю аргумент в мойЗапрос GraphQL с именем $env, который я хотел бы использовать в сочетании с логическим значением draft в frontmatter уценки моих сообщений в блоге, чтобы отфильтровать черновики во время производства.

Мой запрос в сокращенной форме, ниже.Как видите, у меня есть функция фильтра, которая фильтрует в зависимости от того, является ли запись в блоге черновиком или нет.Что я не могу понять, как это сделать, так это воспользоваться аргументом $env, чтобы применять фильтр только тогда, когда $env равен production.

export const pageQuery = graphql`
  query BlogPosts($env: String!) {
    markdownRemark(
      filter: { frontmatter: { draft: { eq: true } } }
    ) {
      frontmatter {
        title
        date(formatString: "MMMM DD, YYYY")
        draft
      }
    }
  }
`

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

В случае Гэтсби, вам, вероятно, следует написать два запроса и выбрать один условно на основе process.env:

export const pageQuery = (process.env.NODE_END === 'production') ?
graphql`
  query BlogPosts {
    markdownRemark(
      filter: { frontmatter: { draft: { ne: true } } }
    ) { frontmatter { ... } }
  }
` : graphql`
  query BlogPosts {
    markdownRemark { frontmatter { ... } }
  }
`
0 голосов
/ 04 декабря 2018

Указанный вами запрос GraphQL недействителен, поскольку переменная $ env не используется ни в одном из полей.Я думаю, что для вашей цели $env было бы лучше передать вне запроса GraphQL.Если вы используете GraphQL через HTTP, вы можете отправить его в качестве параметра запроса или заголовка HTTP.Затем вы можете передать это значение вашим распознавателям GraphQL, используя концепцию context, которую предоставляет большинство библиотек GraphQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...