2 * <eg-file-reader [(ngModel)]="fileContents">
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';
12 selector: 'eg-file-reader',
13 templateUrl: './file-reader.component.html',
15 provide: NG_VALUE_ACCESSOR,
16 useExisting: forwardRef(() => FileReaderComponent),
20 export class FileReaderComponent implements ControlValueAccessor, OnInit {
22 // Stub functions required by ControlValueAccessor
23 propagateChange = (_: any) => {};
24 propagateTouch = () => {};
29 changeListener($event): void {
31 if ($event.target.files.length < 1) {
34 const reader = new FileReader();
35 reader.onloadend = function(e) {
36 me.propagateChange(me.parseFileContents(reader.result));
38 reader.readAsText($event.target.files[0]);
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+/, '');
51 writeValue(value: any) {
52 // intentionally empty
55 registerOnChange(fn) {
56 this.propagateChange = fn;
59 registerOnTouched(fn) {
60 this.propagateTouch = fn;