1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-08-05 05:25:29 +02:00

ref: Refactoring

This commit is contained in:
Maksim Eltyshev 2022-08-04 13:31:14 +02:00
parent 1f569bdb61
commit 3714bbc06f
189 changed files with 3781 additions and 3486 deletions

View file

@ -1,15 +1,16 @@
import { createSelector } from 'redux-orm';
import orm from '../orm';
import { currentUserIdSelector } from './user';
export const usersSelector = createSelector(orm, ({ User }) =>
export const selectCurrentUserId = ({ auth: { userId } }) => userId;
export const selectUsers = createSelector(orm, ({ User }) =>
User.getOrderedUndeletedQuerySet().toRefArray(),
);
export const usersExceptCurrentSelector = createSelector(
export const selectUsersExceptCurrent = createSelector(
orm,
(state) => currentUserIdSelector(state),
(state) => selectCurrentUserId(state),
({ User }, id) =>
User.getOrderedUndeletedQuerySet()
.exclude({
@ -17,3 +18,116 @@ export const usersExceptCurrentSelector = createSelector(
})
.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.getOrderedAvailableBoardsModelArray(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.getOrderedMemberBoardsModelArray(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,
};