AURORA-1840: состояние модалок листа вынесено из RealtimeTable #218
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/213-aurora-1840-sheet-modals"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #213
Jira: AURORA-1840
Что сделано
Modals/SheetModals.jsx(React.memo+forwardRef+useImperativeHandle): внутри состояние и три модалки (ВСП, статья расходов, программа/проект), наружуopen('vsp' | 'expense' | 'program' | 'project'). Пропсы только стабильные:formId,sheetName,onAddVsp,onAddExpenseItem,onAddProgram,onAddProject(handleAdd*Rowуже вuseCallback,tableстабильный).RealtimeTable: убраны три useState модалок, три close-колбэка и JSX модалок; проверки выделенной строки остаются в таблице, затемmodalsRef.current?.open(...).utils/sheetModalsState.js(open/close, заголовок и обработчик для программы/проекта).onSearchNext/onSearchPreviousдля SettingsPanel обёрнуты вuseCallback(были стрелками и ломали memo).Тесты
sheetModalsState.test.js(4 теста),node --testпо utils: зелёные.npm run buildпроходит. Biome: новые файлы чистые; в RealtimeTable.jsx остались исходные замечания (2 ошибки, предупреждения), не связанные с правкой.Проверить руками
Замер до/после
Будет добавлен после ночного прогона на стенде perf/. Сценарий:
modals.spec.tsсPERF_MODALS='sheet_select_vsp,sheet_select_expense,sheet_create_program,sheet_create_project' PERF_REPEATS=5(было 74-93 мс, критерий ≤ 40 мс); затем профилирующая сборкаPERF_WEB=http://localhost:8081 PERF_PROFILING=1 PERF_MODALS='sheet_*': вrenders_topне должно бытьStyled(td)иMRT_TableBodyCell.Rulings I made
onSearchNext/Previous), отдельным коммитом. Обоснование: тривиально и разрешено. Цена ошибки: нулевая, откат одного коммита.kindвopen()игнорируется редьюсером. Цена ошибки: модалка не откроется при опечатке.🤖 Generated with Claude Code
Ночной замер на стенде perf/ (29.10, масштаб 1, D0 без grow, CPU 1x, arm-ka-* остановлены; Apple M4)
Сборки: «до» —
test2a28748; «после» — этот PR365becc(отtest, без 1839). Данные и API одни.Команда:
PERF_MODALS='sheet_select_vsp,sheet_select_expense,sheet_create_program,sheet_create_project,sheet_columns_tree' PERF_PRIORITY=1 PERF_REPEATS=5 npx playwright test scenarios/modals.spec.ts; рендеры — профилирующая сборка :8081,PERF_PROFILING=1 PERF_REPEATS=1(modal_renders,hotspots_summary.py --renders-only).Вердикт по критерию «≤ 40 мс от клика до кадра; ячейки не перерисовываются»:
renders_topоткрытия нетStyled(td)иMRT_TableBodyCell; рендеров за открытие в 22–51 раз меньше);sheet_select_expense14,6 мс из 18,5 мс self React —Autocomplete).Файлы:
/private/tmp/claude-501/-Users-andrey-epifancev-projects-fomichev-claude/6fa9c75e-eb11-4e5d-98c1-05eb590ab14f/scratchpad/night/{base,1840}/mprof/(modal-renders.md), прогоныperf/report-data/n-base-modals,n-p1840-modalsв worktree perf-bench.🤖 Generated with Claude Code
Ночной замер — часть 2 (итог)
Сборки как в части 1 (до —
test, после —365becc). Добавлено: поведение в combo (все 14 PR волны 1).click_to_visible_ms, медиана 5 повторов:
Вердикт: «ячейки не рендерятся» — выполнен (часть 1). «≤ 40 мс» отдельно — не выполнен (41.1–46.0), в combo выполнен по всем четырём (27.0–39.8; sheet_select_expense 39.8 на грани). Разница в combo — вклад 1836/1837 (дешевле сама таблица за модалкой).
Скриншоты не снимались (экран не меняется).
Файлы:
/private/tmp/claude-501/-Users-andrey-epifancev-projects-fomichev-claude/6fa9c75e-eb11-4e5d-98c1-05eb590ab14f/scratchpad/night/combo/mprof/, прогонperf/report-data/n-combo-modals.