You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
425 lines
13 KiB
TypeScript
425 lines
13 KiB
TypeScript
import { AnyAction } from 'redux';
|
|
import { TasksActionTypes } from '../actions/tasks-actions';
|
|
import { AuthActionTypes } from '../actions/auth-actions';
|
|
|
|
import { TasksState, Task } from './interfaces';
|
|
|
|
const defaultState: TasksState = {
|
|
initialized: false,
|
|
fetching: false,
|
|
hideEmpty: false,
|
|
count: 0,
|
|
current: [],
|
|
gettingQuery: {
|
|
page: 1,
|
|
id: null,
|
|
search: null,
|
|
owner: null,
|
|
assignee: null,
|
|
name: null,
|
|
status: null,
|
|
mode: null,
|
|
},
|
|
activities: {
|
|
dumps: {
|
|
byTask: {},
|
|
},
|
|
exports: {
|
|
byTask: {},
|
|
},
|
|
loads: {
|
|
byTask: {},
|
|
},
|
|
deletes: {
|
|
byTask: {},
|
|
},
|
|
creates: {
|
|
status: '',
|
|
},
|
|
},
|
|
};
|
|
|
|
export default (state: TasksState = defaultState, action: AnyAction): TasksState => {
|
|
switch (action.type) {
|
|
case TasksActionTypes.GET_TASKS:
|
|
return {
|
|
...state,
|
|
activities: {
|
|
...state.activities,
|
|
deletes: {
|
|
byTask: {},
|
|
},
|
|
},
|
|
initialized: false,
|
|
fetching: true,
|
|
hideEmpty: true,
|
|
count: 0,
|
|
current: [],
|
|
gettingQuery: { ...action.payload.query },
|
|
};
|
|
case TasksActionTypes.GET_TASKS_SUCCESS: {
|
|
const combinedWithPreviews = action.payload.array
|
|
.map((task: any, index: number): Task => ({
|
|
instance: task,
|
|
preview: action.payload.previews[index],
|
|
}));
|
|
|
|
return {
|
|
...state,
|
|
initialized: true,
|
|
fetching: false,
|
|
count: action.payload.count,
|
|
current: combinedWithPreviews,
|
|
gettingQuery: { ...action.payload.query },
|
|
};
|
|
}
|
|
case TasksActionTypes.GET_TASKS_FAILED:
|
|
return {
|
|
...state,
|
|
initialized: true,
|
|
fetching: false,
|
|
};
|
|
case TasksActionTypes.DUMP_ANNOTATIONS: {
|
|
const { task } = action.payload;
|
|
const { dumper } = action.payload;
|
|
|
|
const tasksDumpingActivities = {
|
|
...state.activities.dumps,
|
|
};
|
|
|
|
const theTaskDumpingActivities = [...tasksDumpingActivities.byTask[task.id] || []];
|
|
if (!theTaskDumpingActivities.includes(dumper.name)) {
|
|
theTaskDumpingActivities.push(dumper.name);
|
|
}
|
|
tasksDumpingActivities.byTask[task.id] = theTaskDumpingActivities;
|
|
|
|
return {
|
|
...state,
|
|
activities: {
|
|
...state.activities,
|
|
dumps: tasksDumpingActivities,
|
|
},
|
|
};
|
|
}
|
|
case TasksActionTypes.DUMP_ANNOTATIONS_SUCCESS: {
|
|
const { task } = action.payload;
|
|
const { dumper } = action.payload;
|
|
|
|
const tasksDumpingActivities = {
|
|
...state.activities.dumps,
|
|
};
|
|
|
|
const theTaskDumpingActivities = tasksDumpingActivities.byTask[task.id]
|
|
.filter((dumperName: string): boolean => dumperName !== dumper.name);
|
|
|
|
tasksDumpingActivities.byTask[task.id] = theTaskDumpingActivities;
|
|
|
|
return {
|
|
...state,
|
|
activities: {
|
|
...state.activities,
|
|
dumps: tasksDumpingActivities,
|
|
},
|
|
};
|
|
}
|
|
case TasksActionTypes.DUMP_ANNOTATIONS_FAILED: {
|
|
const { task } = action.payload;
|
|
const { dumper } = action.payload;
|
|
|
|
const tasksDumpingActivities = {
|
|
...state.activities.dumps,
|
|
};
|
|
|
|
const theTaskDumpingActivities = tasksDumpingActivities.byTask[task.id]
|
|
.filter((dumperName: string): boolean => dumperName !== dumper.name);
|
|
|
|
tasksDumpingActivities.byTask[task.id] = theTaskDumpingActivities;
|
|
|
|
return {
|
|
...state,
|
|
activities: {
|
|
...state.activities,
|
|
dumps: tasksDumpingActivities,
|
|
},
|
|
};
|
|
}
|
|
case TasksActionTypes.EXPORT_DATASET: {
|
|
const { task } = action.payload;
|
|
const { exporter } = action.payload;
|
|
|
|
const tasksExportingActivities = {
|
|
...state.activities.exports,
|
|
};
|
|
|
|
const theTaskDumpingActivities = [...tasksExportingActivities.byTask[task.id] || []];
|
|
if (!theTaskDumpingActivities.includes(exporter.name)) {
|
|
theTaskDumpingActivities.push(exporter.name);
|
|
}
|
|
tasksExportingActivities.byTask[task.id] = theTaskDumpingActivities;
|
|
|
|
return {
|
|
...state,
|
|
activities: {
|
|
...state.activities,
|
|
exports: tasksExportingActivities,
|
|
},
|
|
};
|
|
}
|
|
case TasksActionTypes.EXPORT_DATASET_SUCCESS: {
|
|
const { task } = action.payload;
|
|
const { exporter } = action.payload;
|
|
|
|
const tasksExportingActivities = {
|
|
...state.activities.exports,
|
|
};
|
|
|
|
const theTaskExportingActivities = tasksExportingActivities.byTask[task.id]
|
|
.filter((exporterName: string): boolean => exporterName !== exporter.name);
|
|
|
|
tasksExportingActivities.byTask[task.id] = theTaskExportingActivities;
|
|
|
|
return {
|
|
...state,
|
|
activities: {
|
|
...state.activities,
|
|
exports: tasksExportingActivities,
|
|
},
|
|
};
|
|
}
|
|
case TasksActionTypes.EXPORT_DATASET_FAILED: {
|
|
const { task } = action.payload;
|
|
const { exporter } = action.payload;
|
|
|
|
const tasksExportingActivities = {
|
|
...state.activities.exports,
|
|
};
|
|
|
|
const theTaskExportingActivities = tasksExportingActivities.byTask[task.id]
|
|
.filter((exporterName: string): boolean => exporterName !== exporter.name);
|
|
|
|
tasksExportingActivities.byTask[task.id] = theTaskExportingActivities;
|
|
|
|
return {
|
|
...state,
|
|
activities: {
|
|
...state.activities,
|
|
exports: tasksExportingActivities,
|
|
},
|
|
};
|
|
}
|
|
case TasksActionTypes.LOAD_ANNOTATIONS: {
|
|
const { task } = action.payload;
|
|
const { loader } = action.payload;
|
|
|
|
const tasksLoadingActivity = {
|
|
...state.activities.loads,
|
|
};
|
|
|
|
if (task.id in tasksLoadingActivity.byTask) {
|
|
throw Error('Load for this task has been already started');
|
|
}
|
|
|
|
tasksLoadingActivity.byTask[task.id] = loader.name;
|
|
|
|
return {
|
|
...state,
|
|
activities: {
|
|
...state.activities,
|
|
loads: tasksLoadingActivity,
|
|
},
|
|
};
|
|
}
|
|
case TasksActionTypes.LOAD_ANNOTATIONS_SUCCESS: {
|
|
const { task } = action.payload;
|
|
|
|
const tasksLoadingActivity = {
|
|
...state.activities.loads,
|
|
};
|
|
|
|
delete tasksLoadingActivity.byTask[task.id];
|
|
|
|
return {
|
|
...state,
|
|
activities: {
|
|
...state.activities,
|
|
loads: {
|
|
...tasksLoadingActivity,
|
|
},
|
|
},
|
|
};
|
|
}
|
|
case TasksActionTypes.LOAD_ANNOTATIONS_FAILED: {
|
|
const { task } = action.payload;
|
|
|
|
const tasksLoadingActivity = {
|
|
...state.activities.loads,
|
|
};
|
|
|
|
delete tasksLoadingActivity.byTask[task.id];
|
|
|
|
return {
|
|
...state,
|
|
activities: {
|
|
...state.activities,
|
|
loads: {
|
|
...tasksLoadingActivity,
|
|
},
|
|
},
|
|
};
|
|
}
|
|
case TasksActionTypes.DELETE_TASK: {
|
|
const { taskID } = action.payload;
|
|
|
|
const deletesActivities = state.activities.deletes;
|
|
|
|
const activities = { ...state.activities };
|
|
activities.deletes = { ...activities.deletes };
|
|
|
|
activities.deletes.byTask[taskID] = false;
|
|
|
|
return {
|
|
...state,
|
|
activities: {
|
|
...state.activities,
|
|
deletes: deletesActivities,
|
|
},
|
|
};
|
|
}
|
|
case TasksActionTypes.DELETE_TASK_SUCCESS: {
|
|
const { taskID } = action.payload;
|
|
|
|
const deletesActivities = state.activities.deletes;
|
|
|
|
const activities = { ...state.activities };
|
|
activities.deletes = { ...activities.deletes };
|
|
|
|
activities.deletes.byTask[taskID] = true;
|
|
|
|
return {
|
|
...state,
|
|
activities: {
|
|
...state.activities,
|
|
deletes: deletesActivities,
|
|
},
|
|
};
|
|
}
|
|
case TasksActionTypes.DELETE_TASK_FAILED: {
|
|
const { taskID } = action.payload;
|
|
|
|
const deletesActivities = state.activities.deletes;
|
|
|
|
const activities = { ...state.activities };
|
|
activities.deletes = { ...activities.deletes };
|
|
|
|
delete activities.deletes.byTask[taskID];
|
|
|
|
return {
|
|
...state,
|
|
activities: {
|
|
...state.activities,
|
|
deletes: {
|
|
...deletesActivities,
|
|
},
|
|
},
|
|
};
|
|
}
|
|
case TasksActionTypes.CREATE_TASK: {
|
|
return {
|
|
...state,
|
|
activities: {
|
|
...state.activities,
|
|
creates: {
|
|
status: '',
|
|
},
|
|
},
|
|
};
|
|
}
|
|
case TasksActionTypes.CREATE_TASK_STATUS_UPDATED: {
|
|
const { status } = action.payload;
|
|
|
|
return {
|
|
...state,
|
|
activities: {
|
|
...state.activities,
|
|
creates: {
|
|
...state.activities.creates,
|
|
status,
|
|
},
|
|
},
|
|
};
|
|
}
|
|
case TasksActionTypes.CREATE_TASK_SUCCESS: {
|
|
return {
|
|
...state,
|
|
activities: {
|
|
...state.activities,
|
|
creates: {
|
|
...state.activities.creates,
|
|
status: 'CREATED',
|
|
},
|
|
},
|
|
};
|
|
}
|
|
case TasksActionTypes.CREATE_TASK_FAILED: {
|
|
return {
|
|
...state,
|
|
activities: {
|
|
...state.activities,
|
|
creates: {
|
|
...state.activities.creates,
|
|
status: 'FAILED',
|
|
},
|
|
},
|
|
};
|
|
}
|
|
case TasksActionTypes.UPDATE_TASK: {
|
|
return {
|
|
...state,
|
|
};
|
|
}
|
|
case TasksActionTypes.UPDATE_TASK_SUCCESS: {
|
|
return {
|
|
...state,
|
|
current: state.current.map((task): Task => {
|
|
if (task.instance.id === action.payload.task.id) {
|
|
return {
|
|
...task,
|
|
instance: action.payload.task,
|
|
};
|
|
}
|
|
|
|
return task;
|
|
}),
|
|
};
|
|
}
|
|
case TasksActionTypes.UPDATE_TASK_FAILED: {
|
|
return {
|
|
...state,
|
|
current: state.current.map((task): Task => {
|
|
if (task.instance.id === action.payload.task.id) {
|
|
return {
|
|
...task,
|
|
instance: action.payload.task,
|
|
};
|
|
}
|
|
|
|
return task;
|
|
}),
|
|
};
|
|
}
|
|
case TasksActionTypes.HIDE_EMPTY_TASKS: {
|
|
return {
|
|
...state,
|
|
hideEmpty: action.payload.hideEmpty,
|
|
};
|
|
}
|
|
case AuthActionTypes.LOGOUT_SUCCESS: {
|
|
return {
|
|
...defaultState,
|
|
};
|
|
}
|
|
default:
|
|
return state;
|
|
}
|
|
};
|