Andrey Epifancev 175343b843 fix(web): вернуть синхронизацию фронта #139/#140, затёртую в ветке шахматки (ревью #158)
Коммит 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>
2026-10-21 14:04:19 +04:00

53 lines
1.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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>
);
}