@@ -54,12 +54,41 @@ class Copied extends React.PureComponent<CopiedProps, CopiedState> {
54
54
}
55
55
}
56
56
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
+
57
85
const Links : React . FC = ( ) => {
58
86
const codeUrl = useSelector ( selectors . codeUrlSelector ) ;
59
87
const gistUrl = useSelector ( ( state : State ) => state . output . gist . url ) ;
60
88
const permalink = useSelector ( selectors . permalinkSelector ) ;
61
89
const urloUrl = useSelector ( selectors . urloUrlSelector ) ;
62
90
const textChanged = useSelector ( selectors . textChangedSinceShareSelector ) ;
91
+ const markdownSnippet = useSelector ( selectors . snippetSelector ) ;
63
92
64
93
return (
65
94
< Fragment >
@@ -70,6 +99,7 @@ const Links: React.FC = () => {
70
99
{ textChanged ? < Section kind = "warning" label = "Code changed" >
71
100
Source code has been changed since gist was saved
72
101
</ Section > : null }
102
+ < CopyReport snippet = { markdownSnippet } />
73
103
</ Fragment >
74
104
) ;
75
105
} ;
0 commit comments