export function normalizeClasses()

in js/vnext/projection/common.js [25:57]


export function normalizeClasses(classes, context) {
  if (_.isArray(classes)) {
    return classes;
  } else if (_.isString(classes)) {
    return classes.split(/\s+/);
  } else if (_.isFunction(classes)) {
    return classes(context);
  } else if (_.isObject(classes)) {
    return _.chain(classes)
      .pairs()
      .filter(([, value]) => {
        /**
         * A boolean or a callback to decide whether or not a class is applied.
         * When it's a function, it takes the context and return a boolean.
         * @typedef ClassPredicate
         * @type {(boolean|ClassPredicateCallback)}
         */
        const isFunc = _.isFunction(value);

        /**
         * @callback ClassPredicateCallback
         * @param {Object} context
         *    Refer to the `context` of {@link normalizeClasses}.
         * @return {boolean}
         *    Whether or not the class is applied.
         */
        return (isFunc && value(context)) || (!isFunc && Boolean(value));
      })
      .map(([key]) => key)
      .value();
  }
  return [];
}