Merge pull request #11 from discourse/split_out_archived_assigned_topics
FEATURE: Add `archive` tab for assigned topics.
This commit is contained in:
commit
b92988a586
|
@ -1,6 +1,7 @@
|
||||||
export default {
|
export default {
|
||||||
resource: 'user.userPrivateMessages',
|
resource: 'user.userPrivateMessages',
|
||||||
map() {
|
map() {
|
||||||
this.route('assigned');
|
this.route('assigned');
|
||||||
|
this.route('assignedArchived');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
{{#link-to 'userPrivateMessages.assignedArchived' model}}
|
||||||
|
{{i18n 'user.messages.archive'}}
|
||||||
|
{{/link-to}}
|
|
@ -0,0 +1,11 @@
|
||||||
|
import { shouldShowAssigned } from "discourse/plugins/discourse-assign/discourse-assign/connectors/user-messages-nav/assigned-messages";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
setupComponent() {
|
||||||
|
this.set('classNames', ['archive']);
|
||||||
|
},
|
||||||
|
|
||||||
|
shouldRender(args, component) {
|
||||||
|
return shouldShowAssigned(args, component);
|
||||||
|
}
|
||||||
|
};
|
|
@ -1,3 +1,4 @@
|
||||||
{{#link-to 'userPrivateMessages.assigned' model}}
|
{{#link-to 'userPrivateMessages.assigned' model}}
|
||||||
|
{{d-icon "user-plus" class="glyph"}}
|
||||||
{{i18n 'discourse_assign.assigned'}}
|
{{i18n 'discourse_assign.assigned'}}
|
||||||
{{/link-to}}
|
{{/link-to}}
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
|
export function shouldShowAssigned(args, component) {
|
||||||
|
const needsButton = component.currentUser && component.currentUser.get('staff');
|
||||||
|
return needsButton && (!component.get('site.mobileView') || args.model.get('isPrivateMessage'));
|
||||||
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
shouldRender(args, component) {
|
shouldRender(args, component) {
|
||||||
const needsButton = component.currentUser && component.currentUser.get('staff');
|
return shouldShowAssigned(args, component);
|
||||||
return needsButton && (!component.get('site.mobileView') || args.model.get('isPrivateMessage'));
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
import createPMRoute from "discourse/routes/build-private-messages-route";
|
||||||
|
|
||||||
|
export default createPMRoute('assignedArchived', 'private-messages-assigned').extend({
|
||||||
|
model() {
|
||||||
|
return this.store.findFiltered("topicList", {
|
||||||
|
filter: `topics/private-messages-assigned/${this.modelFor("user").get("username_lower")}`,
|
||||||
|
params: { status: "archived" }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
19
plugin.rb
19
plugin.rb
|
@ -115,9 +115,24 @@ after_initialize do
|
||||||
|
|
||||||
add_to_class(:topic_query, :list_private_messages_assigned) do |user|
|
add_to_class(:topic_query, :list_private_messages_assigned) do |user|
|
||||||
list = private_messages_for(user, :all)
|
list = private_messages_for(user, :all)
|
||||||
list = list.where("topics.id IN (
|
user_id = user.id.to_s
|
||||||
|
|
||||||
|
list = list
|
||||||
|
.joins("LEFT JOIN group_archived_messages gm ON gm.topic_id = topics.id")
|
||||||
|
.joins("
|
||||||
|
LEFT JOIN user_archived_messages um ON um.topic_id = topics.id AND um.user_id = #{user_id}
|
||||||
|
")
|
||||||
|
.where("topics.id IN (
|
||||||
SELECT topic_id FROM topic_custom_fields WHERE name = 'assigned_to_id' AND value = ?
|
SELECT topic_id FROM topic_custom_fields WHERE name = 'assigned_to_id' AND value = ?
|
||||||
)", user.id.to_s)
|
)", user_id)
|
||||||
|
|
||||||
|
list =
|
||||||
|
if @options[:status] == "archived"
|
||||||
|
list.where("gm.topic_id IS NOT NULL OR um.topic_id IS NOT NULL")
|
||||||
|
else
|
||||||
|
list.where("gm.topic_id IS NULL AND um.topic_id IS NULL")
|
||||||
|
end
|
||||||
|
|
||||||
create_list(:private_messages, {}, list)
|
create_list(:private_messages, {}, list)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,90 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
describe TopicQuery do
|
||||||
|
describe '#list_private_messages_assigned' do
|
||||||
|
let(:user) { Fabricate(:user) }
|
||||||
|
let(:user2) { Fabricate(:user) }
|
||||||
|
|
||||||
|
let(:user_topic) do
|
||||||
|
Fabricate(:private_message_topic,
|
||||||
|
topic_allowed_users: [
|
||||||
|
Fabricate.build(:topic_allowed_user, user: user),
|
||||||
|
Fabricate.build(:topic_allowed_user, user: user2)
|
||||||
|
],
|
||||||
|
posts: [Fabricate(:post)]
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:assigned_topic) do
|
||||||
|
topic = Fabricate(:private_message_topic,
|
||||||
|
topic_allowed_users: [
|
||||||
|
Fabricate.build(:topic_allowed_user, user: user),
|
||||||
|
Fabricate.build(:topic_allowed_user, user: user2)
|
||||||
|
],
|
||||||
|
posts: [Fabricate(:post)]
|
||||||
|
)
|
||||||
|
|
||||||
|
TopicAssigner.new(topic, user).assign(user)
|
||||||
|
topic
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:group) { Fabricate(:group).add(user) }
|
||||||
|
|
||||||
|
let(:group_assigned_topic) do
|
||||||
|
topic = Fabricate(:private_message_topic,
|
||||||
|
topic_allowed_users: [],
|
||||||
|
topic_allowed_groups: [
|
||||||
|
Fabricate.build(:topic_allowed_group, group: group)
|
||||||
|
],
|
||||||
|
posts: [Fabricate(:post)]
|
||||||
|
)
|
||||||
|
|
||||||
|
TopicAssigner.new(topic, user).assign(user)
|
||||||
|
topic
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:options) { { status: 'archived' } }
|
||||||
|
|
||||||
|
before do
|
||||||
|
SiteSetting.assign_enabled = true
|
||||||
|
user_topic
|
||||||
|
assigned_topic
|
||||||
|
group_assigned_topic
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return the right topics' do
|
||||||
|
expect(TopicQuery.new(user).list_private_messages_assigned(user).topics)
|
||||||
|
.to contain_exactly(assigned_topic, group_assigned_topic)
|
||||||
|
|
||||||
|
UserArchivedMessage.archive!(user2.id, assigned_topic.id)
|
||||||
|
|
||||||
|
expect(
|
||||||
|
TopicQuery.new(user).list_private_messages_assigned(user).topics
|
||||||
|
).to contain_exactly(assigned_topic, group_assigned_topic)
|
||||||
|
|
||||||
|
expect(
|
||||||
|
TopicQuery.new(user, options).list_private_messages_assigned(user).topics
|
||||||
|
).to eq([])
|
||||||
|
|
||||||
|
UserArchivedMessage.archive!(user.id, assigned_topic.id)
|
||||||
|
|
||||||
|
expect(
|
||||||
|
TopicQuery.new(user).list_private_messages_assigned(user).topics
|
||||||
|
).to contain_exactly(group_assigned_topic)
|
||||||
|
|
||||||
|
expect(
|
||||||
|
TopicQuery.new(user, options).list_private_messages_assigned(user).topics
|
||||||
|
).to contain_exactly(assigned_topic)
|
||||||
|
|
||||||
|
GroupArchivedMessage.archive!(group.id, group_assigned_topic.id)
|
||||||
|
|
||||||
|
expect(
|
||||||
|
TopicQuery.new(user).list_private_messages_assigned(user).topics
|
||||||
|
).to eq([])
|
||||||
|
|
||||||
|
expect(
|
||||||
|
TopicQuery.new(user, options).list_private_messages_assigned(user).topics
|
||||||
|
).to contain_exactly(assigned_topic, group_assigned_topic)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue