[AMB-2607] fix(trading): resolve duplicate offer keys in trading view cache#763
Draft
wthrajat wants to merge 2 commits into
Draft
[AMB-2607] fix(trading): resolve duplicate offer keys in trading view cache#763wthrajat wants to merge 2 commits into
wthrajat wants to merge 2 commits into
Conversation
Collaborator
Author
|
Checking if that can be solved in our Magma API's layer better. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
what was happening
the offers card was showing duplicate rows on the same side after clicking the rate or available sort. a hard refresh hid it, sorting brought it back.
why
TapTradeOfferhas anidfield, so apollo'sInMemoryCachewas normalizing it by__typename:id. the upstream amboss api returns the sameidfor the buy and sell sides of a listing, so the twouseGetTapOffersQuerycalls inTradingOffers.tsx(one purchase, one sale) clobbered each other into a single cache entity. both lists then pointed at the same merged object, and resorting made the corrupted state deterministic.TradingPartners.tsxalso queries the same field, so it was sharing the same poisoned cache entries.fix
two small changes:
src/client/config/client.tsx: addedTapTradeOffer: { keyFields: false }totypePoliciesso apollo stops normalizing it. each query now keeps its own embedded copies, and buy/sell can't overwrite each other.src/client/src/views/assets/TradingOffers.tsx: rebuiltallOffersfrom aMapkeyed by\${_side}-\${id}as a render layer guard, so even if the api ever returns a dupe within one side the ui stays clean.repro before the fix
verify
hard refresh after pulling (the
ApolloClientis cached at module scope inclient.tsx, so the typepolicy only takes effect on a clean boot). then sort freely, no dupes.bug