UNPKG

relay-hooks

Version:
68 lines (61 loc) 2.56 kB
import warning from 'fbjs/lib/warning'; import { useEffect, useRef, useMemo } from 'react'; import { getFragmentIdentifier, getFragment } from 'relay-runtime'; import { FragmentResolver } from './FragmentResolver'; import { useForceUpdate } from './useForceUpdate'; import { useRelayEnvironment } from './useRelayEnvironment'; export function useOssFragment(fragmentNode, fragmentRef, suspense, name, subscribeResolve) { var environment = useRelayEnvironment(); var forceUpdate = useForceUpdate(); var ref = useRef(null); var maybeHiddenOrFastRefresh = useRef(false); if (ref.current === null || ref.current === undefined || maybeHiddenOrFastRefresh.current) { ref.current = { resolver: new FragmentResolver(name) }; maybeHiddenOrFastRefresh.current = false; } var resolver = ref.current.resolver; useEffect(function () { if (maybeHiddenOrFastRefresh.current == true) { forceUpdate(); } return function () { ref.current.resolver.setUnmounted(); maybeHiddenOrFastRefresh.current = true; }; // eslint-disable-next-line react-hooks/exhaustive-deps }, []); useEffect(function () { return function () { resolver.dispose(); }; }, [resolver]); var fragment = useMemo(function () { return getFragment(fragmentNode); }, [fragmentNode]); var idfragment = useMemo(function () { return getFragmentIdentifier(fragment, fragmentRef); }, [fragment, fragmentRef]); useEffect(function () { resolver.subscribe(); return function () { resolver.unsubscribe(); }; }, [resolver, idfragment, environment]); resolver.subscribeResolve(subscribeResolve); resolver.resolve(environment, idfragment, fragment, fragmentRef); if (subscribeResolve) { return; } resolver.checkAndSuspense(suspense); resolver.setForceUpdate(forceUpdate); var data = resolver.getData(); if ('production' !== process.env.NODE_ENV) { if (fragmentRef != null && (data === undefined || Array.isArray(data) && data.length > 0 && data.every(function (data) { return data === undefined; }))) { process.env.NODE_ENV !== "production" ? process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Expected to have been able to read non-null data for ' + 'fragment `%s` declared in ' + '`%s`, since fragment reference was non-null. ' + "Make sure that that `%s`'s parent isn't " + 'holding on to and/or passing a fragment reference for data that ' + 'has been deleted.', fragment, name, name) : void 0 : void 0; } } return [data, resolver]; }