Skip to content

Commit 1f8cbae

Browse files
committed
fix: fix when readEntries method throw error and add new test
1 parent 4101c75 commit 1f8cbae

File tree

2 files changed

+59
-6
lines changed

2 files changed

+59
-6
lines changed

src/traverseFileTree.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ const traverseFileTree = async (files: InternalDataTransferItem[], isAccepted) =
2121
const entries = [];
2222

2323
while (true) {
24-
const results = await new Promise<InternalDataTransferItem[]>((resolve, reject) => {
25-
dirReader.readEntries(resolve, reject);
24+
const results = await new Promise<InternalDataTransferItem[]>((resolve) => {
25+
dirReader.readEntries(resolve, () => resolve([]));
2626
});
2727

2828
if (!results.length) {

tests/uploader.spec.tsx

Lines changed: 57 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,19 @@ const makeFileSystemEntryAsync = item => {
4848
createReader: () => {
4949
let first = true;
5050
return {
51-
async readEntries(handle) {
51+
async readEntries(handle, error) {
5252
await sleep(100);
53-
53+
5454
if (!first) {
5555
return handle([]);
5656
}
5757

58+
if (item.error && first) {
59+
return error && error(new Error('read file error'))
60+
}
61+
5862
first = false;
59-
return handle(item.children.map(makeFileSystemEntry));
63+
return handle(item.children.map(makeFileSystemEntryAsync));
6064
},
6165
};
6266
},
@@ -532,7 +536,56 @@ describe('uploader', () => {
532536
setTimeout(() => {
533537
expect(mockStart.mock.calls.length).toBe(2);
534538
done();
535-
}, 500);
539+
}, 1000);
540+
});
541+
542+
it('dragging and dropping files to upload through asynchronous file reading with some readEntries method throw error', (done) => {
543+
const input = uploader.container.querySelector('input')!;
544+
545+
const files = {
546+
name: 'foo',
547+
children: [
548+
{
549+
name: 'bar',
550+
error: true,
551+
children: [
552+
{
553+
name: '1.png',
554+
},
555+
{
556+
name: 'ffc',
557+
children: [
558+
{
559+
name: '7.png',
560+
},
561+
{
562+
name: '8.png',
563+
},
564+
],
565+
}
566+
],
567+
},
568+
{
569+
name: 'rc',
570+
children: [
571+
{
572+
name: '3.png',
573+
},
574+
{
575+
name: '4.webp',
576+
},
577+
],
578+
},
579+
],
580+
};
581+
fireEvent.drop(input, { dataTransfer: { items: [makeDataTransferItemAsync(files)] } });
582+
const mockStart = jest.fn();
583+
handlers.onStart = mockStart;
584+
585+
setTimeout(() => {
586+
expect(mockStart.mock.calls.length).toBe(1);
587+
done();
588+
}, 1000);
536589
});
537590

538591
it('unaccepted type files to upload will not trigger onStart when select directory', done => {

0 commit comments

Comments
 (0)