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 } } }); } });