Executando verificação de segurança...
1

Apollo Client GraphQL: ___typename impede a mutation.

Desenvolvendo a comunicação do front com a API GraphQL, me deparo com um erro que impede a atualização no banco. Acontece que quando buscamos, a API retorna algo como:

  {
    "__typename": "Srv",
    "codigo": 1,
    "descricao": "d",
    "qntOrcada": 1
  }
]

Em Apollo, __typename é usado para cache, mas não esta declarada no schema da api.

Usei abordagens como @apollo/client/link/remove-typename, pacote do proprio apollo, mas não funcionou.

Sami C. resolve isso usando a abordagem:

 this.blogs.forEach((blog: any) => { delete blog.__typename; }); 

Porém, __typename é uma propriedade especial usada para identificar o tipo de objeto em consultas GraphQL. Essa propriedade é definida como não configurável (non-configurable), o que significa que não pode ser removida usando o operador delete.

Então, a solução que funcionou para mim foi o .map, que cria um novo objeto sem __typename.

  const handleFormSubmit = async (e) => {

    let removeTypename = data.srv.map((s) => {
      const { __typename, ...rest } = s;
      return rest;
    });

    let projetoInput = {
      srv: [...removeTypename, e]
    };

    //   try {
    //     await updateProjeto({
    //       variables: { id: data.id, data: projetoInput.srv},
    //     });
    //   } catch (error) {
    //     console.log("Error during form submission:", error);
    //   }
  };

    

Se tiverem outra solução, será bem-vinda, mas isso é o que funcionou no meu contexto...

Carregando publicação patrocinada...