diff options
author | Kristóf Marussy <kristof@marussy.com> | 2022-02-27 00:57:44 +0100 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2022-03-06 18:56:46 +0100 |
commit | f05d54406c9bc4b69609a4935132ff17b8e28824 (patch) | |
tree | e7ffde8f8b3433e004932a6e068dedbb4f2196da /packages/shared/src/stores/SharedStore.ts | |
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/shared/src/stores/SharedStore.ts')
-rw-r--r-- | packages/shared/src/stores/SharedStore.ts | 60 |
1 files changed, 0 insertions, 60 deletions
diff --git a/packages/shared/src/stores/SharedStore.ts b/packages/shared/src/stores/SharedStore.ts deleted file mode 100644 index d81a3d3..0000000 --- a/packages/shared/src/stores/SharedStore.ts +++ /dev/null | |||
@@ -1,60 +0,0 @@ | |||
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 | |||
21 | import { | ||
22 | IJsonPatch, | ||
23 | Instance, | ||
24 | types, | ||
25 | SnapshotIn, | ||
26 | SnapshotOut, | ||
27 | } from 'mobx-state-tree'; | ||
28 | |||
29 | import GlobalSettings from './GlobalSettings'; | ||
30 | import Profile from './Profile'; | ||
31 | import Service from './Service'; | ||
32 | |||
33 | const SharedStore = /* @__PURE__ */ (() => | ||
34 | types.model('SharedStore', { | ||
35 | settings: types.optional(GlobalSettings, {}), | ||
36 | profilesById: types.map(Profile), | ||
37 | profiles: types.array(types.reference(Profile)), | ||
38 | servicesById: types.map(Service), | ||
39 | services: types.array(types.reference(Service)), | ||
40 | shouldUseDarkColors: false, | ||
41 | }))(); | ||
42 | |||
43 | /* | ||
44 | eslint-disable-next-line @typescript-eslint/no-redeclare -- | ||
45 | Intentionally naming the type the same as the store definition. | ||
46 | */ | ||
47 | interface SharedStore extends Instance<typeof SharedStore> {} | ||
48 | |||
49 | export default SharedStore; | ||
50 | |||
51 | export interface SharedStoreSnapshotIn extends SnapshotIn<typeof SharedStore> {} | ||
52 | |||
53 | export interface SharedStoreSnapshotOut | ||
54 | extends SnapshotOut<typeof SharedStore> {} | ||
55 | |||
56 | export interface SharedStoreListener { | ||
57 | onSnapshot(snapshot: SharedStoreSnapshotIn): void; | ||
58 | |||
59 | onPatch(patches: IJsonPatch[]): void; | ||
60 | } | ||