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.
29 lines
1.3 KiB
29 lines
1.3 KiB
4 months ago
|
import * as React from "rehackt";
|
||
|
import { getWrappedPromise, unwrapQueryRef, updateWrappedQueryRef, } from "../internal/index.js";
|
||
|
import { __use } from "./internal/index.js";
|
||
|
import { toApolloError } from "./useSuspenseQuery.js";
|
||
|
import { useSyncExternalStore } from "./useSyncExternalStore.js";
|
||
|
export function useReadQuery(queryRef) {
|
||
|
var internalQueryRef = React.useMemo(function () { return unwrapQueryRef(queryRef); }, [queryRef]);
|
||
|
var getPromise = React.useCallback(function () { return getWrappedPromise(queryRef); }, [queryRef]);
|
||
|
if (internalQueryRef.disposed) {
|
||
|
internalQueryRef.reinitialize();
|
||
|
updateWrappedQueryRef(queryRef, internalQueryRef.promise);
|
||
|
}
|
||
|
React.useEffect(function () { return internalQueryRef.retain(); }, [internalQueryRef]);
|
||
|
var promise = useSyncExternalStore(React.useCallback(function (forceUpdate) {
|
||
|
return internalQueryRef.listen(function (promise) {
|
||
|
updateWrappedQueryRef(queryRef, promise);
|
||
|
forceUpdate();
|
||
|
});
|
||
|
}, [internalQueryRef]), getPromise, getPromise);
|
||
|
var result = __use(promise);
|
||
|
return React.useMemo(function () {
|
||
|
return {
|
||
|
data: result.data,
|
||
|
networkStatus: result.networkStatus,
|
||
|
error: toApolloError(result),
|
||
|
};
|
||
|
}, [result]);
|
||
|
}
|
||
|
//# sourceMappingURL=useReadQuery.js.map
|