Skip to content

Instantly share code, notes, and snippets.

@goto-bus-stop
Created September 16, 2017 10:48
Show Gist options
  • Save goto-bus-stop/b2ee669b5dec0cd38e62bbcfdf9aa715 to your computer and use it in GitHub Desktop.
Save goto-bus-stop/b2ee669b5dec0cd38e62bbcfdf9aa715 to your computer and use it in GitHub Desktop.
choo-async-route
var html = require('bel')
var log = require('nanologger')('async-route')
function defaultLoading () {
return html`<div>Loading ...</div>`
}
module.exports = function asyncRoute (opts) {
var load = opts.load
var loading = opts.loading || defaultLoading
var promise
var cache
function onload (route) {
cache = route
}
return function (state, emit) {
if (cache) {
return cache(state, emit)
}
var route = state.route
if (!promise) {
log.info('loading', route)
promise = Promise.resolve(load())
.then(onload)
.then(function () {
log.info('loaded', route)
emit('render')
})
} else {
log.debug('still loading', route)
}
return loading(state, emit)
}
}
{
"name": "choo-async-route",
"description": "dynamically load choo routes on use",
"version": "0.0.0",
"license": "MIT",
"dependencies": {
"bel": "^5.1.1",
"nanologger": "^1.3.1"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment