12cbb934b3
* 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
43 lines
1,017 B
JavaScript
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 }
|