@@ -54,12 +54,41 @@ class Copied extends React.PureComponent<CopiedProps, CopiedState> {
5454 }
5555}
5656
57+ interface ReportProps {
58+ snippet : string ;
59+ }
60+
61+ class CopyReport extends React . PureComponent < ReportProps , CopiedState > {
62+ public constructor ( props : ReportProps ) {
63+ super ( props ) ;
64+ this . state = { copied : false } ;
65+ }
66+
67+ public render ( ) {
68+ return (
69+ < p className = { this . state . copied ? styles . active : styles . container } >
70+ < CopyToClipboard text = { this . props . snippet } onCopy = { this . copied } >
71+ < div className = { styles . container } > < a href = "#" > Copy a Markdown formatted report of results</ a >
72+ < button className = { styles . button } > < ClipboardIcon /> </ button > </ div >
73+ </ CopyToClipboard >
74+ < span className = { styles . text } > Copied!</ span >
75+ </ p >
76+ ) ;
77+ }
78+
79+ private copied = ( ) => {
80+ this . setState ( { copied : true } ) ;
81+ setTimeout ( ( ) => { this . setState ( { copied : false } ) ; } , 1000 ) ;
82+ }
83+ }
84+
5785const Links : React . FC = ( ) => {
5886 const codeUrl = useSelector ( selectors . codeUrlSelector ) ;
5987 const gistUrl = useSelector ( ( state : State ) => state . output . gist . url ) ;
6088 const permalink = useSelector ( selectors . permalinkSelector ) ;
6189 const urloUrl = useSelector ( selectors . urloUrlSelector ) ;
6290 const textChanged = useSelector ( selectors . textChangedSinceShareSelector ) ;
91+ const markdownSnippet = useSelector ( selectors . snippetSelector ) ;
6392
6493 return (
6594 < Fragment >
@@ -70,6 +99,7 @@ const Links: React.FC = () => {
7099 { textChanged ? < Section kind = "warning" label = "Code changed" >
71100 Source code has been changed since gist was saved
72101 </ Section > : null }
102+ < CopyReport snippet = { markdownSnippet } />
73103 </ Fragment >
74104 ) ;
75105} ;
0 commit comments