mirror of
https://github.com/discourse/discourse.git
synced 2024-11-29 02:53:41 +08:00
DEV: Update how we determine the presence of a topic in the header (#27138)
# Context
We currently have a tracked value of `topic` in the header service that we utilize across the app for determining the presence of a topic.
A simple example is: If you are in a topic, and scroll down the page, we need to communicate to the header that a topic is present and we change the styling of the header.
The issue with this logic is that when entering a topic (and you are at the top of the page), we **haven't** set the topic on the header service yet. We only set the topic when you have scrolled down on the page (set by `app/components/discourse-topic.js`)
This is unhelpful behavior when you are utilizing a plugin outlet that is receiving the `topic` from the header:
17add599e3/app/assets/javascripts/discourse/app/components/header/topic/info.gjs (L85)
As the `topic` won't be present until you scroll down the page.
# Changes
This PR adds a tracked `inTopic` value to the header service that is a boolean value. This is to let the app know
> Yes, we are scrolled within a topic
And instead sets the tracked `topic` value immediately, if you are loading a topic, to allow the necessary data to be populated to the plugin outlets on page load.
This commit is contained in:
parent
531fc1d754
commit
caa29ec973
|
@ -56,7 +56,7 @@ export default Component.extend(Scrolling, MobileScrollDirection, {
|
|||
|
||||
_hideTopicInHeader() {
|
||||
this.appEvents.trigger("header:hide-topic");
|
||||
this.header.topic = null;
|
||||
this.header.inTopic = false;
|
||||
this._lastShowTopic = false;
|
||||
},
|
||||
|
||||
|
@ -65,7 +65,7 @@ export default Component.extend(Scrolling, MobileScrollDirection, {
|
|||
return;
|
||||
}
|
||||
this.appEvents.trigger("header:show-topic", topic);
|
||||
this.header.topic = topic;
|
||||
this.header.inTopic = true;
|
||||
this._lastShowTopic = true;
|
||||
},
|
||||
|
||||
|
|
|
@ -242,7 +242,7 @@ export default class GlimmerHeader extends Component {
|
|||
</div>
|
||||
<PluginOutlet
|
||||
@name="after-header"
|
||||
@outletArgs={{hash minimized=(globalThis.Boolean this.header.topic)}}
|
||||
@outletArgs={{hash minimized=this.header.inTopic}}
|
||||
/>
|
||||
</header>
|
||||
</template>
|
||||
|
|
|
@ -8,7 +8,7 @@ export default class AuthButtons extends Component {
|
|||
|
||||
<template>
|
||||
<span class="auth-buttons">
|
||||
{{#if (and @canSignUp (not this.header.topic))}}
|
||||
{{#if (and @canSignUp (not this.header.inTopic))}}
|
||||
<DButton
|
||||
class="btn-primary btn-small sign-up-button"
|
||||
@action={{@showCreateAccount}}
|
||||
|
|
|
@ -16,7 +16,7 @@ export default class Contents extends Component {
|
|||
@service sidebarState;
|
||||
|
||||
get topicPresent() {
|
||||
return !!this.header.topic;
|
||||
return this.header.inTopic;
|
||||
}
|
||||
|
||||
get sidebarIcon() {
|
||||
|
@ -45,7 +45,7 @@ export default class Contents extends Component {
|
|||
</PluginOutlet>
|
||||
</div>
|
||||
|
||||
{{#if this.header.topic}}
|
||||
{{#if this.header.inTopic}}
|
||||
<TopicInfo @topic={{this.header.topic}} />
|
||||
{{else if
|
||||
(and
|
||||
|
|
|
@ -10,6 +10,7 @@ import { isTesting } from "discourse-common/config/environment";
|
|||
// This route is used for retrieving a topic based on params
|
||||
export default DiscourseRoute.extend({
|
||||
composer: service(),
|
||||
header: service(),
|
||||
|
||||
// Avoid default model hook
|
||||
model(params) {
|
||||
|
@ -44,6 +45,8 @@ export default DiscourseRoute.extend({
|
|||
if (topic.isPrivateMessage && topic.suggested_topics) {
|
||||
this.pmTopicTrackingState.startTracking();
|
||||
}
|
||||
|
||||
this.header.topic = topic;
|
||||
},
|
||||
|
||||
deactivate() {
|
||||
|
|
|
@ -7,6 +7,7 @@ export default class Header extends Service {
|
|||
@service siteSettings;
|
||||
|
||||
@tracked topic = null;
|
||||
@tracked inTopic = false;
|
||||
@tracked hamburgerVisible = false;
|
||||
@tracked userVisible = false;
|
||||
@tracked anyWidgetHeaderOverrides = false;
|
||||
|
|
Loading…
Reference in New Issue
Block a user