vue-zo
Version:
A Vuejs/Nuxt plugin that allows you to use roles and permissions in your components (setup macro & option API), also compatible as middleware, methods, composition-api and Pinia
44 lines • 3.16 kB
JavaScript
import { isEmpty, startCase } from './strings';
export const parseCondition = (binding) => {
let suffix = binding.name === 'can' ? 'permission' : binding.name;
let arg = 'has';
if (binding.arg) {
if (binding.arg === 'unless') {
arg = 'unless';
}
else if (binding.arg !== 'has') {
arg += startCase(binding.arg);
}
}
// Convert to plural if is needed
if (arg === 'hasAll') {
suffix += 's';
}
return `${arg}${startCase(suffix)}`;
};
export const isConditionPassed = (app, condition) => (el, binding) => {
if (!binding.value) {
return;
}
// Get condition to validate
let isValid = false;
if (typeof condition === 'function') {
isValid = condition(binding);
}
else {
binding.name = condition;
// Fix missing name property
isValid = app.$zo[parseCondition(binding)](binding.value);
}
if (!isValid) {
if (isEmpty(binding.modifiers)) {
// Remove DOM Element
el.parentNode?.removeChild(el);
}
else {
// Set attributes to DOM element
Object.assign(el, binding.modifiers);
}
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLE9BQWdCLEVBQVUsRUFBRTtJQUN6RCxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ2xFLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQztJQUVoQixJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDZixJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQzVCLEdBQUcsR0FBRyxRQUFRLENBQUM7U0FDaEI7YUFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssS0FBSyxFQUFFO1lBQ2hDLEdBQUcsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQy9CO0tBQ0Y7SUFFRCxpQ0FBaUM7SUFDakMsSUFBSSxHQUFHLEtBQUssUUFBUSxFQUFFO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLENBQUM7S0FDZjtJQUVELE9BQU8sR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDdEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQzVCLENBQUMsR0FBaUIsRUFBRSxTQUE0QixFQUFFLEVBQUUsQ0FDcEQsQ0FBQyxFQUFlLEVBQUUsT0FBZ0IsRUFBRSxFQUFFO0lBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1FBQ2xCLE9BQU87S0FDUjtJQUVELDRCQUE0QjtJQUM1QixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDcEIsSUFBSSxPQUFPLFNBQVMsS0FBSyxVQUFVLEVBQUU7UUFDbkMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUM5QjtTQUFNO1FBQ0wsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7UUFDekIsNEJBQTRCO1FBQzVCLE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUMzRDtJQUVELElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDWixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDOUIscUJBQXFCO1lBQ3JCLEVBQUUsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2hDO2FBQU07WUFDTCxnQ0FBZ0M7WUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3RDO0tBQ0Y7QUFDSCxDQUFDLENBQUMifQ==