You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ui-lib/src/util/extend-classnames.js

31 lines
815 B
JavaScript

"use strict";
const assureArray = require("assure-array");
const syncpipe = require("syncpipe");
const flatten = require("flatten");
module.exports = function extendClassnames(classes, mapper) {
return assureArray(classes).map((item) => {
if (typeof item === "string") {
return mapper(item);
} else if (Array.isArray(item)) {
return item.map((subItem) => {
return mapper(subItem);
});
} else {
// { className: condition } mapping
return syncpipe(item, [
(_) => Object.entries(_),
(_) => _.map(([ key, value ]) => syncpipe(key, [
(_) => mapper(_),
(_) => assureArray(_),
(_) => _.filter((className) => className != null),
(_) => _.map((className) => [ className, value ])
])),
(_) => flatten(_, 1),
(_) => Object.fromEntries(_),
]);
}
});
};