ci / module boundaries / boundaries (push) Successful in 6s
ci / api / api (push) Successful in 47s
ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 1m2s
ci / db / db (push) Successful in 1m4s
ci / docker / docker (образы собираются — их сервер собирает сам при обновлении) (push) Successful in 1m30s
ci / ts / ts (packages + web) (push) Successful in 2m54s
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 1m14s
41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
import { useState } from 'react';
|
|
import { useTranslation } from 'react-i18next';
|
|
import { Button, Dialog } from '../../shared/ui/ui';
|
|
import s from '../../pages/page.module.css';
|
|
import u from '../../pages/uploads/uploads.module.css';
|
|
export function RejectDialog({
|
|
count,
|
|
busy,
|
|
onClose,
|
|
onReject,
|
|
}: {
|
|
count: number;
|
|
busy: boolean;
|
|
onClose: () => void;
|
|
onReject: (reason: string) => void;
|
|
}) {
|
|
const { t } = useTranslation(['admin', 'common']);
|
|
const [reason, setReason] = useState('');
|
|
return (
|
|
<Dialog
|
|
title={t('uploads.reject_title', { count })}
|
|
onClose={onClose}
|
|
footer={
|
|
<>
|
|
<Button variant="ghost" onClick={onClose}>
|
|
{t('common:form.cancel')}
|
|
</Button>
|
|
<Button variant="danger" busy={busy} onClick={() => onReject(reason)}>
|
|
{t('uploads.reject')}
|
|
</Button>
|
|
</>
|
|
}
|
|
>
|
|
<label className={s.sessions}>
|
|
<span>{t('uploads.reject_reason')}</span>
|
|
<textarea className={u.textarea} value={reason} maxLength={1000} onChange={(e) => setReason(e.target.value)} />
|
|
</label>
|
|
</Dialog>
|
|
);
|
|
}
|