react-relay
Version:
A framework for building GraphQL-driven React applications.
54 lines (47 loc) • 1.57 kB
Flow
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @format
* @oncall relay
*/
;
import type {
Disposable,
GraphQLSubscriptionConfig,
IEnvironment,
} from 'relay-runtime';
const useRelayEnvironment = require('./useRelayEnvironment');
const {useEffect} = require('react');
const {requestSubscription} = require('relay-runtime');
type RequestSubscriptionFn<TVariables, TData, TRawResponse> = (
environment: IEnvironment,
config: GraphQLSubscriptionConfig<TVariables, TData, TRawResponse>,
) => Disposable;
hook useSubscription<TVariables, TData, TRawResponse>(
config: GraphQLSubscriptionConfig<TVariables, TData, TRawResponse>,
requestSubscriptionFn?: RequestSubscriptionFn<
TVariables,
TData,
TRawResponse,
>,
): void {
// N.B. this will re-subscribe every render if config or requestSubscriptionFn
// are not memoized.
// Please do not pass an object defined in-line.
const actualRequestSubscription: RequestSubscriptionFn<
TVariables,
TData,
TRawResponse,
> = requestSubscriptionFn ?? (requestSubscription: $FlowFixMe);
const environment = useRelayEnvironment();
useEffect(() => {
// $FlowFixMe[method-unbinding] added when improving typing for this parameters
const {dispose} = actualRequestSubscription(environment, config);
return dispose;
}, [environment, config, actualRequestSubscription]);
}
module.exports = useSubscription;