Frontend: Wallet profile modal on address click #258
Labels
No labels
agent:fix_bugfix
agent:fix_conflicts
agent:fix_security
agent:gap_analysis
agent:implement
agent:open_issues
agents
agent:security_audit
agent:verify
area
timecurve
arena
arena-v2
audit
block:feature_review
block:security
bug
contracts
design
devops
docs
documentation
enhancement
epic
feature
frontend
indexer
low priority
megaeth
operations
ops
performance
QA
qa checklist
referrals
removal
security
smart-contracts
tech-debt
testing
time-arena
timecurve
visual-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
code/yieldomega#258
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
Replace participant address explorer links with wallet stats modal. Parent epic: #238.
Relevant files
frontend/src/components/AddressInline.tsxfrontend/src/components/MegaScannerAddressLink.tsx— explorer for contracts onlyWalletProfileModal.tsx,useWalletStats.tsfrontend/src/lib/indexerApi.tsAcceptance criteria
GET /v1/arena/wallet/{address}/statsVerification checklist
marked as related to #238
mentioned in issue #238
mentioned in issue #262
Implementation summary
WalletProfileModal.tsx,useWalletStats.ts,AddressInlineonOpenProfilehook.Acceptance criteria
onOpenProfilein feeds follow-up)Verification checklist
mentioned in commit
d1daf8cd4bMust implement all live buy rows wired to open modal (onOpenProfile)
mentioned in commit
ecb45770d0Implementation complete (#258 follow-up)
Wired
onOpenProfile/onOpenWalletProfilethrough all participant-address surfaces that show live buy activity or podium rankings. Clicking a wallet address now opensWalletProfileModal(indexerGET /v1/arena/wallet/{address}/stats); explorer links remain only inside the modal.What changed
/arena(TimeArenaPage) — passes profile opener toArenaSimplePage: podium winner addresses + “Just +Xs by …” timer extension chip/arena/protocol(ArenaProtocolPage) — live buy ticker (ArenaLiveBuysActivitySection) + existing donate-pools recent donorsLiveBuyRow,TimerHeroLiveBuys,ArenaBuyModals— profile prop plumbed for hero strip / all-buys modal when those surfaces are mountedLiveBuyRow— profile button clicks no longer bubble to row “view details” handlerINV-FRONTEND-258-WALLET-PROFILE, arena-views § wallet-profile, guardrails + play-skills cross-linksCommit:
ecb4577onmainVerification checklist
/arena— click a podium winner address → profile modal opens with stats (or loading/error when indexer offline)/arena— after a timer-extending buy, click buyer on “Just +Xs by …” chip → modal opens/arena/protocol— click buyer on a live buy ticker row → modal opens (tx hash link still opens explorer)/arena/protocol— click donor on donate-pools recent list → modal opensLiveBuyRow.test.tsx,ArenaLiveBuysActivitySection.test.tsx,ArenaSimplePodiumSection.test.tsxQA request
Please have the QA agent team run the checklist above on a build with
VITE_INDEXER_URLpointed at a populated arena indexer.Issue left open pending QA sign-off.
mentioned in issue #255
mentioned in commit
5278e1a207Implementation update (#258 — modal sections complete)
Prior wiring of
onOpenProfilethrough live buy rows and podium rankings was already onmain(ecb4577). This follow-up completes the modal content and styling per acceptance criteria.Commit:
5278e1aonmainWhat changed
WalletProfileModalSections.tsx— modular sections: Overview, Podium wins, Spending, XP/Level, WarBow, Referrals, Fun facts (all fields fromGET /v1/arena/wallet/{address}/stats)walletProfileFormat.ts— podium label mapping, win-rate / timestamp formattersWalletProfileModal.tsx— native<dialog>focus trap (Escape / backdrop close), loading + error + indexer-unset states (#96), mobile-responsive layout (#201)wallet-profile-modal+address-inline__profile-btnstylesWalletProfileModalSections.test.tsx,walletProfileFormat.test.ts(plus existingLiveBuyRow/ ticker / podium wiring tests)INV-FRONTEND-258-WALLET-PROFILE, arena-views § wallet-profile, guardrails + play-time-arena-doub cross-linksVerification checklist
/arena— click podium winner address → modal with all seven sections populated (or loading/error when indexer offline)/arena— click buyer on “Just +Xs by …” timer extension chip → modal opens/arena/protocol— click buyer on live buy ticker row → modal opens (tx hash still opens explorer)/arena/protocol— click donor on donate-pools recent list → modal opensnpm test -- WalletProfileModalSections walletProfileFormat LiveBuyRow ArenaLiveBuysActivitySection ArenaSimplePodiumSectionQA request
Please have the QA agent team run the checklist above on a build with
VITE_INDEXER_URLpointed at a populated arena indexer.Issue left open pending QA sign-off.
mentioned in issue #260
GitLab #258 verification (Cloud Agent)
Verified Frontend: Wallet profile modal on address click against issue body, comments,
INV-FRONTEND-258-WALLET-PROFILE, arena-views § wallet-profile, and guardrails/play-skill cross-links onmain(7d7d3da).Issue left open per QA sign-off workflow.
Acceptance criteria
GET /v1/arena/wallet/{address}/stats/arena/protocollive-buy ticker;curl http://127.0.0.1:3100/v1/arena/wallet/0xf39f…/statsreturned aggregates after Anvil buynpm test -- WalletProfileModalSections walletProfileFormat LiveBuyRow ArenaLiveBuysActivitySection ArenaSimplePodiumSection(20/20); Playwright asserted all seven headings in open modaltarget=_blank,hrefmatches0x…addressWalletProfileModal.tsxbranches:WalletProfileLoadingState,WalletProfileErrorStatewhenindexerUnsetor query error — not re-run with indexer stopped this sessionVerification checklist (issue comments)
/arena— podium winner address → modalArenaSimplePodiumSection.test.tsx(onOpenWalletProfile→ profile button)/arena— “Just +Xs by …” timer chip → modaldata-testid="arena-simple-last-extension"never rendered:GET /v1/arena/buysJSON omitsactual_seconds_addedwhile DB row has120(idx_arena_buy).ArenaSimplePageonly shows chip whenactual_seconds_added > 0ortimer_hard_reset/arena/protocol— live buy ticker buyer → modal/arena/protocol— donate-pools recent donor → modalrecent.length == 0); attemptedtopUpPodiumPoolsafter stack disruption — not re-validated in browsertoBeFocused()on profile button;Escapecloses<dialog>cd frontend && npm test -- WalletProfileModalSections walletProfileFormat LiveBuyRow ArenaLiveBuysActivitySection ArenaSimplePodiumSectionInvariants & docs
INV-FRONTEND-258-WALLET-PROFILE↔ tests ↔ arena-views anchor.cursor/skills/yieldomega-guardrails/SKILL.md§9askills/README.md+play-time-arena-doub/SKILL.mdcross-linksInfra notes (this VM)
vfsstorage driver; QA stack neededPATH=/usr/local/cargo/bin:…(Cargo ≥ 1.85) for indexer build.web3/ venv); buys seeded manually viacast.Follow-ups (optional)
actual_seconds_added(and related buy-row fields) inGET /v1/arena/buysso the/arena“Just +Xs by …” chip can render and be QA’d end-to-end./arenaand/arena/protocol.bash scripts/verify-wallet-profile-anvil.shmirroring other arena verify scripts (buy + optionaltopUpPodiumPools+ Playwright smoke).mentioned in issue #282
marked as related to #282
mentioned in commit b39b47dbac116e49949ee0e17b96823471c491e3
mentioned in issue #283
marked as related to #283
mentioned in commit
1b207c5ac8mentioned in merge request !406
mentioned in merge request !410
mentioned in issue #230
mentioned in issue #278
mentioned in commit
56dc6d76e4mentioned in issue #285
mentioned in commit
05dac2661ementioned in merge request !414
GitLab #258 verification (Cloud Agent)
Verified Frontend: Wallet profile modal on address click on
main(6d520e7). Prior Cloud Agent FAILs (#282actual_seconds_added, donate-pools donor) are resolved on currentmain.Issue left open — doc cross-link fix in draft MR !414; product QA sign-off after merge.
Acceptance criteria
GET /v1/arena/wallet/{address}/stats/arena/protocollive-buy ticker;curl http://127.0.0.1:3100/v1/arena/wallet/0x70997970c51812dc3a010c7d01b50e0d17dc79c8/statsnpm test -- WalletProfileModalSections walletProfileFormattarget=_blank,hrefmatches addressWalletProfileModal.tsx/WalletProfileModalSections.tsxVerification checklist (issue comments)
/arena— podium winner address → modalArenaSimplePodiumSection.test.tsx/arena— “Just +Xs by …” chip → modal[data-testid=arena-simple-last-extension](requiresactual_seconds_addedon buys — now present)/arena/protocol— live buy ticker buyer → modal/arena/protocol— donate-pools recent donor → modal[data-testid=arena-protocol-donate-pools-recent]aftertopUpPodiumPoolsEscapecloses<dialog>npm test -- WalletProfileModalSections walletProfileFormat LiveBuyRow ArenaLiveBuysActivitySection ArenaSimplePodiumSection indexerApi(42 tests)Invariants & docs
INV-FRONTEND-258-WALLET-PROFILE/ #282 / #283bash scripts/verify-wallet-profile-anvil.shskills/README.md#258 linkFollow-ups (optional)
frontend/e2e/for CI.verify-wallet-profile-anvil.shwith a settled podium winner for end-to-end podium-address QA.mentioned in merge request !415
mentioned in commit
6b8d381700mentioned in commit
6c13b43205mentioned in commit
0d408509b1mentioned in merge request !416
mentioned in commit
9baac170e5mentioned in issue #294
mentioned in commit
9f376dced2mentioned in commit
1aee028f49mentioned in commit
80ed641837mentioned in issue #309
mentioned in issue #318
mentioned in merge request !457
mentioned in merge request !482
mentioned in issue #336
mentioned in merge request !509