@@ -31,7 +31,7 @@ const getWorkerURL = (url) => {
31
31
return URL . createObjectURL ( blob ) ;
32
32
} ;
33
33
34
- const PyodideRunner = ( { active } ) => {
34
+ const PyodideRunner = ( { active, outputPanels = [ "text" , "visual" ] } ) => {
35
35
const [ pyodideWorker , setPyodideWorker ] = useState ( null ) ;
36
36
37
37
useEffect ( ( ) => {
@@ -65,6 +65,9 @@ const PyodideRunner = ({ active }) => {
65
65
const isMobile = useMediaQuery ( { query : MOBILE_MEDIA_QUERY } ) ;
66
66
const senseHatAlways = useSelector ( ( s ) => s . editor . senseHatAlwaysEnabled ) ;
67
67
const queryParams = new URLSearchParams ( window . location . search ) ;
68
+ const singleOutputPanel = outputPanels . length === 1 ;
69
+ const showVisualOutputPanel = outputPanels . includes ( "visual" ) ;
70
+ const showTextOutputPanel = outputPanels . includes ( "text" ) ;
68
71
const showVisualTab = queryParams . get ( "show_visual_tab" ) === "true" ;
69
72
const [ hasVisual , setHasVisual ] = useState ( showVisualTab || senseHatAlways ) ;
70
73
const [ visuals , setVisuals ] = useState ( [ ] ) ;
@@ -195,8 +198,10 @@ const PyodideRunner = ({ active }) => {
195
198
} ;
196
199
197
200
const handleVisual = ( origin , content ) => {
198
- setHasVisual ( true ) ;
199
- setVisuals ( ( array ) => [ ...array , { origin, content } ] ) ;
201
+ if ( showVisualOutputPanel ) {
202
+ setHasVisual ( true ) ;
203
+ setVisuals ( ( array ) => [ ...array , { origin, content } ] ) ;
204
+ }
200
205
} ;
201
206
202
207
const handleSenseHatEvent = ( type ) => {
@@ -326,12 +331,16 @@ const PyodideRunner = ({ active }) => {
326
331
"pyodiderunner--active" : active ,
327
332
} ) }
328
333
>
329
- { isSplitView ? (
334
+ { isSplitView || singleOutputPanel ? (
330
335
< >
331
- { hasVisual && (
336
+ { hasVisual && showVisualOutputPanel && (
332
337
< div className = "output-panel output-panel--visual" >
333
338
< Tabs forceRenderTabPanel = { true } >
334
- < div className = "react-tabs__tab-container" >
339
+ < div
340
+ className = { classNames ( "react-tabs__tab-container" , {
341
+ "react-tabs__tab-container--hidden" : singleOutputPanel ,
342
+ } ) }
343
+ >
335
344
< TabList >
336
345
< Tab key = { 0 } >
337
346
< span className = "react-tabs__tab-text" >
@@ -348,30 +357,36 @@ const PyodideRunner = ({ active }) => {
348
357
</ Tabs >
349
358
</ div >
350
359
) }
351
- < div className = "output-panel output-panel--text" >
352
- < Tabs forceRenderTabPanel = { true } >
353
- < div className = "react-tabs__tab-container" >
354
- < TabList >
355
- < Tab key = { 0 } >
356
- < span className = "react-tabs__tab-text" >
357
- { t ( "output.textOutput" ) }
358
- </ span >
359
- </ Tab >
360
- </ TabList >
361
- { ! hasVisual && ! isEmbedded && isMobile && (
362
- < RunnerControls skinny />
363
- ) }
364
- </ div >
365
- < ErrorMessage />
366
- < TabPanel key = { 0 } >
367
- < pre
368
- className = { `pythonrunner-console pythonrunner-console--${ settings . fontSize } ` }
369
- onClick = { shiftFocusToInput }
370
- ref = { output }
371
- > </ pre >
372
- </ TabPanel >
373
- </ Tabs >
374
- </ div >
360
+ { showTextOutputPanel && (
361
+ < div className = "output-panel output-panel--text" >
362
+ < Tabs forceRenderTabPanel = { true } >
363
+ < div
364
+ className = { classNames ( "react-tabs__tab-container" , {
365
+ "react-tabs__tab-container--hidden" : singleOutputPanel ,
366
+ } ) }
367
+ >
368
+ < TabList >
369
+ < Tab key = { 0 } >
370
+ < span className = "react-tabs__tab-text" >
371
+ { t ( "output.textOutput" ) }
372
+ </ span >
373
+ </ Tab >
374
+ </ TabList >
375
+ { ! hasVisual && ! isEmbedded && isMobile && (
376
+ < RunnerControls skinny />
377
+ ) }
378
+ </ div >
379
+ < ErrorMessage />
380
+ < TabPanel key = { 0 } >
381
+ < pre
382
+ className = { `pythonrunner-console pythonrunner-console--${ settings . fontSize } ` }
383
+ onClick = { shiftFocusToInput }
384
+ ref = { output }
385
+ > </ pre >
386
+ </ TabPanel >
387
+ </ Tabs >
388
+ </ div >
389
+ ) }
375
390
</ >
376
391
) : (
377
392
< Tabs forceRenderTabPanel = { true } defaultIndex = { hasVisual ? 0 : 1 } >
0 commit comments