1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-07-24 15:49:46 +02:00

ref: Refactoring

This commit is contained in:
Maksim Eltyshev 2022-08-04 13:31:14 +02:00
parent aa4723d7fe
commit 3f8216dca8
189 changed files with 3781 additions and 3486 deletions

View file

@ -1,95 +0,0 @@
import { Model, attr, fk } from 'redux-orm';
import ActionTypes from '../constants/ActionTypes';
export default class extends Model {
static modelName = 'Action';
static fields = {
id: attr(),
type: attr(),
data: attr(),
createdAt: attr({
getDefault: () => new Date(),
}),
isInCard: attr({
getDefault: () => true,
}),
cardId: fk({
to: 'Card',
as: 'card',
relatedName: 'actions',
}),
userId: fk({
to: 'User',
as: 'user',
relatedName: 'actions',
}),
};
static reducer({ type, payload }, Action) {
switch (type) {
case ActionTypes.SOCKET_RECONNECT_HANDLE:
Action.all().delete();
payload.actions.forEach((action) => {
Action.upsert({
...action,
isInCard: false,
});
});
break;
case ActionTypes.CORE_INITIALIZE:
payload.actions.forEach((action) => {
Action.upsert({
...action,
isInCard: false,
});
});
break;
case ActionTypes.ACTIONS_FETCH__SUCCESS:
case ActionTypes.ACTIONS_DETAILS_TOGGLE__SUCCESS:
case ActionTypes.NOTIFICATION_CREATE_HANDLE:
payload.actions.forEach((action) => {
Action.upsert(action);
});
break;
case ActionTypes.ACTION_CREATE_HANDLE:
case ActionTypes.ACTION_UPDATE_HANDLE:
case ActionTypes.COMMENT_ACTION_CREATE:
case ActionTypes.COMMENT_ACTION_UPDATE__SUCCESS:
Action.upsert(payload.action);
break;
case ActionTypes.ACTION_DELETE_HANDLE:
case ActionTypes.COMMENT_ACTION_DELETE__SUCCESS: {
const actionModel = Action.withId(payload.action.id);
if (actionModel) {
actionModel.delete();
}
break;
}
case ActionTypes.COMMENT_ACTION_CREATE__SUCCESS:
Action.withId(payload.localId).delete();
Action.upsert(payload.action);
break;
case ActionTypes.COMMENT_ACTION_UPDATE:
Action.withId(payload.id).update({
data: payload.data,
});
break;
case ActionTypes.COMMENT_ACTION_DELETE:
Action.withId(payload.id).delete();
break;
default:
}
}
}

95
client/src/models/Activity.js Executable file
View file

@ -0,0 +1,95 @@
import { Model, attr, fk } from 'redux-orm';
import ActionTypes from '../constants/ActionTypes';
export default class extends Model {
static modelName = 'Activity';
static fields = {
id: attr(),
type: attr(),
data: attr(),
createdAt: attr({
getDefault: () => new Date(),
}),
isInCard: attr({
getDefault: () => true,
}),
cardId: fk({
to: 'Card',
as: 'card',
relatedName: 'activities',
}),
userId: fk({
to: 'User',
as: 'user',
relatedName: 'activities',
}),
};
static reducer({ type, payload }, Activity) {
switch (type) {
case ActionTypes.SOCKET_RECONNECT_HANDLE:
Activity.all().delete();
payload.activities.forEach((activity) => {
Activity.upsert({
...activity,
isInCard: false,
});
});
break;
case ActionTypes.CORE_INITIALIZE:
payload.activities.forEach((activity) => {
Activity.upsert({
...activity,
isInCard: false,
});
});
break;
case ActionTypes.ACTIVITIES_FETCH__SUCCESS:
case ActionTypes.ACTIVITIES_DETAILS_TOGGLE__SUCCESS:
case ActionTypes.NOTIFICATION_CREATE_HANDLE:
payload.activities.forEach((activity) => {
Activity.upsert(activity);
});
break;
case ActionTypes.ACTIVITY_CREATE_HANDLE:
case ActionTypes.ACTIVITY_UPDATE_HANDLE:
case ActionTypes.COMMENT_ACTIVITY_CREATE:
case ActionTypes.COMMENT_ACTIVITY_UPDATE__SUCCESS:
Activity.upsert(payload.activity);
break;
case ActionTypes.ACTIVITY_DELETE_HANDLE:
case ActionTypes.COMMENT_ACTIVITY_DELETE__SUCCESS: {
const activityModel = Activity.withId(payload.activity.id);
if (activityModel) {
activityModel.delete();
}
break;
}
case ActionTypes.COMMENT_ACTIVITY_CREATE__SUCCESS:
Activity.withId(payload.localId).delete();
Activity.upsert(payload.activity);
break;
case ActionTypes.COMMENT_ACTIVITY_UPDATE:
Activity.withId(payload.id).update({
data: payload.data,
});
break;
case ActionTypes.COMMENT_ACTIVITY_DELETE:
Activity.withId(payload.id).delete();
break;
default:
}
}
}

View file

@ -2,7 +2,7 @@ import { Model, attr, fk, many, oneToOne } from 'redux-orm';
import ActionTypes from '../constants/ActionTypes';
import Config from '../constants/Config';
import { ActionTypes as ActionTypesEnum } from '../constants/Enums';
import { ActivityTypes } from '../constants/Enums';
export default class extends Model {
static modelName = 'Card';
@ -17,16 +17,16 @@ export default class extends Model {
isSubscribed: attr({
getDefault: () => false,
}),
isActionsFetching: attr({
isActivitiesFetching: attr({
getDefault: () => false,
}),
isAllActionsFetched: attr({
isAllActivitiesFetched: attr({
getDefault: () => false,
}),
isActionsDetailsVisible: attr({
isActivitiesDetailsVisible: attr({
getDefault: () => false,
}),
isActionsDetailsFetching: attr({
isActivitiesDetailsFetching: attr({
getDefault: () => false,
}),
boardId: fk({
@ -189,44 +189,44 @@ export default class extends Model {
break;
}
case ActionTypes.ACTIONS_FETCH:
case ActionTypes.ACTIVITIES_FETCH:
Card.withId(payload.cardId).update({
isActionsFetching: true,
isActivitiesFetching: true,
});
break;
case ActionTypes.ACTIONS_FETCH__SUCCESS:
case ActionTypes.ACTIVITIES_FETCH__SUCCESS:
Card.withId(payload.cardId).update({
isActionsFetching: false,
isAllActionsFetched: payload.actions.length < Config.ACTIONS_LIMIT,
isActivitiesFetching: false,
isAllActivitiesFetched: payload.activities.length < Config.ACTIVITIES_LIMIT,
});
break;
case ActionTypes.ACTIONS_DETAILS_TOGGLE: {
case ActionTypes.ACTIVITIES_DETAILS_TOGGLE: {
const cardModel = Card.withId(payload.cardId);
cardModel.isActionsDetailsVisible = payload.isVisible;
cardModel.isActivitiesDetailsVisible = payload.isVisible;
if (payload.isVisible) {
cardModel.isActionsDetailsFetching = true;
cardModel.isActivitiesDetailsFetching = true;
}
break;
}
case ActionTypes.ACTIONS_DETAILS_TOGGLE__SUCCESS: {
case ActionTypes.ACTIVITIES_DETAILS_TOGGLE__SUCCESS: {
const cardModel = Card.withId(payload.cardId);
cardModel.update({
isAllActionsFetched: payload.actions.length < Config.ACTIONS_LIMIT,
isActionsDetailsFetching: false,
isAllActivitiesFetched: payload.activities.length < Config.ACTIVITIES_LIMIT,
isActivitiesDetailsFetching: false,
});
cardModel.actions.toModelArray().forEach((actionModel) => {
if (actionModel.notification) {
actionModel.update({
cardModel.activities.toModelArray().forEach((activityModel) => {
if (activityModel.notification) {
activityModel.update({
isInCard: false,
});
} else {
actionModel.delete();
activityModel.delete();
}
});
@ -250,16 +250,16 @@ export default class extends Model {
return this.attachments.orderBy('id', false);
}
getFilteredOrderedInCardActionsQuerySet() {
getFilteredOrderedInCardActivitiesQuerySet() {
const filter = {
isInCard: true,
};
if (!this.isActionsDetailsVisible) {
filter.type = ActionTypesEnum.COMMENT_CARD;
if (!this.isActivitiesDetailsVisible) {
filter.type = ActivityTypes.COMMENT_CARD;
}
return this.actions.filter(filter).orderBy('id', false);
return this.activities.filter(filter).orderBy('id', false);
}
getUnreadNotificationsQuerySet() {
@ -271,7 +271,7 @@ export default class extends Model {
deleteRelated() {
this.tasks.delete();
this.attachments.delete();
this.actions.delete();
this.activities.delete();
}
deleteWithRelated() {

View file

@ -20,9 +20,9 @@ export default class extends Model {
as: 'card',
relatedName: 'notifications',
}),
actionId: oneToOne({
to: 'Action',
as: 'action',
activityId: oneToOne({
to: 'Activity',
as: 'activity',
}),
};
@ -31,8 +31,8 @@ export default class extends Model {
case ActionTypes.LOCATION_CHANGE_HANDLE:
case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
if (payload.notifications) {
payload.notifications.forEach((notification) => {
if (payload.deletedNotifications) {
payload.deletedNotifications.forEach((notification) => {
Notification.withId(notification.id).deleteWithRelated();
});
}

View file

@ -278,7 +278,7 @@ export default class extends Model {
case ActionTypes.PROJECT_MANAGER_CREATE_HANDLE:
case ActionTypes.BOARD_FETCH__SUCCESS:
case ActionTypes.BOARD_MEMBERSHIP_CREATE_HANDLE:
case ActionTypes.ACTIONS_FETCH__SUCCESS:
case ActionTypes.ACTIVITIES_FETCH__SUCCESS:
case ActionTypes.NOTIFICATION_CREATE_HANDLE:
payload.users.forEach((user) => {
User.upsert(user);

View file

@ -8,7 +8,7 @@ import List from './List';
import Card from './Card';
import Task from './Task';
import Attachment from './Attachment';
import Action from './Action';
import Activity from './Activity';
import Notification from './Notification';
export {
@ -22,6 +22,6 @@ export {
Card,
Task,
Attachment,
Action,
Activity,
Notification,
};