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