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

@@ -7,6 +7,7 @@ import { createSelector } from 'redux-orm';
import orm from '../orm';
import { selectPath } from './router';
import { selectCurrentUserId } from './users';
import { isLocalId } from '../utils/local-id';
import { BoardContexts, ListTypes } from '../constants/Enums';
@@ -64,6 +65,22 @@ export const makeSelectFilteredCardIdsByListId = () =>
export const selectFilteredCardIdsByListId = makeSelectFilteredCardIdsByListId();
export const selectIsListWithIdAvailableForCurrentUser = createSelector(
orm,
(_, id) => id,
(state) => selectCurrentUserId(state),
({ List, User }, id, currentUserId) => {
const listModel = List.withId(id);
if (!listModel) {
return false;
}
const currentUserModel = User.withId(currentUserId);
return listModel.isAvailableForUser(currentUserModel);
},
);
export const selectCurrentListId = createSelector(
orm,
(state) => selectPath(state).boardId,
@@ -154,6 +171,7 @@ export default {
selectCardIdsByListId,
makeSelectFilteredCardIdsByListId,
selectFilteredCardIdsByListId,
selectIsListWithIdAvailableForCurrentUser,
selectCurrentListId,
selectCurrentList,
selectFirstFiniteListId,

View File

@@ -197,6 +197,35 @@ export const selectFavoriteProjectIdsForCurrentUser = createSelector(
},
);
export const selectProjectsToBoardsWithEditorRightsForCurrentUser = createSelector(
orm,
(state) => selectCurrentUserId(state),
({ User }, id) => {
if (!id) {
return id;
}
const userModel = User.withId(id);
if (!userModel) {
return userModel;
}
return userModel.getMembershipProjectsModelArray().map((projectModel) => ({
...projectModel.ref,
boards: projectModel.getBoardsModelArrayForUserWithId(id).flatMap((boardModel) => {
const boardMembersipModel = boardModel.getMembershipModelByUserId(id);
if (boardMembersipModel.role !== BoardMembershipRoles.EDITOR) {
return [];
}
return boardModel.ref;
}),
}));
},
);
export const selectProjectsToListsWithEditorRightsForCurrentUser = createSelector(
orm,
(state) => selectCurrentUserId(state),
@@ -334,6 +363,7 @@ export default {
selectFilteredProjectIdsForCurrentUser,
selectFilteredProjctIdsByGroupForCurrentUser,
selectFavoriteProjectIdsForCurrentUser,
selectProjectsToBoardsWithEditorRightsForCurrentUser,
selectProjectsToListsWithEditorRightsForCurrentUser,
selectBoardIdsForCurrentUser,
selectNotificationIdsForCurrentUser,