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')} ) : ( )} ))} )} ) }