UNPKG

@teamsnap/teamsnap-ui

Version:

a CSS component library for TeamSnap

129 lines (118 loc) 3.15 kB
import _uniqueId from 'lodash/uniqueId' import _capitalize from 'lodash/capitalize' /** * @name capitalize * * @description * This simple method returns a capitalized version of the provided string. * Currently it is a 'wrapper' around the lodash _capitalize method. * There are other utilities we can look into as well, such as `shortid` * * @example * import { capitalize } from 'utils/helpers * * capitalize('name') * */ export const capitalize: (string: string) => string = (string) => _capitalize(string) /** * @name generateUniqueId * * @description * This simple method returns a string representing a uniqueID. * Currently it is a 'wrapper' around the lodash uniqueId method. * There are other utilities we can look into as well, such as `shortid` * * @example * import { generateUniqueId } from 'utils/helpers * * generateUniqueId() * */ export const generateUniqueId = (prefix = '') => _uniqueId(prefix) /** * @name setUniqueId * * @description * Set a uniqueID on an object if no id is provided. * Accepts an array of objects, the property name to create * * @example * import { setUniqueId } from 'utils/helpers * * setUniqueId([{name: 'item one'}], 'uuid') * */ export const setUniqueId = (items, property = 'id') => { let updatedItems = null // Assume if first row has an id, they all do and just return items if (items.length && items[0].hasOwnProperty(property)) { updatedItems = items } else { updatedItems = items.map(item => ({ [property]: generateUniqueId('item-'), ...item })) } return updatedItems } /** * @name parseAlphaString * * @description * Parse alpha characters from a provided string. * * @example * import { parseAlphaString } from 'utils/helpers * * parseAlphaString('abcd 1234 dcba') * */ export const parseAlphaString = value => value.toString().replace(/[^a-zA-Z]/g, "").toLowerCase() /** * @name parseNumericString * * @description * Parse Numeric characters, periods and negation from a provided string. * * @example * import { parseNumericString } from 'utils/helpers * * parseNumericString('abcd 1234 dcba') * */ export const parseNumericString = value => parseFloat(value.toString().replace(/[^0-9.-]/g, "")).toFixed(2) /** * @name stringifyArray * * @description * Used to quickly filter out and join an array by 'truthy' values. * * @example * import { stringifyArray } from 'utils/helpers * * stringifyArray(['Simpson', 'Homer'], ', ') * */ export const stringifyArray = (array, joinBy = ' ') => array.filter(Boolean).join(joinBy) /** * @name getClassName * * @description * Takes a base className and calls stringifyArray to merge 'truthy' options into a single string it returns * * @example * import { getClassName } from 'utils/helpers * * getClassName( * 'BaseClassName', * isInline && 'InlineModifier', * isActive ? 'ActiveModifier' : 'InactiveModifier' * 'some-utility-modifier' * ) * */ export const getClassName = (className, ...classModifiers) => { const classes = [ className, ...classModifiers ] return stringifyArray(classes) }