/
core.js
executable file
·108 lines (84 loc) · 2.79 KB
/
core.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import { createSelector } from 'redux-orm';
import isUndefined from 'lodash/isUndefined';
import orm from '../orm';
import Config from '../constants/Config';
export const selectAccessToken = ({ auth: { accessToken } }) => accessToken;
export const selectIsCoreInitializing = ({ core: { isInitializing } }) => isInitializing;
export const selectIsLogouting = ({ core: { isLogouting } }) => isLogouting;
const nextPosition = (items, index, excludedId) => {
const filteredItems = isUndefined(excludedId)
? items
: items.filter((item) => item.id !== excludedId);
if (isUndefined(index)) {
const lastItem = filteredItems[filteredItems.length - 1];
return (lastItem ? lastItem.position : 0) + Config.POSITION_GAP;
}
const prevItem = filteredItems[index - 1];
const nextItem = filteredItems[index];
const prevPosition = prevItem ? prevItem.position : 0;
if (!nextItem) {
return prevPosition + Config.POSITION_GAP;
}
return prevPosition + (nextItem.position - prevPosition) / 2;
};
export const selectNextBoardPosition = createSelector(
orm,
(_, projectId) => projectId,
(_, __, index) => index,
(_, __, ___, excludedId) => excludedId,
({ Project }, projectId, index, excludedId) => {
const projectModel = Project.withId(projectId);
if (!projectModel) {
return projectModel;
}
return nextPosition(projectModel.getOrderedBoardsQuerySet().toRefArray(), index, excludedId);
},
);
export const selectNextListPosition = createSelector(
orm,
(_, boardId) => boardId,
(_, __, index) => index,
(_, __, ___, excludedId) => excludedId,
({ Board }, boardId, index, excludedId) => {
const boardModel = Board.withId(boardId);
if (!boardModel) {
return boardModel;
}
return nextPosition(boardModel.getOrderedListsQuerySet().toRefArray(), index, excludedId);
},
);
export const selectNextCardPosition = createSelector(
orm,
(_, listId) => listId,
(_, __, index) => index,
(_, __, ___, excludedId) => excludedId,
({ List }, listId, index, excludedId) => {
const listModel = List.withId(listId);
if (!listModel) {
return listModel;
}
return nextPosition(listModel.getFilteredOrderedCardsModelArray(), index, excludedId);
},
);
export const selectNextTaskPosition = createSelector(
orm,
(_, cardId) => cardId,
(_, __, index) => index,
(_, __, ___, excludedId) => excludedId,
({ Card }, cardId, index, excludedId) => {
const cardModel = Card.withId(cardId);
if (!cardModel) {
return cardModel;
}
return nextPosition(cardModel.getOrderedTasksQuerySet().toRefArray(), index, excludedId);
},
);
export default {
selectAccessToken,
selectIsCoreInitializing,
selectIsLogouting,
selectNextBoardPosition,
selectNextListPosition,
selectNextCardPosition,
selectNextTaskPosition,
};