import React, { useState } from 'react'
import { useNavigate } from 'react-router-dom'
import { useTranslation } from 'react-i18next'
import {
Box,
Heading,
Button,
Table,
Flex,
Input,
HStack,
Text,
Badge,
} from '@chakra-ui/react'
import { useGetTasksQuery, useDeleteTaskMutation } from '../../__data__/api/api'
import { URLs } from '../../__data__/urls'
import { LoadingSpinner } from '../../components/LoadingSpinner'
import { ErrorAlert } from '../../components/ErrorAlert'
import { EmptyState } from '../../components/EmptyState'
import type { ChallengeTask } from '../../types/challenge'
import { toaster } from '../../components/ui/toaster'
export const TasksListPage: React.FC = () => {
const navigate = useNavigate()
const { t } = useTranslation()
const { data: tasks, isLoading, error, refetch } = useGetTasksQuery()
const [deleteTask] = useDeleteTaskMutation()
const [searchQuery, setSearchQuery] = useState('')
const handleDeleteTask = async (task: ChallengeTask) => {
const confirmed = window.confirm(
t('challenge.admin.tasks.delete.confirm.message', { title: task.title })
)
if (!confirmed) return
try {
await deleteTask(task.id).unwrap()
toaster.create({
title: t('challenge.admin.common.success'),
description: t('challenge.admin.tasks.deleted'),
type: 'success',
})
} catch (_err) {
toaster.create({
title: t('challenge.admin.common.error'),
description: t('challenge.admin.tasks.delete.error'),
type: 'error',
})
}
}
if (isLoading) {
return
}
if (error || !tasks) {
return
}
const filteredTasks = tasks.filter((task) =>
task.title.toLowerCase().includes(searchQuery.toLowerCase())
)
const formatDate = (dateStr: string) => {
return new Date(dateStr).toLocaleDateString('ru-RU', {
year: 'numeric',
month: 'short',
day: 'numeric',
})
}
return (
{t('challenge.admin.tasks.list.title')}
{tasks.length > 0 && (
setSearchQuery(e.target.value)}
maxW="400px"
/>
)}
{filteredTasks.length === 0 && tasks.length === 0 ? (
navigate(URLs.taskNew)}
/>
) : filteredTasks.length === 0 ? (
) : (
{t('challenge.admin.tasks.list.table.title')}
{t('challenge.admin.tasks.list.table.creator')}
{t('challenge.admin.tasks.list.table.created')}
{t('challenge.admin.tasks.list.table.hidden.instructions')}
{t('challenge.admin.tasks.list.table.actions')}
{filteredTasks.map((task) => (
{task.title}
{task.creator?.preferred_username || 'N/A'}
{formatDate(task.createdAt)}
{task.hiddenInstructions ? (
{t('challenge.admin.tasks.list.badge.has.instructions')}
) : (
—
)}
))}
)}
)
}