@fluentui/react-northstar
Version:
A themable React component library.
111 lines (102 loc) • 2.97 kB
JavaScript
import _concat from "lodash/concat";
import _isNil from "lodash/isNil";
import _toLower from "lodash/toLower";
/**
* Check whether source includes target ignoring case.
*/
export var includes = function includes(source, target) {
return _toLower(source).indexOf(_toLower(target)) !== -1;
};
/**
* Checks whether the key or the value of data[key] contains the search string.
*/
export var find = function find(data, key, search) {
var value = data[key];
return search !== '' && (includes(key, search) || typeof value !== 'object' && !_isNil(value) && includes(value, search));
};
/**
* Checks if the data[key] is primitive and override in the overrides object.
*/
export var isOverridden = function isOverridden(data, key, overrides) {
return typeof data[key] !== 'object' && !!overrides && overrides[key] !== null && overrides[key] !== undefined;
};
/**
* Helper recursive function for the filter method.
*/
var filterR = function filterR(search, data) {
var result = false;
Object.keys(data).forEach(function (key) {
var value = data[key];
if (find(data, key, search)) {
result = true;
}
// If the value is object invoke again
if (typeof value === 'object' && filterR(search, value)) {
result = true;
}
});
return result;
};
/**
* Filters the data for the value string (if it appears in the key or value). Considers nested objects.
*/
export var filter = function filter(data, value) {
return Object.keys(data).filter(function (key) {
if (find(data, key, value)) {
return true;
}
// if the value is object invoke again
if (typeof data[key] === 'object' && data[key] !== null) {
return filterR(value, data[key]);
}
return false;
}).reduce(function (obj, key) {
obj[key] = data[key];
return obj;
}, {});
};
/**
* Returns array of values that matches the predicate. Considers nested objects.
*/
export var getValues = function getValues(value, predicate) {
if (_isNil(value)) {
return [];
}
if (typeof value === 'string') {
if (predicate(value)) {
return [value];
}
}
if (typeof value === 'object') {
var arr = [];
Object.keys(value).forEach(function (key) {
arr = _concat(arr, getValues(value[key], predicate));
});
return arr;
}
return [];
};
/**
* Removes null values from an object. Considers nested objects.
*/
export var removeNulls = function removeNulls(o) {
if (typeof o !== 'object' && o !== null) {
return o;
}
var result = {};
Object.keys(o).forEach(function (k) {
if (!o[k] || typeof o[k] !== 'object') {
if (o[k]) {
result[k] = o[k]; // If not null or not an object, copy value
}
} else {
// The property is an object
var val = removeNulls(o[k]);
if (typeof val === 'object' && val != null && Object.keys(val).length > 0) {
result[k] = val;
}
}
});
return result;
};
//# sourceMappingURL=utils.js.map