Files
planka/client/src/models/Project.js

67 lines
1.5 KiB
JavaScript
Executable File

import { Model, attr, many } from 'redux-orm';
import ActionTypes from '../constants/ActionTypes';
export default class extends Model {
static modelName = 'Project';
static fields = {
id: attr(),
name: attr(),
users: many({
to: 'User',
through: 'ProjectMembership',
relatedName: 'projects',
}),
};
static reducer({ type, payload }, Project) {
switch (type) {
case ActionTypes.PROJECTS_FETCH_SUCCEEDED:
payload.projects.forEach(project => {
Project.upsert(project);
});
break;
case ActionTypes.PROJECT_UPDATE:
Project.withId(payload.id).update(payload.data);
break;
case ActionTypes.PROJECT_DELETE:
Project.withId(payload.id).deleteWithRelated();
break;
case ActionTypes.PROJECT_CREATE_SUCCEEDED:
case ActionTypes.PROJECT_CREATE_RECEIVED:
Project.upsert(payload.project);
break;
case ActionTypes.PROJECT_UPDATE_RECEIVED:
Project.withId(payload.project.id).update(payload.project);
break;
case ActionTypes.PROJECT_DELETE_RECEIVED:
Project.withId(payload.project.id).deleteWithRelated();
break;
default:
}
}
getOrderedMembershipsQuerySet() {
return this.memberships.orderBy('id');
}
getOrderedBoardsQuerySet() {
return this.boards.orderBy('position');
}
deleteWithRelated() {
this.boards.toModelArray().forEach(boardModel => {
boardModel.deleteWithRelated();
});
this.delete();
}
}