feat: Add tasks reordering

Closes #50, closes #232
This commit is contained in:
Maksim Eltyshev
2022-07-21 11:31:05 +02:00
parent ddf9a32ea9
commit ad67b9ba24
27 changed files with 341 additions and 94 deletions

View File

@@ -1,7 +1,7 @@
import { call, put, select } from 'redux-saga/effects';
import request from '../request';
import { pathSelector } from '../../../selectors';
import { nextTaskPositionSelector, pathSelector, taskByIdSelector } from '../../../selectors';
import {
createTask,
deleteTask,
@@ -14,11 +14,16 @@ import api from '../../../api';
import { createLocalId } from '../../../utils/local-id';
export function* createTaskService(cardId, data) {
const nextData = {
...data,
position: yield select(nextTaskPositionSelector, cardId),
};
const localId = yield call(createLocalId);
yield put(
createTask({
...data,
...nextData,
cardId,
id: localId,
}),
@@ -26,7 +31,7 @@ export function* createTaskService(cardId, data) {
let task;
try {
({ item: task } = yield call(request, api.createTask, cardId, data));
({ item: task } = yield call(request, api.createTask, cardId, nextData));
} catch (error) {
yield put(createTask.failure(localId, error));
return;
@@ -63,6 +68,15 @@ export function* handleTaskUpdateService(task) {
yield put(handleTaskUpdate(task));
}
export function* moveTaskService(id, index) {
const { cardId } = yield select(taskByIdSelector, id);
const position = yield select(nextTaskPositionSelector, cardId, index, id);
yield call(updateTaskService, id, {
position,
});
}
export function* deleteTaskService(id) {
yield put(deleteTask(id));

View File

@@ -6,6 +6,7 @@ import {
handleTaskCreateService,
handleTaskDeleteService,
handleTaskUpdateService,
moveTaskService,
updateTaskService,
} from '../services';
import EntryActionTypes from '../../../constants/EntryActionTypes';
@@ -24,6 +25,9 @@ export default function* taskWatchers() {
takeEvery(EntryActionTypes.TASK_UPDATE_HANDLE, ({ payload: { task } }) =>
handleTaskUpdateService(task),
),
takeEvery(EntryActionTypes.TASK_MOVE, ({ payload: { id, index } }) =>
moveTaskService(id, index),
),
takeEvery(EntryActionTypes.TASK_DELETE, ({ payload: { id } }) => deleteTaskService(id)),
takeEvery(EntryActionTypes.TASK_DELETE_HANDLE, ({ payload: { task } }) =>
handleTaskDeleteService(task),