Add duplicate and clear submissions functionality for challenge chains; implement corresponding dialogs and API endpoints, enhancing user experience and task management. Update localization for new features in English and Russian.
This commit is contained in:
77
src/components/ClearSubmissionsDialog.tsx
Normal file
77
src/components/ClearSubmissionsDialog.tsx
Normal file
@@ -0,0 +1,77 @@
|
||||
import React from 'react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import {
|
||||
DialogRoot,
|
||||
DialogContent,
|
||||
DialogHeader,
|
||||
DialogTitle,
|
||||
DialogBody,
|
||||
DialogFooter,
|
||||
DialogActionTrigger,
|
||||
Button,
|
||||
Text,
|
||||
} from '@chakra-ui/react'
|
||||
import { useClearChainSubmissionsMutation } from '../__data__/api/api'
|
||||
import { toaster } from './ui/toaster'
|
||||
import type { ChallengeChain } from '../types/challenge'
|
||||
|
||||
interface ClearSubmissionsDialogProps {
|
||||
isOpen: boolean
|
||||
onClose: () => void
|
||||
chain: ChallengeChain | null
|
||||
}
|
||||
|
||||
export const ClearSubmissionsDialog: React.FC<ClearSubmissionsDialogProps> = ({
|
||||
isOpen,
|
||||
onClose,
|
||||
chain,
|
||||
}) => {
|
||||
const { t } = useTranslation()
|
||||
const [clearSubmissions, { isLoading }] = useClearChainSubmissionsMutation()
|
||||
|
||||
const handleConfirm = async () => {
|
||||
if (!chain) return
|
||||
|
||||
try {
|
||||
await clearSubmissions(chain.id).unwrap()
|
||||
toaster.create({
|
||||
title: t('challenge.admin.common.success'),
|
||||
description: t('challenge.admin.chains.clear.submissions.success'),
|
||||
type: 'success',
|
||||
})
|
||||
onClose()
|
||||
} catch (err) {
|
||||
toaster.create({
|
||||
title: t('challenge.admin.common.error'),
|
||||
description: t('challenge.admin.chains.clear.submissions.error'),
|
||||
type: 'error',
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if (!chain) return null
|
||||
|
||||
return (
|
||||
<DialogRoot open={isOpen} onOpenChange={(e) => !e.open && onClose()}>
|
||||
<DialogContent>
|
||||
<DialogHeader>
|
||||
<DialogTitle>{t('challenge.admin.chains.clear.submissions.dialog.title')}</DialogTitle>
|
||||
</DialogHeader>
|
||||
<DialogBody>
|
||||
<Text>{t('challenge.admin.chains.clear.submissions.dialog.message', { name: chain.name })}</Text>
|
||||
</DialogBody>
|
||||
<DialogFooter>
|
||||
<DialogActionTrigger asChild>
|
||||
<Button variant="outline" onClick={onClose} disabled={isLoading}>
|
||||
{t('challenge.admin.common.cancel')}
|
||||
</Button>
|
||||
</DialogActionTrigger>
|
||||
<Button colorPalette="red" onClick={handleConfirm} disabled={isLoading}>
|
||||
{t('challenge.admin.chains.clear.submissions.dialog.button.confirm')}
|
||||
</Button>
|
||||
</DialogFooter>
|
||||
</DialogContent>
|
||||
</DialogRoot>
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user