UNPKG

@nakedobjects/gemini

Version:

Single Page Application client for a Naked Objects application.

115 lines 15.9 kB
import { ViewChild } from '@angular/core'; import { Component, EventEmitter, Input } from '@angular/core'; import { PropertyViewModel } from '@nakedobjects/view-models'; import { DatePickerOptions } from '../date-picker/date-picker.component'; import { fixedDateFormat } from '@nakedobjects/services'; import * as i0 from "@angular/core"; import * as i1 from "@nakedobjects/services"; import * as i2 from "@angular/forms"; import * as i3 from "../date-picker/date-picker.component"; export class DatePickerFacadeComponent { datePickerOptions = new DatePickerOptions(); constructor(configService) { this.inputEvents = new EventEmitter(); this.datePickerOptions.format = configService.config.dateInputFormat; } control; form; fieldViewModel; set model(m) { this.fieldViewModel = m; this.datePickerOptions.class = m instanceof PropertyViewModel ? 'datepicker-property' : 'datepicker-parameter'; } get model() { return this.fieldViewModel; } datepicker; inputEvents; get id() { return this.model.paneArgId; } get description() { return this.model.description; } setValueIfChanged(dateModel) { const oldValue = this.control.value; const newValue = dateModel ? dateModel.toFormat(fixedDateFormat) : ''; if (newValue !== oldValue) { this.model.resetMessage(); this.model.clientValid = true; this.control.setValue(newValue); } } handleDefaultEvent(data) { if (this.control) { if (data === 'closed') { const dateModel = this.datepicker?.dateModel ?? null; this.setValueIfChanged(dateModel); } } } handleDateChangedEvent(dateModel) { if (this.control) { this.setValueIfChanged(dateModel); } } handleDateClearedEvent() { if (this.control) { this.model.resetMessage(); this.model.clientValid = true; this.control.setValue(''); } } handleInvalidDateEvent(_) { if (this.control) { this.model.setInvalidDate(); this.model.clientValid = false; this.control.setErrors({ [this.model.getMessage()]: true }); } } handleEvents(e) { switch (e.type) { case ('default'): this.handleDefaultEvent(e.data); break; case ('dateChanged'): this.handleDateChangedEvent(e.data); break; case ('dateCleared'): this.handleDateClearedEvent(); break; case ('dateInvalid'): this.handleInvalidDateEvent(e.data); break; default: // ignore } } ngAfterViewInit() { const existingValue = this.control && this.control.value; if (existingValue && (existingValue instanceof String || typeof existingValue === 'string')) { setTimeout(() => this.inputEvents.emit({ type: 'setDate', data: existingValue, })); } } focus() { return this.datepicker?.focus(); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatePickerFacadeComponent, deps: [{ token: i1.ConfigService }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DatePickerFacadeComponent, selector: "nof-date-picker-facade", inputs: { control: "control", form: "form", model: "model" }, viewQueries: [{ propertyName: "datepicker", first: true, predicate: ["dp"], descendants: true }], ngImport: i0, template: "<div [formGroup]=\"form\">\n <nof-date-picker #dp [id]=\"id\" [inputEvents]=\"inputEvents\" (outputEvents)=\"handleEvents($event)\" [options]=\"datePickerOptions\" [description]=\"description\"></nof-date-picker >\n</div> ", styles: [""], dependencies: [{ kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.DatePickerComponent, selector: "nof-date-picker", inputs: ["options", "inputEvents", "id", "description"], outputs: ["outputEvents"] }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatePickerFacadeComponent, decorators: [{ type: Component, args: [{ selector: 'nof-date-picker-facade', template: "<div [formGroup]=\"form\">\n <nof-date-picker #dp [id]=\"id\" [inputEvents]=\"inputEvents\" (outputEvents)=\"handleEvents($event)\" [options]=\"datePickerOptions\" [description]=\"description\"></nof-date-picker >\n</div> " }] }], ctorParameters: () => [{ type: i1.ConfigService }], propDecorators: { control: [{ type: Input, args: [{ required: true }] }], form: [{ type: Input, args: [{ required: true }] }], model: [{ type: Input, args: [{ required: true }] }], datepicker: [{ type: ViewChild, args: ['dp', { static: false }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXItZmFjYWRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2dlbWluaS9zcmMvZGF0ZS1waWNrZXItZmFjYWRlL2RhdGUtcGlja2VyLWZhY2FkZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9nZW1pbmkvc3JjL2RhdGUtcGlja2VyLWZhY2FkZS9kYXRlLXBpY2tlci1mYWNhZGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9ELE9BQU8sRUFBa0IsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU5RSxPQUFPLEVBQXVCLGlCQUFpQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFOUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7OztBQU96RCxNQUFNLE9BQU8seUJBQXlCO0lBRWxDLGlCQUFpQixHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztJQUU1QyxZQUFZLGFBQTRCO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQXlCLENBQUM7UUFDN0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztJQUN6RSxDQUFDO0lBR0QsT0FBTyxDQUFtQjtJQUcxQixJQUFJLENBQWE7SUFFVCxjQUFjLENBQWtCO0lBRXhDLElBQ0ksS0FBSyxDQUFDLENBQWlCO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxZQUFZLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxD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QkFBc0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLE1BQU07WUFFVixRQUFRLENBQUMsU0FBUztRQUN0QixDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDWCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3pELElBQUksYUFBYSxJQUFJLENBQUMsYUFBYSxZQUFZLE1BQU0sSUFBSSxPQUFPLGFBQWEsS0FBSyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzFGLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGFBQXVCLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakcsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLO1FBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3BDLENBQUM7dUdBOUdRLHlCQUF5QjsyRkFBekIseUJBQXlCLDhOQ2Z0QyxzUEFFeUI7OzJGRGFaLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDSSx3QkFBd0I7a0ZBY2xDLE9BQU87c0JBRE4sS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBSXZCLElBQUk7c0JBREgsS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBTW5CLEtBQUs7c0JBRFIsS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBV3ZCLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxJQUFJLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BuYWtlZG9iamVjdHMvc2VydmljZXMnO1xuaW1wb3J0IHsgRmllbGRWaWV3TW9kZWwsIFByb3BlcnR5Vmlld01vZGVsIH0gZnJvbSAnQG5ha2Vkb2JqZWN0cy92aWV3LW1vZGVscyc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQsIERhdGVQaWNrZXJPcHRpb25zIH0gZnJvbSAnLi4vZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElEYXRlUGlja2VySW5wdXRFdmVudCwgSURhdGVQaWNrZXJPdXRwdXRFdmVudCB9IGZyb20gJy4uL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBmaXhlZERhdGVGb3JtYXQgfSBmcm9tICdAbmFrZWRvYmplY3RzL3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdub2YtZGF0ZS1waWNrZXItZmFjYWRlJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2RhdGUtcGlja2VyLWZhY2FkZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ2RhdGUtcGlja2VyLWZhY2FkZS5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlckZhY2FkZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXG4gICAgZGF0ZVBpY2tlck9wdGlvbnMgPSBuZXcgRGF0ZVBpY2tlck9wdGlvbnMoKTtcblxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5pbnB1dEV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8SURhdGVQaWNrZXJJbnB1dEV2ZW50PigpO1xuICAgICAgICB0aGlzLmRhdGVQaWNrZXJPcHRpb25zLmZvcm1hdCA9IGNvbmZpZ1NlcnZpY2UuY29uZmlnLmRhdGVJbnB1dEZvcm1hdDtcbiAgICB9XG5cbiAgICBASW5wdXQoe3JlcXVpcmVkOiB0cnVlfSlcbiAgICBjb250cm9sITogQWJzdHJhY3RDb250cm9sO1xuXG4gICAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pXG4gICAgZm9ybSE6IEZvcm1Hcm91cDtcblxuICAgIHByaXZhdGUgZmllbGRWaWV3TW9kZWwhOiBGaWVsZFZpZXdNb2RlbDtcblxuICAgIEBJbnB1dCh7cmVxdWlyZWQ6IHRydWV9KVxuICAgIHNldCBtb2RlbChtOiBGaWVsZFZpZXdNb2RlbCkge1xuICAgICAgICB0aGlzLmZpZWxkVmlld01vZGVsID0gbTtcbiAgICAgICAgdGhpcy5kYXRlUGlja2VyT3B0aW9ucy5jbGFzcyA9IG0gaW5zdGFuY2VvZiBQcm9wZXJ0eVZpZXdNb2RlbCA/ICdkYXRlcGlja2VyLXByb3BlcnR5JyA6ICdkYXRlcGlja2VyLXBhcmFtZXRlcic7XG4gICAgfVxuXG4gICAgZ2V0IG1vZGVsKCk6IEZpZWxkVmlld01vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGRWaWV3TW9kZWw7XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZCgnZHAnLCB7c3RhdGljOiBmYWxzZX0pXG4gICAgZGF0ZXBpY2tlcj86IERhdGVQaWNrZXJDb21wb25lbnQ7XG5cbiAgICBpbnB1dEV2ZW50czogRXZlbnRFbWl0dGVyPElEYXRlUGlja2VySW5wdXRFdmVudD47XG5cbiAgICBnZXQgaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLnBhbmVBcmdJZDtcbiAgICB9XG5cbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIHNldFZhbHVlSWZDaGFuZ2VkKGRhdGVNb2RlbDogRGF0ZVRpbWUgfCBudWxsKSB7XG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5jb250cm9sLnZhbHVlO1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGRhdGVNb2RlbCA/IGRhdGVNb2RlbC50b0Zvcm1hdChmaXhlZERhdGVGb3JtYXQpIDogJyc7XG5cbiAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5yZXNldE1lc3NhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuY2xpZW50VmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZURlZmF1bHRFdmVudChkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgaWYgKGRhdGEgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZU1vZGVsID0gdGhpcy5kYXRlcGlja2VyPy5kYXRlTW9kZWwgPz8gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlSWZDaGFuZ2VkKGRhdGVNb2RlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVEYXRlQ2hhbmdlZEV2ZW50KGRhdGVNb2RlbDogRGF0ZVRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUlmQ2hhbmdlZChkYXRlTW9kZWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlRGF0ZUNsZWFyZWRFdmVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5yZXNldE1lc3NhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuY2xpZW50VmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUludmFsaWREYXRlRXZlbnQoXzogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0SW52YWxpZERhdGUoKTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuY2xpZW50VmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRFcnJvcnMoeyBbdGhpcy5tb2RlbC5nZXRNZXNzYWdlKCldOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlRXZlbnRzKGU6IElEYXRlUGlja2VyT3V0cHV0RXZlbnQpIHtcbiAgICAgICAgc3dpdGNoIChlLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgKCdkZWZhdWx0Jyk6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVEZWZhdWx0RXZlbnQoZS5kYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgKCdkYXRlQ2hhbmdlZCcpOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRGF0ZUNoYW5nZWRFdmVudChlLmRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAoJ2RhdGVDbGVhcmVkJyk6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVEYXRlQ2xlYXJlZEV2ZW50KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICgnZGF0ZUludmFsaWQnKTpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUludmFsaWREYXRlRXZlbnQoZS5kYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDogLy8gaWdub3JlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nVmFsdWUgPSB0aGlzLmNvbnRyb2wgJiYgdGhpcy5jb250cm9sLnZhbHVlO1xuICAgICAgICBpZiAoZXhpc3RpbmdWYWx1ZSAmJiAoZXhpc3RpbmdWYWx1ZSBpbnN0YW5jZW9mIFN0cmluZyB8fCB0eXBlb2YgZXhpc3RpbmdWYWx1ZSA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5wdXRFdmVudHMuZW1pdCh7IHR5cGU6ICdzZXREYXRlJywgZGF0YTogZXhpc3RpbmdWYWx1ZSBhcyBzdHJpbmcsIH0pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvY3VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlcGlja2VyPy5mb2N1cygpO1xuICAgIH1cbn1cbiIsIjxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPG5vZi1kYXRlLXBpY2tlciAjZHAgW2lkXT1cImlkXCIgW2lucHV0RXZlbnRzXT1cImlucHV0RXZlbnRzXCIgKG91dHB1dEV2ZW50cyk9XCJoYW5kbGVFdmVudHMoJGV2ZW50KVwiICBbb3B0aW9uc109XCJkYXRlUGlja2VyT3B0aW9uc1wiIFtkZXNjcmlwdGlvbl09XCJkZXNjcmlwdGlvblwiPjwvbm9mLWRhdGUtcGlja2VyID5cbjwvZGl2PiAgICAgICAgICAgICAgICAgICAiXX0=