set-state-compare
Version:
setState for React that compares with the current state and only sets the state if changed.
129 lines • 13.3 kB
JavaScript
/**
* @param {any} value1
* @param {any} value2
* @param {boolean} [debug]
* @returns {boolean}
*/
function anythingDifferent(value1, value2, debug) {
if (Array.isArray(value1) && Array.isArray(value2)) {
return arrayDifferent(value1, value2);
}
else if (isSimpleObject(value1) && isSimpleObject(value2)) {
return simpleObjectDifferent(value1, value2, true);
}
else if (typeof value1 == "object" && typeof value2 == "object" && value1 && value2) {
return !Object.is(value1, value2);
}
else if (value1 !== value2) {
if (debug)
console.log(`Value 1 ${value1} wasn't the same as value 2 ${value2}`);
return true;
}
return false;
}
/**
* @param {any} value1
* @param {any} value2
* @param {boolean} [debug]
* @returns {boolean}
*/
function referenceDifferent(value1, value2, debug) {
const isSame = Object.is(value1, value2);
if (!isSame && debug) {
console.log(`Value 1 ${value1} wasn't the same as value 2 ${value2}`);
}
return !isSame;
}
/**
* @param {any[]} array1
* @param {any[]} array2
* @param {boolean} [debug]
* @returns {boolean}
*/
function arrayReferenceDifferent(array1, array2, debug) {
if (array1.length !== array2.length) {
if (debug) {
console.log(`Array length ${array1.length} wasn't the same as ${array2.length}`);
}
return true;
}
for (let index = 0; index < array1.length; index += 1) {
if (referenceDifferent(array1[index], array2[index], debug)) {
return true;
}
}
return false;
}
/**
* @param {any[]} array1
* @param {any[]} array2
* @returns {boolean}
*/
function arrayDifferent(array1, array2) {
if (array1.length != array2.length) {
return true;
}
for (const key in array1) {
if (anythingDifferent(array1[key], array2[key])) {
return true;
}
}
return false;
}
/**
* @param {any} value
* @returns {boolean}
*/
function isSimpleObject(value) {
// Objects that contain $$typeof are special React objects that have recursive issues
if (typeof value == "object" && value !== null && value.constructor.name == "Object" && !value["$$typeof"]) {
return true;
}
return false;
}
/**
* @param {object} object1
* @param {object} object2
* @param {boolean} checkLength
* @returns {boolean}
*/
function simpleObjectDifferent(object1, object2, checkLength) {
if (checkLength && Object.keys(object1).length !== Object.keys(object2).length) {
return true;
}
return simpleObjectValuesDifferent(object1, object2);
}
/**
* @param {any} object1
* @param {any} object2
* @param {object} [args]
* @param {boolean} [args.debug]
* @param {(string) => boolean} [args.ignore]
* @returns {boolean}
*/
function simpleObjectValuesDifferent(object1, object2, args) {
for (const key in object1) {
if (args?.ignore && args.ignore({ key })) {
if (args?.debug)
console.log(`Ignoring key ${key}`);
continue;
}
if (args?.debug)
console.log({ key, object1: object1[key], object2: object2[key] });
if (!(key in object2)) {
if (args?.debug) {
console.log(`Key ${key} wasn't found in object`);
}
return true;
}
else if (anythingDifferent(object1[key], object2[key], args?.debug)) {
if (args?.debug) {
console.log(`Something was different for ${key}`);
}
return true;
}
}
return false;
}
export { anythingDifferent, arrayDifferent, arrayReferenceDifferent, isSimpleObject, referenceDifferent, simpleObjectDifferent, simpleObjectValuesDifferent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlmZi11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kaWZmLXV0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUs7SUFDOUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNuRCxPQUFPLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDdkMsQ0FBQztTQUFNLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzVELE9BQU8scUJBQXFCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUNwRCxDQUFDO1NBQU0sSUFBSSxPQUFPLE1BQU0sSUFBSSxRQUFRLElBQUksT0FBTyxNQUFNLElBQUksUUFBUSxJQUFJLE1BQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN0RixPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDbkMsQ0FBQztTQUFNLElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQzdCLElBQUksS0FBSztZQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxNQUFNLCtCQUErQixNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBRWhGLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUs7SUFDL0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFD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O1FBRUQsSUFBSSxJQUFJLEVBQUUsS0FBSztZQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsQ0FBQTtRQUVqRixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN0QixJQUFJLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcseUJBQXlCLENBQUMsQ0FBQTtZQUNsRCxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO2FBQU0sSUFBSSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RFLElBQUksSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO2dCQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixHQUFHLEVBQUUsQ0FBQyxDQUFBO1lBQ25ELENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsdUJBQXVCLEVBQ3ZCLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLDJCQUEyQixFQUM1QixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWUxXG4gKiBAcGFyYW0ge2FueX0gdmFsdWUyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtkZWJ1Z11cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBhbnl0aGluZ0RpZmZlcmVudCh2YWx1ZTEsIHZhbHVlMiwgZGVidWcpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUxKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlMikpIHtcbiAgICByZXR1cm4gYXJyYXlEaWZmZXJlbnQodmFsdWUxLCB2YWx1ZTIpXG4gIH0gZWxzZSBpZiAoaXNTaW1wbGVPYmplY3QodmFsdWUxKSAmJiBpc1NpbXBsZU9iamVjdCh2YWx1ZTIpKSB7XG4gICAgcmV0dXJuIHNpbXBsZU9iamVjdERpZmZlcmVudCh2YWx1ZTEsIHZhbHVlMiwgdHJ1ZSlcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUxID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlMiA9PSBcIm9iamVjdFwiICYmIHZhbHVlMSAmJiB2YWx1ZTIpIHtcbiAgICByZXR1cm4gIU9iamVjdC5pcyh2YWx1ZTEsIHZhbHVlMilcbiAgfSBlbHNlIGlmICh2YWx1ZTEgIT09IHZhbHVlMikge1xuICAgIGlmIChkZWJ1ZykgY29uc29sZS5sb2coYFZhbHVlIDEgJHt2YWx1ZTF9IHdhc24ndCB0aGUgc2FtZSBhcyB2YWx1ZSAyICR7dmFsdWUyfWApXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlMVxuICogQHBhcmFtIHthbnl9IHZhbHVlMlxuICogQHBhcmFtIHtib29sZWFufSBbZGVidWddXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gcmVmZXJlbmNlRGlmZmVyZW50KHZhbHVlMSwgdmFsdWUyLCBkZWJ1Zykge1xuICBjb25zdCBpc1NhbWUgPSBPYmplY3QuaXModmFsdWUxLCB2YWx1ZTIpXG5cbiAgaWYgKCFpc1NhbWUgJiYgZGVidWcpIHtcbiAgICBjb25zb2xlLmxvZyhgVmFsdWUgMSAke3ZhbHVlMX0gd2Fzbid0IHRoZSBzYW1lIGFzIHZhbHVlIDIgJHt2YWx1ZTJ9YClcbiAgfVxuXG4gIHJldHVybiAhaXNTYW1lXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnlbXX0gYXJyYXkxXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheTJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RlYnVnXVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGFycmF5UmVmZXJlbmNlRGlmZmVyZW50KGFycmF5MSwgYXJyYXkyLCBkZWJ1Zykge1xuICBpZiAoYXJyYXkxLmxlbmd0aCAhPT0gYXJyYXkyLmxlbmd0aCkge1xuICAgIGlmIChkZWJ1Zykge1xuICAgICAgY29uc29sZS5sb2coYEFycmF5IGxlbmd0aCAke2FycmF5MS5sZW5ndGh9IHdhc24ndCB0aGUgc2FtZSBhcyAke2FycmF5Mi5sZW5ndGh9YClcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5MS5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBpZiAocmVmZXJlbmNlRGlmZmVyZW50KGFycmF5MVtpbmRleF0sIGFycmF5MltpbmRleF0sIGRlYnVnKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheTFcbiAqIEBwYXJhbSB7YW55W119IGFycmF5MlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGFycmF5RGlmZmVyZW50KGFycmF5MSwgYXJyYXkyKSB7XG4gIGlmIChhcnJheTEubGVuZ3RoICE9IGFycmF5Mi5sZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gYXJyYXkxKSB7XG4gICAgaWYgKGFueXRoaW5nRGlmZmVyZW50KGFycmF5MVtrZXldLCBhcnJheTJba2V5XSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNTaW1wbGVPYmplY3QodmFsdWUpIHtcbiAgLy8gT2JqZWN0cyB0aGF0IGNvbnRhaW4gJCR0eXBlb2YgYXJlIHNwZWNpYWwgUmVhY3Qgb2JqZWN0cyB0aGF0IGhhdmUgcmVjdXJzaXZlIGlzc3Vlc1xuICBpZiAodHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUuY29uc3RydWN0b3IubmFtZSA9PSBcIk9iamVjdFwiICYmICF2YWx1ZVtcIiQkdHlwZW9mXCJdKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QxXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0MlxuICogQHBhcmFtIHtib29sZWFufSBjaGVja0xlbmd0aFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHNpbXBsZU9iamVjdERpZmZlcmVudChvYmplY3QxLCBvYmplY3QyLCBjaGVja0xlbmd0aCkge1xuICBpZiAoY2hlY2tMZW5ndGggJiYgT2JqZWN0LmtleXMob2JqZWN0MSkubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhvYmplY3QyKS5sZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIHNpbXBsZU9iamVjdFZhbHVlc0RpZmZlcmVudChvYmplY3QxLCBvYmplY3QyKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSBvYmplY3QxXG4gKiBAcGFyYW0ge2FueX0gb2JqZWN0MlxuICogQHBhcmFtIHtvYmplY3R9IFthcmdzXVxuICogQHBhcmFtIHtib29sZWFufSBbYXJncy5kZWJ1Z11cbiAqIEBwYXJhbSB7KHN0cmluZykgPT4gYm9vbGVhbn0gW2FyZ3MuaWdub3JlXVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHNpbXBsZU9iamVjdFZhbHVlc0RpZmZlcmVudChvYmplY3QxLCBvYmplY3QyLCBhcmdzKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIG9iamVjdDEpIHtcbiAgICBpZiAoYXJncz8uaWdub3JlICYmIGFyZ3MuaWdub3JlKHtrZXl9KSkge1xuICAgICAgaWYgKGFyZ3M/LmRlYnVnKSBjb25zb2xlLmxvZyhgSWdub3Jpbmcga2V5ICR7a2V5fWApXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChhcmdzPy5kZWJ1ZykgY29uc29sZS5sb2coe2tleSwgb2JqZWN0MTogb2JqZWN0MVtrZXldLCBvYmplY3QyOiBvYmplY3QyW2tleV19KVxuXG4gICAgaWYgKCEoa2V5IGluIG9iamVjdDIpKSB7XG4gICAgICBpZiAoYXJncz8uZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coYEtleSAke2tleX0gd2Fzbid0IGZvdW5kIGluIG9iamVjdGApXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChhbnl0aGluZ0RpZmZlcmVudChvYmplY3QxW2tleV0sIG9iamVjdDJba2V5XSwgYXJncz8uZGVidWcpKSB7XG4gICAgICBpZiAoYXJncz8uZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFNvbWV0aGluZyB3YXMgZGlmZmVyZW50IGZvciAke2tleX1gKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQge1xuICBhbnl0aGluZ0RpZmZlcmVudCxcbiAgYXJyYXlEaWZmZXJlbnQsXG4gIGFycmF5UmVmZXJlbmNlRGlmZmVyZW50LFxuICBpc1NpbXBsZU9iamVjdCxcbiAgcmVmZXJlbmNlRGlmZmVyZW50LFxuICBzaW1wbGVPYmplY3REaWZmZXJlbnQsXG4gIHNpbXBsZU9iamVjdFZhbHVlc0RpZmZlcmVudFxufVxuIl19