discourse/plugins/discourse-narrative-bot/assets/javascripts/initializers/new-user-narrative.js
Jarek Radosz ef31c7df63
DEV: Remove unused new-user-narrative code (#19299)
This method override was misnamed from the beginning and nobody noticed that this special bookmark handling was missing so…
2022-12-02 17:46:49 +01:00

100 lines
2.8 KiB
JavaScript

import { debounce } from "discourse-common/utils/decorators";
import { headerOffset } from "discourse/lib/offset-calculator";
import isElementInViewport from "discourse/lib/is-element-in-viewport";
import { withPluginApi } from "discourse/lib/plugin-api";
const PLUGIN_ID = "new-user-narrative";
function initialize(api) {
const messageBus = api.container.lookup("service:message-bus");
const currentUser = api.getCurrentUser();
const appEvents = api.container.lookup("service:app-events");
api.modifyClass("component:site-header", {
pluginId: PLUGIN_ID,
didInsertElement() {
this._super(...arguments);
this.dispatch("header:search-context-trigger", "header");
},
});
api.modifyClass("controller:topic", {
pluginId: PLUGIN_ID,
subscribe() {
this._super(...arguments);
this.messageBus.subscribe(`/topic/${this.model.id}`, (data) => {
const topic = this.model;
// scroll only for discobot (-2 is discobot id)
if (
topic.isPrivateMessage &&
this.currentUser &&
this.currentUser.id !== data.user_id &&
data.user_id === -2 &&
data.type === "created"
) {
const postNumber = data.post_number;
const notInPostStream =
topic.get("highest_post_number") <= postNumber;
const postNumberDifference = postNumber - topic.currentPost;
if (
notInPostStream &&
postNumberDifference > 0 &&
postNumberDifference < 7
) {
this._scrollToDiscobotPost(data.post_number);
}
}
});
// No need to unsubscribe, core unsubscribes /topic/* routes
},
@debounce(500)
_scrollToDiscobotPost(postNumber) {
const post = document.querySelector(
`.topic-post article#post_${postNumber}`
);
if (!post || isElementInViewport(post)) {
return;
}
const viewportOffset = post.getBoundingClientRect();
window.scrollTo({
top: window.scrollY + viewportOffset.top - headerOffset(),
behavior: "smooth",
});
},
});
api.attachWidgetAction("header", "headerSearchContextTrigger", function () {
if (this.site.mobileView) {
this.state.skipSearchContext = false;
} else {
this.state.contextEnabled = true;
this.state.searchContextType = "topic";
}
});
if (messageBus && currentUser) {
messageBus.subscribe(`/new_user_narrative/tutorial_search`, () => {
appEvents.trigger("header:search-context-trigger");
});
}
}
export default {
name: "new-user-narrative",
initialize(container) {
const siteSettings = container.lookup("service:site-settings");
if (siteSettings.discourse_narrative_bot_enabled) {
withPluginApi("0.8.7", initialize);
}
},
};