You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
2.9 KiB
59 lines
2.9 KiB
import { __assign, __spreadArray } from "tslib"; |
|
import * as React from "rehackt"; |
|
import { useApolloClient } from "./useApolloClient.js"; |
|
import { 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]; |
|
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(), 50); |
|
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]); |
|
var reset = React.useCallback(function () { |
|
setQueryRef(null); |
|
}, [queryRef]); |
|
return [loadQuery, queryRef, { fetchMore: fetchMore, refetch: refetch, reset: reset }]; |
|
} |
|
//# sourceMappingURL=useLoadableQuery.js.map
|