rsnext/examples/with-mobx-react-lite/store.js
JJ Kasper 12cbb934b3 Add support for creating AMP pages (#6706)
* Add support for .amp.js pages and
resolving /page?amp=1 to page.amp.js

* Update amp tests

* Update example and clean up amp page resolving

* Add nested amp test

* page => normalizedPage

* Add type to page options

* Add handling of amp with all pageExtensions
and normalize page

* Make sure findPageFile only falls back to
amp if enabled
2019-03-18 23:24:21 -04:00

43 lines
1,017 B
JavaScript

import { action } from 'mobx'
import { useObservable, useStaticRendering } from 'mobx-react-lite'
import { createContext, useCallback } from 'react'
const isServer = !process.browser
useStaticRendering(isServer)
let StoreContext = createContext()
let start
let stop
let store
function initializeData (initialData = store || {}) {
const { lastUpdate = Date.now(), light } = initialData
return {
lastUpdate,
light: Boolean(light)
}
}
function InjectStoreContext ({ children, initialData }) {
let timerInterval = null
store = useObservable(initializeData(initialData))
start = useCallback(
action(() => {
timerInterval = setInterval(() => {
store.lastUpdate = Date.now()
store.light = true
}, 1000)
})
)
stop = () => {
if (timerInterval) {
clearInterval(timerInterval)
}
}
return <StoreContext.Provider value={store}>{children}</StoreContext.Provider>
}
export { InjectStoreContext, StoreContext, initializeData, start, stop, store }