vue-facing-decorator
Version:
Vue typescript class and decorator based component.
45 lines • 1.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.build = exports.decorator = void 0;
const utils_1 = require("../utils");
const props_1 = require("./props");
exports.decorator = (0, utils_1.optionNullableMemberDecorator)(function (proto, name, option) {
var _a;
option !== null && option !== void 0 ? option : (option = {});
const slot = (0, utils_1.obtainSlot)(proto);
let vmodelName = 'modelValue';
const propsConfig = Object.assign({}, option);
if (propsConfig) {
vmodelName = (_a = propsConfig.name) !== null && _a !== void 0 ? _a : vmodelName;
delete propsConfig.name;
}
(0, props_1.decorator)(propsConfig)(proto, vmodelName);
const map = slot.obtainMap('v-model');
map.set(name, option);
});
function build(cons, optionBuilder) {
var _a;
(_a = optionBuilder.computed) !== null && _a !== void 0 ? _a : (optionBuilder.computed = {});
const slot = (0, utils_1.obtainSlot)(cons.prototype);
const names = slot.getMap('v-model');
if (!names || names.size === 0) {
return;
}
const emits = slot.obtainMap('emits');
names.forEach((value, name) => {
var _a;
const vmodelName = (_a = (value && value.name)) !== null && _a !== void 0 ? _a : 'modelValue';
const eventName = `update:${vmodelName}`;
optionBuilder.computed[name] = {
get: function () {
return this[vmodelName];
},
set: function (val) {
this.$emit(eventName, val);
}
};
emits.set(eventName, true);
});
}
exports.build = build;
//# sourceMappingURL=vmodel.js.map