discourse/plugins/discourse-narrative-bot/assets/javascripts/initializers/new-user-narrative.js

70 lines
2.0 KiB
JavaScript

import { ajax } from "discourse/lib/ajax";
import { withPluginApi } from "discourse/lib/plugin-api";
const PLUGIN_ID = "new-user-narrative";
function initialize(api) {
const messageBus = api.container.lookup("message-bus:main");
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,
_modifyBookmark(bookmark, post) {
// if we are talking to discobot then any bookmarks should just
// be created without reminder options, to streamline the new user
// narrative.
const discobotUserId = -2;
if (post && post.user_id === discobotUserId && !post.bookmarked) {
return ajax("/bookmarks", {
type: "POST",
data: { post_id: post.id },
}).then((response) => {
post.setProperties({
"topic.bookmarked": true,
bookmarked: true,
bookmark_id: response.id,
});
post.appEvents.trigger("post-stream:refresh", { id: this.id });
});
}
return this._super(bookmark, post);
},
});
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-narratve",
initialize(container) {
const siteSettings = container.lookup("site-settings:main");
if (siteSettings.discourse_narrative_bot_enabled) {
withPluginApi("0.8.7", initialize);
}
},
};