refactor(cx): support unsorted params

This commit is contained in:
EnixCoda 2018-06-10 01:53:44 +08:00
parent dedc67266b
commit 16de00272c

View file

@ -1,12 +1,22 @@
/**
* cx('class1', { class2: true, class3: false }) --> 'class1 class2'
* @param {string} baseClassNames
* @param {object} optionalClassNames
* @param {string} baseClassNames
* @param {object} optionalClassNames
*/
export default function cx(baseClassNames = '', optionalClassNames = {}) {
return Object.entries(optionalClassNames)
.map(([key, value]) => value ? key : '')
.filter(_ => _)
.concat([baseClassNames])
export default function cx(...classNames) {
return classNames
.filter(Boolean)
.map(className => {
switch (typeof className) {
case 'string':
return className
case 'object':
return cx(
...Object.entries(className).map(([key, value]) => (Boolean(value) ? key : null))
)
default:
return ''
}
})
.join(' ')
}