Skip to content

Commit 99adb3b

Browse files
SamChou19815facebook-github-bot
authored andcommitted
Replace React.ComponentType<Props> with component(...Props) in relay
Reviewed By: panagosg7 Differential Revision: D71631538 fbshipit-source-id: e92c3edcefd6fa4d378a40e8ec97d3eda36e5ce3
1 parent 414fa7c commit 99adb3b

11 files changed

+44
-51
lines changed

packages/react-relay/ReactRelayContainerUtils.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111

1212
'use strict';
1313

14-
function getComponentName(component: React.ComponentType<any>): string {
14+
function getComponentName(component: component(...empty)): string {
1515
return component.displayName || component.name || 'Component';
1616
}
1717

18-
function getContainerName(Component: React.ComponentType<any>): string {
18+
function getContainerName(Component: component(...empty)): string {
1919
return 'Relay(' + getComponentName(Component) + ')';
2020
}
2121

packages/react-relay/ReactRelayFragmentContainer.js

+2-4
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,11 @@ type ContainerState = {
4646
*/
4747
function createContainerWithFragments<
4848
Props: {...},
49-
TComponent: React.ComponentType<Props>,
49+
TComponent: component(...Props),
5050
>(
5151
Component: TComponent,
5252
fragments: FragmentMap,
53-
): React.ComponentType<
54-
$RelayProps<React.ElementConfig<TComponent>, RelayProp>,
55-
> {
53+
): component(...$RelayProps<React.ElementConfig<TComponent>, RelayProp>) {
5654
const containerName = getContainerName(Component);
5755

5856
return class extends React.Component<ContainerProps, ContainerState> {

packages/react-relay/ReactRelayPaginationContainer.js

+8-8
Original file line numberDiff line numberDiff line change
@@ -319,14 +319,14 @@ function toObserver(observerOrCallback: ?ObserverOrCallback): Observer<void> {
319319

320320
function createContainerWithFragments<
321321
Props: {...},
322-
TComponent: React.ComponentType<Props>,
322+
TComponent: component(...Props),
323323
>(
324324
Component: TComponent,
325325
fragments: FragmentMap,
326326
connectionConfig: ConnectionConfig,
327-
): React.ComponentType<
328-
$RelayProps<React.ElementConfig<TComponent>, RelayPaginationProp>,
329-
> {
327+
): component(
328+
...$RelayProps<React.ElementConfig<TComponent>, RelayPaginationProp>
329+
) {
330330
const componentName = getComponentName(Component);
331331
const containerName = getContainerName(Component);
332332

@@ -937,13 +937,13 @@ function createContainerWithFragments<
937937
* `fragmentSpec` is memoized once per environment, rather than once per
938938
* instance of the container constructed/rendered.
939939
*/
940-
function createContainer<Props: {...}, TComponent: React.ComponentType<Props>>(
940+
function createContainer<Props: {...}, TComponent: component(...Props)>(
941941
Component: TComponent,
942942
fragmentSpec: GeneratedNodeMap,
943943
connectionConfig: ConnectionConfig,
944-
): React.ComponentType<
945-
$RelayProps<React.ElementConfig<TComponent>, RelayPaginationProp>,
946-
> {
944+
): component(
945+
...$RelayProps<React.ElementConfig<TComponent>, RelayPaginationProp>
946+
) {
947947
// $FlowFixMe[incompatible-return]
948948
return buildReactRelayContainer(
949949
Component,

packages/react-relay/ReactRelayRefetchContainer.js

+8-8
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,14 @@ type ContainerState = {
6969
*/
7070
function createContainerWithFragments<
7171
Props: {...},
72-
TComponent: React.ComponentType<Props>,
72+
TComponent: component(...Props),
7373
>(
7474
Component: TComponent,
7575
fragments: FragmentMap,
7676
taggedNode: GraphQLTaggedNode,
77-
): React.ComponentType<
78-
$RelayProps<React.ElementConfig<TComponent>, RelayRefetchProp>,
79-
> {
77+
): component(
78+
...$RelayProps<React.ElementConfig<TComponent>, RelayRefetchProp>
79+
) {
8080
const containerName = getContainerName(Component);
8181

8282
return class extends React.Component<ContainerProps, ContainerState> {
@@ -486,13 +486,13 @@ function getRelayProp(
486486
* `fragmentSpec` is memoized once per environment, rather than once per
487487
* instance of the container constructed/rendered.
488488
*/
489-
function createContainer<Props: {...}, TComponent: React.ComponentType<Props>>(
489+
function createContainer<Props: {...}, TComponent: component(...Props)>(
490490
Component: TComponent,
491491
fragmentSpec: GeneratedNodeMap,
492492
taggedNode: GraphQLTaggedNode,
493-
): React.ComponentType<
494-
$RelayProps<React.ElementConfig<TComponent>, RelayRefetchProp>,
495-
> {
493+
): component(
494+
...$RelayProps<React.ElementConfig<TComponent>, RelayRefetchProp>
495+
) {
496496
// $FlowFixMe[incompatible-return]
497497
return buildReactRelayContainer(
498498
Component,

packages/react-relay/ReactRelayTypes.js

+10-9
Original file line numberDiff line numberDiff line change
@@ -144,14 +144,15 @@ type MapRelayProp<T> = [+t: T] extends [+t: {+$fragmentType: empty, ...}]
144144
? ?$ReadOnlyArray<?$FragmentRef<$NonMaybeType<V>>>
145145
: T;
146146

147-
export type RelayFragmentContainer<TComponent> = React.ComponentType<
148-
$RelayProps<React.ElementConfig<TComponent>, RelayProp>,
149-
>;
147+
export type RelayFragmentContainer<TComponent: component(...empty)> = component(
148+
...$RelayProps<React.ElementConfig<TComponent>, RelayProp>
149+
);
150150

151-
export type RelayPaginationContainer<TComponent> = React.ComponentType<
152-
$RelayProps<React.ElementConfig<TComponent>, RelayPaginationProp>,
153-
>;
151+
export type RelayPaginationContainer<TComponent: component(...empty)> =
152+
component(
153+
...$RelayProps<React.ElementConfig<TComponent>, RelayPaginationProp>
154+
);
154155

155-
export type RelayRefetchContainer<TComponent> = React.ComponentType<
156-
$RelayProps<React.ElementConfig<TComponent>, RelayRefetchProp>,
157-
>;
156+
export type RelayRefetchContainer<TComponent: component(...empty)> = component(
157+
...$RelayProps<React.ElementConfig<TComponent>, RelayRefetchProp>
158+
);

packages/react-relay/__flowtests__/ReactRelayPaginationContainer-flowtest.js

+2-5
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,7 @@ const {graphql} = require('relay-runtime');
2222
* type-checked correctly on Relay components.
2323
*/
2424

25-
/* $FlowFixMe(>=0.53.0) This comment suppresses an error
26-
* when upgrading Flow's support for React. Common errors found when upgrading
27-
* Flow's React support are documented at https://fburl.com/eq7bs81w */
28-
class FooComponent extends React.Component {
25+
class FooComponent extends React.Component<$FlowFixMe> {
2926
props: {
3027
optionalProp?: {foo: number, ...},
3128
defaultProp: string,
@@ -56,7 +53,7 @@ class FooComponent extends React.Component {
5653
}
5754
// Note that we must reassign to a new identifier to make sure flow doesn't propogate types without
5855
// the relay type definition doing the work.
59-
const Foo = createPaginationContainer(
56+
const Foo = createPaginationContainer<$FlowFixMe, _>(
6057
FooComponent,
6158
{
6259
viewer: graphql`

packages/react-relay/__flowtests__/ReactRelayRefetchContainer-flowtest.js

+2-5
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,7 @@ const {graphql} = require('relay-runtime');
2121
* Verifies that normal prop type checking works correctly on Relay components.
2222
*/
2323

24-
/* $FlowFixMe(>=0.53.0) This comment suppresses an error
25-
* when upgrading Flow's support for React. Common errors found when upgrading
26-
* Flow's React support are documented at https://fburl.com/eq7bs81w */
27-
class FooComponent extends React.Component {
24+
class FooComponent extends React.Component<$FlowFixMe> {
2825
props: {
2926
optionalProp?: {foo: number, ...},
3027
defaultProp: string,
@@ -55,7 +52,7 @@ class FooComponent extends React.Component {
5552
}
5653
// Note that we must reassign to a new identifier to make sure flow doesn't propogate types without
5754
// the relay type definition doing the work.
58-
const Foo = createRefetchContainer(
55+
const Foo = createRefetchContainer<$FlowFixMe, _>(
5956
FooComponent,
6057
{
6158
viewer: graphql`

packages/react-relay/buildReactRelayContainer.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,15 @@ const {getFragment} = require('relay-runtime');
2828
const {useContext} = React;
2929

3030
type ContainerCreator = (
31-
Component: React.ComponentType<any>,
31+
Component: component(...any),
3232
fragments: FragmentMap,
33-
) => React.ComponentType<any>;
33+
) => component(...any);
3434

3535
/**
3636
* Helper to create the Relay HOCs with ref forwarding, setting the displayName
3737
* and reading the React context.
3838
*/
39-
function buildReactRelayContainer<TBase: React.ComponentType<any>>(
39+
function buildReactRelayContainer<TBase: component(...empty)>(
4040
ComponentClass: TBase,
4141
fragmentSpec: GeneratedNodeMap,
4242
createContainerWithFragments: ContainerCreator,

packages/react-relay/relay-hooks/MatchContainer.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ export type MatchPointer = {
9595

9696
export type MatchContainerProps<TProps: {...}, TFallback: React.Node> = {
9797
+fallback?: ?TFallback,
98-
+loader: (module: mixed) => React.ComponentType<TProps>,
98+
+loader: (module: mixed) => component(...TProps),
9999
+match: ?MatchPointer | ?TypenameOnlyPointer,
100100
+props?: TProps,
101101
};

packages/react-relay/relay-hooks/__tests__/MatchContainer-test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ describe('MatchContainer', () => {
5353
beforeEach(() => {
5454
jest.resetModules();
5555

56-
loader = jest.fn<[mixed], React.ComponentType<any | {otherProp: string}>>();
56+
loader = jest.fn<[mixed], component(...any)>();
5757
// $FlowFixMe[missing-local-annot] error found when enabling Flow LTI mode
5858
UserComponent = jest.fn(props => (
5959
<div>

packages/relay-test-utils/unwrapContainer.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ const invariant = require('invariant');
2323
/**
2424
* Returns original component class wrapped by e.g. createFragmentContainer
2525
*/
26-
function unwrapContainer<Props>(
27-
ComponentClass: React.ComponentType<
28-
$RelayProps<Props, RelayProp | RelayPaginationProp | RelayRefetchProp>,
29-
>,
30-
): React.ComponentType<Props> {
26+
function unwrapContainer<Props: {...}>(
27+
ComponentClass: component(
28+
...$RelayProps<Props, RelayProp | RelayPaginationProp | RelayRefetchProp>
29+
),
30+
): component(...Props) {
3131
// $FlowExpectedError
3232
const unwrapped = ComponentClass.__ComponentClass;
3333
invariant(

0 commit comments

Comments
 (0)