Repository navigation
feat(game): New invite sheet, who first - #262
Merged
Merged
Conversation
- up to four distinct names, most recent first, never the player - no new request: both lists are the hub's own
- recent opponents as one radio group, a field for anybody else - the link as a card, the opening and side folded into a summary row - Change opens a game panel; Sheet can pin its footer on a phone - en, pt, de copy; the other locales fall back to en until translated
- layout shift, clipped text and scrolling at 375x667, 375x548, 390x664, 320x460 - chip, typed-name, game panel, link failure and loading states
arrzdev
commented
Nov 1, 2026
arrzdev
left a comment
Owner
Author
There was a problem hiding this comment.
Approve. Code reviewed against the design and the spec acceptance criteria; CI green (checks, e2e 1-3, gate).
Non-blocking notes for a follow-up:
useOnlineHome:recentOpponentsis computed as soon as either games list lands, so if the active list arrives first the chips can be replaced when the finished list lands (row height stays, the names can change under the thumb). Waiting for both lists unless one failed would make the first set of chips final.InviteLinkCard.handleCopy: thesetTimeoutthat resets the copied check is not cleared on unmount (the card remounts when the terms change).
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 and why
The New invite sheet asks who first. Recent opponents show as chips (photo or initials, up to four, most recent first), then a field for anybody else, then the link as one card, then the opening and side folded into a one-line summary. Change opens a game panel with the carousel and side picker; Done returns. The send button names the person ("Invite joana_p").
recentOpponentsOf): distinct by name, never yourself, most recent first, four at most. No new request or endpoint.Sheetgets an opt-inpinFooter, so on a 320x460 phone the send stays on screen while the body scrolls.api_invite_existsis shortened so the reserved error line stays on one line.How to verify
pnpm exec playwright test e2e/invite-composer.spec.ts e2e/modal-layout.spec.ts e2e/invite-copy-link.spec.tson chromium and webkit-iphone.recent-opponents.test.ts./online?invite=newas a player with games (chips), and as a new account (no chips, label "Opponent").modal-layout.spec.tsno longer runs the two-size rhythm check on it; it still checks shift, clipping and scrolling.UI quality gate