33 lines
1.1 KiB
JavaScript
33 lines
1.1 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports["default"] = createCallbackMemoizer;
|
|
|
|
/**
|
|
* 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 = 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);
|
|
}
|
|
};
|
|
} |