dynamicsmobile
Version:
Allows development of off-line mobile and web business apps over the Dynamics Mobile platform. More info on https://www.dynamicsmobile.com
103 lines • 5.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DecoratorsManager = void 0;
const tslib_1 = require("tslib");
const ko = require("knockout");
const configuration_service_1 = require("./configuration-service");
const context_service_1 = require("./context-service");
const app_service_app_1 = require("./app-service-app");
const application_context_service_1 = require("./application-context-service");
const injectable_1 = require("../ioc/injectable");
let DecoratorsManager = exports.DecoratorsManager = class DecoratorsManager extends app_service_app_1.CoreAppService {
constructor(dms, configurationService, contextService) {
super(dms, null);
this.configManager = configurationService;
this.contextManager = contextService;
}
processInputDecorators(view) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
var cgenKey = `__cgen+${view.constructor.name}`;
var cgen = view[cgenKey];
if (!cgen) {
return;
}
var me = this;
var props = Object.getOwnPropertyNames(cgen);
for (var i = 0; i < props.length; i++) {
var propName = props[i];
var cgenProp = cgen[propName].input;
if (cgenProp) {
var c;
if (!cgenProp.type || cgenProp.type == "context") {
c = yield me.contextManager.get(propName);
}
else if (cgenProp.type == "config") {
yield me.configManager.retreiveSettings();
c = yield me.configManager.getSetting(propName);
}
if ((c == undefined || c == null) && cgenProp.required && cgenProp.default == undefined) {
yield this.configManager.setNavigationState({ LastStepId: null, LastTaskId: null });
throw new Error(`Context decorator error: Property ${propName} is not present in Task context!`);
}
//auto-create
if (view[propName] == undefined && cgenProp.isArray)
view[propName] = ko.observableArray(cgenProp.default);
else if (view[propName] == undefined && !cgenProp.isArray)
view[propName] = ko.observable(cgenProp.default);
if (c == undefined)
c = cgenProp.default;
var typeConverted;
switch (cgenProp.dataType) {
case 'boolean':
typeConverted = ((c && (c.toString().toLowerCase() == "true" || c.toString().toLowerCase() == "1" || c.toString().toLowerCase() == "yes")) ? true : false);
break;
case 'decimal': typeConverted = (c ? parseFloat(c) : 0);
case 'int': typeConverted = (c ? parseInt(c) : 0);
default:
typeConverted = c;
break;
}
if (typeof view[propName] == 'function')
view[propName](typeConverted);
else
view[propName] = typeConverted;
}
}
});
}
;
processOutputDecorators(view, routeIsValidating) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
var cgenKey = `__cgen+${view.constructor.name}`;
var cgen = view[cgenKey];
if (!cgen)
return;
var me = this;
var props = Object.getOwnPropertyNames(cgen);
for (var i = 0; i < props.length; i++) {
var propName = props[i];
var cgenProp = cgen[propName].output;
if (cgenProp) {
if (routeIsValidating || cgenProp.always) {
var c;
if (typeof (view[propName]) == "function")
c = view[propName]();
else
c = view[propName];
if (!cgenProp.type || cgenProp.type == "context") {
yield me.contextManager.set(propName, c);
}
else if (cgenProp.type == "config") {
yield me.configManager.setSetting(propName, (c ? c.toString() : undefined));
}
}
}
}
});
}
};
exports.DecoratorsManager = DecoratorsManager = tslib_1.__decorate([
(0, injectable_1.Injectable)(),
tslib_1.__metadata("design:paramtypes", [application_context_service_1.DmsApplicationService, configuration_service_1.ConfigurationService, context_service_1.ContextService])
], DecoratorsManager);
//# sourceMappingURL=decorators-service.js.map