GraphQL / Netlify CMS - не выдавать ошибку, если поле запроса не определено (не существует) - PullRequest
0 голосов
/ 30 октября 2019

Я использую Gatsby с Netlify CMS и у меня есть несколько дополнительных полей в коллекции файлов. Проблема в том, что я не могу получить эти поля с помощью GraphQL, поскольку поле не существует, если его оставить пустым.

Например, допустим, у меня есть следующий файл коллекции:

label: "Primary Color",
name: "primary",
file: "data/palette.yaml",
widget: "object",
fields: [
  {
    label: "Light",
    name: "light",
    required: false,
    widget: "string"
  },
  {
    label: "Main",
    name: "main",
    required: false,
    widget: "string"
  },
  {
    label: "Dark",
    name: "dark",
    required: false,
    widget: "string"
  },
  {
    label: "Contrast Text",
    name: "contrastText",
    required: false,
    widget: "string"
  }
]

Все поля являются необязательными. Допустим, пользователь вводит значение только для main. Затем данные сохраняются как:

primary:
  main: '#ff0000'

light, dark и contrastText вообще не сохраняются - они просто полностью исключаются.

Когда я запрашиваюданные в GraphQL, очевидно, мне нужно проверить все поля, поскольку я не знаю, какие дополнительные поля были заполнены пользователем, а какие оставлены пустыми. Это означает, что мой запрос должен выглядеть примерно так:

query MyQuery {
  paletteYaml {
    primary {
      light
      main
      dark
      contrastText
    }
  }
}

Используя приведенный выше пример, когда пользователь только заполнил поле main, приведенный выше запрос выдаст ошибку как light, dark иcontrastText поля не существуют.

Я использую для этого тип коллекции файлов (в отличие от типа коллекции папок), поэтому я не могу установить значение по умолчанию. В любом случае, не имеет значения, смогу ли я установить значение по умолчанию, поскольку GraphQL и Yaml не принимают undefined в качестве значения - они могут принимать только null или пустую строку ("") в качестве лучшей альтернативы.

Даже если я вручную сохраню файл yaml со всеми значениями поля, установленными на null или "", это тоже не сработает, так как это вызовет дополнительные проблемы, поскольку я глубоко объединяю результат запроса с другимобъект JavaScript.

Мне просто нужно, чтобы GraphQL возвращал undefined для каждого пустого (отсутствующего) поля вместо того, чтобы выдавать ошибку, или вообще не возвращать пустые / отсутствующие поля.

Это похоже нараспространенная проблема (обработка необязательных полей в Netlify CMS), но в документации о ней ничего нет. Как люди решают эту проблему?

...