@@ -11,7 +11,8 @@ import Collapse from '@material-ui/core/Collapse';
1111import NoSsr from '@material-ui/core/NoSsr' ;
1212import EditIcon from '@material-ui/icons/Edit' ;
1313import CodeIcon from '@material-ui/icons/Code' ;
14- import GitHubIcon from '@material-ui/icons/GitHub' ;
14+ import FileCopyIcon from '@material-ui/icons/FileCopy' ;
15+ import Snackbar from '@material-ui/core/Snackbar' ;
1516import Menu from '@material-ui/core/Menu' ;
1617import MenuItem from '@material-ui/core/MenuItem' ;
1718import MoreVertIcon from '@material-ui/icons/MoreVert' ;
@@ -168,6 +169,13 @@ function Demo(props) {
168169 setDemoHovered ( event . type === 'mouseenter' ) ;
169170 } ;
170171
172+ const [ snackbarOpen , setSnackbarOpen ] = React . useState ( false ) ;
173+ const [ snackbarMessage , setSnackbarMessage ] = React . useState ( undefined ) ;
174+
175+ const handleSnackbarClose = ( ) => {
176+ setSnackbarOpen ( false ) ;
177+ } ;
178+
171179 const handleCodeLanguageClick = ( event , clickedCodeVariant ) => {
172180 if ( codeVariant !== clickedCodeVariant ) {
173181 dispatch ( {
@@ -179,7 +187,7 @@ function Demo(props) {
179187 }
180188 } ;
181189
182- const handleClickCodeSandbox = ( ) => {
190+ const handleCodeSandboxClick = ( ) => {
183191 const demoConfig = getDemoConfig ( demoData ) ;
184192 const parameters = compress ( {
185193 files : {
@@ -214,23 +222,25 @@ function Demo(props) {
214222 } ;
215223
216224 const [ anchorEl , setAnchorEl ] = React . useState ( null ) ;
217- const handleClickMore = event => {
225+ const handleMoreClick = event => {
218226 setAnchorEl ( event . currentTarget ) ;
219227 } ;
220228
221- const handleCloseMore = ( ) => {
229+ const handleMoreClose = ( ) => {
222230 setAnchorEl ( null ) ;
223231 } ;
224232
225- const handleClickCopy = async ( ) => {
233+ const handleCopyClick = async ( ) => {
226234 try {
227235 await copy ( demoData . raw ) ;
236+ setSnackbarMessage ( t ( 'copiedSource' ) ) ;
237+ setSnackbarOpen ( true ) ;
228238 } finally {
229- handleCloseMore ( ) ;
239+ handleMoreClose ( ) ;
230240 }
231241 } ;
232242
233- const handleClickStackBlitz = ( ) => {
243+ const handleStackBlitzClick = ( ) => {
234244 const demoConfig = getDemoConfig ( demoData ) ;
235245 const form = document . createElement ( 'form' ) ;
236246 form . method = 'POST' ;
@@ -248,7 +258,7 @@ function Demo(props) {
248258 document . body . appendChild ( form ) ;
249259 form . submit ( ) ;
250260 document . body . removeChild ( form ) ;
251- handleCloseMore ( ) ;
261+ handleMoreClose ( ) ;
252262 } ;
253263
254264 const showSourceHint = demoHovered && ! sourceHintSeen ;
@@ -273,8 +283,10 @@ function Demo(props) {
273283 const createHandleCodeSourceLink = anchor => async ( ) => {
274284 try {
275285 await copy ( `${ window . location . href . split ( '#' ) [ 0 ] } #${ anchor } ` ) ;
286+ setSnackbarMessage ( t ( 'copiedSourceLink' ) ) ;
287+ setSnackbarOpen ( true ) ;
276288 } finally {
277- handleCloseMore ( ) ;
289+ handleMoreClose ( ) ;
278290 }
279291 } ;
280292
@@ -287,7 +299,7 @@ function Demo(props) {
287299 }
288300 } , [ demoName ] ) ;
289301
290- const handleClickCodeOpen = ( ) => {
302+ const handleCodeOpenClick = ( ) => {
291303 document . cookie = `sourceHintSeen=true;path=/;max-age=31536000` ;
292304 setCodeOpen ( open => ! open ) ;
293305 setSourceHintSeen ( setSourceHintSeen ( true ) ) ;
@@ -355,7 +367,7 @@ function Demo(props) {
355367 data-ga-event-category = "demo"
356368 data-ga-event-label = { demoOptions . demo }
357369 data-ga-event-action = "expand"
358- onClick = { handleClickCodeOpen }
370+ onClick = { handleCodeOpenClick }
359371 color = { demoHovered ? 'primary' : 'default' }
360372 >
361373 < CodeIcon fontSize = "small" />
@@ -372,31 +384,29 @@ function Demo(props) {
372384 data-ga-event-category = "demo"
373385 data-ga-event-label = { demoOptions . demo }
374386 data-ga-event-action = "codesandbox"
375- onClick = { handleClickCodeSandbox }
387+ onClick = { handleCodeSandboxClick }
376388 >
377389 < EditIcon fontSize = "small" />
378390 </ IconButton >
379391 </ Tooltip >
380392 ) }
381393 < Tooltip
382394 classes = { { popper : classes . tooltip } }
383- title = { t ( 'viewGitHub ' ) }
395+ title = { t ( 'copySource ' ) }
384396 placement = "top"
385397 >
386398 < IconButton
387- aria-label = { t ( 'viewGitHub ' ) }
399+ aria-label = { t ( 'copySource ' ) }
388400 data-ga-event-category = "demo"
389401 data-ga-event-label = { demoOptions . demo }
390- data-ga-event-action = "github"
391- href = { demoData . githubLocation }
392- target = "_blank"
393- rel = "noopener nofollow"
402+ data-ga-event-action = "copy"
403+ onClick = { handleCopyClick }
394404 >
395- < GitHubIcon fontSize = "small" />
405+ < FileCopyIcon fontSize = "small" />
396406 </ IconButton >
397407 </ Tooltip >
398408 < IconButton
399- onClick = { handleClickMore }
409+ onClick = { handleMoreClick }
400410 aria-owns = { anchorEl ? 'demo-menu-more' : undefined }
401411 aria-haspopup = "true"
402412 aria-label = { t ( 'seeMore' ) }
@@ -407,7 +417,7 @@ function Demo(props) {
407417 id = "demo-menu-more"
408418 anchorEl = { anchorEl }
409419 open = { Boolean ( anchorEl ) }
410- onClose = { handleCloseMore }
420+ onClose = { handleMoreClose }
411421 getContentAnchorEl = { null }
412422 anchorOrigin = { {
413423 vertical : 'top' ,
@@ -421,17 +431,21 @@ function Demo(props) {
421431 < MenuItem
422432 data-ga-event-category = "demo"
423433 data-ga-event-label = { demoOptions . demo }
424- data-ga-event-action = "copy"
425- onClick = { handleClickCopy }
434+ data-ga-event-action = "github"
435+ component = "a"
436+ href = { demoData . githubLocation }
437+ target = "_blank"
438+ rel = "noopener nofollow"
439+ onClick = { handleMoreClose }
426440 >
427- { t ( 'copySource ' ) }
441+ { t ( 'viewGitHub ' ) }
428442 </ MenuItem >
429443 { demoOptions . hideEditButton ? null : (
430444 < MenuItem
431445 data-ga-event-category = "demo"
432446 data-ga-event-label = { demoOptions . demo }
433447 data-ga-event-action = "stackblitz"
434- onClick = { handleClickStackBlitz }
448+ onClick = { handleStackBlitzClick }
435449 >
436450 { t ( 'stackblitz' ) }
437451 </ MenuItem >
@@ -463,6 +477,12 @@ function Demo(props) {
463477 text = { `\`\`\`${ demoData . sourceLanguage } \n${ codeOpen ? demoData . raw : jsx } \n\`\`\`` }
464478 />
465479 </ Collapse >
480+ < Snackbar
481+ open = { snackbarOpen }
482+ autoHideDuration = { 3000 }
483+ onClose = { handleSnackbarClose }
484+ message = { snackbarMessage }
485+ />
466486 </ div >
467487 ) ;
468488}
0 commit comments