Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit13f1b59

Browse files
committed
Use clipboard util with fallback
1 parent649839a commit13f1b59

File tree

2 files changed

+27
-25
lines changed

2 files changed

+27
-25
lines changed

‎site/src/hooks/useClipboard.ts‎

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -58,32 +58,39 @@ export const useClipboard = (input: UseClipboardInput): UseClipboardResult => {
5858
},CLIPBOARD_TIMEOUT_MS);
5959
};
6060

61-
constcopyToClipboard=async()=>{
61+
consthandleCopyToClipboard=async()=>{
6262
try{
63-
awaitwindow.navigator.clipboard.writeText(textToCopy);
63+
awaitcopyToClipboard(textToCopy);
6464
handleSuccessfulCopy();
6565
}catch(err){
66-
constfallbackCopySuccessful=simulateClipboardWrite(textToCopy);
67-
if(fallbackCopySuccessful){
68-
handleSuccessfulCopy();
69-
return;
70-
}
66+
console.error(err);
67+
// copyToClipboard always throws an Error.
68+
setError(errasError);
69+
constnotifyUser=errorCallback??displayError;
70+
notifyUser((errasError).message);
71+
}
72+
};
7173

74+
return{ showCopiedSuccess, error,copyToClipboard:handleCopyToClipboard};
75+
};
76+
77+
/**
78+
* Attempt to copy the provided text to the clipboard. If this fails, try the
79+
* fallback method. If this also fails, throw an Error.
80+
*/
81+
exportasyncfunctioncopyToClipboard(textToCopy:string):Promise<void>{
82+
try{
83+
awaitwindow.navigator.clipboard.writeText(textToCopy);
84+
}catch(err){
85+
if(!simulateClipboardWrite(textToCopy)){
7286
constwrappedErr=newError(COPY_FAILED_MESSAGE);
7387
if(errinstanceofError){
7488
wrappedErr.stack=err.stack;
7589
}
76-
77-
console.error(wrappedErr);
78-
setError(wrappedErr);
79-
80-
constnotifyUser=errorCallback??displayError;
81-
notifyUser(COPY_FAILED_MESSAGE);
90+
throwwrappedErr;
8291
}
83-
};
84-
85-
return{ showCopiedSuccess, error, copyToClipboard};
86-
};
92+
}
93+
}
8794

8895
/**
8996
* Provides a fallback clipboard method for when browsers do not have access

‎site/src/pages/TerminalPage/TerminalPage.tsx‎

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
import{displayError}from"components/GlobalSnackbar/utils";
1616
import{useProxy}from"contexts/ProxyContext";
1717
import{ThemeOverride}from"contexts/ThemeProvider";
18+
import{copyToClipboard}from"hooks/useClipboard";
1819
import{useEmbeddedMetadata}from"hooks/useEmbeddedMetadata";
1920
import{typeFC,useCallback,useEffect,useRef,useState}from"react";
2021
import{useQuery}from"react-query";
@@ -151,15 +152,9 @@ const TerminalPage: FC = () => {
151152
constcopySelection=()=>{
152153
constselection=terminal.getSelection();
153154
if(selection){
154-
navigator.clipboard.writeText(selection).catch((err)=>{
155+
copyToClipboard(selection).catch((err)=>{
155156
console.error(err);
156-
if(err.message){
157-
displayError(`Failed to copy text:${err.message}`);
158-
}else{
159-
displayError(
160-
"Failed to copy text, but no error message was provided",
161-
);
162-
}
157+
displayError(err.message);
163158
});
164159
}
165160
};

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp