117 lines
2.9 KiB
JavaScript
117 lines
2.9 KiB
JavaScript
|
|
'use strict';
|
||
|
|
|
||
|
|
Object.defineProperty(exports, "__esModule", {
|
||
|
|
value: true
|
||
|
|
});
|
||
|
|
exports.toArrayChildren = toArrayChildren;
|
||
|
|
exports.findChildInChildrenByKey = findChildInChildrenByKey;
|
||
|
|
exports.findShownChildInChildrenByKey = findShownChildInChildrenByKey;
|
||
|
|
exports.findHiddenChildInChildrenByKey = findHiddenChildInChildrenByKey;
|
||
|
|
exports.isSameChildren = isSameChildren;
|
||
|
|
exports.mergeChildren = mergeChildren;
|
||
|
|
|
||
|
|
var _react = require('react');
|
||
|
|
|
||
|
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
|
||
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||
|
|
|
||
|
|
function toArrayChildren(children) {
|
||
|
|
var ret = [];
|
||
|
|
_react2['default'].Children.forEach(children, function (child) {
|
||
|
|
ret.push(child);
|
||
|
|
});
|
||
|
|
return ret;
|
||
|
|
}
|
||
|
|
|
||
|
|
function findChildInChildrenByKey(children, key) {
|
||
|
|
var ret = null;
|
||
|
|
if (children) {
|
||
|
|
children.forEach(function (child) {
|
||
|
|
if (ret) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
if (child && child.key === key) {
|
||
|
|
ret = child;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
return ret;
|
||
|
|
}
|
||
|
|
|
||
|
|
function findShownChildInChildrenByKey(children, key, showProp) {
|
||
|
|
var ret = null;
|
||
|
|
if (children) {
|
||
|
|
children.forEach(function (child) {
|
||
|
|
if (child && child.key === key && child.props[showProp]) {
|
||
|
|
if (ret) {
|
||
|
|
throw new Error('two child with same key for <rc-animate> children');
|
||
|
|
}
|
||
|
|
ret = child;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
return ret;
|
||
|
|
}
|
||
|
|
|
||
|
|
function findHiddenChildInChildrenByKey(children, key, showProp) {
|
||
|
|
var found = 0;
|
||
|
|
if (children) {
|
||
|
|
children.forEach(function (child) {
|
||
|
|
if (found) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
found = child && child.key === key && !child.props[showProp];
|
||
|
|
});
|
||
|
|
}
|
||
|
|
return found;
|
||
|
|
}
|
||
|
|
|
||
|
|
function isSameChildren(c1, c2, showProp) {
|
||
|
|
var same = c1.length === c2.length;
|
||
|
|
if (same) {
|
||
|
|
c1.forEach(function (child, index) {
|
||
|
|
var child2 = c2[index];
|
||
|
|
if (child && child2) {
|
||
|
|
if (child && !child2 || !child && child2) {
|
||
|
|
same = false;
|
||
|
|
} else if (child.key !== child2.key) {
|
||
|
|
same = false;
|
||
|
|
} else if (showProp && child.props[showProp] !== child2.props[showProp]) {
|
||
|
|
same = false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
return same;
|
||
|
|
}
|
||
|
|
|
||
|
|
function mergeChildren(prev, next) {
|
||
|
|
var ret = [];
|
||
|
|
|
||
|
|
// For each key of `next`, the list of keys to insert before that key in
|
||
|
|
// the combined list
|
||
|
|
var nextChildrenPending = {};
|
||
|
|
var pendingChildren = [];
|
||
|
|
prev.forEach(function (child) {
|
||
|
|
if (child && findChildInChildrenByKey(next, child.key)) {
|
||
|
|
if (pendingChildren.length) {
|
||
|
|
nextChildrenPending[child.key] = pendingChildren;
|
||
|
|
pendingChildren = [];
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
pendingChildren.push(child);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
next.forEach(function (child) {
|
||
|
|
if (child && Object.prototype.hasOwnProperty.call(nextChildrenPending, child.key)) {
|
||
|
|
ret = ret.concat(nextChildrenPending[child.key]);
|
||
|
|
}
|
||
|
|
ret.push(child);
|
||
|
|
});
|
||
|
|
|
||
|
|
ret = ret.concat(pendingChildren);
|
||
|
|
|
||
|
|
return ret;
|
||
|
|
}
|