summaryrefslogtreecommitdiff
path: root/app/models/root-store
diff options
context:
space:
mode:
authorKirill Rogovoy <[email protected]>2021-07-20 21:24:52 +0300
committerKirill Rogovoy <[email protected]>2021-07-20 21:24:52 +0300
commit5f4611d65e40eae3ca6191a15f68d69ea5a1c4cb (patch)
tree273dfc086444533d86d580961c92ba8d14781a67 /app/models/root-store
parentf0bf4e7afdcd8b02a62be45ab3e7d047ed865a79 (diff)
WIP
Diffstat (limited to 'app/models/root-store')
-rw-r--r--app/models/root-store/root-store-context.ts22
-rw-r--r--app/models/root-store/root-store.ts20
-rw-r--r--app/models/root-store/setup-root-store.ts57
3 files changed, 0 insertions, 99 deletions
diff --git a/app/models/root-store/root-store-context.ts b/app/models/root-store/root-store-context.ts
deleted file mode 100644
index f01a35c..0000000
--- a/app/models/root-store/root-store-context.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { createContext, useContext } from 'react'
-import { RootStore } from './root-store'
-
-/**
- * Create a context we can use to
- * - Provide access to our stores from our root component
- * - Consume stores in our screens (or other components, though it's
- * preferable to just connect screens)
- */
-const RootStoreContext = createContext<RootStore>({} as RootStore)
-
-/**
- * The provider our root component will use to expose the root store
- */
-export const RootStoreProvider = RootStoreContext.Provider
-
-/**
- * A hook that screens can use to gain access to our stores, with
- * `const { someStore, someOtherStore } = useStores()`,
- * or less likely: `const rootStore = useStores()`
- */
-export const useStores = () => useContext(RootStoreContext)
diff --git a/app/models/root-store/root-store.ts b/app/models/root-store/root-store.ts
deleted file mode 100644
index 56425bc..0000000
--- a/app/models/root-store/root-store.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { Instance, SnapshotOut, types } from 'mobx-state-tree'
-import { CharacterStoreModel } from '../character-store/character-store'
-
-/**
- * A RootStore model.
- */
-// prettier-ignore
-export const RootStoreModel = types.model("RootStore").props({
- characterStore: types.optional(CharacterStoreModel, {} as any),
-})
-
-/**
- * The RootStore instance.
- */
-export interface RootStore extends Instance<typeof RootStoreModel> {}
-
-/**
- * The data of a RootStore.
- */
-export interface RootStoreSnapshot extends SnapshotOut<typeof RootStoreModel> {}
diff --git a/app/models/root-store/setup-root-store.ts b/app/models/root-store/setup-root-store.ts
deleted file mode 100644
index b1a741b..0000000
--- a/app/models/root-store/setup-root-store.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import { onSnapshot } from 'mobx-state-tree'
-import { RootStoreModel, RootStore } from './root-store'
-import { Environment } from '../environment'
-import * as storage from '../../utils/storage'
-
-/**
- * The key we'll be saving our state as within async storage.
- */
-const ROOT_STATE_STORAGE_KEY = 'root'
-
-/**
- * Setup the environment that all the models will be sharing.
- *
- * The environment includes other functions that will be picked from some
- * of the models that get created later. This is how we loosly couple things
- * like events between models.
- */
-export async function createEnvironment() {
- const env = new Environment()
- await env.setup()
- return env
-}
-
-/**
- * Setup the root state.
- */
-export async function setupRootStore() {
- let rootStore: RootStore
- let data: any
-
- // prepare the environment that will be associated with the RootStore.
- const env = await createEnvironment()
- try {
- // load data from storage
- data = (await storage.load(ROOT_STATE_STORAGE_KEY)) || {}
- rootStore = RootStoreModel.create(data, env)
- } catch (e) {
- // if there's any problems loading, then let's at least fallback to an empty state
- // instead of crashing.
- rootStore = RootStoreModel.create({}, env)
-
- // but please inform us what happened
- __DEV__ && console.tron.error(e.message, null)
- }
-
- // reactotron logging
- if (__DEV__) {
- env.reactotron.setRootStore(rootStore, data)
- }
-
- // track changes & save to storage
- onSnapshot(rootStore, (snapshot) =>
- storage.save(ROOT_STATE_STORAGE_KEY, snapshot),
- )
-
- return rootStore
-}