-
Notifications
You must be signed in to change notification settings - Fork 2k
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
@uppy/form: fix submitOnSuccess
and triggerUploadOnSubmit
combination
#5058
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Diff output filesdiff --git a/packages/@uppy/form/lib/index.js b/packages/@uppy/form/lib/index.js
index 91bf65d..0fb917a 100644
--- a/packages/@uppy/form/lib/index.js
+++ b/packages/@uppy/form/lib/index.js
@@ -1,3 +1,13 @@
+function _classPrivateFieldLooseBase(receiver, privateKey) {
+ if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
+ throw new TypeError("attempted to use private field on non-instance");
+ }
+ return receiver;
+}
+var id = 0;
+function _classPrivateFieldLooseKey(name) {
+ return "__private_" + id++ + "_" + name;
+}
import BasePlugin from "@uppy/core/lib/BasePlugin.js";
import findDOMElement from "@uppy/utils/lib/findDOMElement";
import toArray from "@uppy/utils/lib/toArray";
@@ -20,12 +30,17 @@ function assertHTMLFormElement(input) {
}
return input;
}
+var _completed = _classPrivateFieldLooseKey("completed");
export default class Form extends BasePlugin {
constructor(uppy, opts) {
super(uppy, {
...defaultOptions,
...opts,
});
+ Object.defineProperty(this, _completed, {
+ writable: true,
+ value: false,
+ });
this.type = "acquirer";
this.id = this.opts.id || "Form";
this.handleFormSubmit = this.handleFormSubmit.bind(this);
@@ -35,11 +50,13 @@ export default class Form extends BasePlugin {
this.getMetaFromForm = this.getMetaFromForm.bind(this);
}
handleUploadStart() {
+ _classPrivateFieldLooseBase(this, _completed)[_completed] = false;
if (this.opts.getMetaFromForm) {
this.getMetaFromForm();
}
}
handleSuccess(result) {
+ _classPrivateFieldLooseBase(this, _completed)[_completed] = true;
if (this.opts.addResultToForm) {
this.addResultToForm(result);
}
@@ -48,7 +65,7 @@ export default class Form extends BasePlugin {
}
}
handleFormSubmit(ev) {
- if (this.opts.triggerUploadOnSubmit) {
+ if (this.opts.triggerUploadOnSubmit && !_classPrivateFieldLooseBase(this, _completed)[_completed]) {
ev.preventDefault();
const elements = toArray(ev.target.elements);
const disabledByUppy = []; |
Murderlon
changed the title
@uppy/form: throw on conflicting options
@uppy/form: fix Apr 3, 2024
submitOnSuccess
and triggerUploadOnSubmit
combination
aduh95
approved these changes
Apr 22, 2024
Murderlon
added a commit
that referenced
this pull request
Apr 23, 2024
* main: @uppy/form: fix `submitOnSuccess` and `triggerUploadOnSubmit` combination (#5058) Bump docker/build-push-action from 3 to 5 (#5105) Bump akhileshns/heroku-deploy from 3.12.12 to 3.13.15 (#5102) Bump docker/login-action from 2 to 3 (#5101) Bump actions/download-artifact from 3 to 4 Bump actions/upload-artifact from 3 to 4 Release: uppy@3.24.3 (#5091) docs: add back markdown files (#5064) meta: fix custom provider example (#5079)
Murderlon
added a commit
that referenced
this pull request
Apr 29, 2024
* main: (22 commits) @uppy/xhr-upload: refactor to use `fetcher` (#5074) docs: use StackBlitz for all examples/issue template (#5125) Update yarn.lock Add svelte 5 as peer dep (#5122) Bump docker/setup-buildx-action from 2 to 3 (#5124) Bump actions/checkout from 3 to 4 (#5123) Remove JSX global type everywhere (#5117) Revert "@uppy/core: reference updated i18n in Restricter" @uppy/core: reference updated i18n in Restricter @uppy/utils: improve return type of `dataURItoFile` (#5112) @uppy/drop-target: change drop event type to DragEvent (#5107) @uppy/image-editor: fix label definitions (#5111) meta: bump Prettier version (#5114) @uppy/provider-views: bring back "loaded X files..." (#5097) @uppy/dashboard: fix type of trigger option (#5106) meta: fix linter @uppy/form: fix `submitOnSuccess` and `triggerUploadOnSubmit` combination (#5058) Bump docker/build-push-action from 3 to 5 (#5105) Bump akhileshns/heroku-deploy from 3.12.12 to 3.13.15 (#5102) Bump docker/login-action from 2 to 3 (#5101) ...
Merged
github-actions bot
added a commit
that referenced
this pull request
Apr 29, 2024
| Package | Version | Package | Version | | ---------------------- | ------- | ---------------------- | ------- | | @uppy/audio | 1.1.9 | @uppy/instagram | 3.3.1 | | @uppy/aws-s3-multipart | 3.11.1 | @uppy/onedrive | 3.3.1 | | @uppy/box | 2.3.1 | @uppy/provider-views | 3.12.0 | | @uppy/companion-client | 3.8.1 | @uppy/react | 3.3.1 | | @uppy/compressor | 1.1.3 | @uppy/status-bar | 3.3.2 | | @uppy/core | 3.11.0 | @uppy/svelte | 3.1.4 | | @uppy/dashboard | 3.8.2 | @uppy/transloadit | 3.6.1 | | @uppy/drop-target | 2.1.0 | @uppy/unsplash | 3.3.1 | | @uppy/dropbox | 3.3.1 | @uppy/url | 3.6.1 | | @uppy/facebook | 3.3.1 | @uppy/utils | 5.9.0 | | @uppy/file-input | 3.1.2 | @uppy/webcam | 3.4.1 | | @uppy/form | 3.2.1 | @uppy/xhr-upload | 3.6.5 | | @uppy/google-drive | 3.5.1 | @uppy/zoom | 2.3.1 | | @uppy/image-editor | 2.4.5 | uppy | 3.25.0 | - meta: enforce use of `.js` extension in `import type` declarations (Antoine du Hamel / #5126) - @uppy/core: add instance ID to generated IDs (Merlijn Vos / #5080) - @uppy/core: reference updated i18n in Restricter (Merlijn Vos / #5118) - @uppy/xhr-upload: refactor to use `fetcher` (Merlijn Vos / #5074) - meta: docs: use StackBlitz for all examples/issue template (Merlijn Vos / #5125) - meta: Update yarn.lock (Murderlon) - @uppy/svelte: Add svelte 5 as peer dep (frederikhors / #5122) - meta: Bump docker/setup-buildx-action from 2 to 3 (dependabot[bot] / #5124) - meta: Bump actions/checkout from 3 to 4 (dependabot[bot] / #5123) - @uppy/dashboard,@uppy/provider-views: Remove JSX global type everywhere (Merlijn Vos / #5117) - @uppy/utils: improve return type of `dataURItoFile` (Antoine du Hamel / #5112) - @uppy/drop-target: change drop event type to DragEvent (Alireza Heydari / #5107) - @uppy/image-editor: fix label definitions (Antoine du Hamel / #5111) - meta: bump Prettier version (Antoine du Hamel / #5114) - @uppy/provider-views: bring back "loaded X files..." (Mikael Finstad / #5097) - @uppy/dashboard: fix type of trigger option (Merlijn Vos / #5106) - meta: fix linter (Antoine du Hamel) - @uppy/form: fix `submitOnSuccess` and `triggerUploadOnSubmit` combination (Merlijn Vos / #5058) - meta: Bump docker/build-push-action from 3 to 5 (dependabot[bot] / #5105) - meta: Bump akhileshns/heroku-deploy from 3.12.12 to 3.13.15 (dependabot[bot] / #5102) - meta: Bump docker/login-action from 2 to 3 (dependabot[bot] / #5101) - meta: Bump actions/download-artifact from 3 to 4 (dependabot[bot]) - meta: Bump actions/upload-artifact from 3 to 4 (dependabot[bot])
This was referenced Apr 29, 2024
github-actions bot
added a commit
that referenced
this pull request
Apr 29, 2024
| Package | Version | Package | Version | | ---------------------- | ------------ | ---------------------- | ------------ | | @uppy/angular | 0.7.0-beta.4 | @uppy/instagram | 4.0.0-beta.4 | | @uppy/audio | 2.0.0-beta.4 | @uppy/onedrive | 4.0.0-beta.4 | | @uppy/aws-s3-multipart | 4.0.0-beta.4 | @uppy/provider-views | 4.0.0-beta.4 | | @uppy/box | 3.0.0-beta.4 | @uppy/react | 4.0.0-beta.4 | | @uppy/companion | 5.0.0-beta.4 | @uppy/status-bar | 4.0.0-beta.4 | | @uppy/companion-client | 4.0.0-beta.4 | @uppy/store-redux | 4.0.0-beta.2 | | @uppy/compressor | 2.0.0-beta.4 | @uppy/svelte | 4.0.0-beta.2 | | @uppy/core | 4.0.0-beta.4 | @uppy/transloadit | 4.0.0-beta.4 | | @uppy/dashboard | 4.0.0-beta.4 | @uppy/unsplash | 4.0.0-beta.4 | | @uppy/drop-target | 3.0.0-beta.4 | @uppy/url | 4.0.0-beta.4 | | @uppy/dropbox | 4.0.0-beta.4 | @uppy/utils | 6.0.0-beta.4 | | @uppy/facebook | 4.0.0-beta.4 | @uppy/webcam | 4.0.0-beta.4 | | @uppy/file-input | 4.0.0-beta.4 | @uppy/xhr-upload | 4.0.0-beta.2 | | @uppy/form | 4.0.0-beta.2 | @uppy/zoom | 3.0.0-beta.4 | | @uppy/google-drive | 4.0.0-beta.4 | uppy | 4.0.0-beta.4 | | @uppy/image-editor | 3.0.0-beta.2 | | | - meta: Upgrade Yarn to 4.x (Merlijn Vos / #4849) - @uppy/utils: fix fetcher export (Murderlon) - @uppy/xhr-upload: refactor to use `fetcher` (Merlijn Vos / #5074) - docs: use StackBlitz for all examples/issue template (Merlijn Vos / #5125) - meta: Update yarn.lock (Murderlon) - @uppy/svelte: Add svelte 5 as peer dep (frederikhors / #5122) - meta: Bump docker/setup-buildx-action from 2 to 3 (dependabot[bot] / #5124) - meta: Bump actions/checkout from 3 to 4 (dependabot[bot] / #5123) - @uppy/dashboard,@uppy/provider-views: Remove JSX global type everywhere (Merlijn Vos / #5117) - @uppy/utils: improve return type of `dataURItoFile` (Antoine du Hamel / #5112) - @uppy/drop-target: change drop event type to DragEvent (Alireza Heydari / #5107) - @uppy/image-editor: fix label definitions (Antoine du Hamel / #5111) - meta: bump Prettier version (Antoine du Hamel / #5114) - @uppy/provider-views: bring back "loaded X files..." (Mikael Finstad / #5097) - @uppy/dashboard: fix type of trigger option (Merlijn Vos / #5106) - meta: fix linter (Antoine du Hamel) - @uppy/companion: bump Node.js version support matrix (Antoine du Hamel / #5035) - @uppy/form: fix `submitOnSuccess` and `triggerUploadOnSubmit` combination (Merlijn Vos / #5058) - meta: Bump docker/build-push-action from 3 to 5 (dependabot[bot] / #5105) - meta: Bump akhileshns/heroku-deploy from 3.12.12 to 3.13.15 (dependabot[bot] / #5102) - meta: Bump docker/login-action from 2 to 3 (dependabot[bot] / #5101) - meta: Bump actions/download-artifact from 3 to 4 (dependabot[bot]) - meta: Bump actions/upload-artifact from 3 to 4 (dependabot[bot]) - @uppy/react: remove `useUppy` & reintroduce `useUppyState` (Merlijn Vos / #5059) - meta: docs: add back markdown files (Antoine du Hamel / #5064) - meta: fix custom provider example (Merlijn Vos / #5079) - @uppy/utils: add fetcher (Merlijn Vos / #5073) - meta: Fix prettier (Murderlon) - @uppy/dashboard: add missing `x-zip-compress` archive type (Younes / #5081) - meta: Bump docker/metadata-action from 4 to 5 (dependabot[bot] / #5086) - meta: Bump actions/setup-node from 3 to 4 (dependabot[bot] / #5087) - meta: Bump docker/setup-qemu-action from 2 to 3 (dependabot[bot] / #5089) - meta: bump supercharge/redis-github-action from 1.4.0 to 1.8.0 (dependabot[bot] / #5090) - meta: bump actions/cache from 3 to 4 (dependabot[bot] / #5088) - meta: add `dependabot.yml` to keep GHA up-to-date (Antoine du Hamel / #5083) - @uppy/core: Release: uppy@3.24.2 (github-actions[bot] / #5084) - @uppy/core: fix `setOptions` not re-rendereing plugin UI (Antoine du Hamel / #5082) - meta: bump vite from 5.0.12 to 5.0.13 (dependabot[bot] / #5060) - meta: bump tar from 6.1.11 to 6.2.1 (dependabot[bot] / #5068) - @uppy/companion,@uppy/file-input: Release: uppy@3.24.1 (github-actions[bot] / #5069) - @uppy/companion: upgrade redis (Mikael Finstad / #5065) - meta: fix `watch:*` scripts (Antoine du Hamel / #5046) - meta: include more packages in `compare_diff` CI (Antoine du Hamel / #5044) - @uppy/file-input: add missing export (Antoine du Hamel / #5045) - meta: Bump express from 4.18.1 to 4.19.2 in /packages/@uppy/companion (dependabot[bot] / #5036) - @uppy/companion: Bump express from 4.18.1 to 4.19.2 (dependabot[bot] / #5037) | Package | Version | Package | Version | | ---------------------- | ------- | ---------------------- | ------- | | @uppy/audio | 1.1.9 | @uppy/instagram | 3.3.1 | | @uppy/aws-s3-multipart | 3.11.1 | @uppy/onedrive | 3.3.1 | | @uppy/box | 2.3.1 | @uppy/provider-views | 3.12.0 | | @uppy/companion-client | 3.8.1 | @uppy/react | 3.3.1 | | @uppy/compressor | 1.1.3 | @uppy/status-bar | 3.3.2 | | @uppy/core | 3.11.0 | @uppy/svelte | 3.1.4 | | @uppy/dashboard | 3.8.2 | @uppy/transloadit | 3.6.1 | | @uppy/drop-target | 2.1.0 | @uppy/unsplash | 3.3.1 | | @uppy/dropbox | 3.3.1 | @uppy/url | 3.6.1 | | @uppy/facebook | 3.3.1 | @uppy/utils | 5.9.0 | | @uppy/file-input | 3.1.2 | @uppy/webcam | 3.4.1 | | @uppy/form | 3.2.1 | @uppy/xhr-upload | 3.6.5 | | @uppy/google-drive | 3.5.1 | @uppy/zoom | 2.3.1 | | @uppy/image-editor | 2.4.5 | uppy | 3.25.0 | - meta: enforce use of `.js` extension in `import type` declarations (Antoine du Hamel / #5126) - @uppy/core: add instance ID to generated IDs (Merlijn Vos / #5080) - @uppy/core: reference updated i18n in Restricter (Merlijn Vos / #5118) - @uppy/xhr-upload: refactor to use `fetcher` (Merlijn Vos / #5074) - meta: docs: use StackBlitz for all examples/issue template (Merlijn Vos / #5125) - meta: Update yarn.lock (Murderlon) - @uppy/svelte: Add svelte 5 as peer dep (frederikhors / #5122) - meta: Bump docker/setup-buildx-action from 2 to 3 (dependabot[bot] / #5124) - meta: Bump actions/checkout from 3 to 4 (dependabot[bot] / #5123) - @uppy/dashboard,@uppy/provider-views: Remove JSX global type everywhere (Merlijn Vos / #5117) - @uppy/utils: improve return type of `dataURItoFile` (Antoine du Hamel / #5112) - @uppy/drop-target: change drop event type to DragEvent (Alireza Heydari / #5107) - @uppy/image-editor: fix label definitions (Antoine du Hamel / #5111) - meta: bump Prettier version (Antoine du Hamel / #5114) - @uppy/provider-views: bring back "loaded X files..." (Mikael Finstad / #5097) - @uppy/dashboard: fix type of trigger option (Merlijn Vos / #5106) - meta: fix linter (Antoine du Hamel) - @uppy/form: fix `submitOnSuccess` and `triggerUploadOnSubmit` combination (Merlijn Vos / #5058) - meta: Bump docker/build-push-action from 3 to 5 (dependabot[bot] / #5105) - meta: Bump akhileshns/heroku-deploy from 3.12.12 to 3.13.15 (dependabot[bot] / #5102) - meta: Bump docker/login-action from 2 to 3 (dependabot[bot] / #5101) - meta: Bump actions/download-artifact from 3 to 4 (dependabot[bot]) - meta: Bump actions/upload-artifact from 3 to 4 (dependabot[bot])
2 tasks
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #5057
submitOnSuccess
andtriggerUploadOnSubmit
is a valid combination for a use case where you want Uppy to start uploading if the user manually clicks submit inside the form but also submit the form after Uppy has successfully uploaded files (clicking upload instead of submit). Because we useform.requestSubmit()
the submit only happens if form validations pass.The problem however is that
submitOnSuccess
triggers thesubmit
event listener which we use totriggerUploadOnSubmit
, which makes Uppy start uploading after it just finished uploading, causing an infinite loop.Solution
Manually setting a
completed
boolean based onupload
(start) andupload-success
.It doesn't feel right but I don't think we can do much better without redesigning uppy internals.
Alternatives that don't work
If Uppy was a finite state machine, we could easily check in which state we are and prevent a double upload. Unfortunately that's not the case and there is no easy/cheap way to know all uploads have been done.
uppy.getState().allowUpload
, a property that's set based on some condition like allow multiple uploads, retrying, etc. Should theoretically be ideal for this scenario but it can be still betrue
in some cases so it doesn't work.