rsnext/examples/with-graphql-hooks/lib/graphql-request.js

31 lines
949 B
JavaScript
Raw Normal View History

const defaultOpts = { useCache: true }
/**
* Returns the result of a GraphQL query. It also adds the result to the
* cache of the GraphQL client for better initial data population in pages.
*
* Note: This helper tries to imitate what the query hooks of `graphql-hooks`
* do internally to make sure we generate the same cache key
*/
export default async function graphQLRequest(client, query, options) {
const opts = { ...defaultOpts, ...options }
const operation = {
query,
variables: opts.variables,
operationName: opts.operationName,
persisted: opts.persisted,
}
if (opts.persisted || (client.useGETForQueries && !opts.isMutation)) {
opts.fetchOptionsOverrides = {
...opts.fetchOptionsOverrides,
method: 'GET',
}
}
const cacheKey = client.getCacheKey(operation, opts)
const cacheValue = await client.request(operation, opts)
client.saveCache(cacheKey, cacheValue)
return cacheValue
}