2 * <eg-file-reader [(ngModel)]="fileContents">
5 import {Component, forwardRef} from '@angular/core';
6 import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';
9 selector: 'eg-file-reader',
10 templateUrl: './file-reader.component.html',
12 provide: NG_VALUE_ACCESSOR,
13 useExisting: forwardRef(() => FileReaderComponent),
17 export class FileReaderComponent implements ControlValueAccessor {
19 // Stub functions required by ControlValueAccessor
20 propagateChange = (_: any) => {};
21 propagateTouch = () => {};
23 changeListener($event): void {
25 if ($event.target.files.length < 1) {
28 const reader = new FileReader();
29 reader.onloadend = function(e) {
30 me.propagateChange(me.parseFileContents(reader.result));
32 reader.readAsText($event.target.files[0]);
35 parseFileContents(contents): Array<string> {
36 const values = contents.split('\n');
37 values.forEach((val, idx) => {
38 val = val.replace(/\s+$/, '');
39 val = val.replace(/^\s+/, '');
45 writeValue(value: any) {
46 // intentionally empty
49 registerOnChange(fn) {
50 this.propagateChange = fn;
53 registerOnTouched(fn) {
54 this.propagateTouch = fn;