Initial commit
This commit is contained in:
405
client/src/selectors/current.js
Executable file
405
client/src/selectors/current.js
Executable file
@@ -0,0 +1,405 @@
|
||||
import { createSelector } from 'redux-orm';
|
||||
|
||||
import orm from '../orm';
|
||||
import { dbSelector } from './common';
|
||||
import { pathSelector } from './path';
|
||||
import { isLocalId } from '../utils/local-id';
|
||||
|
||||
export const currentModalSelector = ({ app: { currentModal } }) => currentModal;
|
||||
|
||||
export const currentUserIdSelector = ({ auth: { userId } }) => userId;
|
||||
|
||||
export const currentUserSelector = createSelector(
|
||||
orm,
|
||||
dbSelector,
|
||||
(state) => currentUserIdSelector(state),
|
||||
({ User }, id) => {
|
||||
if (!id) {
|
||||
return id;
|
||||
}
|
||||
|
||||
const userModel = User.withId(id);
|
||||
|
||||
if (!userModel) {
|
||||
return userModel;
|
||||
}
|
||||
|
||||
return userModel.ref;
|
||||
},
|
||||
);
|
||||
|
||||
export const projectsForCurrentUserSelector = createSelector(
|
||||
orm,
|
||||
dbSelector,
|
||||
(state) => currentUserIdSelector(state),
|
||||
({ User }, id) => {
|
||||
if (!id) {
|
||||
return id;
|
||||
}
|
||||
|
||||
const userModel = User.withId(id);
|
||||
|
||||
if (!userModel) {
|
||||
return userModel;
|
||||
}
|
||||
|
||||
return userModel
|
||||
.getOrderedProjectMembershipsQuerySet()
|
||||
.toModelArray()
|
||||
.map(({ project: projectModel }) => {
|
||||
let notificationsTotal = 0;
|
||||
projectModel.boards.toModelArray().forEach((boardModel) => {
|
||||
boardModel.cards.toModelArray().forEach((cardModel) => {
|
||||
notificationsTotal += cardModel.getUnreadNotificationsQuerySet().count();
|
||||
});
|
||||
});
|
||||
|
||||
const firstBoard = projectModel.boards.first();
|
||||
const firstBoardId = firstBoard && firstBoard.id;
|
||||
|
||||
return {
|
||||
...projectModel.ref,
|
||||
notificationsTotal,
|
||||
firstBoardId,
|
||||
};
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
export const notificationsForCurrentUserSelector = createSelector(
|
||||
orm,
|
||||
dbSelector,
|
||||
(state) => currentUserIdSelector(state),
|
||||
({ User }, id) => {
|
||||
if (!id) {
|
||||
return id;
|
||||
}
|
||||
|
||||
const userModel = User.withId(id);
|
||||
|
||||
if (!userModel) {
|
||||
return userModel;
|
||||
}
|
||||
|
||||
return userModel
|
||||
.getOrderedUnreadNotificationsQuerySet()
|
||||
.toModelArray()
|
||||
.map((notificationModel) => ({
|
||||
...notificationModel.ref,
|
||||
action: notificationModel.action && {
|
||||
...notificationModel.action.ref,
|
||||
user: notificationModel.action.user.ref,
|
||||
},
|
||||
card: notificationModel.card && notificationModel.card.ref,
|
||||
}));
|
||||
},
|
||||
);
|
||||
|
||||
export const currentProjectSelector = createSelector(
|
||||
orm,
|
||||
dbSelector,
|
||||
(state) => pathSelector(state).projectId,
|
||||
({ Project }, id) => {
|
||||
if (!id) {
|
||||
return id;
|
||||
}
|
||||
|
||||
const projectModel = Project.withId(id);
|
||||
|
||||
if (!projectModel) {
|
||||
return projectModel;
|
||||
}
|
||||
|
||||
return projectModel.ref;
|
||||
},
|
||||
);
|
||||
|
||||
export const membershipsForCurrentProjectSelector = createSelector(
|
||||
orm,
|
||||
dbSelector,
|
||||
(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
|
||||
.getOrderedMembershipsQuerySet()
|
||||
.toModelArray()
|
||||
.map((projectMembershipModel) => ({
|
||||
...projectMembershipModel.ref,
|
||||
isPersisted: !isLocalId(projectMembershipModel.id),
|
||||
user: {
|
||||
...projectMembershipModel.user.ref,
|
||||
isCurrent: projectMembershipModel.user.id === currentUserId,
|
||||
},
|
||||
}));
|
||||
},
|
||||
);
|
||||
|
||||
export const boardsForCurrentProjectSelector = createSelector(
|
||||
orm,
|
||||
dbSelector,
|
||||
(state) => pathSelector(state).projectId,
|
||||
({ Project }, id) => {
|
||||
if (!id) {
|
||||
return id;
|
||||
}
|
||||
|
||||
const projectModel = Project.withId(id);
|
||||
|
||||
if (!projectModel) {
|
||||
return projectModel;
|
||||
}
|
||||
|
||||
return projectModel
|
||||
.getOrderedBoardsQuerySet()
|
||||
.toRefArray()
|
||||
.map((board) => ({
|
||||
...board,
|
||||
isPersisted: !isLocalId(board.id),
|
||||
}));
|
||||
},
|
||||
);
|
||||
|
||||
export const currentBoardSelector = createSelector(
|
||||
orm,
|
||||
dbSelector,
|
||||
(state) => pathSelector(state).boardId,
|
||||
({ Board }, id) => {
|
||||
if (!id) {
|
||||
return id;
|
||||
}
|
||||
|
||||
const boardModel = Board.withId(id);
|
||||
|
||||
if (!boardModel) {
|
||||
return boardModel;
|
||||
}
|
||||
|
||||
return boardModel.ref;
|
||||
},
|
||||
);
|
||||
|
||||
export const listIdsForCurrentBoardSelector = createSelector(
|
||||
orm,
|
||||
dbSelector,
|
||||
(state) => pathSelector(state).boardId,
|
||||
({ Board }, id) => {
|
||||
if (!id) {
|
||||
return id;
|
||||
}
|
||||
|
||||
const boardModel = Board.withId(id);
|
||||
|
||||
if (!boardModel) {
|
||||
return boardModel;
|
||||
}
|
||||
|
||||
return boardModel
|
||||
.getOrderedListsQuerySet()
|
||||
.toRefArray()
|
||||
.map((list) => list.id);
|
||||
},
|
||||
);
|
||||
|
||||
export const labelsForCurrentBoardSelector = createSelector(
|
||||
orm,
|
||||
dbSelector,
|
||||
(state) => pathSelector(state).boardId,
|
||||
({ Board }, id) => {
|
||||
if (!id) {
|
||||
return id;
|
||||
}
|
||||
|
||||
const boardModel = Board.withId(id);
|
||||
|
||||
if (!boardModel) {
|
||||
return boardModel;
|
||||
}
|
||||
|
||||
return boardModel.labels.toRefArray().map((label) => ({
|
||||
...label,
|
||||
isPersisted: !isLocalId(label.id),
|
||||
}));
|
||||
},
|
||||
);
|
||||
|
||||
export const filterUsersForCurrentBoardSelector = createSelector(
|
||||
orm,
|
||||
dbSelector,
|
||||
(state) => pathSelector(state).boardId,
|
||||
({ Board }, id) => {
|
||||
if (!id) {
|
||||
return id;
|
||||
}
|
||||
|
||||
const boardModel = Board.withId(id);
|
||||
|
||||
if (!boardModel) {
|
||||
return boardModel;
|
||||
}
|
||||
|
||||
return boardModel.filterUsers.toRefArray();
|
||||
},
|
||||
);
|
||||
|
||||
export const filterLabelsForCurrentBoardSelector = createSelector(
|
||||
orm,
|
||||
dbSelector,
|
||||
(state) => pathSelector(state).boardId,
|
||||
({ Board }, id) => {
|
||||
if (!id) {
|
||||
return id;
|
||||
}
|
||||
|
||||
const boardModel = Board.withId(id);
|
||||
|
||||
if (!boardModel) {
|
||||
return boardModel;
|
||||
}
|
||||
|
||||
return boardModel.filterLabels.toRefArray();
|
||||
},
|
||||
);
|
||||
|
||||
export const currentCardSelector = createSelector(
|
||||
orm,
|
||||
dbSelector,
|
||||
(state) => pathSelector(state).cardId,
|
||||
({ Card }, id) => {
|
||||
if (!id) {
|
||||
return id;
|
||||
}
|
||||
|
||||
const cardModel = Card.withId(id);
|
||||
|
||||
if (!cardModel) {
|
||||
return cardModel;
|
||||
}
|
||||
|
||||
return cardModel.ref;
|
||||
},
|
||||
);
|
||||
|
||||
export const usersForCurrentCardSelector = createSelector(
|
||||
orm,
|
||||
dbSelector,
|
||||
(state) => pathSelector(state).cardId,
|
||||
({ Card }, id) => {
|
||||
if (!id) {
|
||||
return id;
|
||||
}
|
||||
|
||||
const cardModel = Card.withId(id);
|
||||
|
||||
if (!cardModel) {
|
||||
return cardModel;
|
||||
}
|
||||
|
||||
return cardModel.users.toRefArray();
|
||||
},
|
||||
);
|
||||
|
||||
export const labelsForCurrentCardSelector = createSelector(
|
||||
orm,
|
||||
dbSelector,
|
||||
(state) => pathSelector(state).cardId,
|
||||
({ Card }, id) => {
|
||||
if (!id) {
|
||||
return id;
|
||||
}
|
||||
|
||||
const cardModel = Card.withId(id);
|
||||
|
||||
if (!cardModel) {
|
||||
return cardModel;
|
||||
}
|
||||
|
||||
return cardModel.labels.toRefArray();
|
||||
},
|
||||
);
|
||||
|
||||
export const tasksForCurrentCardSelector = createSelector(
|
||||
orm,
|
||||
dbSelector,
|
||||
(state) => pathSelector(state).cardId,
|
||||
({ Card }, id) => {
|
||||
if (!id) {
|
||||
return id;
|
||||
}
|
||||
|
||||
const cardModel = Card.withId(id);
|
||||
|
||||
if (!cardModel) {
|
||||
return cardModel;
|
||||
}
|
||||
|
||||
return cardModel
|
||||
.getOrderedTasksQuerySet()
|
||||
.toRefArray()
|
||||
.map((task) => ({
|
||||
...task,
|
||||
isPersisted: !isLocalId(task.id),
|
||||
}));
|
||||
},
|
||||
);
|
||||
|
||||
export const actionsForCurrentCardSelector = createSelector(
|
||||
orm,
|
||||
dbSelector,
|
||||
(state) => pathSelector(state).cardId,
|
||||
(state) => currentUserIdSelector(state),
|
||||
({ Card }, id, currentUserId) => {
|
||||
if (!id) {
|
||||
return id;
|
||||
}
|
||||
|
||||
const cardModel = Card.withId(id);
|
||||
|
||||
if (!cardModel) {
|
||||
return cardModel;
|
||||
}
|
||||
|
||||
return cardModel
|
||||
.getOrderedInCardActionsQuerySet()
|
||||
.toModelArray()
|
||||
.map((actionModel) => ({
|
||||
...actionModel.ref,
|
||||
isPersisted: !isLocalId(actionModel.id),
|
||||
user: {
|
||||
...actionModel.user.ref,
|
||||
isCurrent: actionModel.user.id === currentUserId,
|
||||
},
|
||||
}));
|
||||
},
|
||||
);
|
||||
|
||||
export const notificationIdsForCurrentCardSelector = createSelector(
|
||||
orm,
|
||||
dbSelector,
|
||||
(state) => pathSelector(state).cardId,
|
||||
({ Card }, id) => {
|
||||
if (!id) {
|
||||
return id;
|
||||
}
|
||||
|
||||
const cardModel = Card.withId(id);
|
||||
|
||||
if (!cardModel) {
|
||||
return cardModel;
|
||||
}
|
||||
|
||||
return cardModel
|
||||
.getUnreadNotificationsQuerySet()
|
||||
.toRefArray()
|
||||
.map((notification) => notification.id);
|
||||
},
|
||||
);
|
||||
Reference in New Issue
Block a user