1+ import React from 'react' ;
2+ import styles from './componentSnippet.css' ;
3+ import SyntaxHighlighter from 'react-syntax-highlighter/prism' ;
4+ import dark from 'react-syntax-highlighter/styles/prism/coy.js' ;
5+ import cx from 'classnames' ;
6+ import PropTypes from 'prop-types' ;
7+
8+ class ComponentSnippet extends React . Component {
9+ constructor ( props ) {
10+ super ( props ) ;
11+ this . state = {
12+ mode : props . initialMode ,
13+ }
14+ }
15+
16+ render ( ) {
17+ const { mode} = this . state ;
18+ const { preview, code} = this . props ;
19+ return (
20+ < div className = { styles . wrapper } >
21+ < div className = { styles . content } >
22+ { mode === 'code' ? (
23+ < SyntaxHighlighter className = { styles . code } language = 'jsx' style = { dark } >
24+ { code }
25+ </ SyntaxHighlighter >
26+ ) : (
27+ < div className = { styles . preview } > { preview } </ div >
28+ ) }
29+ </ div >
30+ < div className = { styles . buttons } >
31+ < button onClick = { ( ) => this . setState ( { mode : 'code' } ) } className = { cx ( styles . button , { [ styles . passiveButton ] : mode !== 'code' } ) } > CODE</ button >
32+ < button onClick = { ( ) => this . setState ( { mode : 'preview' } ) } className = { cx ( styles . button , { [ styles . passiveButton ] : mode !== 'preview' } ) } > PREVIEW</ button >
33+ </ div >
34+ </ div >
35+ ) ;
36+ }
37+ }
38+
39+ ComponentSnippet . propTypes = {
40+ initialMode : PropTypes . oneOf ( [ 'preview' , 'code' ] ) ,
41+ }
42+
43+ ComponentSnippet . defaultProps = {
44+ initialMode : 'preview' ,
45+ }
46+
47+ export default ComponentSnippet ;
0 commit comments