about summary refs log tree commit diff
path: root/src/state/models/root-store.ts
blob: 143c59ea1af48a8ab3150d906894c7eb0b2a0327 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
 * The root store is the base of all modeled state.
 */

import {Instance, SnapshotOut, types} from 'mobx-state-tree'
import {createContext, useContext} from 'react'
import {SessionModel, createDefaultSession} from './session'

export const RootStoreModel = types.model('RootStore').props({
  session: SessionModel,
})

export interface RootStore extends Instance<typeof RootStoreModel> {}
export interface RootStoreSnapshot extends SnapshotOut<typeof RootStoreModel> {}

export function createDefaultRootStore() {
  return {
    session: createDefaultSession(),
  }
}

// react context & hook utilities
const RootStoreContext = createContext<RootStore>({} as RootStore)
export const RootStoreProvider = RootStoreContext.Provider
export const useStores = () => useContext(RootStoreContext)