From 13de9fbfb1a451331563dac0e3dff2fef00927d2 Mon Sep 17 00:00:00 2001 From: trik Date: Wed, 3 Jun 2020 16:11:34 +0200 Subject: [PATCH] fix(core/file-input): value not set on file select It did work only on file drop --- src/core/file-input/file-input.spec.ts | 19 +++++++++++++++++++ src/core/file-input/file-input.ts | 8 ++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/core/file-input/file-input.spec.ts b/src/core/file-input/file-input.spec.ts index 40a623dfab..1e7dce25e6 100644 --- a/src/core/file-input/file-input.spec.ts +++ b/src/core/file-input/file-input.spec.ts @@ -42,6 +42,25 @@ describe('AjfFileInput', () => { expect(fileInput.value).toBeNull(); }); + it('should set its value on file selection.', async () => { + const fileInput = fixture.componentInstance; + const fileList = fileInput._nativeInput.nativeElement.files as FileList; + fileList.item = idx => { + if (idx === 0) { + return emptyPngFile; + } + return null; + }; + const lastValue = fileInput.valueChange.pipe(shareReplay(1)); + fileInput.onSelectFile(); + await lastValue.pipe(take(1)).toPromise(); + const {name, size, type, content} = fileInput.value as AjfFile; + expect(name).toEqual(emptyPngFile.name); + expect(size).toEqual(emptyPngFile.size); + expect(type).toEqual(emptyPngFile.type); + expect(content).toEqual(`data:image/png;base64,${emptyPng}`); + }); + it('should display the default drop message', () => { const el = fixture.nativeElement as HTMLElement; const dropMessages = el.getElementsByClassName('ajf-drop-message'); diff --git a/src/core/file-input/file-input.ts b/src/core/file-input/file-input.ts index 2c449a2982..03ff3d0e74 100644 --- a/src/core/file-input/file-input.ts +++ b/src/core/file-input/file-input.ts @@ -149,10 +149,14 @@ export class AjfFileInput implements ControlValueAccessor { onSelectFile(): void { const files = this._nativeInput.nativeElement.files; - if (files == null || files.length !== 1 || files[0]) { + if (files == null) { return; } - this._processFileUpload(files[0]); + const file = files.item(0); + if (file == null) { + return; + } + this._processFileUpload(files.item(0) as File); } registerOnChange(fn: any): void {