feat: Add ability to move lists between boards (#1208)

This commit is contained in:
Symon Baikov
2025-09-04 01:07:10 +03:00
committed by GitHub
parent 5f34a737bb
commit 9683227fbc
58 changed files with 950 additions and 263 deletions

View File

@@ -58,6 +58,7 @@ export default class extends BaseModel {
case ActionTypes.PROJECT_UPDATE_HANDLE:
case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
case ActionTypes.LIST_UPDATE_HANDLE:
case ActionTypes.CARD_UPDATE_HANDLE:
if (payload.attachments) {
payload.attachments.forEach((attachment) => {

View File

@@ -88,6 +88,7 @@ export default class extends BaseModel {
case ActionTypes.PROJECT_UPDATE_HANDLE:
case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
case ActionTypes.LIST_UPDATE_HANDLE:
if (payload.cards) {
payload.cards.forEach((card) => {
Card.upsert(card);

View File

@@ -36,6 +36,7 @@ export default class extends BaseModel {
case ActionTypes.PROJECT_UPDATE_HANDLE:
case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
case ActionTypes.LIST_UPDATE_HANDLE:
case ActionTypes.CARD_UPDATE_HANDLE:
if (payload.customFields) {
payload.customFields.forEach((customField) => {

View File

@@ -40,6 +40,7 @@ export default class extends BaseModel {
case ActionTypes.PROJECT_UPDATE_HANDLE:
case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
case ActionTypes.LIST_UPDATE_HANDLE:
case ActionTypes.CARD_UPDATE_HANDLE:
if (payload.customFieldGroups) {
payload.customFieldGroups.forEach((customFieldGroup) => {

View File

@@ -51,6 +51,7 @@ export default class extends BaseModel {
case ActionTypes.PROJECT_UPDATE_HANDLE:
case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
case ActionTypes.LIST_UPDATE_HANDLE:
case ActionTypes.CARD_UPDATE_HANDLE:
if (payload.customFieldValues) {
payload.customFieldValues.forEach((customFieldValue) => {

View File

@@ -135,47 +135,21 @@ export default class extends BaseModel {
case ActionTypes.LIST_UPDATE: {
const listModel = List.withId(payload.id);
let isClosed;
if (payload.data.type) {
const changedTypeState = getChangedTypeState(listModel, payload.data);
if (changedTypeState === ListTypeStates.OPENED) {
isClosed = false;
} else if (changedTypeState === ListTypeStates.CLOSED) {
isClosed = true;
}
}
listModel.update(payload.data);
if (isClosed !== undefined) {
listModel.cards.toModelArray().forEach((cardModel) => {
cardModel.update({
isClosed,
});
cardModel.linkedTasks.update({
isCompleted: isClosed,
});
});
}
break;
}
case ActionTypes.LIST_UPDATE_HANDLE: {
const listModel = List.withId(payload.list.id);
if (listModel) {
const changedTypeState = getChangedTypeState(listModel, payload.list);
if (payload.data.boardId && payload.data.boardId !== listModel.boardId) {
listModel.deleteWithRelated();
} else {
let isClosed;
if (changedTypeState === ListTypeStates.OPENED) {
isClosed = false;
} else if (changedTypeState === ListTypeStates.CLOSED) {
isClosed = true;
if (payload.data.type) {
const changedTypeState = getChangedTypeState(listModel, payload.data);
if (changedTypeState === ListTypeStates.OPENED) {
isClosed = false;
} else if (changedTypeState === ListTypeStates.CLOSED) {
isClosed = true;
}
}
listModel.update(prepareList(payload.list));
listModel.update(payload.data);
if (isClosed !== undefined) {
listModel.cards.toModelArray().forEach((cardModel) => {
@@ -188,7 +162,44 @@ export default class extends BaseModel {
});
});
}
} else {
}
break;
}
// TODO: refactor
case ActionTypes.LIST_UPDATE_HANDLE: {
const listModel = List.withId(payload.list.id);
if (listModel) {
if (payload.list.boardId === null || payload.isFetched) {
listModel.deleteWithRelated();
}
if (payload.list.boardId !== null) {
const changedTypeState = getChangedTypeState(listModel, payload.list);
let isClosed;
if (changedTypeState === ListTypeStates.OPENED) {
isClosed = false;
} else if (changedTypeState === ListTypeStates.CLOSED) {
isClosed = true;
}
listModel.update(prepareList(payload.list));
if (isClosed !== undefined) {
listModel.cards.toModelArray().forEach((cardModel) => {
cardModel.update({
isClosed,
});
cardModel.linkedTasks.update({
isCompleted: isClosed,
});
});
}
}
} else if (payload.list.boardId !== null) {
List.upsert(prepareList(payload.list));
}

View File

@@ -43,6 +43,7 @@ export default class extends BaseModel {
case ActionTypes.PROJECT_UPDATE_HANDLE:
case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
case ActionTypes.LIST_UPDATE_HANDLE:
case ActionTypes.CARD_UPDATE_HANDLE:
if (payload.tasks) {
payload.tasks.forEach((task) => {

View File

@@ -32,6 +32,7 @@ export default class extends BaseModel {
case ActionTypes.PROJECT_UPDATE_HANDLE:
case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
case ActionTypes.LIST_UPDATE_HANDLE:
case ActionTypes.CARD_UPDATE_HANDLE:
if (payload.taskLists) {
payload.taskLists.forEach((taskList) => {

View File

@@ -93,6 +93,7 @@ export default class extends BaseModel {
case ActionTypes.LOCATION_CHANGE_HANDLE:
case ActionTypes.PROJECT_UPDATE_HANDLE:
case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
case ActionTypes.LIST_UPDATE_HANDLE:
case ActionTypes.CARD_UPDATE_HANDLE:
if (payload.users) {
payload.users.forEach((user) => {