2019-08-31 04:07:25 +05:00
|
|
|
import { Model, attr, fk } from 'redux-orm';
|
|
|
|
|
|
|
|
import ActionTypes from '../constants/ActionTypes';
|
|
|
|
|
|
|
|
export default class extends Model {
|
|
|
|
static modelName = 'List';
|
|
|
|
|
|
|
|
static fields = {
|
|
|
|
id: attr(),
|
|
|
|
position: attr(),
|
|
|
|
name: attr(),
|
|
|
|
boardId: fk({
|
|
|
|
to: 'Board',
|
|
|
|
as: 'board',
|
|
|
|
relatedName: 'lists',
|
|
|
|
}),
|
|
|
|
};
|
|
|
|
|
|
|
|
static reducer({ type, payload }, List) {
|
|
|
|
switch (type) {
|
|
|
|
case ActionTypes.BOARD_CREATE_SUCCEEDED:
|
|
|
|
case ActionTypes.BOARD_CREATE_RECEIVED:
|
|
|
|
case ActionTypes.BOARD_FETCH_SUCCEEDED:
|
2020-02-03 18:42:31 +05:00
|
|
|
payload.lists.forEach(list => {
|
2019-08-31 04:07:25 +05:00
|
|
|
List.upsert(list);
|
|
|
|
});
|
|
|
|
|
|
|
|
break;
|
|
|
|
case ActionTypes.LIST_CREATE:
|
|
|
|
case ActionTypes.LIST_CREATE_RECEIVED:
|
|
|
|
List.upsert(payload.list);
|
|
|
|
|
|
|
|
break;
|
|
|
|
case ActionTypes.LIST_UPDATE:
|
|
|
|
List.withId(payload.id).update(payload.data);
|
|
|
|
|
|
|
|
break;
|
|
|
|
case ActionTypes.LIST_DELETE:
|
|
|
|
List.withId(payload.id).deleteWithRelated();
|
|
|
|
|
|
|
|
break;
|
|
|
|
case ActionTypes.LIST_CREATE_SUCCEEDED:
|
|
|
|
List.withId(payload.localId).delete();
|
|
|
|
List.upsert(payload.list);
|
|
|
|
|
|
|
|
break;
|
|
|
|
case ActionTypes.LIST_UPDATE_RECEIVED:
|
|
|
|
List.withId(payload.list.id).update(payload.list);
|
|
|
|
|
|
|
|
break;
|
|
|
|
case ActionTypes.LIST_DELETE_RECEIVED:
|
|
|
|
List.withId(payload.list.id).deleteWithRelated();
|
|
|
|
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
getOrderedCardsQuerySet() {
|
|
|
|
return this.cards.orderBy('position');
|
|
|
|
}
|
|
|
|
|
|
|
|
getOrderedFilteredCardsModelArray() {
|
|
|
|
let cardModels = this.getOrderedCardsQuerySet().toModelArray();
|
|
|
|
|
2020-02-03 18:42:31 +05:00
|
|
|
const filterUserIds = this.board.filterUsers.toRefArray().map(user => user.id);
|
|
|
|
const filterLabelIds = this.board.filterLabels.toRefArray().map(label => label.id);
|
2019-08-31 04:07:25 +05:00
|
|
|
|
|
|
|
if (filterUserIds.length > 0) {
|
2020-02-03 18:42:31 +05:00
|
|
|
cardModels = cardModels.filter(cardModel => {
|
2019-08-31 04:07:25 +05:00
|
|
|
const users = cardModel.users.toRefArray();
|
|
|
|
|
2020-02-03 18:42:31 +05:00
|
|
|
return users.some(user => filterUserIds.includes(user.id));
|
2019-08-31 04:07:25 +05:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (filterLabelIds.length > 0) {
|
2020-02-03 18:42:31 +05:00
|
|
|
cardModels = cardModels.filter(cardModel => {
|
2019-08-31 04:07:25 +05:00
|
|
|
const labels = cardModel.labels.toRefArray();
|
|
|
|
|
2020-02-03 18:42:31 +05:00
|
|
|
return labels.some(label => filterLabelIds.includes(label.id));
|
2019-08-31 04:07:25 +05:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
return cardModels;
|
|
|
|
}
|
|
|
|
|
|
|
|
deleteWithRelated() {
|
2020-02-03 18:42:31 +05:00
|
|
|
this.cards.toModelArray().forEach(cardModel => {
|
2019-08-31 04:07:25 +05:00
|
|
|
cardModel.deleteWithRelated();
|
|
|
|
});
|
|
|
|
|
|
|
|
this.delete();
|
|
|
|
}
|
|
|
|
}
|