@@ -25,6 +25,7 @@ const CodeEditor = dynamic(import('./code-editor'), {
25
25
} ) ;
26
26
27
27
const reqSource = require . context ( '!raw-loader!@docs/examples' , true , / \. j s / ) ;
28
+ const reqCss = require . context ( '!raw-loader!@docs/examples' , true , / \. c s s / ) ;
28
29
const req = require . context ( '@docs/examples' , true , / \. j s / ) ;
29
30
30
31
const useStyles = makeStyles ( ( theme ) => ( {
@@ -95,9 +96,10 @@ const generateIndex = (type) => `<!DOCTYPE html>
95
96
</html>
96
97
` ;
97
98
98
- const getPayload = ( type , code ) =>
99
+ const getPayload = ( type , code , sourceFiles = { } ) =>
99
100
getParameters ( {
100
101
files : {
102
+ ...sourceFiles ,
101
103
'public/index.html' : {
102
104
content : generateIndex ( type )
103
105
} ,
@@ -140,12 +142,21 @@ const getPayload = (type, code) =>
140
142
}
141
143
} ) ;
142
144
143
- const CodeExample = ( { source, mode, mapper } ) => {
145
+ const CodeExample = ( { source, mode, mapper, additionalSources } ) => {
144
146
const classes = useStyles ( ) ;
145
147
const codeSource = reqSource ( `./${ source } .js` ) . default ;
146
148
let Component ;
147
149
if ( mode === 'preview' ) {
148
150
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
+ ) ;
149
160
150
161
return (
151
162
< Grid container spacing = { 0 } className = "DocRawComponent" >
@@ -168,7 +179,7 @@ const CodeExample = ({ source, mode, mapper }) => {
168
179
) }
169
180
< Box display = "flex" >
170
181
< 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 ) } />
172
183
< Tooltip title = "Edit in codesandbox" >
173
184
< IconButton disableFocusRipple type = "submit" >
174
185
< CodesandboxIcon />
@@ -231,12 +242,14 @@ const CodeExample = ({ source, mode, mapper }) => {
231
242
CodeExample . propTypes = {
232
243
source : PropTypes . string . isRequired ,
233
244
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
235
247
} ;
236
248
237
249
CodeExample . defaultProps = {
238
250
mode : 'code' ,
239
- mapper : 'pf4'
251
+ mapper : 'pf4' ,
252
+ additionalSources : ''
240
253
} ;
241
254
242
255
export default CodeExample ;
0 commit comments