1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-07-24 15:49:46 +02:00
planka/client/src/selectors/users.js
2022-12-26 21:10:50 +01:00

133 lines
3 KiB
JavaScript

import { createSelector } from 'redux-orm';
import orm from '../orm';
export const selectCurrentUserId = ({ auth: { userId } }) => userId;
export const selectUsers = createSelector(orm, ({ User }) =>
User.getOrderedUndeletedQuerySet().toRefArray(),
);
export const selectUsersExceptCurrent = createSelector(
orm,
(state) => selectCurrentUserId(state),
({ User }, id) =>
User.getOrderedUndeletedQuerySet()
.exclude({
id,
})
.toRefArray(),
);
export const selectCurrentUser = createSelector(
orm,
(state) => selectCurrentUserId(state),
({ User }, id) => {
if (!id) {
return id;
}
const userModel = User.withId(id);
if (!userModel) {
return userModel;
}
return userModel.ref;
},
);
export const selectProjectsForCurrentUser = createSelector(
orm,
(state) => selectCurrentUserId(state),
({ User }, id) => {
if (!id) {
return id;
}
const userModel = User.withId(id);
if (!userModel) {
return userModel;
}
return userModel.getOrderedAvailableProjectsModelArray().map((projectModel) => {
const boardsModels = projectModel.getOrderedBoardsModelArrayAvailableForUser(userModel.id);
let notificationsTotal = 0;
boardsModels.forEach((boardModel) => {
boardModel.cards.toModelArray().forEach((cardModel) => {
notificationsTotal += cardModel.getUnreadNotificationsQuerySet().count();
});
});
return {
...projectModel.ref,
notificationsTotal,
firstBoardId: boardsModels[0] && boardsModels[0].id,
};
});
},
);
export const selectProjectsToListsForCurrentUser = createSelector(
orm,
(state) => selectCurrentUserId(state),
({ User }, id) => {
if (!id) {
return id;
}
const userModel = User.withId(id);
if (!userModel) {
return userModel;
}
return userModel.getOrderedAvailableProjectsModelArray().map((projectModel) => ({
...projectModel.ref,
boards: projectModel.getOrderedBoardsModelArrayForUser(id).map((boardModel) => ({
...boardModel.ref,
lists: boardModel.getOrderedListsQuerySet().toRefArray(),
})),
}));
},
);
export const selectNotificationsForCurrentUser = createSelector(
orm,
(state) => selectCurrentUserId(state),
({ User }, id) => {
if (!id) {
return id;
}
const userModel = User.withId(id);
if (!userModel) {
return userModel;
}
return userModel
.getOrderedUnreadNotificationsQuerySet()
.toModelArray()
.map((notificationModel) => ({
...notificationModel.ref,
activity: notificationModel.activity && {
...notificationModel.activity.ref,
user: notificationModel.activity.user.ref,
},
card: notificationModel.card && notificationModel.card.ref,
}));
},
);
export default {
selectCurrentUserId,
selectUsers,
selectUsersExceptCurrent,
selectCurrentUser,
selectProjectsForCurrentUser,
selectProjectsToListsForCurrentUser,
selectNotificationsForCurrentUser,
};