mirror of
https://github.com/plankanban/planka.git
synced 2025-12-25 17:25:01 +03:00
67 lines
1.5 KiB
JavaScript
Executable File
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();
|
|
}
|
|
}
|