fix: copy to clipboard

This commit is contained in:
naiba
2024-11-30 17:08:47 +08:00
parent eca99201b3
commit 5c0c358255
6 changed files with 42 additions and 7 deletions

View File

@@ -14,7 +14,7 @@ import useWebSocket from "react-use-websocket"
import { toast } from "sonner"
import { ColumnDef } from "@tanstack/react-table"
import { Folder, File } from "lucide-react"
import { fm, formatPath, fmWorker as worker } from "@/lib/utils"
import { copyToClipboard, fm, formatPath, fmWorker as worker } from "@/lib/utils"
import {
AlertDialog,
AlertDialogContent,
@@ -293,7 +293,7 @@ const FMComponent: React.FC<FMProps & JSX.IntrinsicElements["div"]> = ({ wsUrl,
<DropdownMenuItem onClick={listFile}>{t('Refresh')}</DropdownMenuItem>
<DropdownMenuItem onClick={
async () => {
await navigator.clipboard.writeText(formatPath(currentPath));
await copyToClipboard(formatPath(currentPath));
}
}>{t("CopyPath")}</DropdownMenuItem>
<AlertDialogTrigger asChild>

View File

@@ -12,6 +12,7 @@ import { Check, Clipboard } from "lucide-react"
import { toast } from "sonner"
import { useTranslation } from "react-i18next"
import { copyToClipboard } from "@/lib/utils"
enum OSTypes {
Linux = 1,
@@ -29,7 +30,8 @@ export const InstallCommandsMenu = forwardRef<HTMLButtonElement, ButtonProps>((p
try {
setCopy(true);
if (settings)
await navigator.clipboard.writeText(generateCommand(type, settings) || '');
await copyToClipboard(generateCommand(type, settings) || '');
} catch (e) {
console.error(e);
toast(t("Error"), {
@@ -52,9 +54,9 @@ export const InstallCommandsMenu = forwardRef<HTMLButtonElement, ButtonProps>((p
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuItem onClick={async () => { switchState(OSTypes.Linux) }}>Linux</DropdownMenuItem>
<DropdownMenuItem onClick={async () => { switchState(OSTypes.macOS) }}>macOS</DropdownMenuItem>
<DropdownMenuItem onClick={async () => { switchState(OSTypes.Windows) }}>Windows</DropdownMenuItem>
<DropdownMenuItem className="nezha-copy" onClick={async () => { switchState(OSTypes.Linux) }}>Linux</DropdownMenuItem>
<DropdownMenuItem className="nezha-copy" onClick={async () => { switchState(OSTypes.macOS) }}>macOS</DropdownMenuItem>
<DropdownMenuItem className="nezha-copy" onClick={async () => { switchState(OSTypes.Windows) }}>Windows</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);

View File

@@ -10,6 +10,7 @@ import { IconButton } from "./xui/icon-button"
import { toast } from "sonner";
import { useTranslation } from "react-i18next";
import { copyToClipboard } from "@/lib/utils";
interface NoteMenuProps extends ButtonProps {
note: { private?: string, public?: string };
@@ -29,7 +30,7 @@ export const NoteMenu = forwardRef<HTMLButtonElement, NoteMenuProps>((props, ref
if (!copy) {
setCopy(true);
await navigator.clipboard.writeText(text);
await copyToClipboard(text);
setTimeout(() => {
setCopy(false);
}, 2 * 1000);

View File

@@ -3,6 +3,7 @@ import { twMerge } from "tailwind-merge"
import { z } from "zod"
import { FMEntry, FMOpcode, ModelIP } from "@/types"
import FMWorker from "./fm?worker"
import copy from "copy-to-clipboard"
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs))
@@ -165,3 +166,17 @@ function ipv6BinaryToString(binary: Uint8Array) {
return ipv6;
}
export async function copyToClipboard(text: string) {
try {
return await navigator.clipboard.writeText(text);
} catch (error) {
console.error('navigator', error);
}
try {
return copy(text)
} catch (error) {
console.error('copy', error);
}
throw new Error('Failed to copy text to clipboard');
}