aboutsummaryrefslogtreecommitdiffstats
path: root/packages/renderer/src/stores/SharedStore.ts
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2022-02-27 00:57:44 +0100
committerLibravatar Kristóf Marussy <kristof@marussy.com>2022-03-06 18:56:46 +0100
commitf05d54406c9bc4b69609a4935132ff17b8e28824 (patch)
treee7ffde8f8b3433e004932a6e068dedbb4f2196da /packages/renderer/src/stores/SharedStore.ts
parentdesign: Simpler message count indicators (diff)
downloadsophie-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/stores/SharedStore.ts')
-rw-r--r--packages/renderer/src/stores/SharedStore.ts53
1 files changed, 53 insertions, 0 deletions
diff --git a/packages/renderer/src/stores/SharedStore.ts b/packages/renderer/src/stores/SharedStore.ts
new file mode 100644
index 0000000..062479d
--- /dev/null
+++ b/packages/renderer/src/stores/SharedStore.ts
@@ -0,0 +1,53 @@
1/*
2 * Copyright (C) 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 { defineSharedStoreModel } from '@sophie/shared';
22import { Instance } from 'mobx-state-tree';
23
24import GlobalSettings from './GlobalSettings';
25import Profile from './Profile';
26import Service from './Service';
27
28const SharedStore = defineSharedStoreModel(
29 GlobalSettings,
30 Profile,
31 Service,
32).actions((self) => ({
33 toggleDarkMode(): void {
34 if (self.shouldUseDarkColors) {
35 self.settings.setThemeSource('light');
36 } else {
37 self.settings.setThemeSource('dark');
38 }
39 },
40}));
41
42/*
43 eslint-disable-next-line @typescript-eslint/no-redeclare --
44 Intentionally naming the type the same as the store definition.
45*/
46interface SharedStore extends Instance<typeof SharedStore> {}
47
48export default SharedStore;
49
50export type {
51 SharedStoreSnapshotIn,
52 SharedStoreSnapshotOut,
53} from '@sophie/shared';