@bigfishtv/cockpit
Version:
64 lines (56 loc) • 2.26 kB
JavaScript
import Immutable from 'immutable';
import { isArray } from './typeUtils';
import _get from 'lodash/get';
/**
* Takes two objects and a list of paths and checks if any have changed
* @param {Object} oldValue
* @param {Object} newValue
* @param {Array} fields Either array of fields or string for a single field
* @return {Boolean}
*/
export function valueChanged() {
var oldValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var newValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var fields = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
if (!isArray(fields)) fields = [fields];
for (var _iterator = fields, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
var _ref;
if (_isArray) {
if (_i >= _iterator.length) break;
_ref = _iterator[_i++];
} else {
_i = _iterator.next();
if (_i.done) break;
_ref = _i.value;
}
var field = _ref;
if (isArray(field)) field = field.join('.');
if (_get(oldValue, field) !== _get(newValue, field)) {
return true;
}
}
return false;
}
/**
* Takes two form values (or prevProps and props) and checks for any differences in provided field list
* @param {Object} oldFormValue Either formValue or props object containing formValue
* @param {Object} newFormValue Either formValue or props object containing formValue
* @param {Array} fields Either array of fields or string for a single field
* @return {Boolean}
*/
export function formValueChanged(oldFormValue, newFormValue) {
var fields = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
if ('formValue' in oldFormValue) oldFormValue = oldFormValue.formValue;
if ('formValue' in newFormValue) newFormValue = newFormValue.formValue;
oldFormValue = oldFormValue.value || {};
newFormValue = newFormValue.value || {};
return valueChanged(oldFormValue, newFormValue, fields);
}
/**
* Take any array or object and get a hash string for it
* @param {Object|Array} data
* @returns {String}
*/
export function getDataHash(data) {
return Immutable.fromJS(data).hashCode().toString();
}