react-virtualized
Version:
React components for efficiently rendering large, scrollable lists and tabular data
45 lines (33 loc) • 1.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
exports.default = createCallbackMemoizer;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Helper utility that updates the specified callback whenever any of the specified indices have changed.
*/
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 = (0, _keys2.default)(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 !== (0, _keys2.default)(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);
}
};
}