File tree Expand file tree Collapse file tree 2 files changed +57
-7
lines changed
src/components/OpenInCodeSandbox Expand file tree Collapse file tree 2 files changed +57
-7
lines changed Original file line number Diff line number Diff line change @@ -4,7 +4,11 @@ import { IFiles } from '../../types';
44
55import SandpackConsumer from '../SandpackConsumer' ;
66
7- export default class OpenInCodeSandbox extends React . Component {
7+ export interface Props {
8+ render ?: ( ) => React . ReactNode ;
9+ }
10+
11+ export default class OpenInCodeSandbox extends React . Component < Props > {
812 getFileParameters = ( files : IFiles ) => {
913 const normalized : {
1014 [ path : string ] : { content : string ; isBinary : boolean } ;
@@ -22,22 +26,32 @@ export default class OpenInCodeSandbox extends React.Component {
2226 return getParameters ( { files : normalized } ) ;
2327 } ;
2428
29+ renderButton ( ) {
30+ if ( typeof this . props . render === 'function' ) {
31+ return this . props . render ( ) ;
32+ }
33+
34+ return < input type = "submit" value = "Open in CodeSandbox" /> ;
35+ }
36+
2537 render ( ) {
38+ const { render, ...props } = this . props ;
39+
2640 return (
2741 < SandpackConsumer >
2842 { sandpack => (
2943 < form
3044 action = "https://codesandbox.io/api/v1/sandboxes/define"
3145 method = "POST"
3246 target = "_blank"
33- { ...this . props }
47+ { ...props }
3448 >
3549 < input
3650 type = "hidden"
3751 name = "parameters"
3852 value = { this . getFileParameters ( sandpack . files ) }
3953 />
40- < input type = "submit" value = "Open in CodeSandbox" />
54+ { this . renderButton ( ) }
4155 </ form >
4256 ) }
4357 </ SandpackConsumer >
Original file line number Diff line number Diff line change @@ -2,20 +2,36 @@ import React from 'react';
22import JSXAddon from 'storybook-addon-jsx' ;
33import { storiesOf , setAddon } from '@storybook/react' ;
44
5+ import SandpackProvider from '../src/components/SandpackProvider/index.ts' ;
56import OpenInCodeSandbox from '../src/components/OpenInCodeSandbox/index.ts' ;
67
78setAddon ( JSXAddon ) ;
89
910const stories = storiesOf ( 'Export To CodeSandbox' , module ) ;
1011
12+ stories . addWithJSX ( 'minimal' , ( ) => (
13+ < SandpackProvider
14+ entry = "/index.js"
15+ files = { {
16+ '/index.js' : {
17+ code : '' ,
18+ } ,
19+ } }
20+ dependencies = { { } }
21+ >
22+ < OpenInCodeSandbox />
23+ </ SandpackProvider >
24+ ) ) ;
25+
1126stories . addWithJSX ( 'with multiple files' , ( ) => (
12- < OpenInCodeSandbox
27+ < SandpackProvider
28+ entry = "/index.js"
1329 files = { {
1430 '/index.js' : {
1531 code : `import Hello from './Hello.js';
1632
17- document.body.innerHTML = JSON.stringify(Hello);
18- ` ,
33+ document.body.innerHTML = JSON.stringify(Hello);
34+ `,
1935 } ,
2036 '/Hello.js' : {
2137 code : `export default \`Hello from another file, here's an ID: $\{require('uuid')()}!\`` ,
@@ -24,5 +40,25 @@ document.body.innerHTML = JSON.stringify(Hello);
2440 dependencies = { {
2541 uuid : 'latest' ,
2642 } }
27- />
43+ >
44+ < OpenInCodeSandbox />
45+ </ SandpackProvider >
46+ ) ) ;
47+
48+ stories . addWithJSX ( 'with render prop' , ( ) => (
49+ < SandpackProvider
50+ entry = "/index.js"
51+ files = { {
52+ '/index.js' : {
53+ code : '' ,
54+ } ,
55+ } }
56+ dependencies = { { } }
57+ >
58+ < OpenInCodeSandbox
59+ render = { ( ) => {
60+ return < button type = "submit" > CodeSandbox is awesome!</ button > ;
61+ } }
62+ />
63+ </ SandpackProvider >
2864) ) ;
You can’t perform that action at this time.
0 commit comments