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 {
|
||||
resource: 'user.userPrivateMessages',
|
||||
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}}
|
||||
{{d-icon "user-plus" class="glyph"}}
|
||||
{{i18n 'discourse_assign.assigned'}}
|
||||
{{/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 {
|
||||
shouldRender(args, component) {
|
||||
const needsButton = component.currentUser && component.currentUser.get('staff');
|
||||
return needsButton && (!component.get('site.mobileView') || args.model.get('isPrivateMessage'));
|
||||
return shouldShowAssigned(args, component);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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|
|
||||
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 = ?
|
||||
)", 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)
|
||||
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