@@ -25,6 +25,7 @@ const CodeEditor = dynamic(import('./code-editor'), {
2525} ) ;
2626
2727const reqSource = require . context ( '!raw-loader!@docs/examples' , true , / \. j s / ) ;
28+ const reqCss = require . context ( '!raw-loader!@docs/examples' , true , / \. c s s / ) ;
2829const req = require . context ( '@docs/examples' , true , / \. j s / ) ;
2930
3031const useStyles = makeStyles ( ( theme ) => ( {
@@ -95,9 +96,10 @@ const generateIndex = (type) => `<!DOCTYPE html>
9596</html>
9697` ;
9798
98- const getPayload = ( type , code ) =>
99+ const getPayload = ( type , code , sourceFiles = { } ) =>
99100 getParameters ( {
100101 files : {
102+ ...sourceFiles ,
101103 'public/index.html' : {
102104 content : generateIndex ( type )
103105 } ,
@@ -140,12 +142,21 @@ const getPayload = (type, code) =>
140142 }
141143 } ) ;
142144
143- const CodeExample = ( { source, mode, mapper } ) => {
145+ const CodeExample = ( { source, mode, mapper, additionalSources } ) => {
144146 const classes = useStyles ( ) ;
145147 const codeSource = reqSource ( `./${ source } .js` ) . default ;
146148 let Component ;
147149 if ( mode === 'preview' ) {
148150 Component = req ( `./${ source } .js` ) . default ;
151+ const sourceFiles = additionalSources . split ( ',' ) . reduce (
152+ ( acc , curr ) => ( {
153+ ...acc ,
154+ [ `src/${ curr . split ( '/' ) . pop ( ) } ` ] : {
155+ content : curr . match ( / \. c s s $ / ) ? reqCss ( `./${ curr } ` ) . default : reqSource ( `./${ curr } ` ) . default
156+ }
157+ } ) ,
158+ { }
159+ ) ;
149160
150161 return (
151162 < Grid container spacing = { 0 } className = "DocRawComponent" >
@@ -168,7 +179,7 @@ const CodeExample = ({ source, mode, mapper }) => {
168179 ) }
169180 < Box display = "flex" >
170181 < form action = "https://codesandbox.io/api/v1/sandboxes/define" method = "POST" target = "_blank" >
171- < input type = "hidden" name = "parameters" value = { getPayload ( mapper , codeSource ) } />
182+ < input type = "hidden" name = "parameters" value = { getPayload ( mapper , codeSource , sourceFiles ) } />
172183 < Tooltip title = "Edit in codesandbox" >
173184 < IconButton disableFocusRipple type = "submit" >
174185 < CodesandboxIcon />
@@ -231,12 +242,14 @@ const CodeExample = ({ source, mode, mapper }) => {
231242CodeExample . propTypes = {
232243 source : PropTypes . string . isRequired ,
233244 mode : PropTypes . oneOf ( [ 'code' , 'preview' ] ) ,
234- mapper : PropTypes . oneOf ( [ 'pf4' , 'mui' ] )
245+ mapper : PropTypes . oneOf ( [ 'pf4' , 'mui' ] ) ,
246+ additionalSources : PropTypes . string // this has to be a string, MDX does not pass objects/arrays
235247} ;
236248
237249CodeExample . defaultProps = {
238250 mode : 'code' ,
239- mapper : 'pf4'
251+ mapper : 'pf4' ,
252+ additionalSources : ''
240253} ;
241254
242255export default CodeExample ;
0 commit comments