]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/eg2/src/app/share/file-reader/file-reader.component.ts
LP#1850547: new Angular file-reader component
[Evergreen.git] / Open-ILS / src / eg2 / src / app / share / file-reader / file-reader.component.ts
1 /**
2  * <eg-file-reader [(ngModel)]="fileContents">
3  * </eg-file-reader>
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-file-reader',
13   templateUrl: './file-reader.component.html',
14   providers: [{
15     provide: NG_VALUE_ACCESSOR,
16     useExisting: forwardRef(() => FileReaderComponent),
17     multi: true
18   }]
19 })
20 export class FileReaderComponent implements ControlValueAccessor, OnInit {
21
22     // Stub functions required by ControlValueAccessor
23     propagateChange = (_: any) => {};
24     propagateTouch = () => {};
25
26     ngOnInit() {
27     }
28
29     changeListener($event): void {
30         const me = this;
31         if ($event.target.files.length < 1) {
32             return;
33         }
34         const reader = new FileReader();
35         reader.onloadend = function(e) {
36             me.propagateChange(me.parseFileContents(reader.result));
37         };
38         reader.readAsText($event.target.files[0]);
39     }
40
41     parseFileContents(contents): Array<string> {
42         const values = contents.split('\n');
43         values.forEach((val, idx) => {
44             val = val.replace(/\s+$/, '');
45             val = val.replace(/^\s+/, '');
46             values[idx] = val;
47         });
48         return values;
49     }
50
51     writeValue(value: any) {
52         // intentionally empty
53     }
54
55     registerOnChange(fn) {
56         this.propagateChange = fn;
57     }
58
59     registerOnTouched(fn) {
60         this.propagateTouch = fn;
61     }
62 }