]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/eg2/src/app/share/interval-input/interval-input.component.ts
LP1615805 No inputs after submit in patron search (AngularJS)
[Evergreen.git] / Open-ILS / src / eg2 / src / app / share / interval-input / interval-input.component.ts
1 /**
2  * <eg-interval-input [(ngModel)]="interval">
3  * </eg-interval-input>
4  */
5 import {Component, OnInit, Input, Output, ViewChild,
6     TemplateRef, EventEmitter, ElementRef, forwardRef} from '@angular/core';
7 import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';
8 import {Observable, of, Subject} from 'rxjs';
9 import {map, tap, reduce, mergeMap, mapTo, debounceTime, distinctUntilChanged, merge, filter} from 'rxjs/operators';
10
11 @Component({
12   selector: 'eg-interval-input',
13   templateUrl: './interval-input.component.html',
14   providers: [{
15     provide: NG_VALUE_ACCESSOR,
16     useExisting: forwardRef(() => IntervalInputComponent),
17     multi: true
18   }]
19 })
20 export class IntervalInputComponent implements ControlValueAccessor, OnInit {
21
22     @Input() initialValue: string;
23     @Output() onChange = new EventEmitter<string>();
24
25     period: string;
26     unit = 'days';
27
28     // Stub functions required by ControlValueAccessor
29     propagateChange = (_: any) => {};
30     propagateTouch = () => {};
31
32     ngOnInit() {
33         if (this.initialValue) {
34             this.writeValue(this.initialValue);
35         }
36     }
37
38     changeListener(): void {
39         this.propagateChange(this.period + ' ' + this.unit);
40         this.onChange.emit(this.period + ' ' + this.unit);
41     }
42
43     writeValue(value: string) {
44         if (value) {
45             this.period = value.split(' ')[0];
46             this.unit   = value.split(' ')[1];
47         }
48     }
49
50     registerOnChange(fn) {
51         this.propagateChange = fn;
52     }
53
54     registerOnTouched(fn) {
55         this.propagateTouch = fn;
56     }
57 }