feat: remove task update functionality from SchedulersTable and clean up related code
This commit is contained in:
@@ -5,7 +5,6 @@ import {
|
|||||||
DropdownMenu,
|
DropdownMenu,
|
||||||
DropdownMenuContent,
|
DropdownMenuContent,
|
||||||
DropdownMenuItem,
|
DropdownMenuItem,
|
||||||
DropdownMenuSeparator,
|
|
||||||
DropdownMenuTrigger,
|
DropdownMenuTrigger,
|
||||||
} from '@/components/ui/dropdown-menu'
|
} from '@/components/ui/dropdown-menu'
|
||||||
import { formatDate } from '@/utils/format-date'
|
import { formatDate } from '@/utils/format-date'
|
||||||
@@ -20,8 +19,6 @@ import {
|
|||||||
import {
|
import {
|
||||||
CalendarClock,
|
CalendarClock,
|
||||||
MoreHorizontal,
|
MoreHorizontal,
|
||||||
Pause,
|
|
||||||
Play,
|
|
||||||
Square,
|
Square,
|
||||||
} from 'lucide-react'
|
} from 'lucide-react'
|
||||||
import { useState } from 'react'
|
import { useState } from 'react'
|
||||||
@@ -29,36 +26,26 @@ import { toast } from 'sonner'
|
|||||||
|
|
||||||
interface SchedulersTableProps {
|
interface SchedulersTableProps {
|
||||||
tasks: ScheduledTask[]
|
tasks: ScheduledTask[]
|
||||||
onTaskUpdated?: (task: ScheduledTask) => void
|
|
||||||
onTaskDeleted?: (taskId: number) => void
|
onTaskDeleted?: (taskId: number) => void
|
||||||
}
|
}
|
||||||
|
|
||||||
export function SchedulersTable({ tasks, onTaskUpdated, onTaskDeleted }: SchedulersTableProps) {
|
export function SchedulersTable({ tasks, onTaskDeleted }: SchedulersTableProps) {
|
||||||
const [loadingActions, setLoadingActions] = useState<Record<number, boolean>>({})
|
const [loadingActions, setLoadingActions] = useState<Record<number, boolean>>({})
|
||||||
|
|
||||||
const handleToggleActive = async (task: ScheduledTask) => {
|
|
||||||
if (loadingActions[task.id]) return
|
|
||||||
|
|
||||||
try {
|
|
||||||
setLoadingActions(prev => ({ ...prev, [task.id]: true }))
|
|
||||||
|
|
||||||
const updatedTask = await schedulersService.updateTask(task.id, {
|
|
||||||
is_active: !task.is_active,
|
|
||||||
})
|
|
||||||
|
|
||||||
onTaskUpdated?.(updatedTask)
|
|
||||||
toast.success(`Task ${task.is_active ? 'paused' : 'resumed'} successfully`)
|
|
||||||
} catch (error) {
|
|
||||||
const message = error instanceof Error ? error.message : 'Failed to update task'
|
|
||||||
toast.error(message)
|
|
||||||
} finally {
|
|
||||||
setLoadingActions(prev => ({ ...prev, [task.id]: false }))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const handleCancelTask = async (task: ScheduledTask) => {
|
const handleCancelTask = async (task: ScheduledTask) => {
|
||||||
if (loadingActions[task.id]) return
|
if (loadingActions[task.id]) return
|
||||||
|
|
||||||
|
// Confirm deletion
|
||||||
|
const confirmMessage = `Are you sure you want to delete the task "${task.name}"?${
|
||||||
|
task.status === 'scheduled' || task.status === 'running'
|
||||||
|
? '\n\nThis task is currently active and will be stopped immediately.'
|
||||||
|
: ''
|
||||||
|
}\n\nThis action cannot be undone.`
|
||||||
|
|
||||||
|
if (!confirm(confirmMessage)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
setLoadingActions(prev => ({ ...prev, [task.id]: true }))
|
setLoadingActions(prev => ({ ...prev, [task.id]: true }))
|
||||||
|
|
||||||
@@ -85,7 +72,7 @@ export function SchedulersTable({ tasks, onTaskUpdated, onTaskDeleted }: Schedul
|
|||||||
return (
|
return (
|
||||||
<div className="space-y-4">
|
<div className="space-y-4">
|
||||||
{tasks.map((task) => (
|
{tasks.map((task) => (
|
||||||
<Card key={task.id} className={task.is_active ? '' : 'opacity-60'}>
|
<Card key={task.id}>
|
||||||
<CardHeader className="pb-3">
|
<CardHeader className="pb-3">
|
||||||
<div className="flex items-center justify-between">
|
<div className="flex items-center justify-between">
|
||||||
<div className="space-y-1">
|
<div className="space-y-1">
|
||||||
@@ -94,11 +81,6 @@ export function SchedulersTable({ tasks, onTaskUpdated, onTaskDeleted }: Schedul
|
|||||||
<Badge variant={getTaskStatusVariant(task.status)}>
|
<Badge variant={getTaskStatusVariant(task.status)}>
|
||||||
{getTaskStatusLabel(task.status)}
|
{getTaskStatusLabel(task.status)}
|
||||||
</Badge>
|
</Badge>
|
||||||
{!task.is_active && (
|
|
||||||
<Badge variant="outline" className="text-muted-foreground">
|
|
||||||
Paused
|
|
||||||
</Badge>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
<p className="text-sm text-muted-foreground">
|
<p className="text-sm text-muted-foreground">
|
||||||
{getTaskTypeLabel(task.task_type)}
|
{getTaskTypeLabel(task.task_type)}
|
||||||
@@ -121,26 +103,8 @@ export function SchedulersTable({ tasks, onTaskUpdated, onTaskDeleted }: Schedul
|
|||||||
</Button>
|
</Button>
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent align="end">
|
<DropdownMenuContent align="end">
|
||||||
<DropdownMenuItem
|
|
||||||
onClick={() => handleToggleActive(task)}
|
|
||||||
disabled={task.status === 'completed' || task.status === 'cancelled'}
|
|
||||||
>
|
|
||||||
{task.is_active ? (
|
|
||||||
<>
|
|
||||||
<Pause className="h-4 w-4 mr-2" />
|
|
||||||
Pause Task
|
|
||||||
</>
|
|
||||||
) : (
|
|
||||||
<>
|
|
||||||
<Play className="h-4 w-4 mr-2" />
|
|
||||||
Resume Task
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
</DropdownMenuItem>
|
|
||||||
<DropdownMenuSeparator />
|
|
||||||
<DropdownMenuItem
|
<DropdownMenuItem
|
||||||
onClick={() => handleCancelTask(task)}
|
onClick={() => handleCancelTask(task)}
|
||||||
disabled={task.status === 'completed' || task.status === 'cancelled'}
|
|
||||||
className="text-destructive focus:text-destructive"
|
className="text-destructive focus:text-destructive"
|
||||||
>
|
>
|
||||||
<Square className="h-4 w-4 mr-2" />
|
<Square className="h-4 w-4 mr-2" />
|
||||||
|
|||||||
@@ -100,11 +100,6 @@ export function SchedulersPage() {
|
|||||||
setShowCreateDialog(false)
|
setShowCreateDialog(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleTaskUpdated = (updatedTask: ScheduledTask) => {
|
|
||||||
setTasks(prev => prev.map(task =>
|
|
||||||
task.id === updatedTask.id ? updatedTask : task
|
|
||||||
))
|
|
||||||
}
|
|
||||||
|
|
||||||
const handleTaskDeleted = (taskId: number) => {
|
const handleTaskDeleted = (taskId: number) => {
|
||||||
setTasks(prev => prev.filter(task => task.id !== taskId))
|
setTasks(prev => prev.filter(task => task.id !== taskId))
|
||||||
@@ -132,7 +127,6 @@ export function SchedulersPage() {
|
|||||||
return (
|
return (
|
||||||
<SchedulersTable
|
<SchedulersTable
|
||||||
tasks={tasks}
|
tasks={tasks}
|
||||||
onTaskUpdated={handleTaskUpdated}
|
|
||||||
onTaskDeleted={handleTaskDeleted}
|
onTaskDeleted={handleTaskDeleted}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user