diff options
author | 2022-02-27 00:57:44 +0100 | |
---|---|---|
committer | 2022-03-06 18:56:46 +0100 | |
commit | f05d54406c9bc4b69609a4935132ff17b8e28824 (patch) | |
tree | e7ffde8f8b3433e004932a6e068dedbb4f2196da /packages/renderer/src/components/sidebar | |
parent | design: Simpler message count indicators (diff) | |
download | sophie-f05d54406c9bc4b69609a4935132ff17b8e28824.tar.gz sophie-f05d54406c9bc4b69609a4935132ff17b8e28824.tar.zst sophie-f05d54406c9bc4b69609a4935132ff17b8e28824.zip |
refactor: Shared model type factories
Allows customization of stores both in the renderer and in the main
process. Instead of exposing a basic model type from the shared module
(which was be overwritted with more specific props in the main package),
we expose factory function that can create specific model types in
both the renderer and the main process.
Using these package-specific customization to stores, the renderer
package can attach IPC calls directly to store objects, which the main
package can attach the handlers for IPC calls and other internal
actions.
Signed-off-by: Kristóf Marussy <kristof@marussy.com>
Diffstat (limited to 'packages/renderer/src/components/sidebar')
4 files changed, 11 insertions, 17 deletions
diff --git a/packages/renderer/src/components/sidebar/ServiceIcon.tsx b/packages/renderer/src/components/sidebar/ServiceIcon.tsx index 144f860..5db8a0c 100644 --- a/packages/renderer/src/components/sidebar/ServiceIcon.tsx +++ b/packages/renderer/src/components/sidebar/ServiceIcon.tsx | |||
@@ -20,10 +20,11 @@ | |||
20 | 20 | ||
21 | import Badge from '@mui/material/Badge'; | 21 | import Badge from '@mui/material/Badge'; |
22 | import { styled, useTheme } from '@mui/material/styles'; | 22 | import { styled, useTheme } from '@mui/material/styles'; |
23 | import { Service } from '@sophie/shared'; | ||
24 | import { observer } from 'mobx-react-lite'; | 23 | import { observer } from 'mobx-react-lite'; |
25 | import React, { useEffect, useState } from 'react'; | 24 | import React, { useEffect, useState } from 'react'; |
26 | 25 | ||
26 | import type Service from '../../stores/Service'; | ||
27 | |||
27 | const ServiceIconRoot = styled('div', { | 28 | const ServiceIconRoot = styled('div', { |
28 | name: 'ServiceIcon', | 29 | name: 'ServiceIcon', |
29 | slot: 'Root', | 30 | slot: 'Root', |
diff --git a/packages/renderer/src/components/sidebar/ServiceSwitcher.tsx b/packages/renderer/src/components/sidebar/ServiceSwitcher.tsx index 2241476..eba21b5 100644 --- a/packages/renderer/src/components/sidebar/ServiceSwitcher.tsx +++ b/packages/renderer/src/components/sidebar/ServiceSwitcher.tsx | |||
@@ -65,11 +65,8 @@ const ServiceSwitcherTab = styled(Tab, { | |||
65 | })); | 65 | })); |
66 | 66 | ||
67 | function ServiceSwitcher(): JSX.Element { | 67 | function ServiceSwitcher(): JSX.Element { |
68 | const store = useStore(); | 68 | const { settings, services } = useStore(); |
69 | const { | 69 | const { selectedService } = settings; |
70 | settings: { selectedService }, | ||
71 | services, | ||
72 | } = store; | ||
73 | 70 | ||
74 | return ( | 71 | return ( |
75 | <ServiceSwitcherRoot | 72 | <ServiceSwitcherRoot |
@@ -77,7 +74,7 @@ function ServiceSwitcher(): JSX.Element { | |||
77 | orientation="vertical" | 74 | orientation="vertical" |
78 | value={selectedService === undefined ? false : selectedService.id} | 75 | value={selectedService === undefined ? false : selectedService.id} |
79 | onChange={(_event, newValue: string) => | 76 | onChange={(_event, newValue: string) => |
80 | store.setSelectedServiceId(newValue) | 77 | settings.setSelectedServiceId(newValue) |
81 | } | 78 | } |
82 | > | 79 | > |
83 | {services.map((service) => ( | 80 | {services.map((service) => ( |
diff --git a/packages/renderer/src/components/sidebar/ToggleDarkModeButton.tsx b/packages/renderer/src/components/sidebar/ToggleDarkModeButton.tsx index 164b066..bacbf07 100644 --- a/packages/renderer/src/components/sidebar/ToggleDarkModeButton.tsx +++ b/packages/renderer/src/components/sidebar/ToggleDarkModeButton.tsx | |||
@@ -27,15 +27,13 @@ import React from 'react'; | |||
27 | import { useStore } from '../StoreProvider'; | 27 | import { useStore } from '../StoreProvider'; |
28 | 28 | ||
29 | export default observer(() => { | 29 | export default observer(() => { |
30 | const store = useStore(); | 30 | const { shared } = useStore(); |
31 | const { | 31 | const { shouldUseDarkColors } = shared; |
32 | shared: { shouldUseDarkColors }, | ||
33 | } = store; | ||
34 | 32 | ||
35 | return ( | 33 | return ( |
36 | <IconButton | 34 | <IconButton |
37 | aria-label="Toggle dark mode" | 35 | aria-label="Toggle dark mode" |
38 | onClick={() => store.toggleDarkMode()} | 36 | onClick={() => shared.toggleDarkMode()} |
39 | > | 37 | > |
40 | {shouldUseDarkColors ? <LightModeIcon /> : <DarkModeIcon />} | 38 | {shouldUseDarkColors ? <LightModeIcon /> : <DarkModeIcon />} |
41 | </IconButton> | 39 | </IconButton> |
diff --git a/packages/renderer/src/components/sidebar/ToggleLocationBarButton.tsx b/packages/renderer/src/components/sidebar/ToggleLocationBarButton.tsx index 60033b0..d2f0745 100644 --- a/packages/renderer/src/components/sidebar/ToggleLocationBarButton.tsx +++ b/packages/renderer/src/components/sidebar/ToggleLocationBarButton.tsx | |||
@@ -45,17 +45,15 @@ function ToggleLocationBarIcon({ | |||
45 | } | 45 | } |
46 | 46 | ||
47 | function ToggleLocationBarButton(): JSX.Element { | 47 | function ToggleLocationBarButton(): JSX.Element { |
48 | const store = useStore(); | 48 | const { settings } = useStore(); |
49 | const { | 49 | const { selectedService, showLocationBar } = settings; |
50 | settings: { selectedService, showLocationBar }, | ||
51 | } = store; | ||
52 | 50 | ||
53 | return ( | 51 | return ( |
54 | <IconButton | 52 | <IconButton |
55 | aria-pressed={showLocationBar} | 53 | aria-pressed={showLocationBar} |
56 | aria-controls={LOCATION_BAR_ID} | 54 | aria-controls={LOCATION_BAR_ID} |
57 | aria-label="Show location bar" | 55 | aria-label="Show location bar" |
58 | onClick={() => store.toggleLocationBar()} | 56 | onClick={() => settings.toggleLocationBar()} |
59 | > | 57 | > |
60 | <ToggleLocationBarIcon | 58 | <ToggleLocationBarIcon |
61 | loading={selectedService?.state === 'loading'} | 59 | loading={selectedService?.state === 'loading'} |