44import 'react-splitter-layout/lib/index.css' ;
55import './app.scss' ;
66import { Button , Classes , Spinner } from '@blueprintjs/core' ;
7- import { Manual } from '@blueprintjs/icons' ;
7+ import { Console , Manual } from '@blueprintjs/icons' ;
88import React , { useEffect , useState } from 'react' ;
99
1010type SideView = 'off' | 'docs' ;
@@ -121,7 +121,26 @@ const App: React.FunctionComponent = () => {
121121 }
122122 } ;
123123
124- const [ terminalSplit , setTerminalSplit ] = useLocalStorage ( 'app-terminal-split' , 30 ) ;
124+ const defaultTerminalSplit = 30 ;
125+ const [ terminalSplit , setTerminalSplit ] = useLocalStorage (
126+ 'app-terminal-split' ,
127+ defaultTerminalSplit ,
128+ ) ;
129+ const [ terminalVisible , setTerminalVisible ] = useState ( true ) ;
130+
131+ const terminalOnClick = ( ) => {
132+ if ( terminalVisible && terminalSplit < 10 ) {
133+ // Treat manually dragged closed like closed, so clicking will
134+ // visually open it at default size.
135+ setTerminalSplit ( defaultTerminalSplit ) ;
136+ resetSplitterSize (
137+ '.splitter-layout.pb-show-terminal, .splitter-layout.pb-hide-terminal' ,
138+ defaultTerminalSplit ,
139+ ) ;
140+ } else {
141+ setTerminalVisible ( ! terminalVisible ) ;
142+ }
143+ } ;
125144
126145 // Classes.DARK has to be applied to body element, otherwise it won't
127146 // affect portals
@@ -172,6 +191,11 @@ const App: React.FunctionComponent = () => {
172191 >
173192 < SplitterLayout
174193 vertical = { true }
194+ customClassName = {
195+ terminalVisible
196+ ? 'pb-show-terminal'
197+ : 'pb-hide-terminal'
198+ }
175199 percentage = { true }
176200 secondaryInitialSize = { terminalSplit }
177201 onSecondaryPaneSizeChange = { setTerminalSplit }
@@ -187,6 +211,17 @@ const App: React.FunctionComponent = () => {
187211 < Editor />
188212 </ React . Suspense >
189213 < div className = "pb-app-side-view-buttons" >
214+ < Button
215+ large
216+ intent = "primary"
217+ icon = { < Console /> }
218+ title = {
219+ terminalVisible
220+ ? i18n . translate ( 'terminal.hide' )
221+ : i18n . translate ( 'terminal.show' )
222+ }
223+ onClick = { terminalOnClick }
224+ />
190225 < Button
191226 large
192227 intent = "primary"
0 commit comments