mobx-vue
Version:
Vue bindings for MobX
41 lines (40 loc) • 1.23 kB
JavaScript
;
/**
* @author Kuitos
* @homepage https://github.com/kuitos/
* @since 2018-06-08 10:16
*/
Object.defineProperty(exports, "__esModule", { value: true });
var mobx_1 = require("mobx");
/**
* collect the data which defined for vue
* and filter the mobx data to avoid duplicated watching by vue
* @param {Vue} vm
* @param {DefaultData<Vue>} data
* @returns {any} filtered data for vue definition
*/
function collectData(vm, data) {
// @ts-expect-error
var dataDefinition = typeof data === 'function' ? data.call(vm, vm) : (data || {});
var filteredData = Object.keys(dataDefinition).reduce(function (result, field) {
var value = dataDefinition[field];
if (mobx_1.isObservable(value)) {
Object.defineProperty(vm, field, {
configurable: true,
get: function () {
return value;
},
// @formatter:off
// tslint:disable-next-line
set: function () { }
// @formatter:on
});
}
else {
result[field] = value;
}
return result;
}, {});
return filteredData;
}
exports.default = collectData;