@apollo/client
Version:
A fully-featured caching GraphQL client.
71 lines • 3.33 kB
JavaScript
import { __assign, __spreadArray } from "tslib";
import * as React from "rehackt";
import { useApolloClient } from "./useApolloClient.js";
import { assertWrappedQueryRef, getSuspenseCache, unwrapQueryRef, updateWrappedQueryRef, wrapQueryRef, } from "../internal/index.js";
import { useRenderGuard } from "./internal/index.js";
import { useWatchQueryOptions } from "./useSuspenseQuery.js";
import { canonicalStringify } from "../../cache/index.js";
import { invariant } from "../../utilities/globals/index.js";
export function useLoadableQuery(query, options) {
if (options === void 0) { options = Object.create(null); }
var client = useApolloClient(options.client);
var suspenseCache = getSuspenseCache(client);
var watchQueryOptions = useWatchQueryOptions({ client: client, query: query, options: options });
var _a = options.queryKey, queryKey = _a === void 0 ? [] : _a;
var _b = React.useState(null), queryRef = _b[0], setQueryRef = _b[1];
assertWrappedQueryRef(queryRef);
var internalQueryRef = queryRef && unwrapQueryRef(queryRef);
if (queryRef && (internalQueryRef === null || internalQueryRef === void 0 ? void 0 : internalQueryRef.didChangeOptions(watchQueryOptions))) {
var promise = internalQueryRef.applyOptions(watchQueryOptions);
updateWrappedQueryRef(queryRef, promise);
}
var calledDuringRender = useRenderGuard();
var fetchMore = React.useCallback(function (options) {
if (!internalQueryRef) {
throw new Error("The query has not been loaded. Please load the query.");
}
var promise = internalQueryRef.fetchMore(options);
setQueryRef(wrapQueryRef(internalQueryRef));
return promise;
}, [internalQueryRef]);
var refetch = React.useCallback(function (options) {
if (!internalQueryRef) {
throw new Error("The query has not been loaded. Please load the query.");
}
var promise = internalQueryRef.refetch(options);
setQueryRef(wrapQueryRef(internalQueryRef));
return promise;
}, [internalQueryRef]);
var loadQuery = React.useCallback(function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
invariant(!calledDuringRender(), 51);
var variables = args[0];
var cacheKey = __spreadArray([
query,
canonicalStringify(variables)
], [].concat(queryKey), true);
var queryRef = suspenseCache.getQueryRef(cacheKey, function () {
return client.watchQuery(__assign(__assign({}, watchQueryOptions), { variables: variables }));
});
setQueryRef(wrapQueryRef(queryRef));
}, [
query,
queryKey,
suspenseCache,
watchQueryOptions,
calledDuringRender,
client,
]);
var subscribeToMore = React.useCallback(function (options) {
invariant(internalQueryRef, 52);
return internalQueryRef.observable.subscribeToMore(options);
}, [internalQueryRef]);
var reset = React.useCallback(function () {
setQueryRef(null);
}, []);
return [loadQuery, queryRef, { fetchMore: fetchMore, refetch: refetch, reset: reset, subscribeToMore: subscribeToMore }];
}
//# sourceMappingURL=useLoadableQuery.js.map