diff options
Diffstat (limited to 'packages/renderer/src/components/ServicePanel.tsx')
-rw-r--r-- | packages/renderer/src/components/ServicePanel.tsx | 49 |
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 | ||
21 | import Box from '@mui/material/Box'; | 21 | import Box from '@mui/material/Box'; |
22 | import { styled } from '@mui/material/styles'; | ||
22 | import { observer } from 'mobx-react-lite'; | 23 | import { observer } from 'mobx-react-lite'; |
23 | import React from 'react'; | 24 | import React from 'react'; |
24 | 25 | ||
26 | import type RendererStore from '../stores/RendererStore'; | ||
25 | import Service from '../stores/Service'; | 27 | import Service from '../stores/Service'; |
26 | 28 | ||
27 | import BrowserViewPlaceholder from './BrowserViewPlaceholder'; | 29 | import BrowserViewPlaceholder from './BrowserViewPlaceholder'; |
28 | import { useStore } from './StoreProvider'; | ||
29 | import InsecureConnectionBanner from './banner/InsecureConnectionBanner'; | 30 | import InsecureConnectionBanner from './banner/InsecureConnectionBanner'; |
30 | import NewWindowBanner from './banner/NewWindowBanner'; | 31 | import NewWindowBanner from './banner/NewWindowBanner'; |
31 | import ErrorPage from './errorPage/ErrorPage'; | 32 | import ErrorPage from './errorPage/ErrorPage'; |
32 | import LocationBar from './locationBar/LocationBar'; | 33 | import LocationBar from './locationBar/LocationBar'; |
33 | 34 | ||
35 | const 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 | |||
34 | export function getServicePanelID(service: Service): string { | 50 | export function getServicePanelID(service: Service): string { |
35 | return `Sophie-${service.id}-ServicePanel`; | 51 | return `Sophie-${service.id}-ServicePanel`; |
36 | } | 52 | } |
37 | 53 | ||
38 | function ServicePanel({ service }: { service: Service }): JSX.Element { | 54 | function 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 | ||