budibase/packages/materialdesign-components/src/ClassBuilder.js

39 lines
1.3 KiB
JavaScript
Raw Normal View History

export default class ClassBuilder {
constructor(block, customDefaults) {
this.block = `mdc-${block}`
this.customDefaults = customDefaults //will be ignored when building custom classes
}
// classParams: {modifiers:[] (mdc), custom:[] (bbmd), extra:[] (any)}
blocks(classParams) {
let base = this.block
if (classParams == undefined) return base
return this.buildClass(base, classParams)
}
//elementName: string, classParams: {}
elements(elementName, classParams) {
let base = `${this.block}__${elementName}`
if (classParams == undefined) return base
return this.buildClass(base, classParams)
}
buildClass(base, classParams) {
let cls = base
const { modifiers, customs, extras } = classParams
if (modifiers) cls += modifiers.map(m => ` ${base}--${m}`).join(" ")
if (customs)
cls += Object.entries(customs)
.map(([property, value]) => {
//disregard falsy and values set by customDefaults constructor param
if (!!value && !this.customDefaults.includes(value)) {
//custom scss name convention = bbmd-[block | element]--[property]-[value]
return ` bbmd-${base}--${property}-${value}`
}
})
.join("")
if (extras) cls += ` ${extras.join(" ")}`
return cls.trim()
}
}