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
8d37c7c6c9
commit
5c032c674c
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,
|
type: ActionTypes.CARD_UPDATE_HANDLE,
|
||||||
payload: {
|
payload: {
|
||||||
card,
|
card,
|
||||||
|
isFetched,
|
||||||
|
cardMemberships,
|
||||||
|
cardLabels,
|
||||||
|
tasks,
|
||||||
|
attachments,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -195,9 +195,6 @@ export default {
|
||||||
CARD_UPDATE__SUCCESS: 'CARD_UPDATE__SUCCESS',
|
CARD_UPDATE__SUCCESS: 'CARD_UPDATE__SUCCESS',
|
||||||
CARD_UPDATE__FAILURE: 'CARD_UPDATE__FAILURE',
|
CARD_UPDATE__FAILURE: 'CARD_UPDATE__FAILURE',
|
||||||
CARD_UPDATE_HANDLE: 'CARD_UPDATE_HANDLE',
|
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: 'CARD_DUPLICATE',
|
||||||
CARD_DUPLICATE__SUCCESS: 'CARD_DUPLICATE__SUCCESS',
|
CARD_DUPLICATE__SUCCESS: 'CARD_DUPLICATE__SUCCESS',
|
||||||
CARD_DUPLICATE__FAILURE: 'CARD_DUPLICATE__FAILURE',
|
CARD_DUPLICATE__FAILURE: 'CARD_DUPLICATE__FAILURE',
|
||||||
|
|
|
@ -28,6 +28,7 @@ export default class extends BaseModel {
|
||||||
case ActionTypes.CORE_INITIALIZE:
|
case ActionTypes.CORE_INITIALIZE:
|
||||||
case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
|
case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
|
||||||
case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
|
case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
|
||||||
|
case ActionTypes.CARD_UPDATE_HANDLE:
|
||||||
if (payload.attachments) {
|
if (payload.attachments) {
|
||||||
payload.attachments.forEach((attachment) => {
|
payload.attachments.forEach((attachment) => {
|
||||||
Attachment.upsert(attachment);
|
Attachment.upsert(attachment);
|
||||||
|
|
|
@ -180,7 +180,6 @@ export default class extends BaseModel {
|
||||||
break;
|
break;
|
||||||
case ActionTypes.CARD_CREATE:
|
case ActionTypes.CARD_CREATE:
|
||||||
case ActionTypes.CARD_UPDATE__SUCCESS:
|
case ActionTypes.CARD_UPDATE__SUCCESS:
|
||||||
case ActionTypes.CARD_UPDATE_HANDLE:
|
|
||||||
Card.upsert(payload.card);
|
Card.upsert(payload.card);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -202,8 +201,40 @@ export default class extends BaseModel {
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ActionTypes.CARD_UPDATE:
|
case ActionTypes.CARD_UPDATE: {
|
||||||
Card.withId(payload.id).update(payload.data);
|
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;
|
break;
|
||||||
case ActionTypes.CARD_DUPLICATE: {
|
case ActionTypes.CARD_DUPLICATE: {
|
||||||
|
|
|
@ -27,6 +27,7 @@ export default class extends BaseModel {
|
||||||
case ActionTypes.CORE_INITIALIZE:
|
case ActionTypes.CORE_INITIALIZE:
|
||||||
case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
|
case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
|
||||||
case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
|
case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
|
||||||
|
case ActionTypes.CARD_UPDATE_HANDLE:
|
||||||
if (payload.tasks) {
|
if (payload.tasks) {
|
||||||
payload.tasks.forEach((task) => {
|
payload.tasks.forEach((task) => {
|
||||||
Task.upsert(task);
|
Task.upsert(task);
|
||||||
|
|
|
@ -81,9 +81,30 @@ export function* updateCurrentCard(data) {
|
||||||
yield call(updateCard, cardId, data);
|
yield call(updateCard, cardId, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: handle card transfer
|
|
||||||
export function* handleCardUpdate(card) {
|
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) {
|
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', {
|
sails.sockets.broadcast(`board:${card.boardId}`, 'cardUpdate', {
|
||||||
item: card,
|
item: card,
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue