summaryrefslogtreecommitdiff
path: root/client/js/controllers/post_list_controller.js
diff options
context:
space:
mode:
authorHunternif <hunternif@gmail.com>2025-02-15 18:12:57 +0000
committerHunternif <hunternif@gmail.com>2025-02-15 18:12:57 +0000
commit6a5300502df8b4de9c8f269b444cd309f02b28ad (patch)
tree0cf2ba56bce802c94ad324f9eda7a31d37a42e2e /client/js/controllers/post_list_controller.js
parent34e7c883808738871aed371948a3c9896a95905c (diff)
parent376f687c386f65522b2f65e98b998b21af26ee29 (diff)
Merge branch 'master' into hunternif
Diffstat (limited to 'client/js/controllers/post_list_controller.js')
-rw-r--r--client/js/controllers/post_list_controller.js51
1 files changed, 51 insertions, 0 deletions
diff --git a/client/js/controllers/post_list_controller.js b/client/js/controllers/post_list_controller.js
index 7a8ff9e..0146e9e 100644
--- a/client/js/controllers/post_list_controller.js
+++ b/client/js/controllers/post_list_controller.js
@@ -47,6 +47,7 @@ class PostListController {
canBulkEditTags: api.hasPrivilege("posts:bulk-edit:tags"),
canBulkEditSafety: api.hasPrivilege("posts:bulk-edit:safety"),
canViewMetrics: api.hasPrivilege("metrics:list"),
+ canBulkDelete: api.hasPrivilege("posts:bulk-edit:delete"),
bulkEdit: {
tags: this._bulkEditTags,
},
@@ -55,6 +56,16 @@ class PostListController {
this._evtNavigate(e)
);
+ if (this._headerView._bulkDeleteEditor) {
+ this._headerView._bulkDeleteEditor.addEventListener(
+ "deleteSelectedPosts",
+ (e) => {
+ this._evtDeleteSelectedPosts(e);
+ }
+ );
+ }
+
+ this._postsMarkedForDeletion = [];
this._syncPageController();
}
@@ -143,6 +154,38 @@ class PostListController {
this._ctx.parameters.relations = relations.join(" ") || " ";
}
+ _evtMarkForDeletion(e) {
+ const postId = e.detail;
+
+ // Add or remove post from delete list
+ if (e.detail.delete) {
+ this._postsMarkedForDeletion.push(e.detail.post);
+ } else {
+ this._postsMarkedForDeletion = this._postsMarkedForDeletion.filter(
+ (x) => x.id != e.detail.post.id
+ );
+ }
+ }
+
+ _evtDeleteSelectedPosts(e) {
+ if (this._postsMarkedForDeletion.length == 0) return;
+
+ if (
+ confirm(
+ `Are you sure you want to delete ${this._postsMarkedForDeletion.length} posts?`
+ )
+ ) {
+ Promise.all(
+ this._postsMarkedForDeletion.map((post) => post.delete())
+ )
+ .catch((error) => window.alert(error.message))
+ .then(() => {
+ this._postsMarkedForDeletion = [];
+ this._headerView._navigate();
+ });
+ }
+ }
+
_syncPageController() {
this._pageController.run({
parameters: this._ctx.parameters,
@@ -177,6 +220,11 @@ class PostListController {
tags: this._bulkEditTags,
relations: this._ctx.parameters.relations,
},
+ canBulkDelete: api.hasPrivilege("posts:bulk-edit:delete"),
+ bulkEdit: {
+ tags: this._bulkEditTags,
+ markedForDeletion: this._postsMarkedForDeletion,
+ },
postFlow: settings.get().postFlow,
});
const view = new PostsPageView(pageCtx);
@@ -191,6 +239,9 @@ class PostListController {
view.addEventListener("removeRelation", (e) =>
this._evtRemoveRelation(e)
);
+ view.addEventListener("markForDeletion", (e) =>
+ this._evtMarkForDeletion(e)
+ );
return view;
},
readPageFromCache: (rawPage) => PostList.fromResponse(rawPage),