@fluentui/react-northstar
Version:
A themable React component library.
122 lines (112 loc) • 3.51 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.removeNulls = exports.isOverridden = exports.includes = exports.getValues = exports.find = exports.filter = void 0;
var _concat2 = _interopRequireDefault(require("lodash/concat"));
var _isNil2 = _interopRequireDefault(require("lodash/isNil"));
var _toLower2 = _interopRequireDefault(require("lodash/toLower"));
/**
* Check whether source includes target ignoring case.
*/
var includes = function includes(source, target) {
return (0, _toLower2.default)(source).indexOf((0, _toLower2.default)(target)) !== -1;
};
/**
* Checks whether the key or the value of data[key] contains the search string.
*/
exports.includes = includes;
var find = function find(data, key, search) {
var value = data[key];
return search !== '' && (includes(key, search) || typeof value !== 'object' && !(0, _isNil2.default)(value) && includes(value, search));
};
/**
* Checks if the data[key] is primitive and override in the overrides object.
*/
exports.find = find;
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.
*/
exports.isOverridden = isOverridden;
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.
*/
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.
*/
exports.filter = filter;
var getValues = function getValues(value, predicate) {
if ((0, _isNil2.default)(value)) {
return [];
}
if (typeof value === 'string') {
if (predicate(value)) {
return [value];
}
}
if (typeof value === 'object') {
var arr = [];
Object.keys(value).forEach(function (key) {
arr = (0, _concat2.default)(arr, getValues(value[key], predicate));
});
return arr;
}
return [];
};
/**
* Removes null values from an object. Considers nested objects.
*/
exports.getValues = getValues;
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;
};
exports.removeNulls = removeNulls;
//# sourceMappingURL=utils.js.map
;