UNPKG

@antv/f2

Version:

Charts for mobile visualization.

101 lines (100 loc) 2.96 kB
"use strict"; 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;