Skip to content

Commit 4b79f45

Browse files
jin19980928WB01676250
andauthored
fix: when the upload setting pastable is set to true in the same Form, the copying of FormItemInput becomes invalid (#624)
* fix: uploader * fix: uploader * feat: test --------- Co-authored-by: WB01676250 <[email protected]>
1 parent a0e8f5a commit 4b79f45

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

src/AjaxUploader.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,6 @@ class AjaxUploader extends Component<UploadProps> {
6767
};
6868

6969
onFileDropOrPaste = async (e: React.DragEvent<HTMLDivElement> | ClipboardEvent) => {
70-
e.preventDefault();
71-
7270
if (e.type === 'dragover') {
7371
return;
7472
}
@@ -87,6 +85,10 @@ class AjaxUploader extends Component<UploadProps> {
8785
files = [...(clipboardData.files || [])];
8886
}
8987

88+
if (files.length > 0 || items.some(item => item.kind === 'file')) {
89+
e.preventDefault();
90+
}
91+
9092
if (directory) {
9193
files = await traverseFileTree(Array.prototype.slice.call(items), (_file: RcFile) =>
9294
attrAccept(_file, this.props.accept),

tests/uploader.spec.tsx

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,42 @@ describe('uploader', () => {
488488

489489
fireEvent.change(input, { target: { files } });
490490
});
491+
492+
it('should call preventDefault when paste contains files', () => {
493+
const { container } = render(<Upload {...props} pastable />);
494+
const input = container.querySelector('input')!;
495+
496+
const files = [new File([''], 'test.png', { type: 'image/png' })];
497+
498+
const preventDefaultSpy = jest.spyOn(Event.prototype, 'preventDefault');
499+
500+
fireEvent.paste(input, {
501+
clipboardData: {
502+
items: [{ kind: 'file' }],
503+
files,
504+
},
505+
});
506+
507+
expect(preventDefaultSpy).toHaveBeenCalledTimes(1);
508+
preventDefaultSpy.mockRestore();
509+
});
510+
511+
it('should not call preventDefault when paste contains no files', () => {
512+
const { container } = render(<Upload {...props} pastable />);
513+
const input = container.querySelector('input')!;
514+
515+
const preventDefaultSpy = jest.spyOn(Event.prototype, 'preventDefault');
516+
517+
fireEvent.paste(input, {
518+
clipboardData: {
519+
items: [{ kind: 'string' }],
520+
files: [],
521+
},
522+
});
523+
524+
expect(preventDefaultSpy).toHaveBeenCalledTimes(0);
525+
preventDefaultSpy.mockRestore();
526+
});
491527
});
492528

493529
describe('directory uploader', () => {

0 commit comments

Comments
 (0)