import { createDecorator } from 'vue-class-component';
|
import { applyMetadata } from '../helpers/metadata';
|
/**
|
* decorator of synced model and prop
|
* @param propName the name to interface with from outside, must be different from decorated property
|
* @param event event name
|
* @param options options
|
* @return PropertyDecorator
|
*/
|
export function ModelSync(propName, event, options) {
|
if (options === void 0) { options = {}; }
|
return function (target, key) {
|
applyMetadata(options, target, key);
|
createDecorator(function (componentOptions, k) {
|
;
|
(componentOptions.props || (componentOptions.props = {}))[propName] = options;
|
componentOptions.model = { prop: propName, event: event || k };
|
(componentOptions.computed || (componentOptions.computed = {}))[k] = {
|
get: function () {
|
return this[propName];
|
},
|
set: function (value) {
|
// @ts-ignore
|
this.$emit(event, value);
|
},
|
};
|
})(target, key);
|
};
|
}
|