FIX: allow tl4 to bulk select (#19094)

* FIX: allow tl4 to bulk select

- Also allows tl4 to perform batch tagging

---

Long term this needs to be rewritten to account for "bulk action" permission
given from the server.

Co-authored-by: Martin Brennan <martin@discourse.org>
This commit is contained in:
Sam 2022-11-18 10:41:59 +11:00 committed by GitHub
parent 2b7e73d7ff
commit 60abe99add
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 109 additions and 5 deletions

View File

@ -12,7 +12,7 @@ export default Component.extend(LoadMore, {
classNameBindings: ["bulkSelectEnabled:sticky-header"],
showTopicPostBadges: true,
listTitle: "topic.title",
canDoBulkActions: and("currentUser.staff", "selected.length"),
canDoBulkActions: and("currentUser.canManageTopic", "selected.length"),
// Overwrite this to perform client side filtering of topics, if desired
filteredTopics: alias("topics"),

View File

@ -89,7 +89,7 @@ addBulkButton("showTagTopics", "change_tags", {
class: "btn-default",
enabledSetting: "tagging_enabled",
buttonVisible() {
return this.currentUser.staff;
return this.currentUser.canManageTopic;
},
});
addBulkButton("showAppendTagTopics", "append_tags", {
@ -97,7 +97,7 @@ addBulkButton("showAppendTagTopics", "append_tags", {
class: "btn-default",
enabledSetting: "tagging_enabled",
buttonVisible() {
return this.currentUser.staff;
return this.currentUser.canManageTopic;
},
});
addBulkButton("removeTags", "remove_tags", {
@ -105,7 +105,7 @@ addBulkButton("removeTags", "remove_tags", {
class: "btn-default",
enabledSetting: "tagging_enabled",
buttonVisible() {
return this.currentUser.staff;
return this.currentUser.canManageTopic;
},
});
addBulkButton("deleteTopics", "delete", {

View File

@ -13,7 +13,11 @@ export default Mixin.create({
selected: null,
lastChecked: null,
canBulkSelect: or("currentUser.staff", "showDismissRead", "showResetNew"),
canBulkSelect: or(
"currentUser.canManageTopic",
"showDismissRead",
"showResetNew"
),
@on("init")
resetSelected() {

View File

@ -1,6 +1,7 @@
import {
acceptance,
count,
exists,
invisible,
query,
queryAll,
@ -156,4 +157,103 @@ acceptance("Topic - Bulk Actions", function (needs) {
"Bottom-up Shift click range selection works"
);
});
test("bulk select is not available for users who are not staff or TL4", async function (assert) {
updateCurrentUser({ moderator: false, admin: false, trust_level: 1 });
await visit("/latest");
assert.notOk(
exists(".button.bulk-select"),
"non-staff and < TL4 users cannot bulk select"
);
});
test("TL4 users can bulk select", async function (assert) {
updateCurrentUser({ moderator: false, admin: false, trust_level: 4 });
await visit("/latest");
await click("button.bulk-select");
await click(queryAll("input.bulk-select")[0]);
await click(queryAll("input.bulk-select")[1]);
await click(".bulk-select-actions");
assert.ok(
query("#discourse-modal-title").innerHTML.includes(
I18n.t("topics.bulk.actions")
),
"it opens bulk-select modal"
);
assert.ok(
query(".bulk-buttons").innerHTML.includes(
I18n.t("topics.bulk.change_category")
),
"it shows an option to change category"
);
assert.ok(
query(".bulk-buttons").innerHTML.includes(
I18n.t("topics.bulk.close_topics")
),
"it shows an option to close topics"
);
assert.ok(
query(".bulk-buttons").innerHTML.includes(
I18n.t("topics.bulk.archive_topics")
),
"it shows an option to archive topics"
);
assert.ok(
query(".bulk-buttons").innerHTML.includes(
I18n.t("topics.bulk.notification_level")
),
"it shows an option to update notification level"
);
assert.notOk(
query(".bulk-buttons").innerHTML.includes(I18n.t("topics.bulk.defer")),
"it does not show an option to reset read"
);
assert.ok(
query(".bulk-buttons").innerHTML.includes(
I18n.t("topics.bulk.unlist_topics")
),
"it shows an option to unlist topics"
);
assert.ok(
query(".bulk-buttons").innerHTML.includes(
I18n.t("topics.bulk.reset_bump_dates")
),
"it shows an option to reset bump dates"
);
assert.ok(
query(".bulk-buttons").innerHTML.includes(
I18n.t("topics.bulk.change_tags")
),
"it shows an option to replace tags"
);
assert.ok(
query(".bulk-buttons").innerHTML.includes(
I18n.t("topics.bulk.append_tags")
),
"it shows an option to append tags"
);
assert.ok(
query(".bulk-buttons").innerHTML.includes(
I18n.t("topics.bulk.remove_tags")
),
"it shows an option to remove all tags"
);
assert.notOk(
query(".bulk-buttons").innerHTML.includes(I18n.t("topics.bulk.delete")),
"it does not show an option to delete topics"
);
});
});