Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

.handleInputChange() - use .currentTarget; clear the input using '' #5381

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

lakesare
Copy link
Collaborator

@lakesare lakesare commented Aug 1, 2024

This PR:

  • created a proper demo of the bug event.target.value = '' is preventing, added that demo to the comments
  • properly type the text input event: we go from ChangeEvent to TargetedEvent<HTMLInputElement, Event>
  • everything else (target => currentTarget, null => '') is a consequence of the correct typing

New version is tested in:

  • Firefox
  • Chrome
  • Safari

Testing consists of:

  1. make sure uploading a duplicate file always triggers onBeforeFileAdded
  2. make sure currentTarget.files actually has files

Copy link
Contributor

github-actions bot commented Aug 1, 2024

Diff output files
diff --git a/packages/@uppy/dashboard/lib/Dashboard.js b/packages/@uppy/dashboard/lib/Dashboard.js
index a4e8014..d666201 100644
--- a/packages/@uppy/dashboard/lib/Dashboard.js
+++ b/packages/@uppy/dashboard/lib/Dashboard.js
@@ -494,7 +494,7 @@ export default class Dashboard extends UIPlugin {
     };
     this.handleInputChange = event => {
       event.preventDefault();
-      const files = toArray(event.target.files);
+      const files = toArray(event.currentTarget.files || []);
       if (files.length > 0) {
         this.uppy.log("[Dashboard] Files selected through input");
         this.addFiles(files);
diff --git a/packages/@uppy/dashboard/lib/components/AddFiles.js b/packages/@uppy/dashboard/lib/components/AddFiles.js
index 8a0edf9..8e4ee54 100644
--- a/packages/@uppy/dashboard/lib/components/AddFiles.js
+++ b/packages/@uppy/dashboard/lib/components/AddFiles.js
@@ -16,7 +16,7 @@ class AddFiles extends Component {
     };
     this.onFileInputChange = event => {
       this.props.handleInputChange(event);
-      event.target.value = null;
+      event.currentTarget.value = "";
     };
     this.renderHiddenInput = (isFolder, refCallback) => {
       var _this$props$allowedFi;
diff --git a/packages/@uppy/drag-drop/lib/DragDrop.js b/packages/@uppy/drag-drop/lib/DragDrop.js
index 5f2d2c3..2515b3b 100644
--- a/packages/@uppy/drag-drop/lib/DragDrop.js
+++ b/packages/@uppy/drag-drop/lib/DragDrop.js
@@ -36,12 +36,12 @@ export default class DragDrop extends UIPlugin {
       }
     };
     this.onInputChange = event => {
-      const files = toArray(event.target.files);
+      const files = toArray(event.currentTarget.files || []);
       if (files.length > 0) {
         this.uppy.log("[DragDrop] Files selected through input");
         this.addFiles(files);
       }
-      event.target.value = null;
+      event.currentTarget.value = "";
     };
     this.handleDragOver = event => {
       var _this$opts$onDragOver, _this$opts;
diff --git a/packages/@uppy/file-input/lib/FileInput.js b/packages/@uppy/file-input/lib/FileInput.js
index 13cfa50..e859b0c 100644
--- a/packages/@uppy/file-input/lib/FileInput.js
+++ b/packages/@uppy/file-input/lib/FileInput.js
@@ -40,9 +40,9 @@ export default class FileInput extends UIPlugin {
   }
   handleInputChange(event) {
     this.uppy.log("[FileInput] Something selected through input...");
-    const files = toArray(event.target.files);
+    const files = toArray(event.currentTarget.files || []);
     this.addFiles(files);
-    event.target.value = null;
+    event.currentTarget.value = "";
   }
   handleClick() {
     this.input.click();

@lakesare lakesare force-pushed the lakesare/event-target-value branch from 536bfc9 to 2ee1645 Compare August 2, 2024 08:32
@lakesare lakesare changed the title Clear file input value using an '' instead of null .handleInputChange() - use .currentTarget; clear the input using '' Aug 2, 2024
@lakesare lakesare marked this pull request as ready for review August 2, 2024 09:01
event.preventDefault()
const files = toArray((event.target as HTMLInputElement).files!)
const files = toArray(event.currentTarget.files || [])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const files = toArray(event.currentTarget.files || [])
const files = toArray(event.currentTarget.files ?? [])

private onInputChange = (event: ChangeEvent) => {
const files = toArray((event.target as HTMLInputElement).files!)
private onInputChange = (event: TargetedEvent<HTMLInputElement, Event>) => {
const files = toArray(event.currentTarget.files || [])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const files = toArray(event.currentTarget.files || [])
const files = toArray(event.currentTarget.files ?? [])

this.uppy.log('[FileInput] Something selected through input...')
const files = toArray((event.target as HTMLFileInputElement).files)
const files = toArray(event.currentTarget.files || [])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const files = toArray(event.currentTarget.files || [])
const files = toArray(event.currentTarget.files ?? [])

@mifi
Copy link
Contributor

mifi commented Aug 4, 2024

I assume you checked that using currentTarget in place of target is safe (e.g. they seem to differ with regards to bubbling)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants