mirror of
https://github.com/hibiken/asynqmon.git
synced 2025-09-16 19:51:38 +08:00
Add cancel action to ActiveTasksTable
This commit is contained in:
@@ -3,6 +3,7 @@ import {
|
||||
SnackbarActionTypes,
|
||||
} from "../actions/snackbarActions";
|
||||
import {
|
||||
BATCH_CANCEL_ACTIVE_TASKS_SUCCESS,
|
||||
BATCH_DELETE_DEAD_TASKS_SUCCESS,
|
||||
BATCH_DELETE_RETRY_TASKS_SUCCESS,
|
||||
BATCH_DELETE_SCHEDULED_TASKS_SUCCESS,
|
||||
@@ -11,6 +12,7 @@ import {
|
||||
BATCH_RUN_DEAD_TASKS_SUCCESS,
|
||||
BATCH_RUN_RETRY_TASKS_SUCCESS,
|
||||
BATCH_RUN_SCHEDULED_TASKS_SUCCESS,
|
||||
CANCEL_ALL_ACTIVE_TASKS_SUCCESS,
|
||||
DELETE_ALL_DEAD_TASKS_SUCCESS,
|
||||
DELETE_ALL_RETRY_TASKS_SUCCESS,
|
||||
DELETE_ALL_SCHEDULED_TASKS_SUCCESS,
|
||||
@@ -53,6 +55,22 @@ function snackbarReducer(
|
||||
isOpen: false,
|
||||
};
|
||||
|
||||
case BATCH_CANCEL_ACTIVE_TASKS_SUCCESS: {
|
||||
const n = action.payload.canceled_ids.length;
|
||||
return {
|
||||
isOpen: true,
|
||||
message: `Cancelation signal sent to ${n} ${
|
||||
n === 1 ? "task" : "tasks"
|
||||
}`,
|
||||
};
|
||||
}
|
||||
|
||||
case CANCEL_ALL_ACTIVE_TASKS_SUCCESS:
|
||||
return {
|
||||
isOpen: true,
|
||||
message: `Cancelation signal sent to all tasks in ${action.queue} queue`,
|
||||
};
|
||||
|
||||
case RUN_SCHEDULED_TASK_SUCCESS:
|
||||
return {
|
||||
isOpen: true,
|
||||
|
@@ -90,6 +90,12 @@ import {
|
||||
BATCH_KILL_RETRY_TASKS_SUCCESS,
|
||||
BATCH_KILL_RETRY_TASKS_BEGIN,
|
||||
BATCH_KILL_RETRY_TASKS_ERROR,
|
||||
BATCH_CANCEL_ACTIVE_TASKS_BEGIN,
|
||||
BATCH_CANCEL_ACTIVE_TASKS_SUCCESS,
|
||||
BATCH_CANCEL_ACTIVE_TASKS_ERROR,
|
||||
CANCEL_ALL_ACTIVE_TASKS_BEGIN,
|
||||
CANCEL_ALL_ACTIVE_TASKS_SUCCESS,
|
||||
CANCEL_ALL_ACTIVE_TASKS_ERROR,
|
||||
} from "../actions/tasksActions";
|
||||
import {
|
||||
ActiveTask,
|
||||
@@ -130,6 +136,8 @@ export interface DeadTaskExtended extends DeadTask {
|
||||
interface TasksState {
|
||||
activeTasks: {
|
||||
loading: boolean;
|
||||
batchActionPending: boolean;
|
||||
allActionPending: boolean;
|
||||
error: string;
|
||||
data: ActiveTaskExtended[];
|
||||
};
|
||||
@@ -164,6 +172,8 @@ interface TasksState {
|
||||
const initialState: TasksState = {
|
||||
activeTasks: {
|
||||
loading: false,
|
||||
batchActionPending: false,
|
||||
allActionPending: false,
|
||||
error: "",
|
||||
data: [],
|
||||
},
|
||||
@@ -214,6 +224,7 @@ function tasksReducer(
|
||||
return {
|
||||
...state,
|
||||
activeTasks: {
|
||||
...state.activeTasks,
|
||||
loading: false,
|
||||
error: "",
|
||||
data: action.payload.tasks.map((task) => ({
|
||||
@@ -413,6 +424,103 @@ function tasksReducer(
|
||||
},
|
||||
};
|
||||
|
||||
case BATCH_CANCEL_ACTIVE_TASKS_BEGIN: {
|
||||
const newData = state.activeTasks.data.map((task) => {
|
||||
if (!action.taskIds.includes(task.id)) {
|
||||
return task;
|
||||
}
|
||||
return { ...task, requestPending: true };
|
||||
});
|
||||
return {
|
||||
...state,
|
||||
activeTasks: {
|
||||
...state.activeTasks,
|
||||
batchActionPending: true,
|
||||
data: newData,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
case BATCH_CANCEL_ACTIVE_TASKS_SUCCESS: {
|
||||
const newData = state.activeTasks.data.map((task) => {
|
||||
if (action.payload.canceled_ids.includes(task.id)) {
|
||||
return { ...task, canceling: true, requestPending: false };
|
||||
}
|
||||
if (action.payload.error_ids.includes(task.id)) {
|
||||
return { ...task, requestPending: false };
|
||||
}
|
||||
return task;
|
||||
});
|
||||
return {
|
||||
...state,
|
||||
activeTasks: {
|
||||
...state.activeTasks,
|
||||
batchActionPending: false,
|
||||
data: newData,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
case BATCH_CANCEL_ACTIVE_TASKS_ERROR: {
|
||||
const newData = state.activeTasks.data.map((task) => {
|
||||
return { ...task, requestPending: false };
|
||||
});
|
||||
return {
|
||||
...state,
|
||||
activeTasks: {
|
||||
...state.activeTasks,
|
||||
batchActionPending: false,
|
||||
data: newData,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
case CANCEL_ALL_ACTIVE_TASKS_BEGIN: {
|
||||
const newData = state.activeTasks.data.map((task) => ({
|
||||
...task,
|
||||
requestPending: true,
|
||||
}));
|
||||
return {
|
||||
...state,
|
||||
activeTasks: {
|
||||
...state.activeTasks,
|
||||
allActionPending: true,
|
||||
data: newData,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
case CANCEL_ALL_ACTIVE_TASKS_SUCCESS: {
|
||||
const newData = state.activeTasks.data.map((task) => ({
|
||||
...task,
|
||||
requestPending: false,
|
||||
canceling: true,
|
||||
}));
|
||||
return {
|
||||
...state,
|
||||
activeTasks: {
|
||||
...state.activeTasks,
|
||||
allActionPending: false,
|
||||
data: newData,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
case CANCEL_ALL_ACTIVE_TASKS_ERROR: {
|
||||
const newData = state.activeTasks.data.map((task) => ({
|
||||
...task,
|
||||
requestPending: false,
|
||||
}));
|
||||
return {
|
||||
...state,
|
||||
activeTasks: {
|
||||
...state.activeTasks,
|
||||
allActionPending: false,
|
||||
data: newData,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
case RUN_SCHEDULED_TASK_BEGIN:
|
||||
case KILL_SCHEDULED_TASK_BEGIN:
|
||||
case DELETE_SCHEDULED_TASK_BEGIN:
|
||||
|
Reference in New Issue
Block a user