aboutsummaryrefslogtreecommitdiffstats
path: root/packages/renderer/src/stores
diff options
context:
space:
mode:
Diffstat (limited to 'packages/renderer/src/stores')
-rw-r--r--packages/renderer/src/stores/RendererEnv.ts37
-rw-r--r--packages/renderer/src/stores/RendererStore.ts (renamed from packages/renderer/src/stores/RootStore.ts)25
2 files changed, 42 insertions, 20 deletions
diff --git a/packages/renderer/src/stores/RendererEnv.ts b/packages/renderer/src/stores/RendererEnv.ts
new file mode 100644
index 0000000..f2ec519
--- /dev/null
+++ b/packages/renderer/src/stores/RendererEnv.ts
@@ -0,0 +1,37 @@
1/*
2 * Copyright (C) 2021-2022 Kristóf Marussy <kristof@marussy.com>
3 *
4 * This file is part of Sophie.
5 *
6 * Sophie is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Affero General Public License as
8 * published by the Free Software Foundation, version 3.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <https://www.gnu.org/licenses/>.
17 *
18 * SPDX-License-Identifier: AGPL-3.0-only
19 */
20
21import { getEnv as getAnyEnv, IAnyStateTreeNode } from 'mobx-state-tree';
22import type { SophieRenderer } from '@sophie/shared';
23
24export interface RendererEnv {
25 ipc: Omit<SophieRenderer, 'setSharedStoreListener'>;
26}
27
28/**
29 * Gets a well-typed environment from `model`.
30 *
31 * Only useable inside state trees created by `createAndConnectRootStore`.
32 *
33 * @param model The state tree node.
34 */
35export function getEnv(model: IAnyStateTreeNode): RendererEnv {
36 return getAnyEnv<RendererEnv>(model);
37}
diff --git a/packages/renderer/src/stores/RootStore.ts b/packages/renderer/src/stores/RendererStore.ts
index f7f37f0..001f23a 100644
--- a/packages/renderer/src/stores/RootStore.ts
+++ b/packages/renderer/src/stores/RendererStore.ts
@@ -21,8 +21,6 @@
21import { 21import {
22 applySnapshot, 22 applySnapshot,
23 applyPatch, 23 applyPatch,
24 getEnv as getAnyEnv,
25 IAnyStateTreeNode,
26 Instance, 24 Instance,
27 types 25 types
28} from 'mobx-state-tree'; 26} from 'mobx-state-tree';
@@ -33,22 +31,9 @@ import {
33 ThemeSource, 31 ThemeSource,
34} from '@sophie/shared'; 32} from '@sophie/shared';
35 33
36export interface RootEnv { 34import { getEnv } from './RendererEnv';
37 ipc: Omit<SophieRenderer, 'setSharedStoreListener'>;
38}
39
40/**
41 * Gets a well-typed environment from `model`.
42 *
43 * Only useable inside state trees created by `createAndConnectRootStore`.
44 *
45 * @param model The state tree node.
46 */
47export function getEnv(model: IAnyStateTreeNode): RootEnv {
48 return getAnyEnv<RootEnv>(model);
49}
50 35
51export const rootStore = types.model('RootStore', { 36export const rendererStore = types.model('RendererStore', {
52 shared: types.optional(sharedStore, {}), 37 shared: types.optional(sharedStore, {}),
53}).actions((self) => ({ 38}).actions((self) => ({
54 setBrowserViewBounds(bounds: BrowserViewBounds) { 39 setBrowserViewBounds(bounds: BrowserViewBounds) {
@@ -66,7 +51,7 @@ export const rootStore = types.model('RootStore', {
66 }, 51 },
67})); 52}));
68 53
69export interface RootStore extends Instance<typeof rootStore> {} 54export interface RendererStore extends Instance<typeof rendererStore> {}
70 55
71/** 56/**
72 * Creates a new `RootStore` with a new environment and connects it to `ipc`. 57 * Creates a new `RootStore` with a new environment and connects it to `ipc`.
@@ -76,8 +61,8 @@ export interface RootStore extends Instance<typeof rootStore> {}
76 * 61 *
77 * @param ipc The `sophieRenderer` context bridge. 62 * @param ipc The `sophieRenderer` context bridge.
78 */ 63 */
79export function createAndConnectRootStore(ipc: SophieRenderer): RootStore { 64export function createAndConnectRendererStore(ipc: SophieRenderer): RendererStore {
80 const store = rootStore.create({}, { 65 const store = rendererStore.create({}, {
81 ipc, 66 ipc,
82 }); 67 });
83 68