Коммит 7891430 откатил синхронизацию фронта (5bec434, #139/#140) и форматирование Prettier (#137). Из origin/main восстановлены файлы, не относящиеся к шахматке: - index.tsx (тема antd: Layout.fontSize, Form.labelFontSize/labelColor); - layouts/DocumentPage.tsx (переключатель документа, комментарий к документу); - services/api: consolidations.ts (getChecklist), documents.ts (postComment), files.ts (removeFile), directories/catalogue_jur.ts; types/consolidations/version_members.ts (ChecklistBackendShape); - widgets: ConsoleLegalEntities (ChecklistModal, checklist_utils), FilesDrawer (DeleteModal, ReplaceDocModal, documentRows), DocumentReview (CommentModal, StatementReview, reviewCounters, reviewView), CatalogueJurForm, CatalogueJurTable, CompanyGroupsList; - hooks/useVirtualList.tsx и components/TableTag/presets.tsx (форматирование Prettier). В файлах шахматки оставлены её изменения: App.tsx, layouts/index.ts, api/client.ts (init в apiFetchBlob), OsvTabs.tsx, ConsolidatedOsvContent.tsx. Из main возвращён key={version_id}: страница отчёта разделена на обёртку с key и содержимое, чтобы при смене версии состояние (карточка, фильтры, страница) создавалось заново, как в ConsolidatedOsvPage. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
import { Form, Input, Modal, message } from 'antd';
|
||
import { useState } from 'react';
|
||
import { ApiError } from '../../api/client';
|
||
import { postComment } from '../../services/api/documents';
|
||
|
||
type CommentModalProps = { documentId: string; open: boolean; onClose: () => void };
|
||
|
||
export default function CommentModal({ documentId, open, onClose }: CommentModalProps) {
|
||
const [comment, setComment] = useState('');
|
||
const [saving, setSaving] = useState(false);
|
||
const close = () => {
|
||
setComment('');
|
||
onClose();
|
||
};
|
||
const handleOk = async () => {
|
||
setSaving(true);
|
||
try {
|
||
await postComment(documentId, comment.trim());
|
||
message.success('Комментарий добавлен');
|
||
close();
|
||
} catch (e: unknown) {
|
||
// окно не закрываем: текст не теряется, можно повторить
|
||
message.error(e instanceof ApiError ? e.message : 'Не удалось добавить комментарий');
|
||
} finally {
|
||
setSaving(false);
|
||
}
|
||
};
|
||
return (
|
||
<Modal
|
||
title='Добавить комментарий'
|
||
okText='Добавить'
|
||
onOk={handleOk}
|
||
okButtonProps={{ disabled: comment.trim().length === 0 }}
|
||
confirmLoading={saving}
|
||
open={open}
|
||
cancelText='Отмена'
|
||
onCancel={close}
|
||
destroyOnHidden>
|
||
<Form layout='vertical'>
|
||
<Form.Item label={<span style={{ fontWeight: 600 }}>Комментарий</span>}>
|
||
<Input.TextArea
|
||
value={comment}
|
||
onChange={(e) => setComment(e.target.value)}
|
||
autoSize={{ minRows: 3 }}
|
||
maxLength={4000}
|
||
placeholder='Опишите результат проверки или внесенные правки'
|
||
/>
|
||
</Form.Item>
|
||
</Form>
|
||
</Modal>
|
||
);
|
||
}
|