diff --git a/app/assets/javascripts/discourse/components/user-summary-section.js.es6 b/app/assets/javascripts/discourse/components/user-summary-section.js.es6 new file mode 100644 index 00000000000..bc13ab36443 --- /dev/null +++ b/app/assets/javascripts/discourse/components/user-summary-section.js.es6 @@ -0,0 +1,3 @@ +export default Ember.Component.extend({ + classNames: ['top-sub-section'] +}); diff --git a/app/assets/javascripts/discourse/components/user-summary-topic.js.es6 b/app/assets/javascripts/discourse/components/user-summary-topic.js.es6 new file mode 100644 index 00000000000..d100e27e252 --- /dev/null +++ b/app/assets/javascripts/discourse/components/user-summary-topic.js.es6 @@ -0,0 +1,3 @@ +export default Ember.Component.extend({ + tagName: 'li' +}); diff --git a/app/assets/javascripts/discourse/components/user-summary-topics-list.js.es6 b/app/assets/javascripts/discourse/components/user-summary-topics-list.js.es6 new file mode 100644 index 00000000000..ccdf6ef0f9e --- /dev/null +++ b/app/assets/javascripts/discourse/components/user-summary-topics-list.js.es6 @@ -0,0 +1,13 @@ +import computed from 'ember-addons/ember-computed-decorators'; + +// should be kept in sync with 'UserSummary::MAX_SUMMARY_RESULTS' +const MAX_SUMMARY_RESULTS = 6; + +export default Ember.Component.extend({ + tagName: '', + + @computed('items.length') + hasMore(length) { + return length >= MAX_SUMMARY_RESULTS; + } +}); diff --git a/app/assets/javascripts/discourse/components/user-summary-user.js.es6 b/app/assets/javascripts/discourse/components/user-summary-user.js.es6 new file mode 100644 index 00000000000..d100e27e252 --- /dev/null +++ b/app/assets/javascripts/discourse/components/user-summary-user.js.es6 @@ -0,0 +1,3 @@ +export default Ember.Component.extend({ + tagName: 'li' +}); diff --git a/app/assets/javascripts/discourse/controllers/user-summary.js.es6 b/app/assets/javascripts/discourse/controllers/user-summary.js.es6 index c40014854cb..bb4bec20775 100644 --- a/app/assets/javascripts/discourse/controllers/user-summary.js.es6 +++ b/app/assets/javascripts/discourse/controllers/user-summary.js.es6 @@ -1,7 +1,5 @@ import computed from 'ember-addons/ember-computed-decorators'; -// should be kept in sync with 'UserSummary::MAX_SUMMARY_RESULTS' -const MAX_SUMMARY_RESULTS = 6; // should be kept in sync with 'UserSummary::MAX_BADGES' const MAX_BADGES = 6; @@ -9,12 +7,6 @@ export default Ember.Controller.extend({ userController: Ember.inject.controller('user'), user: Ember.computed.alias('userController.model'), - @computed("model.topics.length") - moreTopics(topicsLength) { return topicsLength >= MAX_SUMMARY_RESULTS; }, - - @computed("model.replies.length") - moreReplies(repliesLength) { return repliesLength >= MAX_SUMMARY_RESULTS; }, - @computed("model.badges.length") moreBadges(badgesLength) { return badgesLength >= MAX_BADGES; }, }); diff --git a/app/assets/javascripts/discourse/models/user.js.es6 b/app/assets/javascripts/discourse/models/user.js.es6 index 10a822a4e99..b8adf073d89 100644 --- a/app/assets/javascripts/discourse/models/user.js.es6 +++ b/app/assets/javascripts/discourse/models/user.js.es6 @@ -11,7 +11,6 @@ import UserBadge from 'discourse/models/user-badge'; import UserActionStat from 'discourse/models/user-action-stat'; import UserAction from 'discourse/models/user-action'; import Group from 'discourse/models/group'; -import Topic from 'discourse/models/topic'; import { emojiUnescape } from 'discourse/lib/text'; import PreloadStore from 'preload-store'; import { defaultHomepage } from 'discourse/lib/utilities'; @@ -492,38 +491,39 @@ const User = RestModel.extend({ }, summary() { - return ajax(userPath(`${this.get("username_lower")}/summary.json`)) - .then(json => { - const summary = json["user_summary"]; - const topicMap = {}; - const badgeMap = {}; + let { store } = this; - json.topics.forEach(t => topicMap[t.id] = Topic.create(t)); - Badge.createFromJson(json).forEach(b => badgeMap[b.id] = b ); + return ajax(userPath(`${this.get("username_lower")}/summary.json`)).then(json => { + const summary = json.user_summary; + const topicMap = {}; + const badgeMap = {}; - summary.topics = summary.topic_ids.map(id => topicMap[id]); + json.topics.forEach(t => topicMap[t.id] = store.createRecord('topic', t)); + Badge.createFromJson(json).forEach(b => badgeMap[b.id] = b ); - summary.replies.forEach(r => { - r.topic = topicMap[r.topic_id]; - r.url = r.topic.urlForPostNumber(r.post_number); - r.createdAt = new Date(r.created_at); - }); + summary.topics = summary.topic_ids.map(id => topicMap[id]); - summary.links.forEach(l => { - l.topic = topicMap[l.topic_id]; - l.post_url = l.topic.urlForPostNumber(l.post_number); - }); + summary.replies.forEach(r => { + r.topic = topicMap[r.topic_id]; + r.url = r.topic.urlForPostNumber(r.post_number); + r.createdAt = new Date(r.created_at); + }); - if (summary.badges) { - summary.badges = summary.badges.map(ub => { - const badge = badgeMap[ub.badge_id]; - badge.count = ub.count; - return badge; - }); - } + summary.links.forEach(l => { + l.topic = topicMap[l.topic_id]; + l.post_url = l.topic.urlForPostNumber(l.post_number); + }); - return summary; - }); + if (summary.badges) { + summary.badges = summary.badges.map(ub => { + const badge = badgeMap[ub.badge_id]; + badge.count = ub.count; + return badge; + }); + } + + return summary; + }); }, canManageGroup(group) { diff --git a/app/assets/javascripts/discourse/templates/components/user-stat.hbs b/app/assets/javascripts/discourse/templates/components/user-stat.hbs index 72bfaedac6e..d4ec14677c5 100644 --- a/app/assets/javascripts/discourse/templates/components/user-stat.hbs +++ b/app/assets/javascripts/discourse/templates/components/user-stat.hbs @@ -1,5 +1,7 @@ - {{#if icon}}{{d-icon icon}}{{/if}} {{number value}} -{{{i18n label count=value}}} + + {{#if icon}}{{d-icon icon}}{{/if}} + {{{i18n label count=value}}} + diff --git a/app/assets/javascripts/discourse/templates/components/user-summary-section.hbs b/app/assets/javascripts/discourse/templates/components/user-summary-section.hbs new file mode 100644 index 00000000000..28bdf9d7b8f --- /dev/null +++ b/app/assets/javascripts/discourse/templates/components/user-summary-section.hbs @@ -0,0 +1,2 @@ +
+ {{#link-to (concat "userActivity." type) user class="more"}} + {{i18n (concat "user.summary.more_" type)}} + {{/link-to}} +
+ {{/if}} +{{else}} +{{i18n (concat "user.summary.no_" type)}}
+{{/if}} diff --git a/app/assets/javascripts/discourse/templates/components/user-summary-user.hbs b/app/assets/javascripts/discourse/templates/components/user-summary-user.hbs new file mode 100644 index 00000000000..876702f1957 --- /dev/null +++ b/app/assets/javascripts/discourse/templates/components/user-summary-user.hbs @@ -0,0 +1,4 @@ +{{#user-info user=user}} + {{d-icon icon}} + {{number user.count}} +{{/user-info}} diff --git a/app/assets/javascripts/discourse/templates/components/user-summary-users-list.hbs b/app/assets/javascripts/discourse/templates/components/user-summary-users-list.hbs new file mode 100644 index 00000000000..1b291b638af --- /dev/null +++ b/app/assets/javascripts/discourse/templates/components/user-summary-users-list.hbs @@ -0,0 +1,9 @@ +{{#if users}} +{{i18n (concat "user.summary." none)}}
+{{/if}} diff --git a/app/assets/javascripts/discourse/templates/user/summary.hbs b/app/assets/javascripts/discourse/templates/user/summary.hbs index d28eef4a30a..5ee7df597f5 100644 --- a/app/assets/javascripts/discourse/templates/user/summary.hbs +++ b/app/assets/javascripts/discourse/templates/user/summary.hbs @@ -14,7 +14,7 @@{{#link-to "userActivity.replies" user class="more"}}{{i18n "user.summary.more_replies"}}{{/link-to}}
- {{/if}} - {{else}} -{{i18n "user.summary.no_replies"}}
- {{/if}} -{{#link-to "userActivity.topics" user class="more"}}{{i18n "user.summary.more_topics"}}{{/link-to}}
- {{/if}} - {{else}} -{{i18n "user.summary.no_topics"}}
- {{/if}} -{{i18n "user.summary.no_links"}}
{{/if}} -{{i18n "user.summary.no_replies"}}
- {{/if}} -{{i18n "user.summary.no_likes"}}
- {{/if}} -{{i18n "user.summary.no_likes"}}
- {{/if}} -