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 d6cb1f6683
commit b39119ace4
478 changed files with 21226 additions and 19495 deletions
+94
View File
@@ -0,0 +1,94 @@
import { createSelector } from 'redux-orm';
import orm from '../orm';
import { pathSelector } from './router';
import { currentUserIdSelector } from './user';
import { isLocalId } from '../utils/local-id';
export const currentProjectSelector = createSelector(
orm,
(state) => pathSelector(state).projectId,
({ Project }, id) => {
if (!id) {
return id;
}
const projectModel = Project.withId(id);
if (!projectModel) {
return projectModel;
}
return projectModel.ref;
},
);
export const managersForCurrentProjectSelector = createSelector(
orm,
(state) => pathSelector(state).projectId,
(state) => currentUserIdSelector(state),
({ Project }, id, currentUserId) => {
if (!id) {
return id;
}
const projectModel = Project.withId(id);
if (!projectModel) {
return projectModel;
}
return projectModel
.getOrderedManagersQuerySet()
.toModelArray()
.map((projectManagerModel) => ({
...projectManagerModel.ref,
isPersisted: !isLocalId(projectManagerModel.id),
user: {
...projectManagerModel.user.ref,
isCurrent: projectManagerModel.user.id === currentUserId,
},
}));
},
);
export const boardsForCurrentProjectSelector = createSelector(
orm,
(state) => pathSelector(state).projectId,
(state) => currentUserIdSelector(state),
({ Project }, id, currentUserId) => {
if (!id) {
return id;
}
const projectModel = Project.withId(id);
if (!projectModel) {
return projectModel;
}
return projectModel.getOrderedAvailableBoardsModelArray(currentUserId).map((boardModel) => ({
...boardModel.ref,
isPersisted: !isLocalId(boardModel.id),
}));
},
);
export const isCurrentUserManagerForCurrentProjectSelector = createSelector(
orm,
(state) => pathSelector(state).projectId,
(state) => currentUserIdSelector(state),
({ Project }, id, currentUserId) => {
if (!id) {
return false;
}
const projectModel = Project.withId(id);
if (!projectModel) {
return false;
}
return projectModel.hasManagerUser(currentUserId);
},
);