UNPKG

@fluentui/react-northstar

Version:
111 lines (102 loc) 2.97 kB
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