diff --git a/src/utils/cx.js b/src/utils/cx.js index b70d7d5..994a954 100644 --- a/src/utils/cx.js +++ b/src/utils/cx.js @@ -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(' ') }