1
0
Fork 0
mirror of https://github.com/terribleplan/next.js.git synced 2024-01-19 02:48:18 +00:00
next.js/examples/with-mobx-state-tree-typescript/stores/store.ts
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

50 lines
1.3 KiB
TypeScript

import { applySnapshot, Instance, SnapshotIn, SnapshotOut, types } from "mobx-state-tree";
let store:IStore = null as any;
const Store = types
.model({
foo: types.number,
lastUpdate: types.Date,
light: false,
})
.actions((self) => {
let timer;
const start = () => {
timer = setInterval(() => {
// mobx-state-tree doesn't allow anonymous callbacks changing data.
// Pass off to another action instead (need to cast self as any
// because typescript doesn't yet know about the actions we're
// adding to self here)
(self as any).update();
}, 1000);
};
const update = () => {
self.lastUpdate = new Date(Date.now());
self.light = true;
};
const stop = () => {
clearInterval(timer);
};
return { start, stop, update };
});
type IStore = Instance<typeof Store>;
type IStoreSnapshotIn = SnapshotIn<typeof Store>;
type IStoreSnapshotOut = SnapshotOut<typeof Store>;
const initializeStore = (isServer, snapshot = null) => {
if (isServer) {
store = Store.create({ foo:6, lastUpdate: Date.now() });
}
if (store as any === null) {
store = Store.create({ foo:6, lastUpdate: Date.now() });
}
if (snapshot) {
applySnapshot(store, snapshot);
}
return store;
};
export { initializeStore, IStore, IStoreSnapshotIn, IStoreSnapshotOut };