rsnext/examples/with-mobx-state-tree/stores/store.js
Don Alvarez af9214b302 mobx-state-tree examples should use _app (#5362)
The mobx-state-tree examples (with and without typescript) pre-dated the next _app class and needed to be updated to use _app for persisting state across client-side navigation transitions. Also removed unneeded custom server class to better keep with the "show one feature per example" style of the next examples folder
2018-10-14 10:04:58 +02:00

43 lines
896 B
JavaScript

import { types, applySnapshot } from 'mobx-state-tree'
let store = null
const Store = types
.model({
lastUpdate: types.Date,
light: false
})
.actions((self) => {
let timer
function start () {
timer = setInterval(() => {
// mobx-state-tree doesn't allow anonymous callbacks changing data
// pass off to another action instead
self.update()
}, 1000)
}
function update () {
self.lastUpdate = Date.now()
self.light = true
}
function stop () {
clearInterval(timer)
}
return { start, stop, update }
})
export function initializeStore (isServer, snapshot = null) {
if (isServer) {
store = Store.create({ lastUpdate: Date.now() })
}
if (store === null) {
store = Store.create({ lastUpdate: Date.now() })
}
if (snapshot) {
applySnapshot(store, snapshot)
}
return store
}