diff options
Diffstat (limited to 'packages/renderer/src/components/App.tsx')
-rw-r--r-- | packages/renderer/src/components/App.tsx | 82 |
1 files changed, 67 insertions, 15 deletions
diff --git a/packages/renderer/src/components/App.tsx b/packages/renderer/src/components/App.tsx index 1174bbb..193afe6 100644 --- a/packages/renderer/src/components/App.tsx +++ b/packages/renderer/src/components/App.tsx | |||
@@ -19,24 +19,76 @@ | |||
19 | */ | 19 | */ |
20 | 20 | ||
21 | import Box from '@mui/material/Box'; | 21 | import Box from '@mui/material/Box'; |
22 | import React from 'react'; | 22 | import { styled } from '@mui/material/styles'; |
23 | import { observer } from 'mobx-react-lite'; | ||
24 | import React, { useCallback } from 'react'; | ||
23 | 25 | ||
24 | import BrowserViewPlaceholder from './BrowserViewPlaceholder'; | 26 | import type RendererStore from '../stores/RendererStore.js'; |
25 | import Sidebar from './Sidebar'; | 27 | |
28 | import ServicePanel from './ServicePanel.js'; | ||
29 | import WindowTitle from './WindowTitle.js'; | ||
30 | import Sidebar from './sidebar/Sidebar.js'; | ||
31 | |||
32 | const AppRoot = styled(Box)({ | ||
33 | display: 'flex', | ||
34 | overflow: 'hidden', | ||
35 | flexDirection: 'row', | ||
36 | alignItems: 'stretch', | ||
37 | height: '100vh', | ||
38 | width: '100vw', | ||
39 | }); | ||
40 | |||
41 | const AppServiceArea = styled(Box)({ | ||
42 | flex: 1, | ||
43 | height: '100%', | ||
44 | position: 'relative', | ||
45 | }); | ||
46 | |||
47 | function App({ | ||
48 | store, | ||
49 | devMode, | ||
50 | }: { | ||
51 | store: RendererStore; | ||
52 | devMode: boolean; | ||
53 | }): JSX.Element { | ||
54 | const { | ||
55 | settings: { selectedService }, | ||
56 | shared: { services }, | ||
57 | } = store; | ||
58 | |||
59 | const handleBackForwardMouseButtons = useCallback( | ||
60 | (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => { | ||
61 | switch (event.button) { | ||
62 | case 3: | ||
63 | selectedService?.goBack(); | ||
64 | break; | ||
65 | case 4: | ||
66 | selectedService?.goForward(); | ||
67 | break; | ||
68 | default: | ||
69 | // Allow the event to propagate. | ||
70 | return; | ||
71 | } | ||
72 | event.preventDefault(); | ||
73 | event.stopPropagation(); | ||
74 | }, | ||
75 | [selectedService], | ||
76 | ); | ||
26 | 77 | ||
27 | export default function App(): JSX.Element { | ||
28 | return ( | 78 | return ( |
29 | <Box | 79 | <AppRoot |
30 | sx={{ | 80 | onClick={handleBackForwardMouseButtons} |
31 | display: 'flex', | 81 | onAuxClick={handleBackForwardMouseButtons} |
32 | flexDirection: 'row', | ||
33 | alignItems: 'stretch', | ||
34 | height: '100vh', | ||
35 | width: '100vw', | ||
36 | }} | ||
37 | > | 82 | > |
38 | <Sidebar /> | 83 | <WindowTitle selectedService={selectedService} devMode={devMode} /> |
39 | <BrowserViewPlaceholder /> | 84 | <Sidebar store={store} /> |
40 | </Box> | 85 | <AppServiceArea> |
86 | {services.map((service) => ( | ||
87 | <ServicePanel key={service.id} store={store} service={service} /> | ||
88 | ))} | ||
89 | </AppServiceArea> | ||
90 | </AppRoot> | ||
41 | ); | 91 | ); |
42 | } | 92 | } |
93 | |||
94 | export default observer(App); | ||