nakedobjects.spa
Version:
Single Page Application client for a Naked Objects application.
247 lines • 12 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
import * as Ro from './models';
import * as Msg from './user-messages';
import { Injectable } from '@angular/core';
import { CollectionViewState } from './route-data';
import { ContextService } from './context.service';
import { ConfigService } from './config.service';
import { InteractionMode } from './route-data';
import { MaskService } from './mask.service';
import { getParametersAndCurrentValue } from './cicero-commands/command-result';
import { ErrorService } from './error.service';
import filter from 'lodash/filter';
import keys from 'lodash/keys';
import some from 'lodash/some';
import reduce from 'lodash/reduce';
import invert from 'lodash/invert';
import { Result } from './cicero-commands/result';
var CiceroRendererService = (function () {
function CiceroRendererService(context, configService, error, mask) {
this.context = context;
this.configService = configService;
this.error = error;
this.mask = mask;
this.returnResult = function (input, output) { return Promise.resolve(Result.create(input, output)); };
this.keySeparator = configService.config.keySeparator;
}
//TODO: remove renderer.
CiceroRendererService.prototype.renderHome = function (routeData) {
if (routeData.menuId) {
return this.renderOpenMenu(routeData);
}
else {
return this.returnResult("", Msg.welcomeMessage);
}
};
;
CiceroRendererService.prototype.renderObject = function (routeData) {
var _this = this;
var oid = Ro.ObjectIdWrapper.fromObjectId(routeData.objectId, this.keySeparator);
return this.context.getObject(1, oid, routeData.interactionMode) //TODO: move following code out into a ICireroRenderers service with methods for rendering each context type
.then(function (obj) {
var openCollIds = _this.openCollectionIds(routeData);
if (some(openCollIds)) {
return _this.renderOpenCollection(openCollIds[0], obj);
}
else if (obj.isTransient()) {
return _this.renderTransientObject(routeData, obj);
}
else if (routeData.interactionMode === InteractionMode.Edit ||
routeData.interactionMode === InteractionMode.Form) {
return _this.renderForm(routeData, obj);
}
else {
return _this.renderObjectTitleAndDialogIfOpen(routeData, obj);
}
});
};
;
CiceroRendererService.prototype.renderList = function (routeData) {
var _this = this;
var listPromise = this.context.getListFromMenu(routeData, routeData.page, routeData.pageSize);
return listPromise.
then(function (list) {
return _this.context.getMenu(routeData.menuId).
then(function (menu) {
var count = list.value().length;
var description = _this.getListDescription(list, count);
var actionMember = menu.actionMember(routeData.actionId);
var actionName = actionMember.extensions().friendlyName();
var output = "Result from " + actionName + ":\n" + description;
return _this.returnResult("", output);
});
});
};
;
CiceroRendererService.prototype.renderError = function (message) {
var err = this.context.getError();
var errRep = err ? err.error : null;
var msg = (errRep instanceof Ro.ErrorRepresentation) ? errRep.message() : "Unknown";
return this.returnResult("", "Sorry, an application error has occurred. " + msg);
};
;
CiceroRendererService.prototype.getListDescription = function (list, count) {
var pagination = list.pagination();
if (pagination) {
var numPages = pagination.numPages;
if (numPages > 1) {
var page = pagination.page;
var totalCount = pagination.totalCount;
return "Page " + page + " of " + numPages + " containing " + count + " of " + totalCount + " items";
}
}
return count + " items";
};
//TODO functions become 'private'
//Returns collection Ids for any collections on an object that are currently in List or Table mode
CiceroRendererService.prototype.renderOpenCollection = function (collId, obj) {
var coll = obj.collectionMember(collId);
var output = this.renderCollectionNameAndSize(coll) + "(" + Msg.collection + " " + Msg.on + " " + Ro.typePlusTitle(obj) + ")";
return this.returnResult("", output);
};
CiceroRendererService.prototype.renderTransientObject = function (routeData, obj) {
var output = Msg.unsaved + " " + obj.extensions().friendlyName() + "\n" + this.renderModifiedProperties(obj, routeData, this.mask);
return this.returnResult("", output);
};
CiceroRendererService.prototype.renderForm = function (routeData, obj) {
var _this = this;
var prefix = Msg.editing + " " + Ro.typePlusTitle(obj) + "\n";
if (routeData.dialogId) {
return this.context.getInvokableAction(obj.actionMember(routeData.dialogId)).
then(function (invokableAction) {
var output = "" + prefix + _this.renderActionDialog(invokableAction, routeData, _this.mask);
return _this.returnResult("", output);
});
}
else {
var output = "" + prefix + this.renderModifiedProperties(obj, routeData, this.mask);
return this.returnResult("", output);
}
};
CiceroRendererService.prototype.renderObjectTitleAndDialogIfOpen = function (routeData, obj) {
var _this = this;
var prefix = Ro.typePlusTitle(obj) + "\n";
if (routeData.dialogId) {
return this.context.getInvokableAction(obj.actionMember(routeData.dialogId)).
then(function (invokableAction) {
var output = "" + prefix + _this.renderActionDialog(invokableAction, routeData, _this.mask);
return _this.returnResult("", output);
});
}
else {
return this.returnResult("", prefix);
}
};
CiceroRendererService.prototype.renderOpenMenu = function (routeData) {
var _this = this;
return this.context.getMenu(routeData.menuId).then(function (menu) {
var prefix = Msg.menuTitle(menu.title());
if (routeData.dialogId) {
return _this.context.getInvokableAction(menu.actionMember(routeData.dialogId)).then(function (invokableAction) {
var output = prefix + "\n" + _this.renderActionDialog(invokableAction, routeData, _this.mask);
return _this.returnResult("", output);
});
}
else {
return _this.returnResult("", prefix);
}
});
};
CiceroRendererService.prototype.renderActionDialog = function (invokable, routeData, mask) {
var _this = this;
var actionName = invokable.extensions().friendlyName();
var prefix = "Action dialog: " + actionName + "\n";
var parms = getParametersAndCurrentValue(invokable, this.context);
return reduce(parms, function (s, value, paramId) {
var param = invokable.parameters()[paramId];
return "" + s + Ro.friendlyNameForParam(invokable, paramId) + ": " + _this.renderFieldValue(param, value, mask) + "\n";
}, prefix);
};
CiceroRendererService.prototype.renderModifiedProperties = function (obj, routeData, mask) {
var _this = this;
var props = this.context.getObjectCachedValues(obj.id());
if (keys(props).length > 0) {
var prefix = Msg.modifiedProperties + ":\n";
return reduce(props, function (s, value, propId) {
var pm = obj.propertyMember(propId);
return "" + s + Ro.friendlyNameForProperty(obj, propId) + ": " + _this.renderFieldValue(pm, value, mask) + "\n";
}, prefix);
}
return "";
};
CiceroRendererService.prototype.renderSingleChoice = function (field, value) {
//This is to handle an enum: render it as text, not a number:
var inverted = invert(field.choices());
return inverted[value.toValueString()];
};
CiceroRendererService.prototype.renderMultipleChoicesCommaSeparated = function (field, value) {
//This is to handle an enum: render it as text, not a number:
var inverted = invert(field.choices());
var values = value.list();
return reduce(values, function (s, v) { return "" + s + inverted[v.toValueString()] + ","; }, "");
};
// helpers
CiceroRendererService.prototype.renderCollectionNameAndSize = function (coll) {
var prefix = "" + coll.extensions().friendlyName();
var size = coll.size() || 0;
switch (size) {
case 0:
return prefix + ": " + Msg.empty + "\n";
case 1:
return prefix + ": 1 " + Msg.item + "\n";
default:
return prefix + ": " + Msg.numberOfItems(size) + "\n";
}
};
CiceroRendererService.prototype.openCollectionIds = function (routeData) {
return filter(keys(routeData.collections), function (k) { return routeData.collections[k] !== CollectionViewState.Summary; });
};
//Handles empty values, and also enum conversion
CiceroRendererService.prototype.renderFieldValue = function (field, value, mask) {
if (!field.isScalar()) {
return value.isNull() ? Msg.empty : value.toString();
}
//Rest is for scalar fields only:
if (value.toString()) {
if (field.entryType() === Ro.EntryType.Choices) {
return this.renderSingleChoice(field, value);
}
else if (field.entryType() === Ro.EntryType.MultipleChoices && value.isList()) {
return this.renderMultipleChoicesCommaSeparated(field, value);
}
}
var properScalarValue;
if (Ro.isDateOrDateTime(field)) {
properScalarValue = Ro.toUtcDate(value);
}
else {
properScalarValue = value.scalar();
}
if (properScalarValue === "" || properScalarValue == null) {
return Msg.empty;
}
else {
var remoteMask = field.extensions().mask();
var format = field.extensions().format();
return mask.toLocalFilter(remoteMask, format).filter(properScalarValue);
}
};
return CiceroRendererService;
}());
CiceroRendererService = __decorate([
Injectable(),
__metadata("design:paramtypes", [ContextService,
ConfigService,
ErrorService,
MaskService])
], CiceroRendererService);
export { CiceroRendererService };
//# sourceMappingURL=cicero-renderer.service.js.map