fix: accessibility, escrow labels, tab persistence, and formatting deduplication - #346
Merged
chonilius merged 4 commits intoAug 30, 2026
Conversation
…bally Addresses MergeFi#258. Users who set their OS/browser preference to reduce motion now get a reduced-motion experience: all transitions and animations are effectively disabled via a @media (prefers-reduced-motion: reduce) block.
…eDetailPage Addresses MergeFi#259. The escrow status card previously used a binary ternary that labeled every non-open status as 'Funds locked', even for paid, refunded, and expired bounties where funds have already left escrow. Now maps each BountyStatus to its accurate label: 'Awaiting funding' (open), 'Funds locked' (funded/claimed/in_review/merged), 'Paid out' (paid), 'Refunded to sponsor' (refunded), 'Expired, unclaimed' (expired). Also aligns the BountyStatus type with the actual statuses used in code.
Addresses MergeFi#260. The Active/Completed tab state is now persisted to the URL as a ?tab=completed search param via shallow router.replace, so the selected tab survives page refreshes and can be shared via link. Wrapped the client component in Suspense as required by Next.js useSearchParams.
…plicating logic Addresses MergeFi#261. StatCard's currency formatting now calls formatCurrency from utils.ts directly instead of reimplementing the same toLocaleString logic. Eliminates the drift-prone pattern of maintaining identical formatting rules in two independent locations.
|
@Levi-Ojukwu is attempting to deploy a commit to the chonilius' projects Team on Vercel. A member of the Team first needs to authorize it. |
|
@Levi-Ojukwu Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
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.
PR Description:
Closes #258
Closes #259
Closes #260
Closes #261
What changed
App-wide transitions and hover animations never respect prefers-reduced-motion #258 — prefers-reduced-motion: Added a
@media (prefers-reduced-motion: reduce)block inglobals.cssthat disables all transitions and animations (transition-duration: 0.01ms !important,animation-duration: 0.01ms !important) for users with the OS-level reduced-motion preference set.IssueDetailPage's escrow status label says "Funds locked" for paid, refunded, and expired bounties, even though funds have already left escrow in all three cases #259 — Escrow status labels: Expanded the binary
"open" ? "Awaiting funding" : "Funds locked"ternary inIssueDetailPageinto a properRecord<BountyStatus, string>mapping. Each status now shows its accurate escrow label: "Awaiting funding" (open), "Funds locked" (funded/claimed/in_review/merged), "Paid out" (paid), "Refunded to sponsor" (refunded), "Expired, unclaimed" (expired). Also updated theBountyStatustype to match the statuses actually used in code.ContributorDashboardPage's Active/Completed tab selection isn't reflected in the URL, so refreshing or sharing a link always resets to the Active tab #260 — Tab URL persistence: The contributor dashboard's Active/Completed tab now syncs with a
?tab=URL search param viauseSearchParams+ shallowrouter.replace. The selected tab survives page refreshes and can be shared via link. Added a<Suspense>boundary as required by Next.js.StatCard duplicates formatCurrency's exact locale-formatting logic instead of calling the shared utils.ts helper #261 — StatCard deduplication: Replaced StatCard's independent
toLocaleStringcurrency formatting with a direct call to the sharedformatCurrency()utility, eliminating the drift-prone duplicate implementation.