From 7568e732cc8846ee32cb6adced2e5fd422de17e8 Mon Sep 17 00:00:00 2001 From: Renato Atilio Date: Thu, 7 Nov 2024 17:39:58 -0300 Subject: [PATCH] FIX: resume editing when through /new-message (#29637) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "Resume editing" would do nothing when going through the `/new-message` flow. This seems to be broken since [this commit](https://github.com/discourse/discourse/commit/b0f6d074be2be452092c3062dde703d969c97110). which moved `this._setModel` calls around – the same we're doing now, but to different places: the first one needs to happen after the `draft.data` has been set , while the second needs to happen before the `this.open` call. --- .../discourse/app/services/composer.js | 7 +++++-- spec/system/composer/discard_draft_spec.rb | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/discourse/app/services/composer.js b/app/assets/javascripts/discourse/app/services/composer.js index 5aa0bc4c7a0..ffd9aaca3c5 100644 --- a/app/assets/javascripts/discourse/app/services/composer.js +++ b/app/assets/javascripts/discourse/app/services/composer.js @@ -1407,8 +1407,6 @@ export default class ComposerService extends Service { composerModel.setProperties({ unlistTopic: false, whisper: false }); } - await this._setModel(composerModel, opts); - // we need a draft sequence for the composer to work if (opts.draftSequence === undefined) { let data = await Draft.get(opts.draftKey); @@ -1421,9 +1419,14 @@ export default class ComposerService extends Service { opts.draft ||= data.draft; opts.draftSequence = data.draft_sequence; + + await this._setModel(composerModel, opts); + return; } + await this._setModel(composerModel, opts); + // otherwise, do the draft check async if (!opts.draft && !opts.skipDraftCheck) { let data = await Draft.get(opts.draftKey); diff --git a/spec/system/composer/discard_draft_spec.rb b/spec/system/composer/discard_draft_spec.rb index ee70bce0971..96716ea44c3 100644 --- a/spec/system/composer/discard_draft_spec.rb +++ b/spec/system/composer/discard_draft_spec.rb @@ -94,5 +94,24 @@ describe "Composer - discard draft modal", type: :system do wait_for(timeout: 5) { Draft.find_by(draft_key: draft_key) == nil } end + + it "resumes draft when using /new-message" do + visit "/new-message" + + composer.fill_content("a b c d e f g") + composer.close + + expect(discard_draft_modal).to be_open + discard_draft_modal.click_save + + visit "/new-message" + + expect(dialog).to be_open + expect(page).to have_content(I18n.t("js.drafts.abandon.confirm")) + dialog.click_button I18n.t("js.drafts.abandon.no_value") + + expect(composer).to be_opened + expect(composer).to have_content("a b c d e f g") + end end end