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