moy-router
Version:
Give a solution for moy-dom router management.
62 lines (59 loc) • 1.12 kB
JavaScript
import {
Maybe,
and,
or,
compose,
assoc,
__,
path,
} from 'moy-fp'
import parseRoute from '../utils/parseRoute'
const windowMonad = Maybe.of(window)
export default current => and(
windowMonad.map(
window => window.addEventListener('popstate', compose(
assoc(
'route',
__,
current,
),
path(['state', 'route']),
))
)
)({
back(){
windowMonad.map(
window => window.history.back()
)
},
go(index){
windowMonad.map(
window => window.history.go(index)
)
},
forward(){
windowMonad.map(
window => window.history.forward()
)
},
replace(routeConfig){
const route = parseRoute(routeConfig)
windowMonad.map(
window => or(
window.history.replaceState(route, '', route.pathname)
)(
assoc('route', route, current)
)
)
},
push(routeConfig){
const route = parseRoute(routeConfig)
windowMonad.map(
window => or(
window.history.replaceState(route, '', route.pathname)
)(
assoc('route', route, current)
)
)
}
})