nly-adminlte-vue
Version:
nly adminlte3 components
52 lines (46 loc) • 1.93 kB
JavaScript
import identity from "./identity";
import { isArray, isObject } from "./inspect";
import { clone, hasOwnProperty, keys } from "./object";
import { lowerFirst, upperFirst } from "./string";
// Prefix a property
export const prefixPropName = (prefix, value) => prefix + upperFirst(value);
// Remove a prefix from a property
export const unprefixPropName = (prefix, value) =>
lowerFirst(value.replace(prefix, ""));
// Suffix can be a falsey value so nothing is appended to string
// (helps when looping over props & some shouldn't change)
// Use data last parameters to allow for currying
export const suffixPropName = (suffix, str) =>
str + (suffix ? upperFirst(suffix) : "");
// Copies props from one array/object to a new array/object
// Prop values are also cloned as new references to prevent possible
// mutation of original prop object values
// Optionally accepts a function to transform the prop name
export const copyProps = (props, transformFn = identity) => {
if (isArray(props)) {
return props.map(transformFn);
}
const copied = {};
for (const prop in props) {
/* istanbul ignore else */
if (hasOwnProperty(props, prop)) {
// If the prop value is an object, do a shallow clone
// to prevent potential mutations to the original object
copied[transformFn(prop)] = isObject(props[prop])
? clone(props[prop])
: props[prop];
}
}
return copied;
};
// Given an array of properties or an object of property keys,
// plucks all the values off the target object, returning a new object
// that has props that reference the original prop values
export const pluckProps = (keysToPluck, objToPluck, transformFn = identity) =>
(isArray(keysToPluck) ? keysToPluck.slice() : keys(keysToPluck)).reduce(
(memo, prop) => {
memo[transformFn(prop)] = objToPluck[prop];
return memo;
},
{}
);