From 0341e640571ab49ef5345c48d8d6f6fda98edb0c Mon Sep 17 00:00:00 2001 From: Alexander Skvortsov Date: Sat, 15 Aug 2020 23:12:35 -0400 Subject: [PATCH] Make app.composer.show redraw synchronous, implement promises in reply, edit, and new discussion actions properly --- js/src/forum/components/IndexPage.js | 18 ++++++++++-------- js/src/forum/states/ComposerState.js | 2 +- js/src/forum/utils/PostControls.js | 8 +++++--- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/js/src/forum/components/IndexPage.js b/js/src/forum/components/IndexPage.js index ae891ec6c..6c320bcaa 100644 --- a/js/src/forum/components/IndexPage.js +++ b/js/src/forum/components/IndexPage.js @@ -296,16 +296,18 @@ export default class IndexPage extends Page { * @return {Promise} */ newDiscussionAction() { - if (app.session.user) { - app.composer.load(DiscussionComposer, { user: app.session.user }); - app.composer.show(); + return new Promise((resolve, reject) => { + if (app.session.user) { + app.composer.load(DiscussionComposer, { user: app.session.user }); + app.composer.show(); - return Promise.resolve(app.composer); - } else { - app.modal.show(LogInModal); + return resolve(app.composer); + } else { + app.modal.show(LogInModal); - return Promise.reject(); - } + return reject(); + } + }); } /** diff --git a/js/src/forum/states/ComposerState.js b/js/src/forum/states/ComposerState.js index 2a65dffe8..4bfe0d10c 100644 --- a/js/src/forum/states/ComposerState.js +++ b/js/src/forum/states/ComposerState.js @@ -82,7 +82,7 @@ class ComposerState { if (this.position === ComposerState.Position.NORMAL || this.position === ComposerState.Position.FULLSCREEN) return; this.position = ComposerState.Position.NORMAL; - m.redraw(true); + m.redraw.sync(); } /** diff --git a/js/src/forum/utils/PostControls.js b/js/src/forum/utils/PostControls.js index 5e0aa691f..b0b49aee9 100644 --- a/js/src/forum/utils/PostControls.js +++ b/js/src/forum/utils/PostControls.js @@ -136,10 +136,12 @@ export default { * @return {Promise} */ editAction() { - app.composer.load(EditPostComposer, { post: this }); - app.composer.show(); + return new Promise((resolve) => { + app.composer.load(EditPostComposer, { post: this }); + app.composer.show(); - return Promise.resolve(app.composer); + return resolve() + }); }, /**