UNPKG

nakedobjects.spa

Version:

Single Page Application client for a Naked Objects application.

247 lines 12 kB
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