@nakedobjects/gemini
Version:
Single Page Application client for a Naked Objects application.
69 lines • 10.3 kB
JavaScript
import forEach from 'lodash-es/forEach';
import map from 'lodash-es/map';
import mapValues from 'lodash-es/mapValues';
import zipObject from 'lodash-es/zipObject';
export function safeUnsubscribe(sub) {
if (sub) {
sub.unsubscribe();
}
}
function isFocusable(nativeElement) {
return !!(nativeElement && nativeElement instanceof Object && 'focus' in nativeElement);
}
function safeFocus(nativeElement) {
if (isFocusable(nativeElement)) {
nativeElement.focus();
}
}
export function focus(element) {
setTimeout(() => safeFocus(element?.nativeElement));
return true;
}
export function createForm(dialog, formBuilder) {
const pps = dialog.parameters;
const parms = zipObject(map(pps, p => p.id), map(pps, p => p));
const controls = mapValues(parms, p => [p.getValueForControl(), (a) => p.validator(a)]);
const form = formBuilder.group(controls);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const sub = form.valueChanges.subscribe((data) => {
// cache parm values
forEach(data, (v, k) => parms[k].setValueFromControl(v));
dialog.setParms();
});
return { form: form, dialog: dialog, parms: parms, sub: sub };
}
export function accept(droppableVm, component, draggableVm) {
if (draggableVm) {
draggableVm.canDropOn(droppableVm.returnType).
then(canDrop => component.canDrop = canDrop).
catch(() => component.canDrop = false);
return true;
}
return false;
}
export function dropOn(draggableVm, droppable, component) {
if (component.canDrop) {
droppable.drop(draggableVm)
.then(() => {
component.control.setValue(droppable.selectedChoice);
});
}
}
export function paste(event, droppable, component, get, clear) {
const vKeyCode = 86;
const deleteKeyCode = 46;
if (event && (event.keyCode === vKeyCode && event.ctrlKey)) {
const cvm = get();
if (cvm) {
droppable.drop(cvm)
.then(() => {
component.control.setValue(droppable.selectedChoice);
});
event.preventDefault();
}
}
if (event && event.keyCode === deleteKeyCode) {
clear();
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy1jb21wb25lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZ2VtaW5pL3NyYy9oZWxwZXJzLWNvbXBvbmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxPQUFPLE1BQU0sbUJBQW1CLENBQUM7QUFDeEMsT0FBTyxHQUFHLE1BQU0sZUFBZSxDQUFDO0FBQ2hDLE9BQU8sU0FBUyxNQUFNLHFCQUFxQixDQUFDO0FBQzVDLE9BQU8sU0FBUyxNQUFNLHFCQUFxQixDQUFDO0FBRzVDLE1BQU0sVUFBVSxlQUFlLENBQUMsR0FBbUI7SUFDL0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNOLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN0QixDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLGFBQXNCO0lBQ3ZDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLGFBQWEsWUFBWSxNQUFNLElBQUksT0FBTyxJQUFJLGFBQWEsQ0FBQyxDQUFDO0FBQzVGLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxhQUFzQjtJQUNyQyxJQUFJLFdBQVcsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQzdCLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQixDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxLQUFLLENBQUMsT0FBb0I7SUFDdEMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUNwRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxNQUF1QixFQUFFLFdBQXdCO0lBQ3hFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7SUFDOUIsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FB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SyxFQUFFLENBQUM7SUFDWixDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERpYWxvZ1ZpZXdNb2RlbCwgRmllbGRWaWV3TW9kZWwsIElEcmFnZ2FibGVWaWV3TW9kZWwsIFBhcmFtZXRlclZpZXdNb2RlbCB9IGZyb20gJ0BuYWtlZG9iamVjdHMvdmlldy1tb2RlbHMnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgZm9yRWFjaCBmcm9tICdsb2Rhc2gtZXMvZm9yRWFjaCc7XG5pbXBvcnQgbWFwIGZyb20gJ2xvZGFzaC1lcy9tYXAnO1xuaW1wb3J0IG1hcFZhbHVlcyBmcm9tICdsb2Rhc2gtZXMvbWFwVmFsdWVzJztcbmltcG9ydCB6aXBPYmplY3QgZnJvbSAnbG9kYXNoLWVzL3ppcE9iamVjdCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25MaWtlIGFzIElTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVVbnN1YnNjcmliZShzdWI/OiBJU3Vic2NyaXB0aW9uKSB7XG4gICAgaWYgKHN1Yikge1xuICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzRm9jdXNhYmxlKG5hdGl2ZUVsZW1lbnQ6IHVua25vd24pOiBuYXRpdmVFbGVtZW50IGlzIHsgZm9jdXM6ICgpID0+IHZvaWQgfSB7XG4gICAgcmV0dXJuICEhKG5hdGl2ZUVsZW1lbnQgJiYgbmF0aXZlRWxlbWVudCBpbnN0YW5jZW9mIE9iamVjdCAmJiAnZm9jdXMnIGluIG5hdGl2ZUVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBzYWZlRm9jdXMobmF0aXZlRWxlbWVudDogdW5rbm93bikge1xuICAgIGlmIChpc0ZvY3VzYWJsZShuYXRpdmVFbGVtZW50KSkge1xuICAgICAgICBuYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9jdXMoZWxlbWVudD86IEVsZW1lbnRSZWYpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNhZmVGb2N1cyhlbGVtZW50Py5uYXRpdmVFbGVtZW50KSk7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtKGRpYWxvZzogRGlhbG9nVmlld01vZGVsLCBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpOiB7IGZvcm06IEZvcm1Hcm91cCwgZGlhbG9nOiBEaWFsb2dWaWV3TW9kZWwsIHBhcm1zOiBEaWN0aW9uYXJ5PFBhcmFtZXRlclZpZXdNb2RlbD4sIHN1YjogSVN1YnNjcmlwdGlvbiB9IHtcbiAgICBjb25zdCBwcHMgPSBkaWFsb2cucGFyYW1ldGVycztcbiAgICBjb25zdCBwYXJtcyA9IHppcE9iamVjdChtYXAocHBzLCBwID0+IHAuaWQpLCBtYXAocHBzLCBwID0+IHApKSBhcyBEaWN0aW9uYXJ5PFBhcmFtZXRlclZpZXdNb2RlbD47XG4gICAgY29uc3QgY29udHJvbHMgPSBtYXBWYWx1ZXMocGFybXMsIHAgPT4gW3AuZ2V0VmFsdWVGb3JDb250cm9sKCksIChhOiBBYnN0cmFjdENvbnRyb2wpID0+IHAudmFsaWRhdG9yKGEpXSk7XG4gICAgY29uc3QgZm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKGNvbnRyb2xzKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3Qgc3ViID0gZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChkYXRhIDogYW55KSA9PiB7XG4gICAgICAgIC8vIGNhY2hlIHBhcm0gdmFsdWVzXG4gICAgICAgIGZvckVhY2goZGF0YSwgKHYsIGspID0+IHBhcm1zW2shXS5zZXRWYWx1ZUZyb21Db250cm9sKHYpKTtcbiAgICAgICAgZGlhbG9nLnNldFBhcm1zKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBmb3JtOiBmb3JtLCBkaWFsb2c6IGRpYWxvZywgcGFybXM6IHBhcm1zLCBzdWI6IHN1YiB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWNjZXB0KGRyb3BwYWJsZVZtOiBGaWVsZFZpZXdNb2RlbCwgY29tcG9uZW50OiB7IGNhbkRyb3A6IGJvb2xlYW4gfSwgZHJhZ2dhYmxlVm06IElEcmFnZ2FibGVWaWV3TW9kZWwpIHtcbiAgICBpZiAoZHJhZ2dhYmxlVm0pIHtcbiAgICAgICAgZHJhZ2dhYmxlVm0uY2FuRHJvcE9uKGRyb3BwYWJsZVZtLnJldHVyblR5cGUpLlxuICAgICAgICAgICAgdGhlbihjYW5Ecm9wID0+IGNvbXBvbmVudC5jYW5Ecm9wID0gY2FuRHJvcCkuXG4gICAgICAgICAgICBjYXRjaCgoKSA9PiBjb21wb25lbnQuY2FuRHJvcCA9IGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRyb3BPbihkcmFnZ2FibGVWbTogSURyYWdnYWJsZVZpZXdNb2RlbCwgZHJvcHBhYmxlOiBGaWVsZFZpZXdNb2RlbCwgY29tcG9uZW50OiB7IGNhbkRyb3A6IGJvb2xlYW4sIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB9KSB7XG4gICAgaWYgKGNvbXBvbmVudC5jYW5Ecm9wKSB7XG4gICAgICAgIGRyb3BwYWJsZS5kcm9wKGRyYWdnYWJsZVZtKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5jb250cm9sLnNldFZhbHVlKGRyb3BwYWJsZS5zZWxlY3RlZENob2ljZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXN0ZShldmVudDogS2V5Ym9hcmRFdmVudCwgZHJvcHBhYmxlOiBGaWVsZFZpZXdNb2RlbCwgY29tcG9uZW50OiB7IGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB9LCBnZXQ6ICgpID0+IElEcmFnZ2FibGVWaWV3TW9kZWwgfCBudWxsLCBjbGVhcjogKCkgPT4gdm9pZCkge1xuICAgIGNvbnN0IHZLZXlDb2RlID0gODY7XG4gICAgY29uc3QgZGVsZXRlS2V5Q29kZSA9IDQ2O1xuICAgIGlmIChldmVudCAmJiAoZXZlbnQua2V5Q29kZSA9PT0gdktleUNvZGUgJiYgZXZlbnQuY3RybEtleSkpIHtcbiAgICAgICAgY29uc3QgY3ZtID0gZ2V0KCk7XG5cbiAgICAgICAgaWYgKGN2bSkge1xuICAgICAgICAgICAgZHJvcHBhYmxlLmRyb3AoY3ZtKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmNvbnRyb2wuc2V0VmFsdWUoZHJvcHBhYmxlLnNlbGVjdGVkQ2hvaWNlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmtleUNvZGUgPT09IGRlbGV0ZUtleUNvZGUpIHtcbiAgICAgICAgY2xlYXIoKTtcbiAgICB9XG59XG4iXX0=