Add auth navigations

This commit is contained in:
Paul Frazee 2022-06-09 17:13:29 -05:00
parent fc3b2952bb
commit 802222fe71
11 changed files with 129 additions and 25 deletions

View file

@ -1,5 +1,9 @@
import {onSnapshot} from 'mobx-state-tree'
import {RootStoreModel, RootStore} from './models/root-store'
import {
RootStoreModel,
RootStore,
createDefaultRootStore,
} from './models/root-store'
import {Environment} from './env'
import * as storage from './storage'
@ -15,7 +19,7 @@ export async function setupState() {
rootStore = RootStoreModel.create(data, env)
} catch (e) {
console.error('Failed to load state from storage', e)
rootStore = RootStoreModel.create({}, env)
rootStore = RootStoreModel.create(createDefaultRootStore(), env)
}
// track changes & save to storage

View file

@ -4,12 +4,21 @@
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({})
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

View file

@ -0,0 +1,21 @@
import {Instance, SnapshotOut, types} from 'mobx-state-tree'
export const SessionModel = types
.model('Session')
.props({
isAuthed: types.boolean,
})
.actions(self => ({
setAuthed: (v: boolean) => {
self.isAuthed = v
},
}))
export interface Session extends Instance<typeof SessionModel> {}
export interface SessionSnapshot extends SnapshotOut<typeof SessionModel> {}
export function createDefaultSession() {
return {
isAuthed: false,
}
}