Я использую 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), но в документации о ней ничего нет. Как люди решают эту проблему?