FEATURE: add help text for no bookmarks in user page

This commit is contained in:
Sam 2016-11-29 17:55:39 +11:00
parent efe24f7cc6
commit 266322ce2e
8 changed files with 74 additions and 7 deletions

View File

@ -28,11 +28,21 @@ export default RestModel.extend({
baseUrl: url('itemsLoaded', 'user.username_lower', '/user_actions.json?offset=%@&username=%@'),
filterBy(filter) {
this.setProperties({ filter, itemsLoaded: 0, content: [], lastLoadedUrl: null });
filterBy(filter, noContentHelpKey) {
this.setProperties({
filter,
itemsLoaded: 0,
content: [],
noContentHelpKey: noContentHelpKey,
lastLoadedUrl: null
});
return this.findItems();
},
noContent: function() {
return this.get('loaded') && this.get('content').length === 0;
}.property('loaded', 'content.@each'),
remove(userAction) {
// 1) remove the user action from the child groups
this.get("content").forEach(function (ua) {
@ -61,6 +71,9 @@ export default RestModel.extend({
if (this.get('filterParam')) {
findUrl += "&filter=" + this.get('filterParam');
}
if (this.get('noContentHelpKey')) {
findUrl += "&no_results_help_key=" + this.get('noContentHelpKey');
}
// Don't load the same stream twice. We're probably at the end.
const lastLoadedUrl = this.get('lastLoadedUrl');
@ -69,6 +82,9 @@ export default RestModel.extend({
if (this.get('loading')) { return Ember.RSVP.resolve(); }
this.set('loading', true);
return ajax(findUrl, {cache: 'false'}).then( function(result) {
if (result && result.no_results_help) {
self.set('noContentHelp', result.no_results_help);
}
if (result && result.user_actions) {
const copy = Em.A();
result.user_actions.forEach(function(action) {
@ -78,11 +94,11 @@ export default RestModel.extend({
self.get('content').pushObjects(UserAction.collapseStream(copy));
self.setProperties({
loaded: true,
itemsLoaded: self.get('itemsLoaded') + result.user_actions.length
});
}
}).finally(function() {
self.set('loaded', true);
self.set('loading', false);
self.set('lastLoadedUrl', findUrl);
});

View File

@ -2,5 +2,6 @@ import UserActivityStreamRoute from "discourse/routes/user-activity-stream";
import UserAction from "discourse/models/user-action";
export default UserActivityStreamRoute.extend({
userActionType: UserAction.TYPES["bookmarks"]
userActionType: UserAction.TYPES["bookmarks"],
noContentHelpKey: "user_activity.no_bookmarks"
});

View File

@ -2,5 +2,6 @@ import UserActivityStreamRoute from "discourse/routes/user-activity-stream";
import UserAction from "discourse/models/user-action";
export default UserActivityStreamRoute.extend({
userActionType: UserAction.TYPES["likes_given"]
userActionType: UserAction.TYPES["likes_given"],
noContentHelpKey: 'no_likes_given'
});

View File

@ -6,7 +6,7 @@ export default Discourse.Route.extend(ViewingActionType, {
},
afterModel() {
return this.modelFor("user").get("stream").filterBy(this.get("userActionType"));
return this.modelFor("user").get("stream").filterBy(this.get("userActionType"), this.get("noContentHelpKey"));
},
renderTemplate() {

View File

@ -1,3 +1,8 @@
{{#if model.noContent}}
<div class='no-content'>
{{{model.noContentHelp}}}
</div>
{{/if}}
{{#user-stream stream=model}}
{{#each model.content as |item|}}
{{stream-item item=item removeBookmark="removeBookmark"}}

View File

@ -24,7 +24,21 @@ class UserActionsController < ApplicationController
UserAction.stream(opts)
end
render_serialized(stream, UserActionSerializer, root: 'user_actions')
stream = stream.to_a
if stream.length == 0 && (help_key = params['no_results_help_key'])
if user.id == guardian.user.try(:id)
help_key += ".self"
else
help_key += ".other"
end
render json: {
user_action: [],
no_results_help: I18n.t(help_key)
}
else
render_serialized(stream, UserActionSerializer, root: 'user_actions')
end
end
def show

View File

@ -599,6 +599,14 @@ en:
description: 'Vote for this post'
long_form: 'voted for this post'
user_activity:
no_bookmarks:
self: "You have no bookmarked posts, bookmarking posts allows you to easily access them later on."
other: "No bookmarks."
no_likes_given:
self: "You have not liked any posts."
other: "No liked posts."
topic_flag_types:
spam:
title: 'Spam'

View File

@ -24,6 +24,28 @@ describe UserActionsController do
expect(action["post_number"]).to eq(1)
end
it 'renders help text if provided for self' do
logged_in = log_in
xhr :get, :index, filter: UserAction::LIKE, username: logged_in.username, no_results_help_key: "user_activity.no_bookmarks"
expect(response.status).to eq(200)
parsed = JSON.parse(response.body)
expect(parsed["no_results_help"]).to eq(I18n.t("user_activity.no_bookmarks.self"))
end
it 'renders help text for others' do
user = Fabricate(:user)
xhr :get, :index, filter: UserAction::LIKE, username: user.username, no_results_help_key: "user_activity.no_bookmarks"
expect(response.status).to eq(200)
parsed = JSON.parse(response.body)
expect(parsed["no_results_help"]).to eq(I18n.t("user_activity.no_bookmarks.other"))
end
context "queued posts" do
context "without access" do
let(:user) { Fabricate(:user) }