feat(web): add copy button affordances for transaction hashes, payer … - #244
Merged
mergekeeper[bot] merged 1 commit intoAug 26, 2026
Merged
Conversation
…addresses, and merkle roots
|
@ajulaybeeb is attempting to deploy a commit to the ACCENSA Team on Vercel. A member of the Team first needs to authorize it. |
|
@ajulaybeeb 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! 🚀 |
|
MergeKeeper review Scope: in scope for linked issue The pull request correctly implements all requested copy affordances with appropriate visual feedback, accessibility support, and unit tests. Reviewed commit: |
|
Merged Merged with |
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.
Summary
CopyButtoncomponent (apps/web/src/components/copy-button.tsx) with visual state feedback and polite screen-reader announcements viarole="status"live region.apps/web/src/app/dashboard/page.tsxfor Transaction Hash (selected.tx_hash) and Payer Address (selected.payer), copying untruncated values to the clipboard.batch.root) inapps/web/src/app/verify/page.tsx.CopyButtoncomponent, Dashboard payment modal copy affordances, and Verify Merkle root copy controls.Why
Users inspecting settlement payments on the dashboard modal or reviewing batch audit details on the verify page had no copy button affordance for long cryptographic identifiers (such as 64-character transaction hashes, 56-character Stellar public keys, and 32-byte Merkle roots). Manually selecting and highlighting these values inside scrollable/wrapped text boxes was error-prone and tedious for merchant operators.
Implementation
apps/web/src/components/copy-button.tsx:CopyButtonacceptingvalue,label,className, andtimeoutMs.navigator.clipboard.writeText(value).Copyicon →Copiedcheckmark with green badge accent /Failedicon on clipboard rejection).role="status"live region (aria-live="polite" aria-atomic="true") announcing"<label> copied to clipboard"or"Failed to copy <label>".apps/web/src/app/dashboard/page.tsx:Fieldhelper to support an optionalactionslot aligned in the header row next to the field label.<CopyButton value={selected.tx_hash} label="Transaction Hash" />and<CopyButton value={selected.payer} label="Payer Address" />in the payment details modal.PaymentModalto facilitate modular rendering and testing.apps/web/src/app/verify/page.tsx:copyable?: booleanto theDetailcomponent and wired<Detail label="Merkle Root" value={batch.root} mono copyable />.apps/web/src/components/copy-button.test.tsx: Validates accessible labels, tooltip titles, and live region announcements.apps/web/src/app/dashboard/dashboard-copy.test.tsx: Validates full untruncated identifiers and copy action buttons rendered inPaymentModal.apps/web/src/app/verify/verify-accessibility.test.tsx: Validates copy button rendering and accessibility for batch Merkle roots.Testing
pnpm format:check: Passed (all files formatted with Prettier).pnpm --filter web lint: Passed (0 errors).pnpm --filter web typecheck: Passed (TypeScripttsc --noEmitexited with code 0).pnpm --filter web test: Passed (22/22 test files passed, 253/253 tests passing).pnpm --filter web build: Passed (Production Turbopack build succeeded with all routes statically/dynamically compiled).Scope / Risk
apps/web.Issue
Closes #198