elliptical-observe
Version:
Sideways Data Loading for Elliptical
55 lines (49 loc) • 1.73 kB
JavaScript
import _typeof from 'babel-runtime/helpers/typeof';
/** @jsx createElement */
import _ from 'lodash';
import { createElement, compile } from 'elliptical';
import createStore from './store';
import Dynamic from './dynamic';
export default function createProcessor(register, processor) {
return function process(element) {
if (element.type.observe) {
var _ret = function () {
var visit = function visit(option, e, traverse) {
var data = register(source);
if (oldData !== data) {
oldData = data;
if (element.type.describe) {
desc = element.type.describe(_.assign({}, element, { data: data }));
}
}
if (element.type.describe) {
return traverse(desc, option);
} else {
return e.type._oldVisit(option, _.assign({}, e, { data: data }), traverse);
}
};
var source = element.type.observe(element);
if (processor) {
source = processor(source);
}
var oldData = register(source);
var desc = void 0;
if (element.type.describe) {
desc = element.type.describe(_.assign({}, element, { data: oldData }));
}
var type = _.assign({}, element.type, {
visit: visit,
_oldVisit: element.type.visit,
describe: undefined
});
return {
v: _.assign({}, element, { type: type })
};
}();
if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
} else if (element.type === "dynamic") {
return _.assign({}, element, { type: Dynamic, register: register });
}
return element;
};
}