mirror of
https://github.com/plankanban/planka.git
synced 2025-07-19 13:19:44 +02:00
fix: Fix incorrect related data when transferring card
Closes #431, closes #803
This commit is contained in:
parent
72896a66b3
commit
7acaec6d04
7 changed files with 74 additions and 9 deletions
|
@ -57,10 +57,15 @@ updateCard.failure = (id, error) => ({
|
|||
},
|
||||
});
|
||||
|
||||
const handleCardUpdate = (card) => ({
|
||||
const handleCardUpdate = (card, isFetched, cardMemberships, cardLabels, tasks, attachments) => ({
|
||||
type: ActionTypes.CARD_UPDATE_HANDLE,
|
||||
payload: {
|
||||
card,
|
||||
isFetched,
|
||||
cardMemberships,
|
||||
cardLabels,
|
||||
tasks,
|
||||
attachments,
|
||||
},
|
||||
});
|
||||
|
||||
|
|
|
@ -195,9 +195,6 @@ export default {
|
|||
CARD_UPDATE__SUCCESS: 'CARD_UPDATE__SUCCESS',
|
||||
CARD_UPDATE__FAILURE: 'CARD_UPDATE__FAILURE',
|
||||
CARD_UPDATE_HANDLE: 'CARD_UPDATE_HANDLE',
|
||||
CARD_TRANSFER: 'CARD_TRANSFER',
|
||||
CARD_TRANSFER__SUCCESS: 'CARD_TRANSFER__SUCCESS',
|
||||
CARD_TRANSFER__FAILURE: 'CARD_TRANSFER__FAILURE',
|
||||
CARD_DUPLICATE: 'CARD_DUPLICATE',
|
||||
CARD_DUPLICATE__SUCCESS: 'CARD_DUPLICATE__SUCCESS',
|
||||
CARD_DUPLICATE__FAILURE: 'CARD_DUPLICATE__FAILURE',
|
||||
|
|
|
@ -28,6 +28,7 @@ export default class extends BaseModel {
|
|||
case ActionTypes.CORE_INITIALIZE:
|
||||
case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
|
||||
case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
|
||||
case ActionTypes.CARD_UPDATE_HANDLE:
|
||||
if (payload.attachments) {
|
||||
payload.attachments.forEach((attachment) => {
|
||||
Attachment.upsert(attachment);
|
||||
|
|
|
@ -180,7 +180,6 @@ export default class extends BaseModel {
|
|||
break;
|
||||
case ActionTypes.CARD_CREATE:
|
||||
case ActionTypes.CARD_UPDATE__SUCCESS:
|
||||
case ActionTypes.CARD_UPDATE_HANDLE:
|
||||
Card.upsert(payload.card);
|
||||
|
||||
break;
|
||||
|
@ -202,8 +201,40 @@ export default class extends BaseModel {
|
|||
|
||||
break;
|
||||
}
|
||||
case ActionTypes.CARD_UPDATE:
|
||||
Card.withId(payload.id).update(payload.data);
|
||||
case ActionTypes.CARD_UPDATE: {
|
||||
const cardModel = Card.withId(payload.id);
|
||||
|
||||
// TODO: introduce separate action?
|
||||
if (payload.data.boardId && payload.data.boardId !== cardModel.boardId) {
|
||||
cardModel.deleteWithRelated();
|
||||
} else {
|
||||
cardModel.update(payload.data);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case ActionTypes.CARD_UPDATE_HANDLE:
|
||||
if (payload.isFetched) {
|
||||
const cardModel = Card.withId(payload.card.id);
|
||||
|
||||
if (cardModel) {
|
||||
cardModel.deleteWithRelated();
|
||||
}
|
||||
}
|
||||
|
||||
Card.upsert(payload.card);
|
||||
|
||||
if (payload.cardMemberships) {
|
||||
payload.cardMemberships.forEach(({ cardId, userId }) => {
|
||||
Card.withId(cardId).users.add(userId);
|
||||
});
|
||||
}
|
||||
|
||||
if (payload.cardLabels) {
|
||||
payload.cardLabels.forEach(({ cardId, labelId }) => {
|
||||
Card.withId(cardId).labels.add(labelId);
|
||||
});
|
||||
}
|
||||
|
||||
break;
|
||||
case ActionTypes.CARD_DUPLICATE: {
|
||||
|
|
|
@ -27,6 +27,7 @@ export default class extends BaseModel {
|
|||
case ActionTypes.CORE_INITIALIZE:
|
||||
case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
|
||||
case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
|
||||
case ActionTypes.CARD_UPDATE_HANDLE:
|
||||
if (payload.tasks) {
|
||||
payload.tasks.forEach((task) => {
|
||||
Task.upsert(task);
|
||||
|
|
|
@ -81,9 +81,30 @@ export function* updateCurrentCard(data) {
|
|||
yield call(updateCard, cardId, data);
|
||||
}
|
||||
|
||||
// TODO: handle card transfer
|
||||
export function* handleCardUpdate(card) {
|
||||
yield put(actions.handleCardUpdate(card));
|
||||
let fetch = false;
|
||||
if (card.boardId) {
|
||||
const prevCard = yield select(selectors.selectCardById, card.id);
|
||||
fetch = !prevCard || prevCard.boardId !== card.boardId;
|
||||
}
|
||||
|
||||
let cardMemberships;
|
||||
let cardLabels;
|
||||
let tasks;
|
||||
let attachments;
|
||||
|
||||
if (fetch) {
|
||||
try {
|
||||
({
|
||||
item: card, // eslint-disable-line no-param-reassign
|
||||
included: { cardMemberships, cardLabels, tasks, attachments },
|
||||
} = yield call(request, api.getCard, card.id));
|
||||
} catch (error) {
|
||||
fetch = false;
|
||||
}
|
||||
}
|
||||
|
||||
yield put(actions.handleCardUpdate(card, fetch, cardMemberships, cardLabels, tasks, attachments));
|
||||
}
|
||||
|
||||
export function* moveCard(id, listId, index = 0) {
|
||||
|
|
|
@ -204,6 +204,15 @@ module.exports = {
|
|||
),
|
||||
);
|
||||
|
||||
sails.sockets.broadcast(
|
||||
`board:${inputs.record.boardId}`,
|
||||
'cardDelete', // TODO: introduce separate event
|
||||
{
|
||||
item: inputs.record,
|
||||
},
|
||||
inputs.request,
|
||||
);
|
||||
|
||||
sails.sockets.broadcast(`board:${card.boardId}`, 'cardUpdate', {
|
||||
item: card,
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue