react-move
Version:
Beautiful, data-driven animations for React.
60 lines (48 loc) • 1.64 kB
JavaScript
function mergeKeys(currNodeKeys, currKeyIndex, nextNodeKeys, nextKeyIndex) {
var allKeys = [];
for (var i = 0; i < nextNodeKeys.length; i++) {
allKeys[i] = nextNodeKeys[i];
}
for (var _i = 0; _i < currNodeKeys.length; _i++) {
if (nextKeyIndex[currNodeKeys[_i]] === undefined) {
allKeys.push(currNodeKeys[_i]);
}
}
return allKeys.sort(function (a, b) {
var nextOrderA = nextKeyIndex[a];
var nextOrderB = nextKeyIndex[b];
var currOrderA = currKeyIndex[a];
var currOrderB = currKeyIndex[b];
if (nextOrderA != null && nextOrderB != null) {
return nextKeyIndex[a] - nextKeyIndex[b];
} else if (currOrderA != null && currOrderB != null) {
return currKeyIndex[a] - currKeyIndex[b];
} else if (nextOrderA != null) {
for (var _i2 = 0; _i2 < nextNodeKeys.length; _i2++) {
var pivot = nextNodeKeys[_i2];
if (!currKeyIndex[pivot]) {
continue;
}
if (nextOrderA < nextKeyIndex[pivot] && currOrderB > currKeyIndex[pivot]) {
return -1;
} else if (nextOrderA > nextKeyIndex[pivot] && currOrderB < currKeyIndex[pivot]) {
return 1;
}
}
return 1;
}
for (var _i3 = 0; _i3 < nextNodeKeys.length; _i3++) {
var _pivot = nextNodeKeys[_i3];
if (!currKeyIndex[_pivot]) {
continue;
}
if (nextOrderB < nextKeyIndex[_pivot] && currOrderA > currKeyIndex[_pivot]) {
return 1;
} else if (nextOrderB > nextKeyIndex[_pivot] && currOrderA < currKeyIndex[_pivot]) {
return -1;
}
}
return -1;
});
}
export default mergeKeys;