34 lines
673 B
TypeScript
34 lines
673 B
TypeScript
import { DataProxy } from '@apollo/client';
|
|
import { DocumentNode } from 'graphql';
|
|
|
|
type UpdateCacheFn<T> = (cache: T) => T;
|
|
|
|
export function updateApolloCache<T>(
|
|
client: DataProxy,
|
|
document: DocumentNode,
|
|
update: UpdateCacheFn<T>,
|
|
variables?: object,
|
|
) {
|
|
let queryArgs: DataProxy.Query<any>;
|
|
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;
|