Skip to content

Instantly share code, notes, and snippets.

@webdesignberlin
Last active April 15, 2020 09:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save webdesignberlin/f5bd8debdb40c9cc0d5bcf0d952f8525 to your computer and use it in GitHub Desktop.
Save webdesignberlin/f5bd8debdb40c9cc0d5bcf0d952f8525 to your computer and use it in GitHub Desktop.
generate BEModifier for vue computed property
export const modifierClasses = (vm) => ((root) => {
if (vm.modifier) {
const classArray = (typeof vm.modifier === 'string')
? new Array(vm.modifier)
: [...vm.modifier];
return classArray.map((modifier) => `${root}--${modifier}`);
}
return null;
});
export const modifier = (acceptedValues = []) => ({
type: [String, Array],
default: null,
validator: (value) => {
if (typeof value === 'string') {
return acceptedValues.includes(value);
}
const checkArray = [];
value.forEach((item) => {
checkArray.push(acceptedValues.includes(item));
});
return checkArray.every((item) => item);
},
});
export default modifierClasses;
<template>
<section
:class="modifierClasses('teaser')"
class="teaser">
</section>
</template>
<script>
import { modifierClasses, modifier } from '@/helpers/modifierClasses';
export default {
name: 'ImageTeaser',
props: {
modifier: modifier(['small-left', 'small-right']),
},
computed: {
modifierClasses,
},
};
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment