Skip to content

Commit

Permalink
Make isWithinUnmatchedTypeRefinement be set on a per-fragment basis
Browse files Browse the repository at this point in the history
Summary:
When you spread multiple fragments which have different type refinements, the
flag is __isWithinUnmatchedTypeRefinement will be set to the value determined
by the *last* fragment in the list.

This means that, if the last fragment doesn't match the type refinement, but a
previous fragment does, all fragment loads will behave as if they don't match.
This means that if one of those matching fragments has missing data, we won't
suspend to wait until that data has loaded.

The fix: move isWithinUnmatchedTypeRefinement inside the fragment
arguments so that it can have a separate value for each fragment.

Reviewed By: josephsavona

Differential Revision: D49066506

fbshipit-source-id: d6d89e354564450a80561715231f24256305e6cb
  • Loading branch information
Will Shackleton authored and facebook-github-bot committed Sep 19, 2023
1 parent fe26a5e commit 17f4abf
Show file tree
Hide file tree
Showing 46 changed files with 428 additions and 198 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,6 @@ describe('ReactRelayFragmentContainer with fragment ownership', () => {
{},
},
__fragmentOwner: ownerUser1.request,
__isWithinUnmatchedTypeRefinement: false,
},
});
// Subscribes for updates
Expand All @@ -195,7 +194,6 @@ describe('ReactRelayFragmentContainer with fragment ownership', () => {
{},
},
__fragmentOwner: ownerUser1.request,
__isWithinUnmatchedTypeRefinement: false,
},
missingRequiredFields: null,
missingLiveResolverFields: [],
Expand Down Expand Up @@ -240,7 +238,6 @@ describe('ReactRelayFragmentContainer with fragment ownership', () => {
{},
},
__fragmentOwner: ownerUser1.request,
__isWithinUnmatchedTypeRefinement: false,
},
relayResolverErrors: [],
seenRecords: {},
Expand All @@ -265,7 +262,6 @@ describe('ReactRelayFragmentContainer with fragment ownership', () => {
{},
},
__fragmentOwner: ownerUser1.request,
__isWithinUnmatchedTypeRefinement: false,
},
});
});
Expand Down Expand Up @@ -302,7 +298,6 @@ describe('ReactRelayFragmentContainer with fragment ownership', () => {
{},
},
__fragmentOwner: ownerUser2.request,
__isWithinUnmatchedTypeRefinement: false,
},
});

Expand All @@ -318,7 +313,6 @@ describe('ReactRelayFragmentContainer with fragment ownership', () => {
{},
},
__fragmentOwner: ownerUser2.request,
__isWithinUnmatchedTypeRefinement: false,
},
missingRequiredFields: null,
missingLiveResolverFields: [],
Expand Down Expand Up @@ -370,7 +364,6 @@ describe('ReactRelayFragmentContainer with fragment ownership', () => {
{},
},
__fragmentOwner: ownerUser1WithCondVar.request,
__isWithinUnmatchedTypeRefinement: false,
},
});
// Container subscribes for updates on new props
Expand All @@ -385,7 +378,6 @@ describe('ReactRelayFragmentContainer with fragment ownership', () => {
{},
},
__fragmentOwner: ownerUser1WithCondVar.request,
__isWithinUnmatchedTypeRefinement: false,
},
missingRequiredFields: null,
missingLiveResolverFields: [],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,6 @@ describe('ReactRelayPaginationContainer with fragment ownership', () => {
},
},
__fragmentOwner: ownerUser1.request,
__isWithinUnmatchedTypeRefinement: false,
},
},
],
Expand Down Expand Up @@ -317,7 +316,6 @@ describe('ReactRelayPaginationContainer with fragment ownership', () => {
},
},
__fragmentOwner: ownerUser1.request,
__isWithinUnmatchedTypeRefinement: false,
},
},
],
Expand Down Expand Up @@ -432,7 +430,6 @@ describe('ReactRelayPaginationContainer with fragment ownership', () => {
},
},
__fragmentOwner: expectedOwner.request,
__isWithinUnmatchedTypeRefinement: false,
},
},
{
Expand All @@ -448,7 +445,6 @@ describe('ReactRelayPaginationContainer with fragment ownership', () => {
},
},
__fragmentOwner: expectedOwner.request,
__isWithinUnmatchedTypeRefinement: false,
},
},
]);
Expand Down Expand Up @@ -511,7 +507,6 @@ describe('ReactRelayPaginationContainer with fragment ownership', () => {
},
},
__fragmentOwner: ownerUser1.request,
__isWithinUnmatchedTypeRefinement: false,
},
},
],
Expand Down Expand Up @@ -635,7 +630,6 @@ describe('ReactRelayPaginationContainer with fragment ownership', () => {
},
},
__fragmentOwner: expectedOwner.request,
__isWithinUnmatchedTypeRefinement: false,
},
},
],
Expand Down Expand Up @@ -810,7 +804,6 @@ describe('ReactRelayPaginationContainer with fragment ownership', () => {
},
},
__fragmentOwner: expectedFragmentOwner.request,
__isWithinUnmatchedTypeRefinement: false,
},
},
],
Expand Down Expand Up @@ -893,7 +886,6 @@ describe('ReactRelayPaginationContainer with fragment ownership', () => {
},
},
__fragmentOwner: expectedFragmentOwner.request,
__isWithinUnmatchedTypeRefinement: false,
},
},
],
Expand Down Expand Up @@ -983,7 +975,6 @@ describe('ReactRelayPaginationContainer with fragment ownership', () => {
},
},
__fragmentOwner: expectedFragmentOwner.request,
__isWithinUnmatchedTypeRefinement: false,
},
},
{
Expand All @@ -999,7 +990,6 @@ describe('ReactRelayPaginationContainer with fragment ownership', () => {
},
},
__fragmentOwner: expectedFragmentOwner.request,
__isWithinUnmatchedTypeRefinement: false,
},
},
],
Expand Down
13 changes: 0 additions & 13 deletions packages/react-relay/__tests__/ReactRelayQueryRenderer-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,6 @@ describe('ReactRelayQueryRenderer', () => {
},

__fragmentOwner: owner.request,
__isWithinUnmatchedTypeRefinement: false,
__id: '4',
},
},
Expand All @@ -282,7 +281,6 @@ describe('ReactRelayQueryRenderer', () => {
},

__fragmentOwner: owner.request,
__isWithinUnmatchedTypeRefinement: false,
__id: '4',
},
},
Expand Down Expand Up @@ -345,7 +343,6 @@ describe('ReactRelayQueryRenderer', () => {
},

__fragmentOwner: owner.request,
__isWithinUnmatchedTypeRefinement: false,
__id: '4',
},
},
Expand All @@ -370,7 +367,6 @@ describe('ReactRelayQueryRenderer', () => {
},

__fragmentOwner: owner.request,
__isWithinUnmatchedTypeRefinement: false,
__id: '4',
},
},
Expand Down Expand Up @@ -424,7 +420,6 @@ describe('ReactRelayQueryRenderer', () => {
},

__fragmentOwner: firstOwner.request,
__isWithinUnmatchedTypeRefinement: false,
__id: '4',
},
},
Expand Down Expand Up @@ -484,7 +479,6 @@ describe('ReactRelayQueryRenderer', () => {
},

__fragmentOwner: thirdOwner.request,
__isWithinUnmatchedTypeRefinement: false,
__id: '6',
},
},
Expand Down Expand Up @@ -561,7 +555,6 @@ describe('ReactRelayQueryRenderer', () => {
},

__fragmentOwner: owner.request,
__isWithinUnmatchedTypeRefinement: false,
__id: '4',
},
},
Expand Down Expand Up @@ -597,7 +590,6 @@ describe('ReactRelayQueryRenderer', () => {
},

__fragmentOwner: owner.request,
__isWithinUnmatchedTypeRefinement: false,
__id: '4',
},
},
Expand Down Expand Up @@ -774,7 +766,6 @@ describe('ReactRelayQueryRenderer', () => {
ReactRelayQueryRendererTestFragment: {},
},
__fragmentOwner: owner.request,
__isWithinUnmatchedTypeRefinement: false,
__id: '<default>',
},
},
Expand Down Expand Up @@ -1130,7 +1121,6 @@ describe('ReactRelayQueryRenderer', () => {
},

__fragmentOwner: owner.request,
__isWithinUnmatchedTypeRefinement: false,
__id: '4',
},
},
Expand Down Expand Up @@ -1189,7 +1179,6 @@ describe('ReactRelayQueryRenderer', () => {

__fragmentOwner: owner.request,
__id: '4',
__isWithinUnmatchedTypeRefinement: false,
},
},
retry: expect.any(Function),
Expand All @@ -1209,7 +1198,6 @@ describe('ReactRelayQueryRenderer', () => {
},

__fragmentOwner: owner.request,
__isWithinUnmatchedTypeRefinement: false,
__id: '4',
},
},
Expand Down Expand Up @@ -1264,7 +1252,6 @@ describe('ReactRelayQueryRenderer', () => {
},

__fragmentOwner: owner.request,
__isWithinUnmatchedTypeRefinement: false,
__id: '4',
},
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,6 @@ describe('ReactRelayRefetchContainer with fragment ownership', () => {
},
},
__fragmentOwner: ownerUser1.request,
__isWithinUnmatchedTypeRefinement: false,
});
expect(TestChildComponent.mock.calls.length).toBe(1);
expect(TestChildComponent.mock.calls[0][0].user).toEqual({
Expand Down Expand Up @@ -278,7 +277,6 @@ describe('ReactRelayRefetchContainer with fragment ownership', () => {
},
},
__fragmentOwner: expectedOwner.request,
__isWithinUnmatchedTypeRefinement: false,
});
expect(render.mock.calls[0][0].user.name).toBe(undefined);

Expand All @@ -305,7 +303,6 @@ describe('ReactRelayRefetchContainer with fragment ownership', () => {
},
},
__fragmentOwner: ownerUser1.request,
__isWithinUnmatchedTypeRefinement: false,
});
expect(TestChildComponent.mock.calls.length).toBe(1);
expect(TestChildComponent.mock.calls[0][0].user).toEqual({
Expand Down Expand Up @@ -364,7 +361,6 @@ describe('ReactRelayRefetchContainer with fragment ownership', () => {
},
},
__fragmentOwner: expectedOwner.request,
__isWithinUnmatchedTypeRefinement: false,
});
expect(render.mock.calls[0][0].user.name).toBe(undefined);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,6 @@ describe('useBlockingPaginationFragment', () => {
[fragmentName]: {},
},
[FRAGMENT_OWNER_KEY]: owner.request,
__isWithinUnmatchedTypeRefinement: false,
};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,6 @@ describe('useBlockingPaginationFragment with useTransition', () => {
{},
},
[FRAGMENT_OWNER_KEY]: owner.request,
__isWithinUnmatchedTypeRefinement: false,
};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,6 @@ describe.each([
useFragmentTestNestedUserFragment: {},
},
[FRAGMENT_OWNER_KEY]: owner.request,
__isWithinUnmatchedTypeRefinement: false,
};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ function useFragmentNode(
useFragmentNodeRequiredTestUserFragment: $TEMPORARY$object<{...}>,
}>,
__id: any,
__isWithinUnmatchedTypeRefinement: boolean,
}>,
) {
const result = useFragmentNodeOriginal<any>(
Expand Down Expand Up @@ -108,7 +107,6 @@ beforeEach(() => {
useFragmentNodeRequiredTestUserFragment: {},
},
[FRAGMENT_OWNER_KEY]: singularQuery.request,
__isWithinUnmatchedTypeRefinement: false,
};

useFragmentNode(gqlSingularFragment, userRef);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,6 @@ describe.each([
useFragmentNodeTestNestedUserFragment: {},
},
[FRAGMENT_OWNER_KEY]: owner.request,
__isWithinUnmatchedTypeRefinement: false,
};
}

Expand Down Expand Up @@ -355,7 +354,6 @@ describe.each([
useFragmentNodeTestUserFragment: {},
},
[FRAGMENT_OWNER_KEY]: owner.request,
__isWithinUnmatchedTypeRefinement: false,
};

setSingularOwner = _setOwner;
Expand All @@ -380,7 +378,6 @@ describe.each([
useFragmentNodeTestUsersFragment: {},
},
[FRAGMENT_OWNER_KEY]: owner.request,
__isWithinUnmatchedTypeRefinement: false,
}));

const [usersData] = useFragmentNode(gqlPluralFragment, usersRef);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,6 @@ describe.each([
[fragmentName]: {},
},
[FRAGMENT_OWNER_KEY]: owner.request,
__isWithinUnmatchedTypeRefinement: false,
};
}

Expand Down Expand Up @@ -569,7 +568,6 @@ describe.each([
[fragment.name]: {},
},
[FRAGMENT_OWNER_KEY]: owner.request,
__isWithinUnmatchedTypeRefinement: false,
}),
[owner, fragment.name],
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ describe('useRefetchableFragment', () => {
useRefetchableFragmentTestNestedUserFragment: {},
},
[FRAGMENT_OWNER_KEY]: owner.request,
__isWithinUnmatchedTypeRefinement: false,
};
}

Expand Down Expand Up @@ -143,7 +142,6 @@ describe('useRefetchableFragment', () => {
[gqlFragment.name]: {},
},
[FRAGMENT_OWNER_KEY]: query.request,
__isWithinUnmatchedTypeRefinement: false,
}),
[],
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,6 @@ describe.each([
[fragmentName]: {},
},
[FRAGMENT_OWNER_KEY]: owner.request,
__isWithinUnmatchedTypeRefinement: false,
};
}

Expand Down Expand Up @@ -354,7 +353,6 @@ describe.each([
[fragment.name]: {},
},
[FRAGMENT_OWNER_KEY]: owner.request,
__isWithinUnmatchedTypeRefinement: false,
}),
[owner, fragment.name],
);
Expand Down
Loading

0 comments on commit 17f4abf

Please sign in to comment.