From c5537d5a6b0e336779a06ce80119bfadeda4a8ec Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Sat, 10 Oct 2026 01:03:00 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D1=84?= =?UTF-8?q?=D0=B8=D0=BD=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B2=D1=8C=D1=8E:=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D1=81=D0=BE=D0=B7?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=BD=D1=81=D0=BE?= =?UTF-8?q?=D0=BB=D0=B8=D0=B4=D0=B0=D1=86=D0=B8=D0=B8,=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B4=D1=81=D0=BA=D0=B0=D0=B7=D0=BA=D0=B0=20=D0=BA=D0=BD=D0=BE?= =?UTF-8?q?=D0=BF=D0=BA=D0=B8,=20=D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20R-4..R-8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Sidebar: после создания консолидации перечитывается список группы - useLegalEntityFiles: убран biome-ignore в зависимостях эффекта - FilesDrawer: курсор и pointer-events у недоступной кнопки загрузки - design.md: решения R-4..R-8 Co-Authored-By: Claude Fable 5.1 --- openspec/changes/console-files/design.md | 10 ++++++++++ scripts/demo-prepare.sh | 2 +- src/widgets/FilesDrawer/FilesDrawer.tsx | 4 ++-- src/widgets/FilesDrawer/consolidationLabel.test.ts | 2 +- src/widgets/FilesDrawer/useLegalEntityFiles.ts | 4 ++-- src/widgets/Sidebar/Sidebar.tsx | 5 +++++ 6 files changed, 21 insertions(+), 6 deletions(-) diff --git a/openspec/changes/console-files/design.md b/openspec/changes/console-files/design.md index 462eb89..ecd4085 100644 --- a/openspec/changes/console-files/design.md +++ b/openspec/changes/console-files/design.md @@ -51,3 +51,13 @@ не из текущей консоли; в режиме стола подписи нет (все файлы — этой консоли или подхваченные). Цена ошибки: низкая. 3. 09.10.2026 — **R-3:** неизвестный `consolidation_id` (нет в списке ГК) подписывается «другая консолидация», а не скрывается. Цена ошибки: нулевая. +4. 10.10.2026 — **R-4:** ручной прогон на стенде отложен до выката arm-core#96. Цена ошибки: UI-дефект всплывёт позже; + PR не вливать до прогона. +5. 10.10.2026 — **R-5:** trailer коммита 5b7b02a «Claude Haiku 5.5» вместо «Claude Fable 5.1» оставлен. Цена ошибки: + неверная атрибуция в одном коммите. +6. 10.10.2026 — **R-6:** промежуточное состояние (tsc-ошибка и versionId в UploadDocumentsModal между Task 2 и Task 3) + принято, чинится в Task 3. Цена ошибки: нулевая, закрыто в Task 3. +7. 10.10.2026 — **R-7:** `consolidation_id` в scripts/demo-prepare.sh берётся из карточки версии + `GET /consolidations/versions/$V`, а не из `POST /consolidations`. Цена ошибки: скрипт демо не запускался на живом ядре. +8. 10.10.2026 — **R-8:** после создания консолидации перечитывается список консолидаций группы (I-1). Цена ошибки: + правка выходит за Impact proposal, лишний запрос. diff --git a/scripts/demo-prepare.sh b/scripts/demo-prepare.sh index 42cb46c..da39d16 100755 --- a/scripts/demo-prepare.sh +++ b/scripts/demo-prepare.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Подготовка демо: загрузить квартальные ОСВ РБ и Счастливочной за 2024 Q1–Q3 в версию и подтвердить ОСВ-документы. +# Подготовка демо: загрузить квартальные ОСВ РБ и Счастливочной за 2024 Q1–Q3 в консолидацию версии и подтвердить ОСВ-документы. # Использование: scripts/demo-prepare.sh [email] (стенд arm-core на localhost:8000, DEBUG=true) # Каталог фикстур: FIXTURES_DIR (по умолчанию ../../fixtures относительно репозитория arm-web, т.е. workspace/fixtures). set -euo pipefail diff --git a/src/widgets/FilesDrawer/FilesDrawer.tsx b/src/widgets/FilesDrawer/FilesDrawer.tsx index 08f5924..3026379 100644 --- a/src/widgets/FilesDrawer/FilesDrawer.tsx +++ b/src/widgets/FilesDrawer/FilesDrawer.tsx @@ -50,7 +50,7 @@ export function DocumentsDrawer({ open, onClose }: { open: boolean; onClose: () icon={} disabled={!current_legal_entity_id || !canUpload} onClick={() => setUploadOpen(true)} - style={{ background: canUpload ? '#237804' : undefined }}> + style={canUpload ? { background: '#237804' } : { pointerEvents: 'none' }}> Загрузить документы ); @@ -83,7 +83,7 @@ export function DocumentsDrawer({ open, onClose }: { open: boolean; onClose: () uploadButton ) : ( - {uploadButton} + {uploadButton} )} {current !== null && ( diff --git a/src/widgets/FilesDrawer/consolidationLabel.test.ts b/src/widgets/FilesDrawer/consolidationLabel.test.ts index 3c54bfc..3fc6447 100644 --- a/src/widgets/FilesDrawer/consolidationLabel.test.ts +++ b/src/widgets/FilesDrawer/consolidationLabel.test.ts @@ -18,7 +18,7 @@ describe('consolidationLabel', () => { expect(consolidationLabel(null, cons, 'c-2024q3')).toBe('вне консолидации'); expect(consolidationLabel('ghost', cons, 'c-2024q3')).toBe('другая консолидация'); }); - it('без текущей консоли подпись есть у всех, кроме null-текущей', () => { + it('без текущей консолидации подпись есть у всех файлов', () => { expect(consolidationLabel('c-2024q3', cons, null)).toBe('2024 К3'); expect(consolidationLabel(null, cons, null)).toBe('вне консолидации'); }); diff --git a/src/widgets/FilesDrawer/useLegalEntityFiles.ts b/src/widgets/FilesDrawer/useLegalEntityFiles.ts index 0adba90..c877f8e 100644 --- a/src/widgets/FilesDrawer/useLegalEntityFiles.ts +++ b/src/widgets/FilesDrawer/useLegalEntityFiles.ts @@ -42,7 +42,7 @@ export function useLegalEntityFiles(legalEntityId: string | null, consolidationI } }, [legalEntityId, consolidationId]); - // biome-ignore lint/correctness/useExhaustiveDependencies: consolidationId — триггер сброса при смене режима, в теле не читается + // смена режима (consolidationId) приходит через reload: он пересоздаётся и перезапускает этот эффект useEffect(() => { // при смене ЮЛ, режима (консолидация/все) или закрытии панели: старые ответы не применяем, прежние файлы очищаем requestRef.current++; @@ -50,7 +50,7 @@ export function useLegalEntityFiles(legalEntityId: string | null, consolidationI errorShownRef.current = false; setFiles([]); if (open && legalEntityId) void reload(); - }, [open, legalEntityId, consolidationId, reload]); + }, [open, legalEntityId, reload]); const pending = hasPendingFiles(files); useEffect(() => { diff --git a/src/widgets/Sidebar/Sidebar.tsx b/src/widgets/Sidebar/Sidebar.tsx index 7e75df4..a615a1e 100644 --- a/src/widgets/Sidebar/Sidebar.tsx +++ b/src/widgets/Sidebar/Sidebar.tsx @@ -15,6 +15,8 @@ import { NavLink, useNavigate } from 'react-router-dom'; import { USERS_ADMIN } from '../../auth/permissions'; import { Logo } from '../../components/Logo'; import { createConsolidation } from '../../services/api/consolidations'; +import { getConsolidationsListThunk } from '../../store/slices/consolidations/thunks'; +import { useAppDispatch } from '../../store/store'; import { quarterLabel } from '../../utils/labels'; import { NewConsolidationModal } from '../NewConsoleModal/NewConsoleModal'; import styles from './styles.module.css'; @@ -165,6 +167,7 @@ const Section = memo(function Section({ export function Sidebar() { const navigate = useNavigate(); + const dispatch = useAppDispatch(); const [modalOpen, setModalOpen] = useState(false); const [isCollapsed, setIsCollapsed] = useState(false); @@ -218,6 +221,8 @@ export function Sidebar() { }} onOk={async (values) => { const card = await createConsolidation(values); + // перечитываем список: на странице группы он сам не обновится, и новая консолидация не станет текущей + await dispatch(getConsolidationsListThunk(values.company_group_id)); setModalOpen(false); message.success(`Создана консолидация ${values.year}, ${quarterLabel(values.quarter)}`); navigate(`/groups/${values.company_group_id}?version=${card.id}`);