cerebral-view-riot
Version:
Connects Riot tags to necessary Cerebral state and signals
43 lines (36 loc) • 1.07 kB
JavaScript
module.exports = function(controller) {
return {
connectCerebral: function (statePaths, signalPaths) {
var tag = this
// Attach signals to tag
if(signalPaths) {
Object.keys(signalPaths).forEach(function(key) {
tag[key] = controller.getSignals(signalPaths[key])
})
}
// Attach state and udpate tag on state changes
if(statePaths) {
var updateState = function() {
var shouldUpdate = false
Object.keys(statePaths).forEach(function(key) {
var newState = controller.get(statePaths[key])
if (tag[key] !== newState) {
tag[key] = newState
shouldUpdate = true
}
})
if(shouldUpdate) {
tag.update()
}
}
// Setup state listener and cleanup logic
controller.on('change', updateState)
tag.on('unmount', function() {
controller.removeListener('change', updateState)
})
// Init
updateState()
}
}
}
}