Skip to content

Commit

Permalink
Fix refetching and pagination when using a custom nodeInterfaceIdField (
Browse files Browse the repository at this point in the history
#4053)

Summary:
This fixes #3897.

~~I wasn't able to get the tests to pass on my machine, even on `main`, so I didn't consider whether to add tests for this change.
Please let me know whether I should do something other than `yarn install`, `yarn build` and `yarn test` for them to work.~~

Still, I verified that the changes fix my issue by testing on a project that uses the custom id field. I tested both: Refetching, and loading more data on a pagination fragment.

Pull Request resolved: #4053

Test Plan: Flow/Jest/Cargo

Reviewed By: josephsavona

Differential Revision: D45958040

Pulled By: captbaritone

fbshipit-source-id: 53d85e8d12cbf8d85b4dbf6c5bb32c2c1dd8e2d1
  • Loading branch information
Emilios1995 authored and facebook-github-bot committed May 31, 2023
1 parent de6594b commit 0fce632
Show file tree
Hide file tree
Showing 117 changed files with 1,667 additions and 240 deletions.
9 changes: 6 additions & 3 deletions compiler/crates/relay-codegen/src/build_ast.rs
Original file line number Diff line number Diff line change
Expand Up @@ -433,10 +433,13 @@ impl<'schema, 'builder, 'config> CodegenBuilder<'schema, 'builder, 'config> {
),
operation: Primitive::GraphQLModuleDependency(GraphQLModuleDependency::Name(refetch_metadata.operation_name.into())),
};
if let Some(identifier_field) = refetch_metadata.identifier_field {
if let Some(identifier_info) = &refetch_metadata.identifier_info {
refetch_object.push(ObjectEntry {
key: CODEGEN_CONSTANTS.identifier_field,
value: Primitive::String(identifier_field),
key: CODEGEN_CONSTANTS.identifier_info,
value: Primitive::Key(self.object(object! {
identifier_field: Primitive::String(identifier_info.identifier_field),
identifier_query_variable_name: Primitive::String(identifier_info.identifier_query_variable_name),
})),
});
}

Expand Down
4 changes: 4 additions & 0 deletions compiler/crates/relay-codegen/src/constants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ pub struct CodegenConstants {
pub has_client_edges: StringKey,
pub id: StringKey,
pub identifier_field: StringKey,
pub identifier_query_variable_name: StringKey,
pub identifier_info: StringKey,
pub if_: StringKey,
pub inline_data_fragment_spread: StringKey,
pub inline_data_fragment: StringKey,
Expand Down Expand Up @@ -166,6 +168,8 @@ lazy_static! {
has_client_edges: "hasClientEdges".intern(),
id: "id".intern(),
identifier_field: "identifierField".intern(),
identifier_query_variable_name: "identifierQueryVariableName".intern(),
identifier_info: "identifierInfo".intern(),
if_: "if".intern(),
inline_data_fragment_spread: "InlineDataFragmentSpread".intern(),
inline_data_fragment: "InlineDataFragment".intern(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,10 @@ extend type User {
"node"
],
"operation": require('ClientEdgeQuery_Foo_user_best_friend.graphql'),
"identifierField": "id"
"identifierInfo": {
"identifierField": "id",
"identifierQueryVariableName": "id"
}
}
},
"name": "RefetchableClientEdgeQuery_Foo_user_best_friend",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,10 @@ fragment fragmentOnNodeInterface_RefetchableFragment on Node {
"node"
],
"operation": require('RefetchableFragmentQuery.graphql'),
"identifierField": "id"
"identifierInfo": {
"identifierField": "id",
"identifierQueryVariableName": "id"
}
}
},
"name": "fragmentOnNodeInterface_RefetchableFragment",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,10 @@ fragment fragmentOnNonNodeFetchableType_RefetchableFragment on NonNodeStory {
"fetch__NonNodeStory"
],
"operation": require('RefetchableFragmentQuery.graphql'),
"identifierField": "fetch_id"
"identifierInfo": {
"identifierField": "fetch_id",
"identifierQueryVariableName": "id"
}
}
},
"name": "fragmentOnNonNodeFetchableType_RefetchableFragment",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,10 @@ fragment fragmentOnObjectImplementingNodeInterface_RefetchableFragment on User {
"node"
],
"operation": require('RefetchableFragmentQuery.graphql'),
"identifierField": "id"
"identifierInfo": {
"identifierField": "id",
"identifierQueryVariableName": "id"
}
}
},
"name": "fragmentOnObjectImplementingNodeInterface_RefetchableFragment",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,10 @@ fragment providedVariableRefetchableFragment_providedVariableFragment on User {
"node"
],
"operation": require('refetchableQuery.graphql'),
"identifierField": "id"
"identifierInfo": {
"identifierField": "id",
"identifierQueryVariableName": "id"
}
}
},
"name": "providedVariableRefetchableFragment",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,10 @@ fragment refetchableConnectionCustomHandler_RefetchableConnection_feedback on Fe
"node"
],
"operation": require('RefetchableConnectionQuery.graphql'),
"identifierField": "id"
"identifierInfo": {
"identifierField": "id",
"identifierQueryVariableName": "id"
}
}
},
"name": "refetchableConnectionCustomHandler_RefetchableConnection_feedback",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,10 @@ fragment refetchableConnection_RefetchableConnection_feedback on Feedback {
"node"
],
"operation": require('RefetchableConnectionQuery.graphql'),
"identifierField": "id"
"identifierInfo": {
"identifierField": "id",
"identifierQueryVariableName": "id"
}
}
},
"name": "refetchableConnection_RefetchableConnection_feedback",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,10 @@ fragment refetchableFragmentOnNodeWithMissingId_RefetchableFragment on Node {
"node"
],
"operation": require('RefetchableFragmentQuery.graphql'),
"identifierField": "id"
"identifierInfo": {
"identifierField": "id",
"identifierQueryVariableName": "id"
}
}
},
"name": "refetchableFragmentOnNodeWithMissingId_RefetchableFragment",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -421,7 +421,10 @@ fragment refetchableFragmentWithConnectionBidirectional_PaginationFragment_1G22u
"node"
],
"operation": require('RefetchableFragmentQuery.graphql'),
"identifierField": "id"
"identifierInfo": {
"identifierField": "id",
"identifierQueryVariableName": "id"
}
}
},
"name": "refetchableFragmentWithConnectionBidirectional_PaginationFragment",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,10 @@ import RefetchableFragmentQuery_graphql from './RefetchableFragmentQuery.graphql
"node"
],
"operation": RefetchableFragmentQuery_graphql,
"identifierField": "id"
"identifierInfo": {
"identifierField": "id",
"identifierQueryVariableName": "id"
}
}
},
"name": "refetchableFragmentWithConnectionEsModules_PaginationFragment",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,10 @@ fragment refetchableFragmentWithConnectionWithStream_PaginationFragment_1G22uz o
"node"
],
"operation": require('RefetchableFragmentQuery.graphql'),
"identifierField": "id"
"identifierInfo": {
"identifierField": "id",
"identifierQueryVariableName": "id"
}
}
},
"name": "refetchableFragmentWithConnectionWithStream_PaginationFragment",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,10 @@ fragment refetchableFragmentWithConnection_PaginationFragment_1G22uz on Node {
"node"
],
"operation": require('RefetchableFragmentQuery.graphql'),
"identifierField": "id"
"identifierInfo": {
"identifierField": "id",
"identifierQueryVariableName": "id"
}
}
},
"name": "refetchableFragmentWithConnection_PaginationFragment",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,10 @@ fragment relayResolverBackingClientEdge_best_friend_resolver on User {
"node"
],
"operation": require('ClientEdgeQuery_relayResolverBackingClientEdgeQuery_me__best_friend.graphql'),
"identifierField": "id"
"identifierInfo": {
"identifierField": "id",
"identifierQueryVariableName": "id"
}
}
},
"name": "RefetchableClientEdgeQuery_relayResolverBackingClientEdgeQuery_me__best_friend",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,10 @@ fragment relayResolverWithRequiredClientEdge_best_friend_resolver on User {
"node"
],
"operation": require('ClientEdgeQuery_relayResolverWithRequiredClientEdgeQuery_me__best_friend.graphql'),
"identifierField": "id"
"identifierInfo": {
"identifierField": "id",
"identifierQueryVariableName": "id"
}
}
},
"name": "RefetchableClientEdgeQuery_relayResolverWithRequiredClientEdgeQuery_me__best_friend",
Expand Down
Loading

0 comments on commit 0fce632

Please sign in to comment.