elliptical-observe
Version:
Sideways Data Loading for Elliptical
77 lines (59 loc) • 2.25 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
exports.default = createProcessor;
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _elliptical = require('elliptical');
var _store = require('./store');
var _store2 = _interopRequireDefault(_store);
var _dynamic = require('./dynamic');
var _dynamic2 = _interopRequireDefault(_dynamic);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/** @jsx createElement */
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(_lodash2.default.assign({}, element, { data: data }));
}
}
if (element.type.describe) {
return traverse(desc, option);
} else {
return e.type._oldVisit(option, _lodash2.default.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(_lodash2.default.assign({}, element, { data: oldData }));
}
var type = _lodash2.default.assign({}, element.type, {
visit: visit,
_oldVisit: element.type.visit,
describe: undefined
});
return {
v: _lodash2.default.assign({}, element, { type: type })
};
}();
if ((typeof _ret === 'undefined' ? 'undefined' : (0, _typeof3.default)(_ret)) === "object") return _ret.v;
} else if (element.type === "dynamic") {
return _lodash2.default.assign({}, element, { type: _dynamic2.default, register: register });
}
return element;
};
}