Skip to content

Commit 486bb92

Browse files
authored
Merge pull request #42 from fakefeik/server-actions
always render task tree link; render action buttons based on server r…
2 parents b3bd329 + 616f0a7 commit 486bb92

File tree

4 files changed

+34
-8
lines changed

4 files changed

+34
-8
lines changed

Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringTaskMeta.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ public class RtqMonitoringTaskMeta
5454
[JsonConverter(typeof(StringEnumConverter))]
5555
public TaskState State { get; set; }
5656

57+
[CanBeNull]
58+
[JsonProperty("taskActions")]
59+
public TaskActions TaskActions { get; set; }
60+
5761
[JsonProperty("attempts")]
5862
public int Attempts { get; set; }
5963

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using Newtonsoft.Json;
2+
3+
namespace SkbKontur.Cassandra.DistributedTaskQueue.Monitoring.Api;
4+
5+
public class TaskActions
6+
{
7+
[JsonProperty("canCancel")]
8+
public bool CanCancel { get; set; }
9+
10+
[JsonProperty("canRerun")]
11+
public bool CanRerun { get; set; }
12+
}

cassandra-distributed-task-queue-ui/src/components/TaskDetailsPage/TaskDetailsPage.tsx

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,17 @@ export function TaskDetailsPage({
5656
if (!taskDetails) {
5757
return null;
5858
}
59-
const isCancelable = cancelableStates.includes(taskDetails.taskMeta.state);
60-
const isRerunable = rerunableStates.includes(taskDetails.taskMeta.state);
59+
60+
const canCancel = taskDetails.taskMeta.taskActions
61+
? taskDetails.taskMeta.taskActions.canCancel
62+
: allowRerunOrCancel && cancelableStates.includes(taskDetails.taskMeta.state);
63+
64+
const canRerun = taskDetails.taskMeta.taskActions
65+
? taskDetails.taskMeta.taskActions.canRerun
66+
: allowRerunOrCancel && rerunableStates.includes(taskDetails.taskMeta.state);
67+
6168
const relatedTasksRequest = customDetailRenderer.getRelatedTasksLocation(taskDetails);
62-
if (!isCancelable && !isRerunable && relatedTasksRequest == null) {
69+
if (!canCancel && !canRerun && relatedTasksRequest == null) {
6370
return null;
6471
}
6572

@@ -77,14 +84,14 @@ export function TaskDetailsPage({
7784
</RouterLink>
7885
</Fit>
7986
)}
80-
{isCancelable && (
87+
{canCancel && (
8188
<Fit>
8289
<Link icon={<XIcon16Regular />} use="danger" data-tid="CancelButton" onClick={cancel}>
8390
Cancel task
8491
</Link>
8592
</Fit>
8693
)}
87-
{isRerunable && (
94+
{canRerun && (
8895
<Fit>
8996
<Button
9097
use="link"
@@ -160,7 +167,7 @@ export function TaskDetailsPage({
160167
borderBottom
161168
data-tid="Header"
162169
title={`Задача ${taskDetails.taskMeta.name}`}
163-
tools={taskDetails && allowRerunOrCancel ? renderButtons() : null}>
170+
tools={renderButtons()}>
164171
<TaskTimeLine
165172
getHrefToTask={getTaskLocation}
166173
taskMeta={taskDetails.taskMeta}

cassandra-distributed-task-queue-ui/src/components/TaskTable/TaskDetails/TaskDetails.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ export function TaskDetails(props: TaskDetailsProps): JSX.Element {
3737
const theme = React.useContext(ThemeContext);
3838
const { customStateCaptions } = useCustomSettings();
3939

40+
const canCancel = taskInfo.taskActions ? taskInfo.taskActions.canCancel : cancelableStates.includes(taskInfo.state);
41+
const canRerun = taskInfo.taskActions ? taskInfo.taskActions.canRerun : rerunableStates.includes(taskInfo.state);
42+
4043
const renderTaskDate = (
4144
taskInfo: RtqMonitoringTaskMeta,
4245
caption: string,
@@ -93,7 +96,7 @@ export function TaskDetails(props: TaskDetailsProps): JSX.Element {
9396
<Fit>
9497
<Link
9598
data-tid="Cancel"
96-
disabled={!cancelableStates.includes(taskInfo.state)}
99+
disabled={!canCancel}
97100
onClick={onCancel}
98101
icon={<XIcon16Regular />}>
99102
Cancel
@@ -102,7 +105,7 @@ export function TaskDetails(props: TaskDetailsProps): JSX.Element {
102105
<Fit>
103106
<Link
104107
data-tid="Rerun"
105-
disabled={!rerunableStates.includes(taskInfo.state)}
108+
disabled={!canRerun}
106109
onClick={onRerun}
107110
icon={<ArrowRoundTimeForwardIcon16Regular />}>
108111
Rerun

0 commit comments

Comments
 (0)