diff options
author | Paul Frazee <pfrazee@gmail.com> | 2022-06-09 13:03:25 -0500 |
---|---|---|
committer | Paul Frazee <pfrazee@gmail.com> | 2022-06-09 13:03:25 -0500 |
commit | d6942bffab68ce80d5cb26b42710dd9276f62ded (patch) | |
tree | 309f8d64f95d526d3cae6c00611c93b04f12944e /src/state/index.ts | |
parent | 92ca49ab9a309510a5503a4df6a0ebcfba30f918 (diff) | |
download | voidsky-d6942bffab68ce80d5cb26b42710dd9276f62ded.tar.zst |
Add state management
Diffstat (limited to 'src/state/index.ts')
-rw-r--r-- | src/state/index.ts | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/state/index.ts b/src/state/index.ts new file mode 100644 index 000000000..7c97ce294 --- /dev/null +++ b/src/state/index.ts @@ -0,0 +1,30 @@ +import {onSnapshot} from 'mobx-state-tree' +import {RootStoreModel, RootStore} from './models/root-store' +import {Environment} from './env' +import * as storage from './storage' + +const ROOT_STATE_STORAGE_KEY = 'root' + +export async function setupState() { + let rootStore: RootStore + let data: any + + const env = new Environment() + try { + data = (await storage.load(ROOT_STATE_STORAGE_KEY)) || {} + rootStore = RootStoreModel.create(data, env) + } catch (e) { + console.error('Failed to load state from storage', e) + rootStore = RootStoreModel.create({}, env) + } + + // track changes & save to storage + onSnapshot(rootStore, snapshot => + storage.save(ROOT_STATE_STORAGE_KEY, snapshot), + ) + + return rootStore +} + +export {useStores, RootStoreModel, RootStoreProvider} from './models/root-store' +export type {RootStore} from './models/root-store' |