-
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
proposal: Cancel assemblies optional #3575
Conversation
to make canceling assemblies optional possibly fixes #3547
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think this is the way to do it as it goes against the separation of concerns. Core doesn't know about the concept of assemblies, only @uppy/transloadit does, therefor this does not belong here.
In my opinion if the problem is framework or transloadit specific, the problem should be solved there, or an agnostic solution.
I think I agree with that. But I'm not sure how to solve it. If we renamed I think in one way or another, core would need to distinguish between the two cases:
|
This fact that it says that core should know the difference between a react hook cancel and another cancel is still problematic to me, for the same argument. So far the most reasonable solution to me is adding |
By adding a |
Ok I rewrote to |
packages/@uppy/react/src/useUppy.js
Outdated
@@ -17,7 +17,7 @@ module.exports = function useUppy (factory) { | |||
|
|||
useEffect(() => { | |||
return () => { | |||
uppy.current.close() | |||
uppy.current.close({ reason: null }) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Explicitly passing null
still feels a bit off to me. You would expect a nullish value to be the default.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
True. Which reason should we use? cleanup
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Cleanup also sounds inherit to close
in itself. In the end it is the difference of human/user vs. machine. So perhaps reason: 'unmount'
does make sense after all.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wouldn't we then bring a concept of react into core, which would break the separation of concerns?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Has nothing to do with React per se, you can unmount in vanilla JS (remove it programmatically), vue, svelte, angular, whatever.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If the tests pass, ideally with a new test for this change, then we are good to go.
yes and documentation. not sure why the end to end tests failed though. need to test locally to see if I broke something |
Try merging latest |
website/src/docs/core.md
Outdated
|
||
Uninstall all plugins and close down this Uppy instance. Also runs `uppy.reset()` before uninstalling. | ||
|
||
* `reason`: If set to the string `user`, it will also cancel any running Transloadit assemblies. Set to `unmount` to disable this behavior. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should not be documented in core. Instead, we should explain the possible values of reason
and that plugins can use that for wanted behavior.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I updated the docs
Can you also check whether the same is needed in Vue, Svelte, and Angular? We also need a test for this. |
also fix rule of hooks issue
couldn't find close being called in Vue, Svelte, and Angular, however I'm not very proficient in any of those so I may be missing something. I updated a lot of example code though, to include reason: 'unmount' and some tests |
website/src/docs/core.md
Outdated
* `user` - User has explicitly closed the Uppy and any ongoing Uploads | ||
* `unmount` - Uppy has been unmounted (removed from the user interface) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* `user` - User has explicitly closed the Uppy and any ongoing Uploads | |
* `unmount` - Uppy has been unmounted (removed from the user interface) | |
* `user` - The user has closed the Uppy instance | |
* `unmount` - The uppy instance has been closed programatically |
|
||
Stop all uploads in progress and clear file selection, set progress to 0. More or less, it returns things to the way they were before any user input. | ||
|
||
### `uppy.close()` | ||
### `uppy.close({ reason = 'user' })` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shouldn't this also be added for uppy.cancelAll
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
good catch
e2e tests failed with
is it a flaky test again? |
Tests re-ran successfully now, so I think it's indeed a flaky test @Murderlon |
Are we changing the behaviour for Companion remote uploads as well? So that pressing “cancel” ( |
I haven't changed that behavior. Not sure where to change it |
Ok I have now implemented the I also had to prevent the |
Co-authored-by: Merlijn Vos <merlijn@soverin.net>
Tests passed! I'm not sure if this is considered a breaking change now. If closing Uppy (after this PR) with reason unmount and there are uploads still ongoing, the closed uppy instance will still continue to emit events event after it's closed, like progress and success. |
Under semver this is not a breaking change and I think conceptually it's acceptable too. It won't send events endlessly, the upload will fail or succeed and it will stop. |
Awesome! I wonder if this will change this #2301, but you’d still get the uppy.on('file-removed', (file, reason) => {
// reasons: `removed-by-user` and `cancel-all`
removeFileFromUploadingCounterUI(file)
if (reason === 'removed-by-user') {
sendDeleteRequestForFile(file)
}
}) |
I think so. Didn't change that logic. |
I think this can be merged @arturi ? |
You can go ahead and merge it when you're ready :) |
# Conflicts: # packages/@uppy/react/src/useUppy.test.js
| Package | Version | Package | Version | | ---------------------- | ------- | ---------------------- | ------- | | @uppy/audio | 0.3.1 | @uppy/provider-views | 2.1.0 | | @uppy/aws-s3 | 2.1.0 | @uppy/react | 2.2.0 | | @uppy/aws-s3-multipart | 2.3.0 | @uppy/react-native | 0.3.0 | | @uppy/companion-client | 2.1.0 | @uppy/screen-capture | 2.1.0 | | @uppy/core | 2.2.0 | @uppy/status-bar | 2.2.0 | | @uppy/dashboard | 2.2.0 | @uppy/svelte | 1.0.8 | | @uppy/drag-drop | 2.1.0 | @uppy/transloadit | 2.2.0 | | @uppy/file-input | 2.1.0 | @uppy/tus | 2.3.0 | | @uppy/google-drive | 2.1.0 | @uppy/url | 2.1.0 | | @uppy/image-editor | 1.2.0 | @uppy/webcam | 2.2.0 | | @uppy/instagram | 2.1.0 | @uppy/xhr-upload | 2.1.0 | | @uppy/locales | 2.1.0 | @uppy/zoom | 1.1.0 | | @uppy/onedrive | 2.1.0 | @uppy/robodog | 2.6.0 | | @uppy/progress-bar | 2.1.0 | uppy | 2.10.0 | - @uppy/audio: fix types (Merlijn Vos / #3689) - @uppy/aws-s3-multipart,@uppy/aws-s3,@uppy/core,@uppy/react,@uppy/transloadit,@uppy/tus,@uppy/xhr-upload: proposal: Cancel assemblies optional (Mikael Finstad / #3575) - @uppy/aws-s3-multipart: export interface AwsS3MultipartOptions (Matteo Padovano / #3709) - @uppy/companion-client: refactor to ESM (Antoine du Hamel / #3693) - @uppy/companion: Only deploy on companion changes (kiloreux / #3677) - @uppy/core: add definition for addFiles method (Matteo Padovano / #3556) - @uppy/core: wrap plugins in div.uppy-Root and set dir attrubute in UIPlugin (Artur Paikin / #3692) - @uppy/google-drive: refactor to ESM (Antoine du Hamel / #3683) - @uppy/image-editor: refactor to ESM (Antoine du Hamel / #3685) - @uppy/instagram: refactor to ESM (Antoine du Hamel / #3696) - @uppy/locales: Add `save` translation to Spanish locale (Juan Carlos Alonso / #3678) - @uppy/locales: refactor to ESM (Antoine du Hamel / #3707) - @uppy/onedrive: refactor to ESM (Antoine du Hamel / #3694) - @uppy/progress-bar: refactor to ESM (Antoine du Hamel / #3706) - @uppy/provider-views: refactor to ESM (Antoine du Hamel / #3715) - @uppy/react: Support React 18 in @uppy/react (Merlijn Vos / #3680) - @uppy/screen-capture: refactor to ESM (Antoine du Hamel / #3698) - @uppy/status-bar: refactor to ESM (Antoine du Hamel / #3697) - @uppy/transloadit: add rate limiting for assembly creation and status polling (Antoine du Hamel / #3718) - @uppy/tus: refactor to ESM (Antoine du Hamel / #3724) - @uppy/url: refactor to ESM (Antoine du Hamel / #3713) - @uppy/webcam: refactor to ESM (Antoine du Hamel / #3686) - @uppy/xhr-upload: refactor to ESM (Antoine du Hamel / #3695) - @uppy/zoom: refactor to ESM (Antoine du Hamel / #3699) - meta: e2e: fix failing test (Antoine du Hamel / #3722) - test: harden linter rule for JSX/ESM validation (Antoine du Hamel / #3681) - test: harden linter rules for ESM/CJS validation (Antoine du Hamel / #3674) - test: Increase retries to trigger longer retryDelay in tus (Artur Paikin / #3726) - test: Remove `it.only` from e2e test (Merlijn Vos / #3690) - tests: Make Cypress more stable & add e2e test for error events when upload fails (Merlijn Vos / #3662)
to make canceling assemblies optional
possibly fixes #3547
note: not tested