Тип ввода для массива объектов как мутационный ввод с оптимистичным откликом - PullRequest
0 голосов
/ 11 июля 2019

На сервере я построил схему, в которой я использовал, и тип ввода, чтобы получить возможность передавать массив объектов.Я сделал это в нескольких местах, но это, безусловно, самый простой:

export default gql`
    input SkillInput{
        skill: String!
    }
    extend type Mutation {
            createSkill(input: [SkillInput]): [Skill]!
    }
    type Skill {
        id: ID!
        skill: String!
        created_at: DateTime!
    }
`;

На веб-интерфейсе я могу выполнить мутацию с указанным массивом объектов просто отлично.Проблема возникает, когда я пытаюсь включить оптимистический ответ.

Это мутация, о которой идет речь:

this.$apollo
        .mutate({
          mutation: CREATE_SKILL_MUTATION,
          variables: { input: skillArrOfObj },
          optimisticResponse: {
            __typename: "Mutation",
            createSkill: skillArrOfObj.map(entry => ({
              __typename: "Skill",
              id: -1,
              skill: entry.skill
            }))
          },
          update: (store, { data: { createSkill } }) => {
            const data = store.readQuery({
              query: SKILLS_QUERY
            });
            console.log(createSkill);
            data.skills.push(...createSkill);

            store.writeQuery({
              query: SKILLS_QUERY,
              data
            });
          }
        })

Я пытался добавить к каждой записи skillArrOfObj __typename и id, однакомутация завершается ошибкой.

Еще одна вещь, которую стоит упомянуть, это то, что обновление запускается дважды, а журнал createSkill дает два разных результата при обновлении:

Первый запуск

{__typename: "Skill", id: -1, skillObj: Array(2)}
id: -1
skillObj: (2) [{…}, {…}]
__typename: "Skill"

Второй запуск показываетмассив только id и __typename без атрибута навыка

Требуется ли специальное __typename для массивов?Или что-то, что мне нужно сделать перед запуском мутации?

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