diff options
Diffstat (limited to 'packages/shared/src/stores/ServiceBase.ts')
-rw-r--r-- | packages/shared/src/stores/ServiceBase.ts | 62 |
1 files changed, 48 insertions, 14 deletions
diff --git a/packages/shared/src/stores/ServiceBase.ts b/packages/shared/src/stores/ServiceBase.ts index cde403b..4a17bc5 100644 --- a/packages/shared/src/stores/ServiceBase.ts +++ b/packages/shared/src/stores/ServiceBase.ts | |||
@@ -23,20 +23,54 @@ import { IAnyModelType, Instance, types } from 'mobx-state-tree'; | |||
23 | import ServiceSettingsBase from './ServiceSettingsBase'; | 23 | import ServiceSettingsBase from './ServiceSettingsBase'; |
24 | 24 | ||
25 | export function defineServiceModel<TS extends IAnyModelType>(settings: TS) { | 25 | export function defineServiceModel<TS extends IAnyModelType>(settings: TS) { |
26 | return types.model('Service', { | 26 | return types |
27 | id: types.identifier, | 27 | .model('Service', { |
28 | settings, | 28 | id: types.identifier, |
29 | currentUrl: types.maybe(types.string), | 29 | settings, |
30 | canGoBack: false, | 30 | currentUrl: types.maybe(types.string), |
31 | canGoForward: false, | 31 | canGoBack: false, |
32 | title: types.maybe(types.string), | 32 | canGoForward: false, |
33 | state: types.optional( | 33 | title: types.maybe(types.string), |
34 | types.enumeration('ServiceState', ['loading', 'loaded', 'crashed']), | 34 | state: types.optional( |
35 | 'loading', | 35 | types.union( |
36 | ), | 36 | types.model({ |
37 | directMessageCount: 0, | 37 | type: types.literal('initializing'), |
38 | indirectMessageCount: 0, | 38 | }), |
39 | }); | 39 | types.model({ |
40 | type: types.literal('loading'), | ||
41 | }), | ||
42 | types.model({ | ||
43 | type: types.literal('loaded'), | ||
44 | }), | ||
45 | types.model({ | ||
46 | type: types.literal('failed'), | ||
47 | errorCode: types.integer, | ||
48 | errorDesc: types.string, | ||
49 | }), | ||
50 | types.model({ | ||
51 | type: types.literal('crashed'), | ||
52 | reason: types.string, | ||
53 | exitCode: types.integer, | ||
54 | }), | ||
55 | ), | ||
56 | { type: 'initializing' }, | ||
57 | ), | ||
58 | directMessageCount: 0, | ||
59 | indirectMessageCount: 0, | ||
60 | }) | ||
61 | .views((self) => ({ | ||
62 | get loading(): boolean { | ||
63 | return ( | ||
64 | self.state.type === 'initializing' || self.state.type === 'loading' | ||
65 | ); | ||
66 | }, | ||
67 | get failed(): boolean { | ||
68 | return self.state.type === 'failed'; | ||
69 | }, | ||
70 | get crashed(): boolean { | ||
71 | return self.state.type === 'crashed'; | ||
72 | }, | ||
73 | })); | ||
40 | } | 74 | } |
41 | 75 | ||
42 | const ServiceBase = /* @__PURE__ */ (() => | 76 | const ServiceBase = /* @__PURE__ */ (() => |