Skip to content

Commit

Permalink
Merge pull request #42 from fakefeik/server-actions
Browse files Browse the repository at this point in the history
always render task tree link; render action buttons based on server r…
  • Loading branch information
gafetinov authored Mar 5, 2024
2 parents b3bd329 + 616f0a7 commit 486bb92
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ public class RtqMonitoringTaskMeta
[JsonConverter(typeof(StringEnumConverter))]
public TaskState State { get; set; }

[CanBeNull]
[JsonProperty("taskActions")]
public TaskActions TaskActions { get; set; }

[JsonProperty("attempts")]
public int Attempts { get; set; }

Expand Down
12 changes: 12 additions & 0 deletions Cassandra.DistributedTaskQueue.Monitoring/Api/TaskActions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Newtonsoft.Json;

namespace SkbKontur.Cassandra.DistributedTaskQueue.Monitoring.Api;

public class TaskActions
{
[JsonProperty("canCancel")]
public bool CanCancel { get; set; }

[JsonProperty("canRerun")]
public bool CanRerun { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,17 @@ export function TaskDetailsPage({
if (!taskDetails) {
return null;
}
const isCancelable = cancelableStates.includes(taskDetails.taskMeta.state);
const isRerunable = rerunableStates.includes(taskDetails.taskMeta.state);

const canCancel = taskDetails.taskMeta.taskActions
? taskDetails.taskMeta.taskActions.canCancel
: allowRerunOrCancel && cancelableStates.includes(taskDetails.taskMeta.state);

const canRerun = taskDetails.taskMeta.taskActions
? taskDetails.taskMeta.taskActions.canRerun
: allowRerunOrCancel && rerunableStates.includes(taskDetails.taskMeta.state);

const relatedTasksRequest = customDetailRenderer.getRelatedTasksLocation(taskDetails);
if (!isCancelable && !isRerunable && relatedTasksRequest == null) {
if (!canCancel && !canRerun && relatedTasksRequest == null) {
return null;
}

Expand All @@ -77,14 +84,14 @@ export function TaskDetailsPage({
</RouterLink>
</Fit>
)}
{isCancelable && (
{canCancel && (
<Fit>
<Link icon={<XIcon16Regular />} use="danger" data-tid="CancelButton" onClick={cancel}>
Cancel task
</Link>
</Fit>
)}
{isRerunable && (
{canRerun && (
<Fit>
<Button
use="link"
Expand Down Expand Up @@ -160,7 +167,7 @@ export function TaskDetailsPage({
borderBottom
data-tid="Header"
title={`Задача ${taskDetails.taskMeta.name}`}
tools={taskDetails && allowRerunOrCancel ? renderButtons() : null}>
tools={renderButtons()}>
<TaskTimeLine
getHrefToTask={getTaskLocation}
taskMeta={taskDetails.taskMeta}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ export function TaskDetails(props: TaskDetailsProps): JSX.Element {
const theme = React.useContext(ThemeContext);
const { customStateCaptions } = useCustomSettings();

const canCancel = taskInfo.taskActions ? taskInfo.taskActions.canCancel : cancelableStates.includes(taskInfo.state);
const canRerun = taskInfo.taskActions ? taskInfo.taskActions.canRerun : rerunableStates.includes(taskInfo.state);

const renderTaskDate = (
taskInfo: RtqMonitoringTaskMeta,
caption: string,
Expand Down Expand Up @@ -93,7 +96,7 @@ export function TaskDetails(props: TaskDetailsProps): JSX.Element {
<Fit>
<Link
data-tid="Cancel"
disabled={!cancelableStates.includes(taskInfo.state)}
disabled={!canCancel}
onClick={onCancel}
icon={<XIcon16Regular />}>
Cancel
Expand All @@ -102,7 +105,7 @@ export function TaskDetails(props: TaskDetailsProps): JSX.Element {
<Fit>
<Link
data-tid="Rerun"
disabled={!rerunableStates.includes(taskInfo.state)}
disabled={!canRerun}
onClick={onRerun}
icon={<ArrowRoundTimeForwardIcon16Regular />}>
Rerun
Expand Down

0 comments on commit 486bb92

Please sign in to comment.