Fix objects merging in loadMore after refetch in usePaginationFragment #415
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The scope of this PR is to fix loadMore function from usePaginationFragment hook after we refetch data with different variables
that contain objects.
Problem
When we have an object as part of the default variables, for example
filterBy: {property1: true}
and the same object with extended params are passed to the refetch function likefilterBy: {property1: true, property2: false}
, we end up in the situation wherepreviousVariables
inuseLoadMore hook
is incorrectly combined.In this case:
metadata.connection?.filterVariableDefaults.filterBy = {property1: true}
latestVariablesUsedByStandaloneRefetch = {property1: true, property2: false}
fragmentReference.__fragments = {property1: true}
The end result will be missing second parameter from
latestVariablesUsedByStandaloneRefetch
const previousVariables.filterBy = {property1: true}
To repro and test this scenario we added a new test case
uses correct variable value in load next request when previous variable already contains an object that is different on refetch
Solution
To fix the problem we used
merge
function oflodash
library to recursively merge objects at all levels. In this case we will ensures that every layer of nested properties is combined.