From a2651dff66faf98dc1a6f924227af454eaa2311d Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sun, 26 Dec 2021 21:12:08 +0100 Subject: refactor: Less boilerplate around SophieRenderer --- packages/renderer/src/stores/RendererEnv.ts | 4 ++-- packages/renderer/src/stores/RendererStore.ts | 25 ++++++++++++++++--------- 2 files changed, 18 insertions(+), 11 deletions(-) (limited to 'packages/renderer/src/stores') diff --git a/packages/renderer/src/stores/RendererEnv.ts b/packages/renderer/src/stores/RendererEnv.ts index f2ec519..d687738 100644 --- a/packages/renderer/src/stores/RendererEnv.ts +++ b/packages/renderer/src/stores/RendererEnv.ts @@ -19,10 +19,10 @@ */ import { getEnv as getAnyEnv, IAnyStateTreeNode } from 'mobx-state-tree'; -import type { SophieRenderer } from '@sophie/shared'; +import type { Action } from '@sophie/shared'; export interface RendererEnv { - ipc: Omit; + dispatchMainAction(action: Action): void; } /** diff --git a/packages/renderer/src/stores/RendererStore.ts b/packages/renderer/src/stores/RendererStore.ts index 001f23a..3de82ac 100644 --- a/packages/renderer/src/stores/RendererStore.ts +++ b/packages/renderer/src/stores/RendererStore.ts @@ -31,16 +31,22 @@ import { ThemeSource, } from '@sophie/shared'; -import { getEnv } from './RendererEnv'; +import { getEnv, RendererEnv } from './RendererEnv'; export const rendererStore = types.model('RendererStore', { shared: types.optional(sharedStore, {}), }).actions((self) => ({ - setBrowserViewBounds(bounds: BrowserViewBounds) { - getEnv(self).ipc.setBrowserViewBounds(bounds); + setBrowserViewBounds(browserViewBounds: BrowserViewBounds) { + getEnv(self).dispatchMainAction({ + action: 'set-browser-view-bounds', + browserViewBounds, + }); }, - setThemeSource(mode: ThemeSource) { - getEnv(self).ipc.setThemeSource(mode); + setThemeSource(themeSource: ThemeSource) { + getEnv(self).dispatchMainAction({ + action: 'set-theme-source', + themeSource, + }); }, toggleDarkMode() { if (self.shared.shouldUseDarkColors) { @@ -62,11 +68,12 @@ export interface RendererStore extends Instance {} * @param ipc The `sophieRenderer` context bridge. */ export function createAndConnectRendererStore(ipc: SophieRenderer): RendererStore { - const store = rendererStore.create({}, { - ipc, - }); + const env: RendererEnv = { + dispatchMainAction: ipc.dispatchAction, + } + const store = rendererStore.create({}, env); - ipc.setSharedStoreListener({ + ipc.onSharedStoreChange({ onSnapshot(snapshot) { applySnapshot(store.shared, snapshot); }, -- cgit v1.2.3-70-g09d2