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' ;
@@ -107,21 +107,44 @@ const App: React.FunctionComponent = () => {
107107 defaultDocsSplit ,
108108 ) ;
109109
110+ const resetDocsSplit = ( ) => {
111+ setDocsSplit ( defaultDocsSplit ) ;
112+ resetSplitterSize (
113+ '.splitter-layout.pb-show-docs, .splitter-layout.pb-hide-docs' ,
114+ defaultDocsSplit ,
115+ ) ;
116+ } ;
117+
110118 const docsOnClick = ( ) => {
111119 if ( sideView === 'docs' && docsSplit < 10 ) {
112- // Treat manually dragged closed like closed, so clicking will
113- // visually open it at default size.
114- setDocsSplit ( defaultDocsSplit ) ;
115- resetSplitterSize (
116- '.splitter-layout.pb-show-docs, .splitter-layout.pb-hide-docs' ,
117- defaultDocsSplit ,
118- ) ;
120+ resetDocsSplit ( ) ;
119121 } else {
120122 setSideView ( sideView === 'docs' ? 'off' : 'docs' ) ;
121123 }
122124 } ;
123125
124- const [ terminalSplit , setTerminalSplit ] = useLocalStorage ( 'app-terminal-split' , 30 ) ;
126+ const defaultTerminalSplit = 30 ;
127+ const [ terminalSplit , setTerminalSplit ] = useLocalStorage (
128+ 'app-terminal-split' ,
129+ defaultTerminalSplit ,
130+ ) ;
131+ const [ terminalVisible , setTerminalVisible ] = useState ( true ) ;
132+
133+ const resetTerminalSplit = ( ) => {
134+ setTerminalSplit ( defaultTerminalSplit ) ;
135+ resetSplitterSize (
136+ '.splitter-layout.pb-show-terminal, .splitter-layout.pb-hide-terminal' ,
137+ defaultTerminalSplit ,
138+ ) ;
139+ } ;
140+
141+ const terminalOnClick = ( ) => {
142+ if ( terminalVisible && terminalSplit < 10 ) {
143+ resetTerminalSplit ( ) ;
144+ } else {
145+ setTerminalVisible ( ! terminalVisible ) ;
146+ }
147+ } ;
125148
126149 // Classes.DARK has to be applied to body element, otherwise it won't
127150 // affect portals
@@ -172,6 +195,11 @@ const App: React.FunctionComponent = () => {
172195 >
173196 < SplitterLayout
174197 vertical = { true }
198+ customClassName = {
199+ terminalVisible
200+ ? 'pb-show-terminal'
201+ : 'pb-hide-terminal'
202+ }
175203 percentage = { true }
176204 secondaryInitialSize = { terminalSplit }
177205 onSecondaryPaneSizeChange = { setTerminalSplit }
@@ -187,6 +215,17 @@ const App: React.FunctionComponent = () => {
187215 < Editor />
188216 </ React . Suspense >
189217 < div className = "pb-app-side-view-buttons" >
218+ < Button
219+ large
220+ intent = "primary"
221+ icon = { < Console /> }
222+ title = {
223+ terminalVisible
224+ ? i18n . translate ( 'terminal.hide' )
225+ : i18n . translate ( 'terminal.show' )
226+ }
227+ onClick = { terminalOnClick }
228+ />
190229 < Button
191230 large
192231 intent = "primary"
0 commit comments