1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-07-28 01:29:44 +02:00
planka/client/src/selectors/users.js

134 lines
3 KiB
JavaScript
Raw Normal View History

2019-08-31 04:07:25 +05:00
import { createSelector } from 'redux-orm';
import orm from '../orm';
2022-08-04 13:31:14 +02:00
export const selectCurrentUserId = ({ auth: { userId } }) => userId;
export const selectUsers = createSelector(orm, ({ User }) =>
User.getOrderedUndeletedQuerySet().toRefArray(),
2019-08-31 04:07:25 +05:00
);
2022-08-04 13:31:14 +02:00
export const selectUsersExceptCurrent = createSelector(
2019-08-31 04:07:25 +05:00
orm,
2022-08-04 13:31:14 +02:00
(state) => selectCurrentUserId(state),
({ User }, id) =>
User.getOrderedUndeletedQuerySet()
.exclude({
id,
})
.toRefArray(),
2019-08-31 04:07:25 +05:00
);
2022-08-04 13:31:14 +02:00
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) => {
2022-12-26 21:10:50 +01:00
const boardsModels = projectModel.getOrderedBoardsModelArrayAvailableForUser(userModel.id);
2022-08-04 13:31:14 +02:00
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,
2022-12-26 21:10:50 +01:00
boards: projectModel.getOrderedBoardsModelArrayForUser(id).map((boardModel) => ({
2022-08-04 13:31:14 +02:00
...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,
};