1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | 'use strict';
|
12 |
|
13 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
14 |
|
15 | var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
|
16 |
|
17 | var areEqual = require("fbjs/lib/areEqual");
|
18 |
|
19 | var useRelayEnvironment = require('./useRelayEnvironment');
|
20 |
|
21 | var _require = require('react'),
|
22 | useEffect = _require.useEffect,
|
23 | useState = _require.useState;
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 | function useConnection(resolver, ref) {
|
32 | var _connectionState$refe;
|
33 |
|
34 | var environment = useRelayEnvironment();
|
35 | var reference = ref === null || ref === void 0 ? void 0 : ref.__connection;
|
36 |
|
37 | var _useState = useState(function () {
|
38 | return buildConnectionState(environment, resolver, reference, null);
|
39 | }),
|
40 | connectionState = _useState[0],
|
41 | setConnectionState = _useState[1];
|
42 |
|
43 | if (connectionState.environment !== environment || ((_connectionState$refe = connectionState.reference) === null || _connectionState$refe === void 0 ? void 0 : _connectionState$refe.id) !== (reference === null || reference === void 0 ? void 0 : reference.id) || connectionState.resolver !== resolver) {
|
44 | setConnectionState(buildConnectionState(environment, resolver, reference, connectionState));
|
45 | }
|
46 |
|
47 | var connectionSnapshot = connectionState.snapshot;
|
48 | useEffect(function () {
|
49 | if (connectionSnapshot == null) {
|
50 | return;
|
51 | }
|
52 |
|
53 | var latestState = buildConnectionState(environment, resolver, reference, connectionState);
|
54 |
|
55 | if (latestState.snapshot != null && !areEqual(latestState.snapshot.state, connectionSnapshot.state)) {
|
56 | setConnectionState(latestState);
|
57 |
|
58 | return;
|
59 | }
|
60 |
|
61 | var store = environment.getStore();
|
62 | var disposable = store.subscribeConnection_UNSTABLE(connectionSnapshot, resolver, function (updatedSnapshot) {
|
63 | setConnectionState(function (currentConnectionState) {
|
64 | if (currentConnectionState.generation !== connectionState.generation) {
|
65 |
|
66 |
|
67 |
|
68 | return currentConnectionState;
|
69 | }
|
70 |
|
71 | return (0, _objectSpread2["default"])({}, currentConnectionState, {
|
72 | snapshot: updatedSnapshot
|
73 | });
|
74 | });
|
75 | });
|
76 | return function () {
|
77 | return disposable.dispose();
|
78 | };
|
79 |
|
80 | }, [connectionState.generation]);
|
81 | return connectionSnapshot != null ? connectionSnapshot.state : connectionSnapshot;
|
82 | }
|
83 |
|
84 | function buildConnectionState(environment, resolver, reference, previousState) {
|
85 | var store = environment.getStore();
|
86 | var snapshot = reference != null ? store.lookupConnection_UNSTABLE(reference, resolver) : null;
|
87 | return {
|
88 | environment: environment,
|
89 | generation: previousState != null ? previousState.generation + 1 : 0,
|
90 | reference: reference,
|
91 | resolver: resolver,
|
92 | snapshot: snapshot
|
93 | };
|
94 | }
|
95 |
|
96 | module.exports = useConnection; |
\ | No newline at end of file |