aboutsummaryrefslogtreecommitdiffstats
path: root/packages/renderer/src/components/App.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/renderer/src/components/App.tsx')
-rw-r--r--packages/renderer/src/components/App.tsx82
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
21import Box from '@mui/material/Box'; 21import Box from '@mui/material/Box';
22import React from 'react'; 22import { styled } from '@mui/material/styles';
23import { observer } from 'mobx-react-lite';
24import React, { useCallback } from 'react';
23 25
24import BrowserViewPlaceholder from './BrowserViewPlaceholder'; 26import type RendererStore from '../stores/RendererStore.js';
25import Sidebar from './Sidebar'; 27
28import ServicePanel from './ServicePanel.js';
29import WindowTitle from './WindowTitle.js';
30import Sidebar from './sidebar/Sidebar.js';
31
32const AppRoot = styled(Box)({
33 display: 'flex',
34 overflow: 'hidden',
35 flexDirection: 'row',
36 alignItems: 'stretch',
37 height: '100vh',
38 width: '100vw',
39});
40
41const AppServiceArea = styled(Box)({
42 flex: 1,
43 height: '100%',
44 position: 'relative',
45});
46
47function 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
27export 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
94export default observer(App);