@antv/f2
Version:
Charts for mobile visualization.
101 lines (100 loc) • 2.96 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _util = require("@antv/util");
function cloneElement(element, props) {
if (!element) return element;
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, element), {}, {
props: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, element.props), props)
});
}
function map(children, fn) {
if (!children) {
return fn(children);
}
if ((0, _util.isArray)(children)) {
return children.map(function (child) {
return map(child, fn);
});
}
return fn(children);
}
function compareArray(nextElements, lastElements, callback) {
var keyed = {};
var nextLength = nextElements.length;
var lastLength = lastElements.length;
for (var i = 0, len = lastLength; i < len; i++) {
var element = lastElements[i];
if (element && !(0, _util.isNil)(element.key)) {
var key = element.key;
keyed[key] = element;
}
}
// 比较元素
for (var _i = 0, _len = Math.max(nextLength, lastLength); _i < _len; _i++) {
var _element = nextElements[_i];
if (!_element) {
compare(_element, lastElements[_i], callback);
continue;
}
var _key = _element.key;
// 有key值定义
if (!(0, _util.isNil)(_element.key)) {
var lastElement = keyed[_key];
if (lastElement) delete keyed[_key];
compare(_element, lastElement, callback);
continue;
}
compare(_element, lastElements[_i], callback);
}
// 说明是删除的元素
Object.keys(keyed).forEach(function (key) {
compare(null, keyed[key], callback);
});
}
// 比较2棵树
function compare(nextElement, lastElement, callback) {
// 有一个为空
if (!nextElement || !lastElement) {
callback(nextElement, lastElement);
return;
}
if ((0, _util.isArray)(nextElement) || (0, _util.isArray)(lastElement)) {
var nextElementArray = (0, _util.isArray)(nextElement) ? nextElement : [nextElement];
var lastElementArray = (0, _util.isArray)(lastElement) ? lastElement : [lastElement];
compareArray(nextElementArray, lastElementArray, callback);
return;
}
callback(nextElement, lastElement);
}
function toArray(element) {
if (!element) {
return element;
}
if (!(0, _util.isArray)(element)) {
return [element];
}
var newArray = [];
for (var i = 0, len = element.length; i < len; i++) {
var item = element[i];
if ((0, _util.isArray)(item)) {
// @ts-ignore
newArray = newArray.concat(toArray(item));
} else {
newArray.push(item);
}
}
return newArray;
}
var Children = {
cloneElement: cloneElement,
map: map,
toArray: toArray,
compare: compare
};
var _default = Children;
exports.default = _default;
;