Skip to content

Commit 5525657

Browse files
authored
fix: should filter files by accept when select dir (#302)
* fix: should filter files by accept when select dir * chore: optimize code * chore: optimize code
1 parent 8f68f53 commit 5525657

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

src/AjaxUploader.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ class AjaxUploader extends Component<UploadProps> {
3333

3434
onChange = (e: React.ChangeEvent<HTMLInputElement>) => {
3535
const { files } = e.target;
36-
this.uploadFiles(files);
36+
const acceptedFiles = [...files].filter((file: RcFile) => attrAccept(file, this.props.accept));
37+
this.uploadFiles(acceptedFiles);
3738
this.reset();
3839
};
3940

@@ -76,9 +77,9 @@ class AjaxUploader extends Component<UploadProps> {
7677
(_file: RcFile) => attrAccept(_file, this.props.accept),
7778
);
7879
} else {
79-
let files = Array.prototype.slice
80-
.call(e.dataTransfer.files)
81-
.filter((file: RcFile) => attrAccept(file, this.props.accept));
80+
let files = [...e.dataTransfer.files].filter((file: RcFile) =>
81+
attrAccept(file, this.props.accept),
82+
);
8283

8384
if (multiple === false) {
8485
files = files.slice(0, 1);
@@ -97,7 +98,7 @@ class AjaxUploader extends Component<UploadProps> {
9798
this.abort();
9899
}
99100

100-
uploadFiles = (files: FileList) => {
101+
uploadFiles = (files: File[]) => {
101102
const originFiles = [...files] as RcFile[];
102103
const postFiles = originFiles.map((file: RcFile & { uid?: string }) => {
103104
// eslint-disable-next-line no-param-reassign

tests/uploader.spec.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,22 @@ describe('uploader', () => {
393393
done();
394394
}, 100);
395395
});
396+
397+
it('unaccepted type files to upload will not trigger onStart when select directory', done => {
398+
const input = uploader.find('input').first();
399+
const files = [
400+
{
401+
name: 'unaccepted.webp',
402+
},
403+
];
404+
input.simulate('change', { target: { files } });
405+
const mockStart = jest.fn();
406+
handlers.onStart = mockStart;
407+
setTimeout(() => {
408+
expect(mockStart.mock.calls.length).toBe(0);
409+
done();
410+
}, 100);
411+
});
396412
});
397413

398414
describe('transform file before request', () => {

0 commit comments

Comments
 (0)