react-virtualized
Version:
React components for efficiently rendering large, scrollable lists and tabular data
26 lines (25 loc) • 996 B
JavaScript
/**
* Helper utility that updates the specified callback whenever any of the specified indices have changed.
*/
export default function createCallbackMemoizer() {
var requireAllKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
var cachedIndices = {};
return function (_ref) {
var callback = _ref.callback,
indices = _ref.indices;
var keys = Object.keys(indices);
var allInitialized = !requireAllKeys || keys.every(function (key) {
var value = indices[key];
return Array.isArray(value) ? value.length > 0 : value >= 0;
});
var indexChanged = keys.length !== Object.keys(cachedIndices).length || keys.some(function (key) {
var cachedValue = cachedIndices[key];
var value = indices[key];
return Array.isArray(value) ? cachedValue.join(',') !== value.join(',') : cachedValue !== value;
});
cachedIndices = indices;
if (allInitialized && indexChanged) {
callback(indices);
}
};
}