aboutsummaryrefslogtreecommitdiffstats
path: root/packages/renderer/src/components/ServicePanel.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/renderer/src/components/ServicePanel.tsx')
-rw-r--r--packages/renderer/src/components/ServicePanel.tsx49
1 files changed, 29 insertions, 20 deletions
diff --git a/packages/renderer/src/components/ServicePanel.tsx b/packages/renderer/src/components/ServicePanel.tsx
index de58d24..2c79d99 100644
--- a/packages/renderer/src/components/ServicePanel.tsx
+++ b/packages/renderer/src/components/ServicePanel.tsx
@@ -19,57 +19,66 @@
19 */ 19 */
20 20
21import Box from '@mui/material/Box'; 21import Box from '@mui/material/Box';
22import { styled } from '@mui/material/styles';
22import { observer } from 'mobx-react-lite'; 23import { observer } from 'mobx-react-lite';
23import React from 'react'; 24import React from 'react';
24 25
26import type RendererStore from '../stores/RendererStore';
25import Service from '../stores/Service'; 27import Service from '../stores/Service';
26 28
27import BrowserViewPlaceholder from './BrowserViewPlaceholder'; 29import BrowserViewPlaceholder from './BrowserViewPlaceholder';
28import { useStore } from './StoreProvider';
29import InsecureConnectionBanner from './banner/InsecureConnectionBanner'; 30import InsecureConnectionBanner from './banner/InsecureConnectionBanner';
30import NewWindowBanner from './banner/NewWindowBanner'; 31import NewWindowBanner from './banner/NewWindowBanner';
31import ErrorPage from './errorPage/ErrorPage'; 32import ErrorPage from './errorPage/ErrorPage';
32import LocationBar from './locationBar/LocationBar'; 33import LocationBar from './locationBar/LocationBar';
33 34
35const ServicePanelRoot = styled(Box, {
36 shouldForwardProp: (prop) => prop !== 'hidden',
37})(({ hidden }) => ({
38 position: 'absolute',
39 top: 0,
40 left: 0,
41 bottom: 0,
42 right: 0,
43 display: 'flex',
44 overflow: 'hidden',
45 visibility: hidden ? 'hidden' : 'visible',
46 flexDirection: 'column',
47 alignItems: 'stretch',
48}));
49
34export function getServicePanelID(service: Service): string { 50export function getServicePanelID(service: Service): string {
35 return `Sophie-${service.id}-ServicePanel`; 51 return `Sophie-${service.id}-ServicePanel`;
36} 52}
37 53
38function ServicePanel({ service }: { service: Service }): JSX.Element { 54function ServicePanel({
55 store,
56 service,
57}: {
58 store: RendererStore;
59 service: Service;
60}): JSX.Element {
39 const { 61 const {
40 settings: { selectedService }, 62 settings: { selectedService },
41 } = useStore(); 63 } = store;
42
43 const { 64 const {
44 settings: { name }, 65 settings: { name },
45 } = service; 66 } = service;
46 const visible = service === selectedService;
47 67
48 return ( 68 return (
49 <Box 69 <ServicePanelRoot
50 id={getServicePanelID(service)} 70 id={getServicePanelID(service)}
51 role="tabpanel" 71 role="tabpanel"
52 aria-label={name} 72 aria-label={name}
53 sx={{ 73 hidden={service !== selectedService}
54 position: 'absolute',
55 top: 0,
56 left: 0,
57 bottom: 0,
58 right: 0,
59 display: 'flex',
60 overflow: 'hidden',
61 visibility: visible ? 'visible' : 'hidden',
62 flexDirection: 'column',
63 alignItems: 'stretch',
64 }}
65 > 74 >
66 <LocationBar service={service} /> 75 <LocationBar store={store} service={service} />
67 <InsecureConnectionBanner service={service} /> 76 <InsecureConnectionBanner service={service} />
68 <NewWindowBanner service={service} /> 77 <NewWindowBanner service={service} />
69 <BrowserViewPlaceholder service={service}> 78 <BrowserViewPlaceholder service={service}>
70 <ErrorPage service={service} /> 79 <ErrorPage service={service} />
71 </BrowserViewPlaceholder> 80 </BrowserViewPlaceholder>
72 </Box> 81 </ServicePanelRoot>
73 ); 82 );
74} 83}
75 84