From 16de00272c2c7b0ee64aae7a0dbf7dfb7f53a8c0 Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Sun, 10 Jun 2018 01:53:44 +0800 Subject: [PATCH] refactor(cx): support unsorted params --- src/utils/cx.js | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) 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(' ') }