Правки финального ревью: обновление списка после создания консолидации, подсказка кнопки, решения R-4..R-8
- Sidebar: после создания консолидации перечитывается список группы - useLegalEntityFiles: убран biome-ignore в зависимостях эффекта - FilesDrawer: курсор и pointer-events у недоступной кнопки загрузки - design.md: решения R-4..R-8 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
9f56442a0c
commit
c5537d5a6b
@ -51,3 +51,13 @@
|
|||||||
не из текущей консоли; в режиме стола подписи нет (все файлы — этой консоли или подхваченные). Цена ошибки: низкая.
|
не из текущей консоли; в режиме стола подписи нет (все файлы — этой консоли или подхваченные). Цена ошибки: низкая.
|
||||||
3. 09.10.2026 — **R-3:** неизвестный `consolidation_id` (нет в списке ГК) подписывается «другая консолидация», а не
|
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, лишний запрос.
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Подготовка демо: загрузить квартальные ОСВ РБ и Счастливочной за 2024 Q1–Q3 в версию и подтвердить ОСВ-документы.
|
# Подготовка демо: загрузить квартальные ОСВ РБ и Счастливочной за 2024 Q1–Q3 в консолидацию версии и подтвердить ОСВ-документы.
|
||||||
# Использование: scripts/demo-prepare.sh <version_id> [email] (стенд arm-core на localhost:8000, DEBUG=true)
|
# Использование: scripts/demo-prepare.sh <version_id> [email] (стенд arm-core на localhost:8000, DEBUG=true)
|
||||||
# Каталог фикстур: FIXTURES_DIR (по умолчанию ../../fixtures относительно репозитория arm-web, т.е. workspace/fixtures).
|
# Каталог фикстур: FIXTURES_DIR (по умолчанию ../../fixtures относительно репозитория arm-web, т.е. workspace/fixtures).
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|||||||
@ -50,7 +50,7 @@ export function DocumentsDrawer({ open, onClose }: { open: boolean; onClose: ()
|
|||||||
icon={<UploadOutlined />}
|
icon={<UploadOutlined />}
|
||||||
disabled={!current_legal_entity_id || !canUpload}
|
disabled={!current_legal_entity_id || !canUpload}
|
||||||
onClick={() => setUploadOpen(true)}
|
onClick={() => setUploadOpen(true)}
|
||||||
style={{ background: canUpload ? '#237804' : undefined }}>
|
style={canUpload ? { background: '#237804' } : { pointerEvents: 'none' }}>
|
||||||
Загрузить документы
|
Загрузить документы
|
||||||
</Button>
|
</Button>
|
||||||
);
|
);
|
||||||
@ -83,7 +83,7 @@ export function DocumentsDrawer({ open, onClose }: { open: boolean; onClose: ()
|
|||||||
uploadButton
|
uploadButton
|
||||||
) : (
|
) : (
|
||||||
<Tooltip title={UPLOAD_DISABLED_HINT}>
|
<Tooltip title={UPLOAD_DISABLED_HINT}>
|
||||||
<span>{uploadButton}</span>
|
<span style={{ display: 'inline-block', cursor: 'not-allowed' }}>{uploadButton}</span>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
)}
|
)}
|
||||||
{current !== null && (
|
{current !== null && (
|
||||||
|
|||||||
@ -18,7 +18,7 @@ describe('consolidationLabel', () => {
|
|||||||
expect(consolidationLabel(null, cons, 'c-2024q3')).toBe('вне консолидации');
|
expect(consolidationLabel(null, cons, 'c-2024q3')).toBe('вне консолидации');
|
||||||
expect(consolidationLabel('ghost', 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('c-2024q3', cons, null)).toBe('2024 К3');
|
||||||
expect(consolidationLabel(null, cons, null)).toBe('вне консолидации');
|
expect(consolidationLabel(null, cons, null)).toBe('вне консолидации');
|
||||||
});
|
});
|
||||||
|
|||||||
@ -42,7 +42,7 @@ export function useLegalEntityFiles(legalEntityId: string | null, consolidationI
|
|||||||
}
|
}
|
||||||
}, [legalEntityId, consolidationId]);
|
}, [legalEntityId, consolidationId]);
|
||||||
|
|
||||||
// biome-ignore lint/correctness/useExhaustiveDependencies: consolidationId — триггер сброса при смене режима, в теле не читается
|
// смена режима (consolidationId) приходит через reload: он пересоздаётся и перезапускает этот эффект
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// при смене ЮЛ, режима (консолидация/все) или закрытии панели: старые ответы не применяем, прежние файлы очищаем
|
// при смене ЮЛ, режима (консолидация/все) или закрытии панели: старые ответы не применяем, прежние файлы очищаем
|
||||||
requestRef.current++;
|
requestRef.current++;
|
||||||
@ -50,7 +50,7 @@ export function useLegalEntityFiles(legalEntityId: string | null, consolidationI
|
|||||||
errorShownRef.current = false;
|
errorShownRef.current = false;
|
||||||
setFiles([]);
|
setFiles([]);
|
||||||
if (open && legalEntityId) void reload();
|
if (open && legalEntityId) void reload();
|
||||||
}, [open, legalEntityId, consolidationId, reload]);
|
}, [open, legalEntityId, reload]);
|
||||||
|
|
||||||
const pending = hasPendingFiles(files);
|
const pending = hasPendingFiles(files);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@ -15,6 +15,8 @@ import { NavLink, useNavigate } from 'react-router-dom';
|
|||||||
import { USERS_ADMIN } from '../../auth/permissions';
|
import { USERS_ADMIN } from '../../auth/permissions';
|
||||||
import { Logo } from '../../components/Logo';
|
import { Logo } from '../../components/Logo';
|
||||||
import { createConsolidation } from '../../services/api/consolidations';
|
import { createConsolidation } from '../../services/api/consolidations';
|
||||||
|
import { getConsolidationsListThunk } from '../../store/slices/consolidations/thunks';
|
||||||
|
import { useAppDispatch } from '../../store/store';
|
||||||
import { quarterLabel } from '../../utils/labels';
|
import { quarterLabel } from '../../utils/labels';
|
||||||
import { NewConsolidationModal } from '../NewConsoleModal/NewConsoleModal';
|
import { NewConsolidationModal } from '../NewConsoleModal/NewConsoleModal';
|
||||||
import styles from './styles.module.css';
|
import styles from './styles.module.css';
|
||||||
@ -165,6 +167,7 @@ const Section = memo(function Section({
|
|||||||
|
|
||||||
export function Sidebar() {
|
export function Sidebar() {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
const dispatch = useAppDispatch();
|
||||||
const [modalOpen, setModalOpen] = useState(false);
|
const [modalOpen, setModalOpen] = useState(false);
|
||||||
const [isCollapsed, setIsCollapsed] = useState(false);
|
const [isCollapsed, setIsCollapsed] = useState(false);
|
||||||
|
|
||||||
@ -218,6 +221,8 @@ export function Sidebar() {
|
|||||||
}}
|
}}
|
||||||
onOk={async (values) => {
|
onOk={async (values) => {
|
||||||
const card = await createConsolidation(values);
|
const card = await createConsolidation(values);
|
||||||
|
// перечитываем список: на странице группы он сам не обновится, и новая консолидация не станет текущей
|
||||||
|
await dispatch(getConsolidationsListThunk(values.company_group_id));
|
||||||
setModalOpen(false);
|
setModalOpen(false);
|
||||||
message.success(`Создана консолидация ${values.year}, ${quarterLabel(values.quarter)}`);
|
message.success(`Создана консолидация ${values.year}, ${quarterLabel(values.quarter)}`);
|
||||||
navigate(`/groups/${values.company_group_id}?version=${card.id}`);
|
navigate(`/groups/${values.company_group_id}?version=${card.id}`);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user