From 8b18fd155679fa9b9d6e660ac74130cb79daabdc Mon Sep 17 00:00:00 2001 From: Joffrey JAFFEUX Date: Fri, 19 Jul 2024 22:27:32 +0200 Subject: [PATCH] FIX: do not reload identical route in drawer (#27992) This is a performance optimisation to prevent the same route to keep reloading the same endpoint. No tests as it's not changing behavior and is also quite complex to test efficiently. --- plugins/chat/assets/javascripts/discourse/routes/chat.js | 4 ++++ .../javascripts/discourse/services/chat-drawer-router.js | 1 + .../javascripts/discourse/services/chat-state-manager.js | 2 ++ 3 files changed, 7 insertions(+) diff --git a/plugins/chat/assets/javascripts/discourse/routes/chat.js b/plugins/chat/assets/javascripts/discourse/routes/chat.js index c2e969d7568..3890c297b03 100644 --- a/plugins/chat/assets/javascripts/discourse/routes/chat.js +++ b/plugins/chat/assets/javascripts/discourse/routes/chat.js @@ -34,6 +34,10 @@ export default class ChatRoute extends DiscourseRoute { ) { transition.abort(); + if (this.chatDrawerRouter.currentRouteName === transition.targetName) { + return; + } + let url = transition.intent.url; if (transition.targetName.startsWith("chat.channel")) { url ??= this.router.urlFor( diff --git a/plugins/chat/assets/javascripts/discourse/services/chat-drawer-router.js b/plugins/chat/assets/javascripts/discourse/services/chat-drawer-router.js index 1bfc219c900..8fc5f802f2e 100644 --- a/plugins/chat/assets/javascripts/discourse/services/chat-drawer-router.js +++ b/plugins/chat/assets/javascripts/discourse/services/chat-drawer-router.js @@ -146,6 +146,7 @@ export default class ChatDrawerRouter extends Service { this.drawerRoute = ROUTES[route.name]; this.params = this.drawerRoute?.extractParams?.(route) || route.params; this.component = this.drawerRoute?.name || ChatDrawerRoutesChannels; + this.currentRouteName = route.name; this.drawerRoute.activate?.(route); } diff --git a/plugins/chat/assets/javascripts/discourse/services/chat-state-manager.js b/plugins/chat/assets/javascripts/discourse/services/chat-state-manager.js index 9a48135a243..38c70e9f0d2 100644 --- a/plugins/chat/assets/javascripts/discourse/services/chat-state-manager.js +++ b/plugins/chat/assets/javascripts/discourse/services/chat-state-manager.js @@ -26,6 +26,7 @@ export default class ChatStateManager extends Service { @service chatHistory; @service router; @service site; + @service chatDrawerRouter; @tracked isSidePanelExpanded = false; @tracked isDrawerExpanded = false; @@ -118,6 +119,7 @@ export default class ChatStateManager extends Service { } }); + this.chatDrawerRouter.currentRouteName = null; this.isDrawerActive = false; this.isDrawerExpanded = false; this.chat.updatePresence();