2020-02-03 18:42:31 +05:00
|
|
|
import { Model, attr, fk, many } from 'redux-orm';
|
2019-08-31 04:07:25 +05:00
|
|
|
|
|
|
|
import ActionTypes from '../constants/ActionTypes';
|
|
|
|
|
|
|
|
export default class extends Model {
|
|
|
|
static modelName = 'Board';
|
|
|
|
|
|
|
|
static fields = {
|
|
|
|
id: attr(),
|
2020-08-04 01:32:46 +05:00
|
|
|
type: attr(),
|
2019-08-31 04:07:25 +05:00
|
|
|
position: attr(),
|
|
|
|
name: attr(),
|
|
|
|
isFetching: attr({
|
|
|
|
getDefault: () => null,
|
|
|
|
}),
|
|
|
|
projectId: fk({
|
|
|
|
to: 'Project',
|
|
|
|
as: 'project',
|
|
|
|
relatedName: 'boards',
|
|
|
|
}),
|
2021-06-24 01:05:22 +05:00
|
|
|
memberUsers: many({
|
|
|
|
to: 'User',
|
|
|
|
through: 'BoardMembership',
|
|
|
|
relatedName: 'boards',
|
|
|
|
}),
|
2019-08-31 04:07:25 +05:00
|
|
|
filterUsers: many('User', 'filterBoards'),
|
|
|
|
filterLabels: many('Label', 'filterBoards'),
|
|
|
|
};
|
|
|
|
|
|
|
|
static reducer({ type, payload }, Board) {
|
|
|
|
switch (type) {
|
2021-06-24 01:05:22 +05:00
|
|
|
case ActionTypes.LOCATION_CHANGE_HANDLE:
|
|
|
|
case ActionTypes.BOARD_FETCH__SUCCESS:
|
|
|
|
Board.upsert({
|
|
|
|
...payload.board,
|
|
|
|
isFetching: false,
|
|
|
|
});
|
|
|
|
|
|
|
|
break;
|
|
|
|
case ActionTypes.LOCATION_CHANGE_HANDLE__BOARD_FETCH:
|
|
|
|
case ActionTypes.BOARD_FETCH:
|
|
|
|
Board.withId(payload.id).update({
|
|
|
|
isFetching: true,
|
|
|
|
});
|
|
|
|
|
|
|
|
break;
|
|
|
|
case ActionTypes.SOCKET_RECONNECT_HANDLE:
|
|
|
|
Board.all().delete();
|
|
|
|
|
|
|
|
if (payload.board) {
|
|
|
|
Board.upsert({
|
|
|
|
...payload.board,
|
|
|
|
isFetching: false,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
payload.boards.forEach((board) => {
|
|
|
|
Board.upsert(board);
|
|
|
|
});
|
|
|
|
|
|
|
|
break;
|
|
|
|
case ActionTypes.SOCKET_RECONNECT_HANDLE__CORE_FETCH:
|
|
|
|
Board.all()
|
|
|
|
.toModelArray()
|
|
|
|
.forEach((boardModel) => {
|
|
|
|
if (boardModel.id !== payload.currentBoardId) {
|
|
|
|
boardModel.update({
|
|
|
|
isFetching: null,
|
|
|
|
});
|
|
|
|
|
|
|
|
boardModel.deleteRelated(payload.currentUserId);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
break;
|
|
|
|
case ActionTypes.CORE_INITIALIZE:
|
|
|
|
if (payload.board) {
|
|
|
|
Board.upsert({
|
|
|
|
...payload.board,
|
|
|
|
isFetching: false,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
payload.boards.forEach((board) => {
|
|
|
|
Board.upsert(board);
|
|
|
|
});
|
|
|
|
|
|
|
|
break;
|
2019-08-31 04:07:25 +05:00
|
|
|
case ActionTypes.USER_TO_BOARD_FILTER_ADD:
|
|
|
|
Board.withId(payload.boardId).filterUsers.add(payload.id);
|
|
|
|
|
|
|
|
break;
|
|
|
|
case ActionTypes.USER_FROM_BOARD_FILTER_REMOVE:
|
|
|
|
Board.withId(payload.boardId).filterUsers.remove(payload.id);
|
|
|
|
|
|
|
|
break;
|
2021-06-24 01:05:22 +05:00
|
|
|
case ActionTypes.PROJECT_CREATE_HANDLE:
|
2020-03-25 00:15:47 +05:00
|
|
|
payload.boards.forEach((board) => {
|
2019-08-31 04:07:25 +05:00
|
|
|
Board.upsert(board);
|
|
|
|
});
|
|
|
|
|
|
|
|
break;
|
2021-06-24 01:05:22 +05:00
|
|
|
case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
|
|
|
|
case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
|
|
|
|
if (payload.boards) {
|
|
|
|
payload.boards.forEach((board) => {
|
|
|
|
Board.upsert({
|
|
|
|
...board,
|
|
|
|
...(payload.board &&
|
|
|
|
payload.board.id === board.id && {
|
|
|
|
isFetching: false,
|
|
|
|
}),
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
2019-08-31 04:07:25 +05:00
|
|
|
|
|
|
|
break;
|
2021-06-24 01:05:22 +05:00
|
|
|
case ActionTypes.BOARD_CREATE:
|
|
|
|
case ActionTypes.BOARD_CREATE_HANDLE:
|
|
|
|
case ActionTypes.BOARD_UPDATE__SUCCESS:
|
|
|
|
case ActionTypes.BOARD_UPDATE_HANDLE:
|
|
|
|
Board.upsert(payload.board);
|
2019-08-31 04:07:25 +05:00
|
|
|
|
|
|
|
break;
|
2021-06-24 01:05:22 +05:00
|
|
|
case ActionTypes.BOARD_CREATE__SUCCESS:
|
2019-08-31 04:07:25 +05:00
|
|
|
Board.withId(payload.localId).delete();
|
2021-06-24 01:05:22 +05:00
|
|
|
|
2019-08-31 04:07:25 +05:00
|
|
|
Board.upsert({
|
|
|
|
...payload.board,
|
|
|
|
isFetching: false,
|
|
|
|
});
|
|
|
|
|
|
|
|
break;
|
2021-06-24 01:05:22 +05:00
|
|
|
case ActionTypes.BOARD_FETCH__FAILURE:
|
2019-08-31 04:07:25 +05:00
|
|
|
Board.withId(payload.id).update({
|
2021-06-24 01:05:22 +05:00
|
|
|
isFetching: null,
|
2019-08-31 04:07:25 +05:00
|
|
|
});
|
|
|
|
|
|
|
|
break;
|
2021-06-24 01:05:22 +05:00
|
|
|
case ActionTypes.BOARD_UPDATE:
|
|
|
|
Board.withId(payload.id).update(payload.data);
|
2019-08-31 04:07:25 +05:00
|
|
|
|
|
|
|
break;
|
2021-06-24 01:05:22 +05:00
|
|
|
case ActionTypes.BOARD_DELETE:
|
|
|
|
Board.withId(payload.id).deleteWithRelated();
|
2019-08-31 04:07:25 +05:00
|
|
|
|
|
|
|
break;
|
2021-06-24 01:05:22 +05:00
|
|
|
case ActionTypes.BOARD_DELETE__SUCCESS:
|
|
|
|
case ActionTypes.BOARD_DELETE_HANDLE: {
|
|
|
|
const boardModel = Board.withId(payload.board.id);
|
|
|
|
|
|
|
|
if (boardModel) {
|
|
|
|
boardModel.deleteWithRelated();
|
|
|
|
}
|
2019-08-31 04:07:25 +05:00
|
|
|
|
|
|
|
break;
|
2021-06-24 01:05:22 +05:00
|
|
|
}
|
2019-08-31 04:07:25 +05:00
|
|
|
case ActionTypes.LABEL_TO_BOARD_FILTER_ADD:
|
|
|
|
Board.withId(payload.boardId).filterLabels.add(payload.id);
|
|
|
|
|
|
|
|
break;
|
|
|
|
case ActionTypes.LABEL_FROM_BOARD_FILTER_REMOVE:
|
|
|
|
Board.withId(payload.boardId).filterLabels.remove(payload.id);
|
|
|
|
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-06-24 01:05:22 +05:00
|
|
|
getOrderedMembershipsQuerySet() {
|
|
|
|
return this.memberships.orderBy('id');
|
|
|
|
}
|
|
|
|
|
2019-08-31 04:07:25 +05:00
|
|
|
getOrderedListsQuerySet() {
|
|
|
|
return this.lists.orderBy('position');
|
|
|
|
}
|
|
|
|
|
2022-08-19 14:00:40 +02:00
|
|
|
getMembershipModel(userId) {
|
|
|
|
return this.memberships
|
|
|
|
.filter({
|
|
|
|
userId,
|
|
|
|
})
|
|
|
|
.first();
|
|
|
|
}
|
|
|
|
|
2021-06-24 01:05:22 +05:00
|
|
|
hasMemberUser(userId) {
|
|
|
|
return this.memberships
|
|
|
|
.filter({
|
|
|
|
userId,
|
|
|
|
})
|
|
|
|
.exists();
|
|
|
|
}
|
|
|
|
|
|
|
|
deleteRelated(exceptMemberUserId) {
|
|
|
|
this.memberships.toModelArray().forEach((boardMembershipModel) => {
|
|
|
|
if (boardMembershipModel.userId !== exceptMemberUserId) {
|
|
|
|
boardMembershipModel.deleteWithRelated();
|
|
|
|
}
|
2019-08-31 04:07:25 +05:00
|
|
|
});
|
|
|
|
|
2021-06-24 01:05:22 +05:00
|
|
|
this.labels.delete();
|
|
|
|
|
|
|
|
this.lists.toModelArray().forEach((listModel) => {
|
|
|
|
listModel.deleteWithRelated();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
deleteWithRelated() {
|
|
|
|
this.deleteRelated();
|
2019-08-31 04:07:25 +05:00
|
|
|
this.delete();
|
|
|
|
}
|
|
|
|
}
|