fix: Make CopyToClipboard popup optimistic #3855
Open
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.
Description
This PR is a fix for the longstanding visual glitch when clicking
CopyToClipboard
: Instead of briefly showing the popover in a "Pending" state, it uses the Permissions API ahead of time to determine whether the clipboard API is likely to succeed, then optimistically shows the popover in the "Success" or "Error" state depending on that value.This has the advantage that the user gets immediate feedback that will be correct virtually every time, rather than having to wait for the async Clipboard API to resolve. The downside is that edge cases are possible: A user could disable clipboard permissions after the
CopyToClipboard
component renders, for instance, in which case the popover would incorrectly show a success message for a moment before showing an error message. I think this edge case behavior is acceptable, given the tradeoffs imposed on us by the async Clipboard API.This is a simpler alternative to the previously-suggested fix at #3443.
How has this been tested?
I've run the dev server and clicked around in the
CopyToClipboard
demos. It's a much, much smoother experience with the immediate feedback this PR provides.Review checklist
The following items are to be evaluated by the author(s) and the reviewer(s).
Correctness
CONTRIBUTING.md
.CONTRIBUTING.md
.Security
checkSafeUrl
function.Testing
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.