Project managers, board members, auto-update after reconnection, refactoring

This commit is contained in:
Maksim Eltyshev
2021-06-24 01:05:22 +05:00
parent 7956503a46
commit fe91b5241e
478 changed files with 21226 additions and 19495 deletions

107
client/src/selectors/router.js Executable file
View File

@@ -0,0 +1,107 @@
import { createSelector as createReselectSelector } from 'reselect';
import { createSelector as createReduxOrmSelector } from 'redux-orm';
import orm from '../orm';
import { currentUserIdSelector } from './user';
import matchPaths from '../utils/match-paths';
import Paths from '../constants/Paths';
export const pathnameSelector = ({
router: {
location: { pathname },
},
}) => pathname;
export const pathsMatchSelector = createReselectSelector(pathnameSelector, (pathname) =>
matchPaths(pathname, Object.values(Paths)),
);
export const pathSelector = createReduxOrmSelector(
orm,
pathsMatchSelector,
(state) => currentUserIdSelector(state),
({ Project, Board, Card }, pathsMatch, currentUserId) => {
if (pathsMatch) {
switch (pathsMatch.path) {
case Paths.PROJECTS: {
const projectModel = Project.withId(pathsMatch.params.id);
if (!projectModel) {
return {
projectId: null,
};
}
if (!projectModel.hasManagerUser(currentUserId)) {
if (!projectModel.hasMemberUserForAnyBoard(currentUserId)) {
return {
projectId: null,
};
}
}
return {
projectId: projectModel.id,
};
}
case Paths.BOARDS: {
const boardModel = Board.withId(pathsMatch.params.id);
const projectModel = boardModel && boardModel.project;
if (!projectModel) {
return {
boardId: null,
projectId: null,
};
}
if (!projectModel.hasManagerUser(currentUserId)) {
if (!boardModel.hasMemberUser(currentUserId)) {
return {
boardId: null,
projectId: null,
};
}
}
return {
boardId: boardModel.id,
projectId: projectModel.id,
};
}
case Paths.CARDS: {
const cardModel = Card.withId(pathsMatch.params.id);
const boardModel = cardModel && cardModel.board;
const projectModel = boardModel && boardModel.project;
if (!projectModel) {
return {
cardId: null,
boardId: null,
projectId: null,
};
}
if (!projectModel.hasManagerUser(currentUserId)) {
if (!boardModel.hasMemberUser(currentUserId)) {
return {
cardId: null,
boardId: null,
projectId: null,
};
}
}
return {
cardId: cardModel.id,
boardId: boardModel.id,
projectId: projectModel.id,
};
}
default:
}
}
return {};
},
);