nakedobjects.spa
Version:
Single Page Application client for a Naked Objects application.
63 lines • 2.31 kB
JavaScript
import forEach from 'lodash/forEach';
import map from 'lodash/map';
import zipObject from 'lodash/zipObject';
import mapValues from 'lodash/mapValues';
export function safeUnsubscribe(sub) {
if (sub) {
sub.unsubscribe();
}
}
export function focus(renderer, element) {
setTimeout(function () { return renderer.invokeElementMethod(element.nativeElement, "focus"); });
return true;
}
export function createForm(dialog, formBuilder) {
var pps = dialog.parameters;
var parms = zipObject(map(pps, function (p) { return p.id; }), map(pps, function (p) { return p; }));
var controls = mapValues(parms, function (p) { return [p.getValueForControl(), function (a) { return p.validator(a); }]; });
var form = formBuilder.group(controls);
var sub = form.valueChanges.subscribe(function (data) {
// cache parm values
forEach(data, function (v, k) { return parms[k].setValueFromControl(v); });
dialog.setParms();
});
return { form: form, dialog: dialog, parms: parms, sub: sub };
}
export function accept(droppableVm, component) {
return function (draggableVm) {
if (draggableVm) {
draggableVm.canDropOn(droppableVm.returnType).
then(function (canDrop) { return component.canDrop = canDrop; }).
catch(function () { return component.canDrop = false; });
return true;
}
return false;
};
}
;
export function dropOn(draggableVm, droppable, component) {
if (component.canDrop) {
droppable.drop(draggableVm)
.then(function (success) {
component.control.setValue(droppable.selectedChoice);
});
}
}
export function paste(event, droppable, component, get, clear) {
var vKeyCode = 86;
var deleteKeyCode = 46;
if (event && (event.keyCode === vKeyCode && event.ctrlKey)) {
var cvm = get();
if (cvm) {
droppable.drop(cvm)
.then(function (success) {
component.control.setValue(droppable.selectedChoice);
});
event.preventDefault();
}
}
if (event && event.keyCode === deleteKeyCode) {
clear();
}
}
//# sourceMappingURL=helpers-components.js.map