forked from trent_larson/crowd-funder-for-time-pwa
feat: migrate all clipboard operations from useClipboard to ClipboardService
- Replace useClipboard with platform-agnostic ClipboardService across 13 files - Add proper error handling with user notifications for all clipboard operations - Fix naming conflicts between method names and imported function names - Ensure consistent async/await patterns throughout the codebase - Add notification system to HelpView.vue for user feedback on clipboard errors - Remove unnecessary wrapper methods for cleaner code Files migrated: - View components: UserProfileView, QuickActionBvcEndView, ProjectViewView, InviteOneView, SeedBackupView, HelpView, AccountViewView, DatabaseMigration, ConfirmGiftView, ClaimView, OnboardMeetingSetupView - Utility functions: libs/util.ts (doCopyTwoSecRedo) - Components: HiddenDidDialog Naming conflicts resolved: - DatabaseMigration: copyToClipboard() → copyExportedDataToClipboard() - ShareMyContactInfoView: copyToClipboard() → copyContactMessageToClipboard() → removed - HiddenDidDialog: copyToClipboard() → copyTextToClipboard() - ClaimView: copyToClipboard() → copyTextToClipboard() - ConfirmGiftView: copyToClipboard() → copyTextToClipboard() This migration ensures reliable clipboard functionality across iOS, Android, and web platforms with proper error handling and user feedback. Closes: Platform-specific clipboard issues on mobile devices
This commit is contained in:
@@ -192,7 +192,7 @@
|
||||
<span v-if="!serverUtil.isEmptyOrHiddenDid(confirmerId)">
|
||||
<button
|
||||
@click="
|
||||
copyToClipboard(
|
||||
copyTextToClipboard(
|
||||
'The DID of ' + confirmerId,
|
||||
confirmerId,
|
||||
)
|
||||
@@ -238,7 +238,7 @@
|
||||
>
|
||||
<button
|
||||
@click="
|
||||
copyToClipboard(
|
||||
copyTextToClipboard(
|
||||
'The DID of ' + confsVisibleTo,
|
||||
confsVisibleTo,
|
||||
)
|
||||
@@ -309,7 +309,9 @@
|
||||
contacts can see more details:
|
||||
<a
|
||||
class="text-blue-500"
|
||||
@click="copyToClipboard('A link to this page', windowLocation)"
|
||||
@click="
|
||||
copyTextToClipboard('A link to this page', windowLocation)
|
||||
"
|
||||
>click to copy this page info</a
|
||||
>
|
||||
and see if they can make an introduction. Someone is connected to
|
||||
@@ -332,7 +334,9 @@
|
||||
If you'd like an introduction,
|
||||
<a
|
||||
class="text-blue-500"
|
||||
@click="copyToClipboard('A link to this page', windowLocation)"
|
||||
@click="
|
||||
copyTextToClipboard('A link to this page', windowLocation)
|
||||
"
|
||||
>share this page with them and ask if they'll tell you more about
|
||||
about the participants.</a
|
||||
>
|
||||
@@ -360,7 +364,7 @@
|
||||
<span v-if="!serverUtil.isEmptyOrHiddenDid(visDid)">
|
||||
<button
|
||||
@click="
|
||||
copyToClipboard('The DID of ' + visDid, visDid)
|
||||
copyTextToClipboard('The DID of ' + visDid, visDid)
|
||||
"
|
||||
>
|
||||
<font-awesome
|
||||
@@ -433,7 +437,7 @@
|
||||
import * as yaml from "js-yaml";
|
||||
import * as R from "ramda";
|
||||
import { Component, Vue } from "vue-facing-decorator";
|
||||
import { useClipboard } from "@vueuse/core";
|
||||
import { copyToClipboard } from "../services/ClipboardService";
|
||||
import { RouteLocationNormalizedLoaded, Router } from "vue-router";
|
||||
import QuickNav from "../components/QuickNav.vue";
|
||||
import { NotificationIface } from "../constants/app";
|
||||
@@ -779,16 +783,21 @@ export default class ConfirmGiftView extends Vue {
|
||||
* @param description - Description of copied content
|
||||
* @param text - Text to copy
|
||||
*/
|
||||
copyToClipboard(description: string, text: string): void {
|
||||
useClipboard()
|
||||
.copy(text)
|
||||
.then(() => {
|
||||
this.notify.toast(
|
||||
NOTIFY_COPIED_TO_CLIPBOARD.title,
|
||||
NOTIFY_COPIED_TO_CLIPBOARD.message(description),
|
||||
TIMEOUTS.SHORT,
|
||||
);
|
||||
});
|
||||
async copyTextToClipboard(description: string, text: string): Promise<void> {
|
||||
try {
|
||||
await copyToClipboard(text);
|
||||
this.notify.toast(
|
||||
NOTIFY_COPIED_TO_CLIPBOARD.title,
|
||||
NOTIFY_COPIED_TO_CLIPBOARD.message(description),
|
||||
TIMEOUTS.SHORT,
|
||||
);
|
||||
} catch (error) {
|
||||
this.$logAndConsole(
|
||||
`Error copying ${description} to clipboard: ${error}`,
|
||||
true,
|
||||
);
|
||||
this.notify.error(`Failed to copy ${description} to clipboard.`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -870,7 +879,7 @@ export default class ConfirmGiftView extends Vue {
|
||||
* Handles share functionality based on platform capabilities
|
||||
*/
|
||||
async onClickShareClaim(): Promise<void> {
|
||||
this.copyToClipboard("A link to this page", this.windowLocation);
|
||||
this.copyTextToClipboard("A link to this page", this.windowLocation);
|
||||
window.navigator.share({
|
||||
title: "Help Connect Me",
|
||||
text: "I'm trying to find the full details of this claim. Can you help me?",
|
||||
|
||||
Reference in New Issue
Block a user