|
4 | 4 | import 'react-splitter-layout/lib/index.css'; |
5 | 5 | import './app.scss'; |
6 | 6 | import { Button, Classes, Spinner } from '@blueprintjs/core'; |
7 | | -import { Console, Manual } from '@blueprintjs/icons'; |
| 7 | +import { Console, Manual, ZoomToFit } from '@blueprintjs/icons'; |
8 | 8 | import React, { useEffect, useState } from 'react'; |
9 | 9 |
|
10 | 10 | type SideView = 'off' | 'docs'; |
11 | 11 | import SplitterLayout from 'react-splitter-layout'; |
12 | 12 | import { useLocalStorage, useTernaryDarkMode } from 'usehooks-ts'; |
13 | 13 | import Activities from '../activities/Activities'; |
| 14 | +import { Activity, useActivitiesSelectedActivity } from '../activities/hooks'; |
14 | 15 | import DfuWindowsDriverInstallDialog from '../firmware/dfuWindowsDriverInstallDialog/DfuWindowsDriverInstallDialog'; |
15 | 16 | import { InstallPybricksDialog } from '../firmware/installPybricksDialog/InstallPybricksDialog'; |
16 | 17 | import RestoreOfficialDialog from '../firmware/restoreOfficialDialog/RestoreOfficialDialog'; |
@@ -100,43 +101,56 @@ const App: React.FunctionComponent = () => { |
100 | 101 | const { isDarkMode } = useTernaryDarkMode(); |
101 | 102 | const [sideView, setSideView] = useState<SideView>('off'); |
102 | 103 | const [isDragging, setIsDragging] = useState(false); |
| 104 | + const [, setSelectedActivity] = useActivitiesSelectedActivity(); |
103 | 105 |
|
104 | 106 | const defaultDocsSplit = 30; |
105 | 107 | const [docsSplit, setDocsSplit] = useLocalStorage( |
106 | 108 | 'app-docs-split', |
107 | 109 | defaultDocsSplit, |
108 | 110 | ); |
109 | 111 |
|
| 112 | + const resetDocsSplit = () => { |
| 113 | + setDocsSplit(defaultDocsSplit); |
| 114 | + resetSplitterSize( |
| 115 | + '.splitter-layout.pb-show-docs, .splitter-layout.pb-hide-docs', |
| 116 | + defaultDocsSplit, |
| 117 | + ); |
| 118 | + }; |
| 119 | + |
110 | 120 | const docsOnClick = () => { |
111 | 121 | 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 | | - ); |
| 122 | + resetDocsSplit(); |
119 | 123 | } else { |
120 | 124 | setSideView(sideView === 'docs' ? 'off' : 'docs'); |
121 | 125 | } |
122 | 126 | }; |
123 | 127 |
|
124 | | - const defaultTerminalSplit = 30; |
| 128 | + const defaultTerminalSplit = 20; |
125 | 129 | const [terminalSplit, setTerminalSplit] = useLocalStorage( |
126 | 130 | 'app-terminal-split', |
127 | 131 | defaultTerminalSplit, |
128 | 132 | ); |
129 | 133 | const [terminalVisible, setTerminalVisible] = useState(true); |
130 | 134 |
|
| 135 | + const resetTerminalSplit = () => { |
| 136 | + setTerminalSplit(defaultTerminalSplit); |
| 137 | + resetSplitterSize( |
| 138 | + '.splitter-layout.pb-show-terminal, .splitter-layout.pb-hide-terminal', |
| 139 | + defaultTerminalSplit, |
| 140 | + ); |
| 141 | + }; |
| 142 | + |
| 143 | + const resetView = () => { |
| 144 | + resetDocsSplit(); |
| 145 | + setSideView('off'); |
| 146 | + resetTerminalSplit(); |
| 147 | + setTerminalVisible(false); |
| 148 | + setSelectedActivity(Activity.None); |
| 149 | + }; |
| 150 | + |
131 | 151 | const terminalOnClick = () => { |
132 | 152 | 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 | | - ); |
| 153 | + resetTerminalSplit(); |
140 | 154 | } else { |
141 | 155 | setTerminalVisible(!terminalVisible); |
142 | 156 | } |
@@ -211,6 +225,13 @@ const App: React.FunctionComponent = () => { |
211 | 225 | <Editor /> |
212 | 226 | </React.Suspense> |
213 | 227 | <div className="pb-app-side-view-buttons"> |
| 228 | + <Button |
| 229 | + large |
| 230 | + intent="primary" |
| 231 | + icon={<ZoomToFit />} |
| 232 | + title={i18n.translate('closeAll')} |
| 233 | + onClick={resetView} |
| 234 | + /> |
214 | 235 | <Button |
215 | 236 | large |
216 | 237 | intent="primary" |
|
0 commit comments