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:
@@ -128,7 +128,7 @@
|
||||
<script lang="ts">
|
||||
import axios from "axios";
|
||||
import { Component, Vue } from "vue-facing-decorator";
|
||||
import { useClipboard } from "@vueuse/core";
|
||||
import { copyToClipboard } from "../services/ClipboardService";
|
||||
import { Router } from "vue-router";
|
||||
|
||||
import ContactNameDialog from "../components/ContactNameDialog.vue";
|
||||
@@ -333,17 +333,27 @@ export default class InviteOneView extends Vue {
|
||||
return `${APP_SERVER}/deep-link/invite-one-accept/${jwt}`;
|
||||
}
|
||||
|
||||
copyInviteAndNotify(inviteId: string, jwt: string) {
|
||||
useClipboard().copy(this.inviteLink(jwt));
|
||||
this.notify.success(createInviteLinkCopyMessage(inviteId), TIMEOUTS.LONG);
|
||||
async copyInviteAndNotify(inviteId: string, jwt: string) {
|
||||
try {
|
||||
await copyToClipboard(this.inviteLink(jwt));
|
||||
this.notify.success(createInviteLinkCopyMessage(inviteId), TIMEOUTS.LONG);
|
||||
} catch (error) {
|
||||
this.$logAndConsole(`Error copying invite link: ${error}`, true);
|
||||
this.notify.error("Failed to copy invite link.");
|
||||
}
|
||||
}
|
||||
|
||||
showInvite(inviteId: string, redeemed: boolean, expired: boolean) {
|
||||
useClipboard().copy(inviteId);
|
||||
this.notify.success(
|
||||
createInviteIdCopyMessage(inviteId, redeemed, expired),
|
||||
TIMEOUTS.LONG,
|
||||
);
|
||||
async showInvite(inviteId: string, redeemed: boolean, expired: boolean) {
|
||||
try {
|
||||
await copyToClipboard(inviteId);
|
||||
this.notify.success(
|
||||
createInviteIdCopyMessage(inviteId, redeemed, expired),
|
||||
TIMEOUTS.LONG,
|
||||
);
|
||||
} catch (error) {
|
||||
this.$logAndConsole(`Error copying invite ID: ${error}`, true);
|
||||
this.notify.error("Failed to copy invite ID.");
|
||||
}
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
|
||||
Reference in New Issue
Block a user