FIX: disables send btn while uploads in progress (#21298)

Before this fix you could press send while upload was in progress and lose it as it was not yet uploaded.
This commit is contained in:
Joffrey JAFFEUX 2023-05-02 18:11:40 +02:00 committed by GitHub
parent 6bbf9a0bcc
commit 616f4a1118
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 43 additions and 4 deletions

View File

@ -318,6 +318,7 @@ export default Mixin.create(UppyS3Multipart, ExtendableUploader, {
}, },
_triggerInProgressUploadsEvent() { _triggerInProgressUploadsEvent() {
this.onProgressUploadsChanged?.(this.inProgressUploads);
this.appEvents.trigger( this.appEvents.trigger(
`upload-mixin:${this.id}:in-progress-uploads`, `upload-mixin:${this.id}:in-progress-uploads`,
this.inProgressUploads this.inProgressUploads

View File

@ -67,8 +67,7 @@ export default Component.extend(UppyUploadMixin, {
this.appEvents.trigger(`upload-mixin:${this.id}:cancel-upload`, { this.appEvents.trigger(`upload-mixin:${this.id}:cancel-upload`, {
fileId: upload.id, fileId: upload.id,
}); });
this.uploads.removeObject(upload); this.removeUpload(upload);
this._triggerUploadsChanged();
}, },
@action @action
@ -125,8 +124,14 @@ export default Component.extend(UppyUploadMixin, {
} }
}, },
onProgressUploadsChanged() {
this._triggerUploadsChanged(this.uploads, {
inProgressUploadsCount: this.inProgressUploads?.length,
});
},
_triggerUploadsChanged() { _triggerUploadsChanged() {
this.onUploadChanged(this.uploads, { this.onUploadChanged?.(this.uploads, {
inProgressUploadsCount: this.inProgressUploads?.length, inProgressUploadsCount: this.inProgressUploads?.length,
}); });
}, },

View File

@ -32,6 +32,7 @@ export default class ChatComposer extends Component {
@service chatApi; @service chatApi;
@tracked isFocused = false; @tracked isFocused = false;
@tracked inProgressUploadsCount = 0;
get shouldRenderReplyingIndicator() { get shouldRenderReplyingIndicator() {
return this.context === "channel" && !this.args.channel?.isDraft; return this.context === "channel" && !this.args.channel?.isDraft;
@ -116,7 +117,9 @@ export default class ChatComposer extends Component {
} }
get sendEnabled() { get sendEnabled() {
return this.hasContent && !this.pane.sending; return (
this.hasContent && !this.pane.sending && !this.inProgressUploadsCount > 0
);
} }
@action @action
@ -175,6 +178,12 @@ export default class ChatComposer extends Component {
@action @action
onUploadChanged(uploads, { inProgressUploadsCount }) { onUploadChanged(uploads, { inProgressUploadsCount }) {
if (!this.args.channel) {
return;
}
this.inProgressUploadsCount = inProgressUploadsCount || 0;
if ( if (
typeof uploads !== "undefined" && typeof uploads !== "undefined" &&
inProgressUploadsCount !== "undefined" && inProgressUploadsCount !== "undefined" &&

View File

@ -336,4 +336,28 @@ RSpec.describe "Chat composer", type: :system, js: true do
expect(page).to have_css(".chat-composer.is-send-disabled") expect(page).to have_css(".chat-composer.is-send-disabled")
end end
end end
context "when upload is in progress" do
before do
channel_1.add(current_user)
sign_in(current_user)
end
it "doesnt allow to send" do
chat.visit_channel(channel_1)
page.driver.browser.network_conditions = { latency: 20_000 }
file_path = file_from_fixtures("logo.png", "images").path
attach_file(file_path) do
channel.open_action_menu
channel.click_action_button("chat-upload-btn")
end
expect(page).to have_css(".chat-composer-upload--in-progress")
expect(page).to have_css(".chat-composer.is-send-disabled")
page.driver.browser.network_conditions = { latency: 0 }
end
end
end end