import computed from "ember-addons/ember-computed-decorators"; import { observes } from "ember-addons/ember-computed-decorators"; import LivePostCounts from "discourse/models/live-post-counts"; export default Ember.Component.extend({ classNameBindings: ["hidden:hidden", ":create-topics-notice"], enabled: false, publicTopicCount: null, publicPostCount: null, requiredTopics: 5, requiredPosts: Ember.computed.alias("siteSettings.tl1_requires_read_posts"), init() { this._super(...arguments); if (this.shouldSee) { let topicCount = 0, postCount = 0; // Use data we already have before fetching live stats this.site.get("categories").forEach(c => { if (!c.get("read_restricted")) { topicCount += c.get("topic_count"); postCount += c.get("post_count"); } }); if (topicCount < this.requiredTopics || postCount < this.requiredPosts) { this.set("enabled", true); this.fetchLiveStats(); } } }, @computed() shouldSee() { const user = this.currentUser; return ( user && user.get("admin") && this.siteSettings.show_create_topics_notice && !this.site.get("wizard_required") ); }, @computed("enabled", "shouldSee", "publicTopicCount", "publicPostCount") hidden() { return ( !this.enabled || !this.shouldSee || this.publicTopicCount == null || this.publicPostCount == null ); }, @computed( "publicTopicCount", "publicPostCount", "topicTrackingState.incomingCount" ) message() { var msg = null; if ( this.publicTopicCount < this.requiredTopics && this.publicPostCount < this.requiredPosts ) { msg = "too_few_topics_and_posts_notice"; } else if (this.publicTopicCount < this.requiredTopics) { msg = "too_few_topics_notice"; } else { msg = "too_few_posts_notice"; } return new Handlebars.SafeString( I18n.t(msg, { requiredTopics: this.requiredTopics, requiredPosts: this.requiredPosts, currentTopics: this.publicTopicCount, currentPosts: this.publicPostCount }) ); }, @observes("topicTrackingState.incomingCount") fetchLiveStats() { if (!this.enabled) { return; } LivePostCounts.find().then(stats => { if (stats) { this.set("publicTopicCount", stats.get("public_topic_count")); this.set("publicPostCount", stats.get("public_post_count")); if ( this.publicTopicCount >= this.requiredTopics && this.publicPostCount >= this.requiredPosts ) { this.set("enabled", false); // No more checks } } }); } });