import { DataProxy } from '@apollo/client'; import { DocumentNode } from 'graphql'; type UpdateCacheFn = (cache: T) => T; export function updateApolloCache( client: DataProxy, document: DocumentNode, update: UpdateCacheFn, variables?: object, ) { let queryArgs: DataProxy.Query; if (variables) { queryArgs = { query: document, variables, }; } else { queryArgs = { query: document, }; } const cache: T | null = client.readQuery(queryArgs); if (cache) { const newCache = update(cache); client.writeQuery({ ...queryArgs, data: newCache, }); } } export default updateApolloCache;