FEATURE: Add more bulk dismiss buttons with confirmation

This commit is contained in:
Ted Johansson 2024-07-31 15:50:47 +08:00
parent 1a3b9a7352
commit 6d58641137
No known key found for this signature in database
GPG Key ID: 2E801F82D9A4C6E9
5 changed files with 92 additions and 0 deletions

View File

@ -7,6 +7,8 @@ import DropdownMenu from "discourse/components/dropdown-menu";
import BulkTopicActions, {
addBulkDropdownAction,
} from "discourse/components/modal/bulk-topic-actions";
import DismissNew from "discourse/components/modal/dismiss-new";
import DismissReadModal from "discourse/components/modal/dismiss-read";
import concatClass from "discourse/helpers/concat-class";
import icon from "discourse-common/helpers/d-icon";
import i18n from "discourse-common/helpers/i18n";
@ -35,12 +37,25 @@ export function addBulkDropdownButton(opts) {
}
export default class BulkSelectTopicsDropdown extends Component {
@service router;
@service modal;
@service currentUser;
@service siteSettings;
get buttons() {
let options = [
{
id: "dismiss-unread",
icon: "check",
name: i18n("topic_bulk_actions.dismiss.name"),
visible: ({ router }) => router.currentRouteName === "discovery.unread",
},
{
id: "dismiss-new",
icon: "check",
name: i18n("topic_bulk_actions.dismiss.name"),
visible: ({ router }) => router.currentRouteName === "discovery.new",
},
{
id: "update-category",
icon: "pencil",
@ -139,6 +154,7 @@ export default class BulkSelectTopicsDropdown extends Component {
topics: this.args.bulkSelectHelper.selected,
currentUser: this.currentUser,
siteSettings: this.siteSettings,
router: this.router,
});
} else {
return true;
@ -186,6 +202,23 @@ export default class BulkSelectTopicsDropdown extends Component {
await this.dMenu.close();
switch (actionId) {
case "dismiss-unread":
this.modal.show(DismissReadModal, {
model: {
title: "topics.bulk.dismiss_read_with_selected",
count: this.args.bulkSelectHelper.selected.length,
dismissRead: (dismissTopics) => this.dismissRead(dismissTopics),
},
});
break;
case "dismiss-new":
this.modal.show(DismissNew, {
model: {
selectedTopics: this.args.bulkSelectHelper.selected,
dismissCallback: (dismissTopics) => this.dismissRead(dismissTopics),
},
});
break;
case "update-category":
this.showBulkTopicActionsModal(actionId, "change_category", {
description: i18n(`topic_bulk_actions.update_category.description`),
@ -257,6 +290,10 @@ export default class BulkSelectTopicsDropdown extends Component {
}
}
dismissRead(stopTracking) {
this.args.bulkSelectHelper.dismissRead(stopTracking ? "topics" : "posts");
}
@action
onRegisterApi(api) {
this.dMenu = api;

View File

@ -70,6 +70,10 @@
padding: 1rem 1.5rem;
box-sizing: border-box;
&.empty {
display: none;
}
input {
width: auto;

View File

@ -3216,6 +3216,8 @@ en:
filter: "There are no more topics."
topic_bulk_actions:
dismiss:
name: "Dismiss"
close_topics:
name: "Close"
note: "Note"

View File

@ -12,6 +12,10 @@ module PageObjects
find("#bulk-topics-confirm").click
end
def click_dismiss_confirm
find("#dismiss-read-confirm").click
end
def click_silent
find("#topic-bulk-action-options__silent").click
end

View File

@ -24,6 +24,51 @@ describe "Topic bulk select", type: :system do
expect(topic_bulk_actions_modal).to be_open
end
context "when dismissing unread topics" do
fab!(:topic) { Fabricate(:topic, user: admin) }
fab!(:post1) { create_post(user: admin, topic: topic) }
fab!(:post2) { create_post(topic: topic) }
it "removes the topics from the list" do
sign_in(admin)
visit("/unread")
topic_list_header.click_bulk_select_button
expect(topic_list).to have_topic_checkbox(topic)
topic_list.click_topic_checkbox(topic)
topic_list_header.click_bulk_select_topics_dropdown
topic_list_header.click_bulk_button("dismiss-unread")
topic_bulk_actions_modal.click_dismiss_confirm
expect(page).to have_text(I18n.t("js.topics.none.unread"))
end
end
context "when dismissing new topics" do
fab!(:topic) { Fabricate(:topic, user: user) }
fab!(:post1) { create_post(user: user, topic: topic) }
it "removes the topics from the list" do
sign_in(admin)
visit("/new")
topic_list_header.click_bulk_select_button
expect(topic_list).to have_topic_checkbox(topic)
topic_list.click_topic_checkbox(topic)
topic_list_header.click_bulk_select_topics_dropdown
topic_list_header.click_bulk_button("dismiss-new")
topic_bulk_actions_modal.click_dismiss_confirm
expect(page).to have_text(I18n.t("js.topics.none.new"))
end
end
context "when appending tags" do
fab!(:tag1) { Fabricate(:tag) }
fab!(:tag2) { Fabricate(:tag) }