1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | 'use strict';
|
12 |
|
13 | var React = require('react');
|
14 |
|
15 | var invariant = require("fbjs/lib/invariant");
|
16 |
|
17 | var useRelayEnvironment = require('./useRelayEnvironment');
|
18 |
|
19 | var useStaticFragmentNodeWarning = require('./useStaticFragmentNodeWarning');
|
20 |
|
21 | var _require = require('relay-runtime'),
|
22 | getObservableForRequestInFlight = _require.__internal.getObservableForRequestInFlight,
|
23 | getFragment = _require.getFragment,
|
24 | getSelector = _require.getSelector;
|
25 |
|
26 | var useEffect = React.useEffect,
|
27 | useState = React.useState,
|
28 | useMemo = React.useMemo;
|
29 |
|
30 | function 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 |
|
73 | module.exports = useIsParentQueryInFlight; |
\ | No newline at end of file |