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(); if (this.get("shouldSee")) { let topicCount = 0, postCount = 0; // Use data we already have before fetching live stats _.each(this.site.get("categories"), function(c) { if (!c.get("read_restricted")) { topicCount += c.get("topic_count"); postCount += c.get("post_count"); } }); if ( topicCount < this.get("requiredTopics") || postCount < this.get("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.get("enabled") || !this.get("shouldSee") || this.get("publicTopicCount") == null || this.get("publicPostCount") == null ); }, @computed( "publicTopicCount", "publicPostCount", "topicTrackingState.incomingCount" ) message() { var msg = null; if ( this.get("publicTopicCount") < this.get("requiredTopics") && this.get("publicPostCount") < this.get("requiredPosts") ) { msg = "too_few_topics_and_posts_notice"; } else if (this.get("publicTopicCount") < this.get("requiredTopics")) { msg = "too_few_topics_notice"; } else { msg = "too_few_posts_notice"; } return new Handlebars.SafeString( I18n.t(msg, { requiredTopics: this.get("requiredTopics"), requiredPosts: this.get("requiredPosts"), currentTopics: this.get("publicTopicCount"), currentPosts: this.get("publicPostCount") }) ); }, @observes("topicTrackingState.incomingCount") fetchLiveStats() { if (!this.get("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.get("publicTopicCount") >= this.get("requiredTopics") && this.get("publicPostCount") >= this.get("requiredPosts") ) { this.set("enabled", false); // No more checks } } }); } });