1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-07-23 07:09:44 +02:00

Preserve members and labels when transfer card to another board

This commit is contained in:
Maksim Eltyshev 2020-05-09 05:30:52 +05:00
parent 5e0b2b9f0a
commit 044fe17dbf
17 changed files with 321 additions and 64 deletions

View file

@ -20,6 +20,8 @@ export default class extends Model {
static reducer({ type, payload }, Attachment) {
switch (type) {
case ActionTypes.BOARD_FETCH_SUCCEEDED:
case ActionTypes.CARD_CREATE_SUCCEEDED:
case ActionTypes.CARD_CREATE_RECEIVED:
payload.attachments.forEach((attachment) => {
Attachment.upsert(attachment);
});

View file

@ -80,27 +80,15 @@ export default class extends Model {
break;
case ActionTypes.CARD_CREATE:
case ActionTypes.CARD_CREATE_RECEIVED:
case ActionTypes.CARD_FETCH_SUCCEEDED:
case ActionTypes.NOTIFICATION_CREATE_RECEIVED:
Card.upsert(payload.card);
break;
case ActionTypes.CARD_UPDATE: {
const card = Card.withId(payload.id);
// FIXME: hack
if (payload.data.boardId && payload.data.boardId !== card.boardId) {
card.isSubscribed = false;
card.users.clear();
card.labels.clear();
}
card.update(payload.data);
case ActionTypes.CARD_UPDATE:
Card.withId(payload.id).update(payload.data);
break;
}
case ActionTypes.CARD_DELETE:
Card.withId(payload.id).deleteWithRelated();
@ -109,11 +97,36 @@ export default class extends Model {
Card.withId(payload.localId).delete();
Card.upsert(payload.card);
break;
case ActionTypes.CARD_UPDATE_RECEIVED:
Card.withId(payload.card.id).update(payload.card);
payload.cardMemberships.forEach(({ cardId, userId }) => {
Card.withId(cardId).users.add(userId);
});
payload.cardLabels.forEach(({ cardId, labelId }) => {
Card.withId(cardId).labels.add(labelId);
});
break;
case ActionTypes.CARD_CREATE_RECEIVED:
Card.upsert(payload.card);
payload.cardMemberships.forEach(({ cardId, userId }) => {
Card.withId(cardId).users.add(userId);
});
payload.cardLabels.forEach(({ cardId, labelId }) => {
Card.withId(cardId).labels.add(labelId);
});
break;
case ActionTypes.CARD_UPDATE_RECEIVED: {
const card = Card.withId(payload.card.id);
if (card) {
card.update(payload.card);
}
break;
}
case ActionTypes.CARD_DELETE_RECEIVED:
Card.withId(payload.card.id).deleteWithRelated();
@ -177,6 +190,7 @@ export default class extends Model {
deleteWithRelated() {
this.tasks.delete();
this.attachments.delete();
this.actions.delete();
this.delete();

View file

@ -21,6 +21,8 @@ export default class extends Model {
static reducer({ type, payload }, Task) {
switch (type) {
case ActionTypes.BOARD_FETCH_SUCCEEDED:
case ActionTypes.CARD_CREATE_SUCCEEDED:
case ActionTypes.CARD_CREATE_RECEIVED:
payload.tasks.forEach((task) => {
Task.upsert(task);
});