Skip to content

Commit 2f372de

Browse files
committed
app: Add button to toggle terminal.
Also preserve terminal state on hide.
1 parent b990084 commit 2f372de

File tree

3 files changed

+63
-9
lines changed

3 files changed

+63
-9
lines changed

src/app/App.tsx

Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import 'react-splitter-layout/lib/index.css';
55
import './app.scss';
66
import { Button, Classes, Spinner } from '@blueprintjs/core';
7-
import { Manual } from '@blueprintjs/icons';
7+
import { Console, Manual } from '@blueprintjs/icons';
88
import React, { useEffect, useState } from 'react';
99

1010
type 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"

src/app/app.scss

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,3 +211,14 @@ div.pb-hide-docs > :not(.layout-pane-primary) {
211211
width: 0 !important;
212212
min-width: 0 !important;
213213
}
214+
215+
// hide the terminal and resize separator
216+
// Same approach as docs: keep the terminal in the DOM to preserve its content,
217+
// but collapse the secondary pane to zero height.
218+
div.pb-hide-terminal > :not(.layout-pane-primary) {
219+
visibility: hidden;
220+
pointer-events: none;
221+
flex-basis: 0 !important;
222+
height: 0 !important;
223+
min-height: 0 !important;
224+
}

src/app/translations/en.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,9 @@
88
"docs": {
99
"show": "Show documentation",
1010
"hide": "Hide documentation"
11+
},
12+
"terminal": {
13+
"show": "Show terminal",
14+
"hide": "Hide terminal"
1115
}
1216
}

0 commit comments

Comments
 (0)