фильтр graphql на основе внутренних фрагментов (gatsby JS) - PullRequest
1 голос
/ 15 апреля 2020

Почему это невозможно? В том смысле, что, похоже, у меня нет доступа к любому свойству, доступ к которому осуществляется через внутренний фрагмент, такой как ... on File

codebox из gatsby-docs

{
  books: allMarkdownRemark(filter: {parent: {sourceInstanceName: {eq: "whatever"}}}) {
    totalCount
    edges {
      node {
        parent {
          ... on File {
            sourceInstanceName
          }
        }
      }
    }
  }
}

Ошибка: поле не определено типом NodeFilterInput

1 Ответ

1 голос
/ 15 апреля 2020

Это обязанность авторов преобразователя.

Вы можете сравнить его с аргументами общей функции и возвращаемым результатом. В graphQL оба строго определены / типизированы.

В этом случае для запроса allMarkdownRemark у вас есть

allMarkdownRemark(
  filter: MarkdownRemarkFilterInput
  limit: Int
  skip: Int
  sort: MarkdownRemarkSortInput
): MarkdownRemarkConnection!

... поэтому возможные аргументы - только filter, limit, skip и sort. Аргумент filter также имеет определенную форму - он должен быть типа MarkdownRemarkFilterInput. Вы можете использовать свойства, определенные в этом типе, только для аргумента filter.

Это сделано специально, именно так дизайнер создал резольвер и его намерения о том, как и какие аргументы обрабатываются.

Это похоже на нумерацию страниц - вам не нужно использовать какие-либо поля результатов в качестве аргументов, поскольку skip и limit для уровня записи. Таким образом, эти аргументы вообще не связаны с полями. Они используются для некоторых логи c в резольвере. Аргумент filter используется для логики c, тоже ... но это решение разработчика, чтобы выбрать и охватить варианты использования фильтрации .

Невозможно покрыть все мыслимые фильтры на всех обработанных слои данных и свойства, ... для parent вы можете использовать только свойства и подвойства children, id, internal и parent (вы можете исследовать их на игровой площадке).

Конечно, недостаточно расширить определение типа, чтобы оно работало с другим аргументом - речь идет о коде для его обработки .

Если вам нужна другая фильтрация логи c, вы можете написать свой собственный преобразователь (или изменить разветвленный проект gatsby) для ваших типов файлов или другого источника.

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