Skip to content

Commit 2a2aeb3

Browse files
committed
Implement raw features / ngChange feature - returning list of Files
1 parent a54e480 commit 2a2aeb3

File tree

1 file changed

+28
-17
lines changed

1 file changed

+28
-17
lines changed

src/input-file.component.js

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,17 @@ class InputFileComponent {
1313
if (this.$attrs.multiple !== 'false' && (this.$attrs.multiple === '' || this.$attrs.multiple)) {
1414
inputElement.setAttribute('multiple', '');
1515
}
16-
inputElement.addEventListener('change', this.onInputChange, false);
16+
inputElement.addEventListener('change', event => this.onInputChange(event), false);
1717
}
1818

1919
onInputChange(event) {
20-
const files = event.target.files;
21-
if (this.ngModel) {
22-
this.ngModel.length = 0;
23-
} else {
24-
this.ngModel = [];
25-
}
26-
const fileLoaded = files.map(file => new Promise((resolve, reject) => {
20+
const inputFiles = event.target.files;
21+
const files = [];
22+
const fileLoaded = [...inputFiles].map(inputFile => new Promise((resolve, reject) => {
23+
if (!this.fileFormat) {
24+
resolve(inputFile);
25+
return;
26+
}
2727
const reader = new FileReader();
2828

2929
// See event handlers of `FileReader` here:
@@ -33,28 +33,40 @@ class InputFileComponent {
3333
reader.onabort = reject;
3434
reader.onerror = reject;
3535

36+
console.log(inputFile);
37+
3638
// Encapsulatized function for contextualized file + $timeout for proper angularJs refresh
3739
reader.onload = (infos => readerEvent => this.$timeout(() => {
38-
const fileLoaded = {infos, file: readerEvent.target.result};
39-
this.ngModel.push(fileLoaded);
40+
const fileLoaded = {
41+
infos,
42+
file: readerEvent.target.result
43+
};
44+
files.push(fileLoaded);
4045
resolve(fileLoaded);
41-
}))(file);
46+
}))({
47+
name: inputFile.name,
48+
size: inputFile.size,
49+
type: inputFile.type,
50+
lastModified: inputFile.lastModified
51+
});
4252

4353
switch (this.fileFormat) {
4454
case 'Text':
45-
reader.readAsText(file);
55+
reader.readAsText(inputFile);
4656
break;
4757
case 'Base64':
48-
reader.readAsDataURL(file);
58+
reader.readAsDataURL(inputFile);
4959
break;
5060
case 'ArrayBuffer':
5161
default:
52-
reader.readAsArrayBuffer(file);
62+
reader.readAsArrayBuffer(inputFile);
5363
}
5464
}));
5565

5666
return Promise.all(fileLoaded).then(response => {
57-
this.ngChange(response);
67+
if (this.filesLoaded) {
68+
this.filesLoaded(response);
69+
}
5870
});
5971
}
6072
}
@@ -66,7 +78,6 @@ angular.module('angularjs-input-file', []).component('inputFile', {
6678
accept: '@',
6779
fileFormat: '@',
6880
fileType: '@',
69-
ngModel: '=',
70-
ngChange: '&'
81+
filesLoaded: '<'
7182
}
7283
});

0 commit comments

Comments
 (0)