aboutsummaryrefslogtreecommitdiffstats
path: root/packages/renderer/src/stores/RendererStore.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/renderer/src/stores/RendererStore.ts')
-rw-r--r--packages/renderer/src/stores/RendererStore.ts60
1 files changed, 15 insertions, 45 deletions
diff --git a/packages/renderer/src/stores/RendererStore.ts b/packages/renderer/src/stores/RendererStore.ts
index 4d85929..c4110bd 100644
--- a/packages/renderer/src/stores/RendererStore.ts
+++ b/packages/renderer/src/stores/RendererStore.ts
@@ -18,19 +18,15 @@
18 * SPDX-License-Identifier: AGPL-3.0-only 18 * SPDX-License-Identifier: AGPL-3.0-only
19 */ 19 */
20 20
21import { 21import type { SophieRenderer } from '@sophie/shared';
22 BrowserViewBounds,
23 SharedStore,
24 Service,
25 SophieRenderer,
26 ThemeSource,
27 GlobalSettings,
28} from '@sophie/shared';
29import { applySnapshot, applyPatch, Instance, types } from 'mobx-state-tree'; 22import { applySnapshot, applyPatch, Instance, types } from 'mobx-state-tree';
30 23
31import RendererEnv from '../env/RendererEnv'; 24import { getLogger } from '../utils/log.js';
32import getEnv from '../env/getEnv'; 25
33import { getLogger } from '../utils/log'; 26import type GlobalSettings from './GlobalSettings.js';
27import type RendererEnv from './RendererEnv.js';
28import type Service from './Service.js';
29import SharedStore from './SharedStore.js';
34 30
35const log = getLogger('RendererStore'); 31const log = getLogger('RendererStore');
36 32
@@ -45,33 +41,6 @@ const RendererStore = types
45 get services(): Service[] { 41 get services(): Service[] {
46 return self.shared.services; 42 return self.shared.services;
47 }, 43 },
48 }))
49 .actions((self) => ({
50 setSelectedServiceId(serviceId: string): void {
51 getEnv(self).dispatchMainAction({
52 action: 'set-selected-service-id',
53 serviceId,
54 });
55 },
56 setBrowserViewBounds(browserViewBounds: BrowserViewBounds): void {
57 getEnv(self).dispatchMainAction({
58 action: 'set-browser-view-bounds',
59 browserViewBounds,
60 });
61 },
62 setThemeSource(themeSource: ThemeSource): void {
63 getEnv(self).dispatchMainAction({
64 action: 'set-theme-source',
65 themeSource,
66 });
67 },
68 toggleDarkMode(): void {
69 if (self.shared.shouldUseDarkColors) {
70 this.setThemeSource('light');
71 } else {
72 this.setThemeSource('dark');
73 }
74 },
75 })); 44 }));
76 45
77/* 46/*
@@ -89,27 +58,28 @@ export default RendererStore;
89 * the newly created store via `ipc`. 58 * the newly created store via `ipc`.
90 * 59 *
91 * @param ipc The `sophieRenderer` context bridge. 60 * @param ipc The `sophieRenderer` context bridge.
61 * @returns A promise that resolves to the store once it was initialized.
92 */ 62 */
93export function createAndConnectRendererStore( 63export async function createAndConnectRendererStore(
94 ipc: SophieRenderer, 64 ipc: SophieRenderer,
95): RendererStore { 65): Promise<RendererStore> {
96 const env: RendererEnv = { 66 const env: RendererEnv = {
97 dispatchMainAction: ipc.dispatchAction, 67 dispatchMainAction: ipc.dispatchAction,
98 }; 68 };
99 const store = RendererStore.create({}, env); 69 const store = RendererStore.create({}, env);
100 70
101 ipc 71 try {
102 .onSharedStoreChange({ 72 await ipc.onSharedStoreChange({
103 onSnapshot(snapshot) { 73 onSnapshot(snapshot) {
104 applySnapshot(store.shared, snapshot); 74 applySnapshot(store.shared, snapshot);
105 }, 75 },
106 onPatch(patch) { 76 onPatch(patch) {
107 applyPatch(store.shared, patch); 77 applyPatch(store.shared, patch);
108 }, 78 },
109 })
110 .catch((error) => {
111 log.error('Failed to connect to shared store', error);
112 }); 79 });
80 } catch (error) {
81 log.error('Failed to connect to shared store', error);
82 }
113 83
114 return store; 84 return store;
115} 85}