Как: Strapi GraphQL мутация с Dynami c зон / компонент - PullRequest
1 голос
/ 14 марта 2020

Я пытаюсь создать мутацию для Strapi, которая создает / редактирует динамические c зоны. Зоны Dynami c в Strapi являются объединенными типами. Как можно выполнить мутацию GraphQL с dynamici c zone ?

Если быть точным. Каким должно быть содержимое здесь?

input: {data: {inhalt: [{text: "hallo"}]}}

В примере ниже находится один компонент с именем impressionum . Вдох является динамической c зоной. Он содержит различные компоненты: ComponentPageText, ComponentPageInformation и ComponentPageArticle .

Эта мутация

mutation {
  updateImpressum(input: {data: {inhalt: [{text: "hallo"}]}}) {
    impressum {
      inhalt {
        __typename
      }
    }
  }
}

возвращает

Ожидаемый тип ImpressumInhaltDynamicZoneInput !, found {text: \ "hallo \"}; Компонент не найден. ожидается одно из: ComponentPageText, ComponentPageInformation, ComponentPageArticle

Это возвращает ту же ошибку

mutation {
  updateImpressum(input: {data: {inhalt: [{ComponentPageText: {text: "hallo"}}]}}) {
    impressum {
      inhalt {
        __typename
      }
    }
  }
}

Возвращает самоанализ схемы

{
  "name": "ComponentPageText",
  "kind": "OBJECT"
}

СТРУКТУРА (добавлено после комментария)

импрессум => inhalt => [page.text, page.information, page.article]

соответствует

один тип => Dynami c зона => [компоненты]

Поля в компонентах

страница. текст : текст
page.information : заголовок, текст, изображение
page.article : отношение к типу коллекции - статья

SCHEMA INTROSPECTION

{
  "name": "updateImpressum",
  "__typename": "__Field",
  "description": "",
  "args": [
    {
      "name": "input",
      "description": "",
      "__typename": "__InputValue",
      "type": {
        "kind": "INPUT_OBJECT",
        "name": "updateImpressumInput",
        "possibleTypes": null,
        "interfaces": null,
        "inputFields": [
          {
            "name": "data",
            "description": "",
            "__typename": "__InputValue"
          }
        ]
      }
    }
  ]
}

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Вот пример того, как изменить динамическую зону c в Страпи. В моем случае у меня есть коллекция под названием «Тесты» и динамическая c зона под названием «Новый вопрос», которая находится в группе под названием «Вопросы-группы»:

mutation {
 createTest(input:{ data:{
  title:"Test Title Here"
  questions: [
     {
      __typename: "ComponentQuestionsGroupNewQuestion"
      __component: "questions-group.new-question"
      title:"What is 4 + 20?"
      correct_answer: "24"
      wrong_answer: "420"
    }
  ]
  }}) {
    test {
      id
    }
  }
}

Вы должны предоставить __typename: и __component: внутри предложения зоны Dynami c.

0 голосов
/ 17 марта 2020

Вам нужно что-то подобное для работы с компонентами:

mutation($text: String!) {
  updateImpressum {
    impressum {
      inhalt {
        __typename
        ... on MyComponentName {
            text: $text
        }
      }
    }
  }
}

Совет: используйте клиент / graphql для автозаполнения типов компонентов, набрав "... on"

Совет 2: Используйте фрагменты

...