feat: Add ability to link tasks to cards

This commit is contained in:
Maksim Eltyshev
2025-07-11 01:04:02 +02:00
parent 49203e9d56
commit 230f50e3d9
35 changed files with 761 additions and 243 deletions

View File

@@ -322,15 +322,21 @@ export default class extends BaseModel {
payload.data.listChangedAt = new Date(); // eslint-disable-line no-param-reassign
}
if (payload.data.isClosed !== undefined && payload.data.isClosed !== cardModel.isClosed) {
cardModel.linkedTasks.update({
isCompleted: payload.data.isClosed,
});
}
cardModel.update(payload.data);
}
break;
}
case ActionTypes.CARD_UPDATE_HANDLE:
if (payload.card.boardId === null || payload.isFetched) {
const cardModel = Card.withId(payload.card.id);
case ActionTypes.CARD_UPDATE_HANDLE: {
const cardModel = Card.withId(payload.card.id);
if (payload.card.boardId === null || payload.isFetched) {
if (cardModel) {
cardModel.deleteWithRelated();
}
@@ -338,6 +344,12 @@ export default class extends BaseModel {
if (payload.card.boardId !== null) {
Card.upsert(payload.card);
if (cardModel && payload.card.isClosed !== cardModel.isClosed) {
cardModel.linkedTasks.update({
isCompleted: payload.card.isClosed,
});
}
}
if (payload.cardMemberships) {
@@ -353,6 +365,7 @@ export default class extends BaseModel {
}
break;
}
case ActionTypes.CARD_DUPLICATE:
Card.withId(payload.id).duplicate(payload.localId, payload.data);
@@ -623,6 +636,12 @@ export default class extends BaseModel {
taskListModel.deleteWithRelated();
});
this.linkedTasks.toModelArray().forEach((taskModel) => {
taskModel.update({
linkedCardId: null,
});
});
this.attachments.delete();
this.customFieldGroups.toModelArray().forEach((customFieldGroupModel) => {

View File

@@ -137,6 +137,10 @@ export default class extends BaseModel {
cardModel.update({
isClosed,
});
cardModel.linkedTasks.update({
isCompleted: isClosed,
});
});
}
@@ -162,6 +166,10 @@ export default class extends BaseModel {
cardModel.update({
isClosed,
});
cardModel.linkedTasks.update({
isCompleted: isClosed,
});
});
}
} else {

View File

@@ -23,6 +23,11 @@ export default class extends BaseModel {
as: 'taskList',
relatedName: 'tasks',
}),
linkedCardId: fk({
to: 'Card',
as: 'linkedCard',
relatedName: 'linkedTasks',
}),
assigneeUserId: fk({
to: 'User',
as: 'user',