Files
planka_custom/client/src/selectors/by-id.js
T
2020-03-25 00:15:47 +05:00

166 lines
3.4 KiB
JavaScript
Executable File

import { createSelector } from 'redux-orm';
import orm from '../orm';
import { isLocalId } from '../utils/local-id';
export const makeBoardByIdSelector = () =>
createSelector(
orm,
(_, id) => id,
({ Board }, id) => {
const boardModel = Board.withId(id);
if (!boardModel) {
return boardModel;
}
return boardModel.ref;
},
);
export const makeListByIdSelector = () =>
createSelector(
orm,
(_, id) => id,
({ List }, id) => {
const listModel = List.withId(id);
if (!listModel) {
return listModel;
}
return {
...listModel.ref,
isPersisted: !isLocalId(id),
};
},
);
export const makeCardIdsByListIdSelector = () =>
createSelector(
orm,
(_, id) => id,
({ List }, id) => {
const listModel = List.withId(id);
if (!listModel) {
return listModel;
}
return listModel.getOrderedFilteredCardsModelArray().map((cardModel) => cardModel.id);
},
);
export const makeCardByIdSelector = () =>
createSelector(
orm,
(_, id) => id,
({ Card }, id) => {
const cardModel = Card.withId(id);
if (!cardModel) {
return cardModel;
}
return {
...cardModel.ref,
isPersisted: !isLocalId(id),
};
},
);
export const makeUsersByCardIdSelector = () =>
createSelector(
orm,
(_, id) => id,
({ Card }, id) => {
const cardModel = Card.withId(id);
if (!cardModel) {
return cardModel;
}
return cardModel.users.toRefArray();
},
);
export const makeLabelsByCardIdSelector = () =>
createSelector(
orm,
(_, id) => id,
({ Card }, id) => {
const cardModel = Card.withId(id);
if (!cardModel) {
return cardModel;
}
return cardModel.labels.toRefArray();
},
);
export const makeTasksByCardIdSelector = () =>
createSelector(
orm,
(_, id) => id,
({ Card }, id) => {
const cardModel = Card.withId(id);
if (!cardModel) {
return cardModel;
}
return cardModel.tasks.toRefArray();
},
);
export const makeLastActionIdByCardIdSelector = () =>
createSelector(
orm,
(_, id) => id,
({ Card }, id) => {
const cardModel = Card.withId(id);
if (!cardModel) {
return cardModel;
}
const lastActionModel = cardModel.getOrderedInCardActionsQuerySet().last();
return lastActionModel && lastActionModel.id;
},
);
export const makeNotificationsTotalByCardIdSelector = () =>
createSelector(
orm,
(_, id) => id,
({ Card }, id) => {
const cardModel = Card.withId(id);
if (!cardModel) {
return cardModel;
}
return cardModel.getUnreadNotificationsQuerySet().count();
},
);
export const boardByIdSelector = makeBoardByIdSelector();
export const listByIdSelector = makeListByIdSelector();
export const cardIdsByListIdSelector = makeCardIdsByListIdSelector();
export const cardByIdSelector = makeCardByIdSelector();
export const usersByCardIdSelector = makeUsersByCardIdSelector();
export const labelsByCardIdSelector = makeLabelsByCardIdSelector();
export const tasksByCardIdSelector = makeTasksByCardIdSelector();
export const lastActionIdByCardIdSelector = makeLastActionIdByCardIdSelector();
export const notificationsTotalByCardIdSelector = makeNotificationsTotalByCardIdSelector();