nakedobjects.spa
Version:
Single Page Application client for a Naked Objects application.
184 lines • 9.26 kB
JavaScript
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