Skip to content

Commit ad982fd

Browse files
author
Roland Groza
committed
fix: skip {items} if it is empty
1 parent 79429e2 commit ad982fd

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

src/file-selector.spec.ts

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,26 @@ it('uses the DataTransfer {items} instead of {files} if it exists', async () =>
5656
type: 'application/json'
5757
});
5858
const item = dataTransferItemFromFile(mockFile);
59-
const evt = dragEvtFromItems(item);
59+
const evt = dragEvtFromFilesAndItems([], [item]);
60+
61+
const files = await fromEvent(evt);
62+
expect(files).toHaveLength(1);
63+
64+
const [file] = files;
65+
66+
expect(file.name).toBe(mockFile.name);
67+
expect(file.type).toBe(mockFile.type);
68+
expect(file.size).toBe(mockFile.size);
69+
expect(file.lastModified).toBe(mockFile.lastModified);
70+
expect(file.path).toBe(name);
71+
});
72+
73+
it('uses the DataTransfer {files} if {items} is empty', async () => {
74+
const name = 'test.json';
75+
const mockFile = createFile(name, {ping: true}, {
76+
type: 'application/json'
77+
});
78+
const evt = dragEvtFromFilesAndItems([mockFile], []);
6079

6180
const files = await fromEvent(evt);
6281
expect(files).toHaveLength(1);
@@ -125,6 +144,12 @@ function dragEvtFromItems(...items: DataTransferItem[]): DragEvent {
125144
return {dataTransfer: {items}} as any;
126145
}
127146

147+
function dragEvtFromFilesAndItems(files: File[], items: DataTransferItem[]): DragEvent {
148+
return {
149+
dataTransfer: {files, items}
150+
} as any;
151+
}
152+
128153
function dataTransferItemFromFile(file: File): DataTransferItem {
129154
return {
130155
kind: 'file',

src/file-selector.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ const FILES_TO_IGNORE = [
1616
export async function fromEvent(evt: Event): Promise<FileWithPath[]> {
1717
if (isDragEvt(evt)) {
1818
const dt = evt.dataTransfer!;
19-
if (dt.items) {
19+
if (dt.items && dt.items.length) {
2020
return getDataTransferFiles(dt);
21-
} else if (dt.files) {
21+
} else if (dt.files && dt.files.length) {
2222
return fromFileList(dt.files);
2323
}
24-
} else if (evt.target instanceof HTMLInputElement && evt.target.files) {
24+
} else if (evt.target instanceof HTMLInputElement && evt.target.files && evt.target.files) {
2525
return fromFileList(evt.target.files);
2626
}
2727

0 commit comments

Comments
 (0)