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...