From 35980ad56eea2204ffef37d2ba55030f48091835 Mon Sep 17 00:00:00 2001 From: Bianca Nenciu Date: Thu, 17 Nov 2022 00:12:54 +0200 Subject: [PATCH] FIX: Update user options only once (#19066) * FIX: Update user options only once Performing actions that updated list of seen popups used to update user options everytime instead of checking if the change has any effect. * FIX: Load updated user data from response --- .../discourse/app/controllers/topic.js | 2 +- .../javascripts/discourse/app/models/user.js | 18 +++++++++++++----- .../discourse/app/widgets/post-menu.js | 6 ++++-- .../javascripts/discourse/app/widgets/post.js | 2 +- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/app/assets/javascripts/discourse/app/controllers/topic.js b/app/assets/javascripts/discourse/app/controllers/topic.js index 56a5b6ba4b8..eca4aca13dd 100644 --- a/app/assets/javascripts/discourse/app/controllers/topic.js +++ b/app/assets/javascripts/discourse/app/controllers/topic.js @@ -611,7 +611,7 @@ export default Controller.extend(bufferedProperty("model"), { // Post related methods replyToPost(post) { - if (this.currentUser) { + if (this.currentUser && this.siteSettings.enable_user_tips) { this.currentUser.hideUserTipForever("post_menu"); } diff --git a/app/assets/javascripts/discourse/app/models/user.js b/app/assets/javascripts/discourse/app/models/user.js index 74fa836ee90..1843ce0d467 100644 --- a/app/assets/javascripts/discourse/app/models/user.js +++ b/app/assets/javascripts/discourse/app/models/user.js @@ -449,11 +449,13 @@ const User = RestModel.extend({ .then((result) => { this.set("bio_excerpt", result.user.bio_excerpt); const userProps = getProperties( - this.user_option, + result.user.user_option || this.user_option, "enable_quoting", "enable_defer", "external_links_in_new_tab", - "dynamic_favicon" + "dynamic_favicon", + "seen_popups", + "skip_new_user_tips" ); User.current()?.setProperties(userProps); this.setProperties(updatedState); @@ -1171,11 +1173,17 @@ const User = RestModel.extend({ // Hide any shown user tips. let seenUserTips = this.seen_popups || []; if (userTipId) { - hideUserTip(userTipId); - if (!seenUserTips.includes(userTips[userTipId])) { - seenUserTips.push(userTips[userTipId]); + if (seenUserTips.includes(userTips[userTipId])) { + return; } + + hideUserTip(userTipId); + seenUserTips.push(userTips[userTipId]); } else { + if (seenUserTips.includes(-1)) { + return; + } + hideAllUserTips(); seenUserTips = [-1]; } diff --git a/app/assets/javascripts/discourse/app/widgets/post-menu.js b/app/assets/javascripts/discourse/app/widgets/post-menu.js index acb62372224..3b0e10f8b39 100644 --- a/app/assets/javascripts/discourse/app/widgets/post-menu.js +++ b/app/assets/javascripts/discourse/app/widgets/post-menu.js @@ -711,7 +711,7 @@ export default createWidget("post-menu", { }, showMoreActions() { - if (this.currentUser) { + if (this.currentUser && this.siteSettings.enable_user_tips) { this.currentUser.hideUserTipForever("post_menu"); } @@ -734,7 +734,9 @@ export default createWidget("post-menu", { keyValueStore && keyValueStore.set({ key: "likedPostId", value: attrs.id }); return this.sendWidgetAction("showLogin"); - } else { + } + + if (this.currentUser && this.siteSettings.enable_user_tips) { this.currentUser.hideUserTipForever("post_menu"); } diff --git a/app/assets/javascripts/discourse/app/widgets/post.js b/app/assets/javascripts/discourse/app/widgets/post.js index 7ba5afe0b06..950d5f4f77b 100644 --- a/app/assets/javascripts/discourse/app/widgets/post.js +++ b/app/assets/javascripts/discourse/app/widgets/post.js @@ -594,7 +594,7 @@ createWidget("post-contents", { }, share() { - if (this.currentUser) { + if (this.currentUser && this.siteSettings.enable_user_tips) { this.currentUser.hideUserTipForever("post_menu"); }