From ae9517b37a20e7bed188dea935a4b766daa074c6 Mon Sep 17 00:00:00 2001 From: Maksim Eltyshev Date: Tue, 9 Dec 2025 21:23:27 +0100 Subject: [PATCH] fix: Prevent clearing linked tasks when soft deleting --- client/src/models/Board.js | 16 ++++++++-------- client/src/models/Card.js | 24 +++++++++++++----------- client/src/models/List.js | 12 ++++++------ client/src/models/Project.js | 20 ++++++++++---------- 4 files changed, 37 insertions(+), 35 deletions(-) diff --git a/client/src/models/Board.js b/client/src/models/Board.js index 7b1241b4..74353429 100755 --- a/client/src/models/Board.js +++ b/client/src/models/Board.js @@ -115,7 +115,7 @@ export default class extends BaseModel { isFetching: null, }); - boardModel.deleteRelated(payload.currentUserId); + boardModel.deleteRelated(payload.currentUserId, true); } }); @@ -135,7 +135,7 @@ export default class extends BaseModel { .toModelArray() .forEach((boardModel) => { if (!payload.boardIds.includes(boardModel.id)) { - boardModel.deleteWithRelated(); + boardModel.deleteWithRelated(true); } }); @@ -434,9 +434,9 @@ export default class extends BaseModel { ); } - deleteListsWithRelated() { + deleteListsWithRelated(soft) { this.lists.toModelArray().forEach((listModel) => { - listModel.deleteWithRelated(); + listModel.deleteWithRelated(soft); }); } @@ -445,7 +445,7 @@ export default class extends BaseModel { this.filterLabels.clear(); } - deleteRelated(exceptMemberUserId) { + deleteRelated(exceptMemberUserId, soft) { this.deleteClearable(); this.memberships.toModelArray().forEach((boardMembershipModel) => { @@ -458,7 +458,7 @@ export default class extends BaseModel { labelModel.deleteWithRelated(); }); - this.deleteListsWithRelated(); + this.deleteListsWithRelated(soft); this.notificationServices.delete(); } @@ -467,8 +467,8 @@ export default class extends BaseModel { this.delete(); } - deleteWithRelated() { - this.deleteRelated(); + deleteWithRelated(soft) { + this.deleteRelated(undefined, soft); this.delete(); } } diff --git a/client/src/models/Card.js b/client/src/models/Card.js index 70f62e35..d4afc07e 100755 --- a/client/src/models/Card.js +++ b/client/src/models/Card.js @@ -273,7 +273,7 @@ export default class extends BaseModel { const cardModel = Card.withId(card.id); if (cardModel) { - cardModel.deleteWithRelated(); + cardModel.deleteWithRelated(true); } Card.upsert(card); @@ -346,7 +346,7 @@ export default class extends BaseModel { if (payload.card.boardId === null || payload.isFetched) { if (cardModel) { - cardModel.deleteWithRelated(); + cardModel.deleteWithRelated(true); } } @@ -388,7 +388,7 @@ export default class extends BaseModel { const cardModel = Card.withId(payload.card.id); if (cardModel) { - cardModel.deleteWithRelated(); + cardModel.deleteWithRelated(true); } Card.upsert(payload.card); @@ -411,7 +411,7 @@ export default class extends BaseModel { const cardModel = Card.withId(payload.id); if (cardModel) { - cardModel.deleteWithRelated(); + cardModel.deleteWithRelated(true); } if (payload.card) { @@ -756,18 +756,20 @@ export default class extends BaseModel { this.labels.clear(); } - deleteRelated() { + deleteRelated(soft = false) { this.deleteClearable(); this.taskLists.toModelArray().forEach((taskListModel) => { taskListModel.deleteWithRelated(); }); - this.linkedTasks.toModelArray().forEach((taskModel) => { - taskModel.update({ - linkedCardId: null, + if (!soft) { + this.linkedTasks.toModelArray().forEach((taskModel) => { + taskModel.update({ + linkedCardId: null, + }); }); - }); + } this.attachments.delete(); @@ -784,8 +786,8 @@ export default class extends BaseModel { this.delete(); } - deleteWithRelated() { - this.deleteRelated(); + deleteWithRelated(soft) { + this.deleteRelated(soft); this.delete(); } } diff --git a/client/src/models/List.js b/client/src/models/List.js index b9c91db9..2c8d72a0 100755 --- a/client/src/models/List.js +++ b/client/src/models/List.js @@ -136,7 +136,7 @@ export default class extends BaseModel { const listModel = List.withId(payload.id); if (payload.data.boardId && payload.data.boardId !== listModel.boardId) { - listModel.deleteWithRelated(); + listModel.deleteWithRelated(true); } else { let isClosed; if (payload.data.type) { @@ -171,7 +171,7 @@ export default class extends BaseModel { if (listModel) { if (payload.list.boardId === null || payload.isFetched) { - listModel.deleteWithRelated(); + listModel.deleteWithRelated(true); } if (payload.list.boardId !== null) { @@ -435,14 +435,14 @@ export default class extends BaseModel { }); } - deleteRelated() { + deleteRelated(soft) { this.cards.toModelArray().forEach((cardModel) => { - cardModel.deleteWithRelated(); + cardModel.deleteWithRelated(soft); }); } - deleteWithRelated() { - this.deleteRelated(); + deleteWithRelated(soft) { + this.deleteRelated(soft); this.delete(); } } diff --git a/client/src/models/Project.js b/client/src/models/Project.js index f15d9f52..f2c602d7 100755 --- a/client/src/models/Project.js +++ b/client/src/models/Project.js @@ -69,7 +69,7 @@ export default class extends BaseModel { .toModelArray() .forEach((projectModel) => { if (!payload.projectIds.includes(projectModel.id)) { - projectModel.deleteWithRelated(); + projectModel.deleteWithRelated(true); } }); @@ -97,11 +97,11 @@ export default class extends BaseModel { if (payload.isAvailable) { projectModel.boards.toModelArray().forEach((boardModel) => { if (!payload.boardIds.includes(boardModel.id)) { - boardModel.deleteWithRelated(); + boardModel.deleteWithRelated(true); } }); } else { - projectModel.deleteWithRelated(); + projectModel.deleteWithRelated(true); } } @@ -134,11 +134,11 @@ export default class extends BaseModel { boardModel.notificationServices.delete(); } } else { - boardModel.deleteWithRelated(); + boardModel.deleteWithRelated(true); } }); } else { - projectModel.deleteWithRelated(); + projectModel.deleteWithRelated(true); } } @@ -153,7 +153,7 @@ export default class extends BaseModel { const projectModel = Project.withId(payload.boardMembership.projectId); if (projectModel) { - projectModel.deleteWithRelated(); + projectModel.deleteWithRelated(true); } } @@ -231,7 +231,7 @@ export default class extends BaseModel { ); } - deleteRelated() { + deleteRelated(soft) { this.managers.delete(); this.backgroundImages.toModelArray().forEach((backgroundImageModel) => { @@ -243,12 +243,12 @@ export default class extends BaseModel { }); this.boards.toModelArray().forEach((boardModel) => { - boardModel.deleteWithRelated(); + boardModel.deleteWithRelated(soft); }); } - deleteWithRelated() { - this.deleteRelated(); + deleteWithRelated(soft) { + this.deleteRelated(soft); this.delete(); } }