-
Notifications
You must be signed in to change notification settings - Fork 1.8k
/
requestRelaySubscription.js
61 lines (56 loc) · 1.68 KB
/
requestRelaySubscription.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule requestRelaySubscription
* @flow
*/
'use strict';
import type {Disposable} from 'RelayCombinedEnvironmentTypes';
import type {GraphQLTaggedNode} from 'RelayModernGraphQLTag';
import type {RelayResponsePayload} from 'RelayNetworkTypes';
import type {Environment, RecordSourceSelectorProxy} from 'RelayStoreTypes';
import type {Variables} from 'RelayTypes';
export type GraphQLSubscriptionConfig = {|
subscription: GraphQLTaggedNode,
variables: Variables,
onCompleted?: ?() => void,
onError?: ?(error: Error) => void,
onNext?: ?(response: ?Object) => void,
updater?: ?(store: RecordSourceSelectorProxy) => void,
|};
function requestRelaySubscription(
environment: Environment,
config: GraphQLSubscriptionConfig,
): Disposable {
const {
createOperationSelector,
getOperation,
} = environment.unstable_internal;
const subscription = getOperation(config.subscription);
const {
onCompleted,
onError,
onNext,
updater,
variables,
} = config;
const operation = createOperationSelector(subscription, variables);
return environment.sendSubscription({
onCompleted,
onError,
onNext(payload: ?RelayResponsePayload) {
if (onNext) {
const snapshot = environment.lookup(operation.fragment);
onNext(snapshot.data);
}
},
updater,
operation,
});
}
module.exports = requestRelaySubscription;