UNPKG

2.16 kBJavaScriptView Raw
1/**
2 * Copyright (c) Facebook, Inc. and its affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 *
7 * @emails oncall+relay
8 *
9 * @format
10 */
11'use strict';
12
13var React = require('react');
14
15var invariant = require("fbjs/lib/invariant");
16
17var useRelayEnvironment = require('./useRelayEnvironment');
18
19var useStaticFragmentNodeWarning = require('./useStaticFragmentNodeWarning');
20
21var _require = require('relay-runtime'),
22 getObservableForRequestInFlight = _require.__internal.getObservableForRequestInFlight,
23 getFragment = _require.getFragment,
24 getSelector = _require.getSelector;
25
26var useEffect = React.useEffect,
27 useState = React.useState,
28 useMemo = React.useMemo;
29
30function useIsParentQueryInFlight(fragmentInput, fragmentRef) {
31 var environment = useRelayEnvironment();
32 var fragmentNode = getFragment(fragmentInput);
33 useStaticFragmentNodeWarning(fragmentNode, 'first argument of useIsParentQueryInFlight()');
34 var observable = useMemo(function () {
35 var selector = getSelector(fragmentNode, fragmentRef);
36
37 if (selector == null) {
38 return null;
39 }
40
41 !(selector.kind === 'SingularReaderSelector') ? process.env.NODE_ENV !== "production" ? invariant(false, 'useIsParentQueryInFlight: Plural fragments are not supported.') : invariant(false) : void 0;
42 return getObservableForRequestInFlight(environment, selector.owner);
43 }, [environment, fragmentNode, fragmentRef]);
44
45 var _useState = useState(observable != null),
46 isInFlight = _useState[0],
47 setIsInFlight = _useState[1];
48
49 useEffect(function () {
50 var subscription;
51 setIsInFlight(observable != null);
52
53 if (observable != null) {
54 var onCompleteOrError = function onCompleteOrError() {
55 setIsInFlight(false);
56 };
57
58 subscription = observable.subscribe({
59 complete: onCompleteOrError,
60 error: onCompleteOrError
61 });
62 }
63
64 return function () {
65 if (subscription) {
66 subscription.unsubscribe();
67 }
68 };
69 }, [observable]);
70 return isInFlight;
71}
72
73module.exports = useIsParentQueryInFlight;
\No newline at end of file