UNPKG

nakedobjects.spa

Version:

Single Page Application client for a Naked Objects application.

184 lines 9.26 kB
var __extends = (this && this.__extends) || (function () { var extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); import { FieldViewModel } from './field-view-model'; import { ChoiceViewModel } from './choice-view-model'; import * as Models from '../models'; import * as Msg from '../user-messages'; import filter from 'lodash/filter'; import find from 'lodash/find'; import map from 'lodash/map'; import some from 'lodash/some'; var ParameterViewModel = (function (_super) { __extends(ParameterViewModel, _super); function ParameterViewModel(parameterRep, onPaneId, color, error, maskService, previousValue, viewModelFactory, context, configService) { var _this = _super.call(this, parameterRep, color, error, context, configService, onPaneId, parameterRep.isScalar(), parameterRep.id(), parameterRep.isCollectionContributed(), parameterRep.entryType()) || this; _this.parameterRep = parameterRep; _this.maskService = maskService; _this.previousValue = previousValue; _this.viewModelFactory = viewModelFactory; _this.setAsRow = function (i) { return _this.paneArgId = "" + _this.argId + i; }; _this.dflt = parameterRep.default().toString(); _this.hasValue = !!_this.dflt; var fieldEntryType = _this.entryType; if (fieldEntryType === Models.EntryType.Choices || fieldEntryType === Models.EntryType.MultipleChoices) { _this.setupParameterChoices(); } if (fieldEntryType === Models.EntryType.AutoComplete) { _this.setupParameterAutocomplete(); } if (fieldEntryType === Models.EntryType.FreeForm && _this.type === "ref") { _this.setupParameterFreeformReference(); } if (fieldEntryType === Models.EntryType.ConditionalChoices || fieldEntryType === Models.EntryType.MultipleConditionalChoices) { _this.setupParameterConditionalChoices(); } if (fieldEntryType !== Models.EntryType.FreeForm || _this.isCollectionContributed) { _this.setupParameterSelectedChoices(); } else { _this.setupParameterSelectedValue(); } if (parameterRep.isScalar()) { var remoteMask = parameterRep.extensions().mask(); var localFilter = _this.maskService.toLocalFilter(remoteMask, parameterRep.extensions().format()); _this.localFilter = localFilter; _this.formattedValue = localFilter.filter(_this.value ? _this.value.toString() : _this.value); } _this.description = _this.getRequiredIndicator() + _this.description; return _this; } ParameterViewModel.prototype.setupParameterChoices = function () { this.setupChoices(this.parameterRep.choices()); }; ParameterViewModel.prototype.setupParameterAutocomplete = function () { var parmRep = this.parameterRep; this.setupAutocomplete(parmRep, function () { return ({}); }); }; ParameterViewModel.prototype.setupParameterFreeformReference = function () { var parmRep = this.parameterRep; this.description = this.description || Msg.dropPrompt; var val = this.previousValue && !this.previousValue.isNull() ? this.previousValue : parmRep.default(); if (!val.isNull() && val.isReference()) { var link = val.link(); this.reference = link.href(); this.selectedChoice = new ChoiceViewModel(val, this.id, link.title()); } }; ParameterViewModel.prototype.setupParameterConditionalChoices = function () { var parmRep = this.parameterRep; this.setupConditionalChoices(parmRep); }; ParameterViewModel.prototype.setupParameterSelectedChoices = function () { var parmRep = this.parameterRep; var fieldEntryType = this.entryType; var parmViewModel = this; function setCurrentChoices(vals) { var list = vals.list(); var choicesToSet = map(list, function (val) { return new ChoiceViewModel(val, parmViewModel.id, val.link() ? val.link().title() : undefined); }); if (fieldEntryType === Models.EntryType.MultipleChoices) { parmViewModel.selectedMultiChoices = filter(parmViewModel.choices, function (c) { return some(choicesToSet, function (choiceToSet) { return c.valuesEqual(choiceToSet); }); }); } else { parmViewModel.selectedMultiChoices = choicesToSet; } } function setCurrentChoice(val) { var choiceToSet = new ChoiceViewModel(val, parmViewModel.id, val.link() ? val.link().title() : undefined); if (fieldEntryType === Models.EntryType.Choices) { var choices = parmViewModel.choices; parmViewModel.selectedChoice = find(choices, function (c) { return c.valuesEqual(choiceToSet); }) || null; } else { if (!parmViewModel.selectedChoice || parmViewModel.selectedChoice.getValue().toValueString() !== choiceToSet.getValue().toValueString()) { parmViewModel.selectedChoice = choiceToSet; } } } parmViewModel.refresh = function (newValue) { if (newValue || parmViewModel.dflt) { var toSet = newValue || parmRep.default(); if (fieldEntryType === Models.EntryType.MultipleChoices || fieldEntryType === Models.EntryType.MultipleConditionalChoices || parmViewModel.isCollectionContributed) { setCurrentChoices(toSet); } else { setCurrentChoice(toSet); } } }; parmViewModel.refresh(this.previousValue); }; ParameterViewModel.prototype.toTriStateBoolean = function (valueToSet) { // looks stupid but note type checking if (valueToSet === true || valueToSet === "true") { return true; } if (valueToSet === false || valueToSet === "false") { return false; } return null; }; ParameterViewModel.prototype.setupParameterSelectedValue = function () { var _this = this; var parmRep = this.parameterRep; var returnType = parmRep.extensions().returnType(); this.refresh = function (newValue) { if (returnType === "boolean") { var valueToSet = (newValue ? newValue.toValueString() : null) || parmRep.default().scalar(); var bValueToSet = _this.toTriStateBoolean(valueToSet); _this.value = bValueToSet; } else if (Models.isDateOrDateTime(parmRep)) { var date = Models.toUtcDate(newValue || new Models.Value(_this.dflt)); _this.value = date ? Models.toDateString(date) : ""; } else if (Models.isTime(parmRep)) { var time = Models.toTime(newValue || new Models.Value(_this.dflt)); _this.value = time ? Models.toTimeString(time) : ""; } else { _this.value = (newValue ? newValue.toString() : null) || _this.dflt || ""; } }; this.refresh(this.previousValue); }; ParameterViewModel.prototype.update = function () { _super.prototype.update.call(this); switch (this.entryType) { case (Models.EntryType.FreeForm): if (this.type === "scalar") { if (this.localFilter) { this.formattedValue = this.value ? this.localFilter.filter(this.value) : ""; } else { this.formattedValue = this.value ? this.value.toString() : ""; } break; } // fall through case (Models.EntryType.AutoComplete): case (Models.EntryType.Choices): case (Models.EntryType.ConditionalChoices): this.formattedValue = this.selectedChoice ? this.selectedChoice.toString() : ""; break; case (Models.EntryType.MultipleChoices): case (Models.EntryType.MultipleConditionalChoices): var count = !this.selectedMultiChoices ? 0 : this.selectedMultiChoices.length; this.formattedValue = count + " selected"; break; default: this.formattedValue = this.value ? this.value.toString() : ""; } }; return ParameterViewModel; }(FieldViewModel)); export { ParameterViewModel }; //# sourceMappingURL=parameter-view-model.js.map