UNPKG

@nakedobjects/gemini

Version:

Single Page Application client for a Naked Objects application.

69 lines 10.3 kB
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=