AURORA-1842: свод 2 — виртуализация колонок и статичные стили #227
Open
aep
wants to merge 3 commits from
feat/220-aurora-1842-svod2-column-virtual into feat/210-aurora-1835-svod1-formatter
pull from: feat/220-aurora-1842-svod2-column-virtual
merge into: RSHB:feat/210-aurora-1835-svod1-formatter
RSHB:main
RSHB:feat/284-aurora-1891-cell-click-keyboard-edit
RSHB:feat/285-aurora-1899-denomination-base-thousand
RSHB:feat/289-aurora-1900-unit-vat-labels
RSHB:feat/286-aurora-1903-smeta-export-layout
RSHB:feat/282-aurora-1893-error-alert-navigation
RSHB:feat/280-aurora-1890-cell-editability
RSHB:feat/276-aurora-1892-negative-amounts
RSHB:test
RSHB:fix/null-strip-test-contract
RSHB:feat/233-aurora-1848-sheet-json-no-pydantic-b
RSHB:feat/275-aurora-1894-error-border-toast
RSHB:feat/216-aurora-1846-form4-sheet-sum
RSHB:fix/0051-migration-collision
RSHB:feat/235-aurora-1850-upd-form-cells-subtree
RSHB:feat/215-aurora-1844-upd-form-cells-full-rows
RSHB:feat/272-aurora-1887-ahr-hide-satellite-rows
RSHB:feat/270-aurora-1907-source-sheet
RSHB:feat/266-aurora-1897-ahr-limit-period-vat-units
RSHB:feat/265-aurora-1909-ahr-manual-row-capture
RSHB:feat/264-aurora-1895-formula-localstorage
RSHB:feat/254-aurora-1906-spod-column
RSHB:feat/255-aurora-1938-transfer-econ-calc
RSHB:feat/250-aurora-1888-stages-role-filter
RSHB:feat/253-aurora-1905-form1-form4-export-layout
RSHB:feat/252-aurora-1902-form2-export-layout
RSHB:feat/251-aurora-1901-smeta-rf-column-order
RSHB:feat/249-aurora-1936-row-delete-confirm
RSHB:feat/248-aurora-1877-token-refresh
RSHB:feat/246-aurora-1944-wheel-scroll-step
RSHB:feat/236-aurora-1843-svod2-server-paging-perf
RSHB:feat/236-aurora-1843-svod2-server-paging-web
RSHB:feat/236-aurora-1843-svod2-server-paging
RSHB:feat/214-aurora-1841-dict-vsp-virtual
RSHB:feat/234-aurora-1839-cell-memo
RSHB:feat/233-aurora-1848-sheet-json-no-pydantic
RSHB:feat/237-aurora-1845-ws-connection-cache
RSHB:feat/226-aurora-1837-cell-styles-css
RSHB:feat/207-aurora-1831-project-tn-race
RSHB:feat/208-aurora-1832-phase-dates-tz
RSHB:feat/209-aurora-1833-greenlet-dev
RSHB:feat/206-aurora-1830-users-me-local-email
RSHB:feat/212-aurora-1838-ws-immutable-update
RSHB:feat/211-aurora-1836-row-measure
RSHB:feat/205-aurora-1922-pg15-migration-0012
RSHB:feat/213-aurora-1840-sheet-modals
RSHB:feat/210-aurora-1835-svod1-formatter
RSHB:svod2-filter-fix2
RSHB:indent-export
RSHB:export-hierarchy
RSHB:svod2-filter-fix
RSHB:fix-id-column
RSHB:export-year-fix
RSHB:form3-source
RSHB:columns-svod-2
RSHB:export-optimize-refresh
RSHB:last-column
RSHB:svod-fix
RSHB:fix-columns
RSHB:form3-expense
RSHB:sattelite-fix
RSHB:delete-sattelite-rows
RSHB:form3-pages
RSHB:form1-sub_sub-fix
RSHB:sort-fix
RSHB:fixes-form
RSHB:new-expenses
RSHB:new-rows
RSHB:fix-style
RSHB:phase-template-edit
RSHB:fixes
RSHB:add-btn-reset-filter
RSHB:vsp-choice-fix
RSHB:project-filters-fix
RSHB:width-column-header-name
RSHB:task-filter-navigation
RSHB:auth
RSHB:icons-program-project
RSHB:export-optimize
RSHB:org-unit-limits
RSHB:auth-v2
RSHB:tasks-filters
RSHB:insert-row-fix
RSHB:svod-roles
RSHB:new-role-fix
RSHB:phase-edit-fix
RSHB:new-role
RSHB:delete-from-cell
RSHB:svod-cahe-and-table-direction
RSHB:direction-stage-fix
RSHB:backslash-fix
RSHB:svod
RSHB:front-svod-form-1
RSHB:projects-filters
RSHB:remove-row-fix
RSHB:computed-fix
RSHB:modal-add-year-project
RSHB:name-fix
RSHB:audit-logs-projects
RSHB:meta-form-3
RSHB:project-back-fix
RSHB:fix-sticky-columns
RSHB:fixies-3-form
RSHB:tech-num-fix
RSHB:fix-logic-limitation
RSHB:projects-fix
RSHB:3-form-project
RSHB:project-add-year-handler
RSHB:projects-summary-handler
RSHB:AURORA-1247
RSHB:projects-handlers
RSHB:vsp-choose-form2-2
RSHB:directions-fix
RSHB:add-validation
RSHB:add-checkbox-export-vsp
RSHB:fix-update-column-config
RSHB:fix-editable-columns
RSHB:add-biome-front
RSHB:vsp-choose-form2
RSHB:export-form-4
RSHB:booking-fix
RSHB:fix-front-tables
RSHB:phase-directions
RSHB:AURORA-1225
RSHB:fix-mapping-form-2-oper
RSHB:AURORA-1076-fix
RSHB:fix-add-row-program-4-form
RSHB:form2-limit-migrations
RSHB:delete-projects
RSHB:AURORA-1076
RSHB:form-4-add-row
RSHB:fix-logs
RSHB:AURORA-1206
RSHB:AURORA-894
RSHB:add-line-log-hotfix
RSHB:form-export-fix
RSHB:form-4-sql
RSHB:table-optimization-fix
RSHB:header_forms
RSHB:form-4-expense-item-filters
RSHB:entity-type-hotfix
RSHB:form-3-phases-timezones
RSHB:form-4-handlers
RSHB:export-fix
RSHB:close-date-vsp-fix
RSHB:deleted-user-auth-fix
RSHB:smeta-fix
RSHB:front-fixes
RSHB:line_id_code_full
RSHB:line_id_code
RSHB:timezones
RSHB:filenames-fix
RSHB:AURORA-1174-73
RSHB:project-sheets
RSHB:AURORA-1166
RSHB:websocket-projects
RSHB:project-front
RSHB:form3-permissions
RSHB:location_from_to_placement_type
RSHB:fix-vsp-filters
RSHB:fix-tests-and-functions
RSHB:mig2-fix
RSHB:vsp_fixes
RSHB:fix-ssp-title
RSHB:AURORA-1148
RSHB:fix-vsp-form-edit
RSHB:sql-funcs2-fix
RSHB:AURORA-1132
RSHB:logs
RSHB:AURORA-1147
RSHB:export-optimization
RSHB:AURORA-1131
RSHB:sql-funcs-fix
RSHB:vsp-dropdown-form
RSHB:form_2-back
RSHB:migrations
RSHB:websocket-self-flag
RSHB:reload-fix
RSHB:test-stand-fix
RSHB:excel-empty-fix
RSHB:requirements-fix
RSHB:AURORA-1096-back
RSHB:AURORA-1098
RSHB:AURORA-1096
RSHB:ws-user-id-fix
RSHB:expense-item-handler
RSHB:fix-date-phase
RSHB:excel-fix
RSHB:vsp-edit-field-fix
RSHB:vsp-fix-back
RSHB:vsp-back
RSHB:create-form-back
RSHB:export-direction-fix
RSHB:change-role-fix
RSHB:org-unit-users-fix
RSHB:audit-fix
RSHB:org-archive
RSHB:del_row_fix
RSHB:websocket_locks
RSHB:new_line_id
RSHB:admin-back
RSHB:form-fix
RSHB:ws
RSHB:ssp-fix
RSHB:stages-back
RSHB:form_124_write
RSHB:form_124
RSHB:new-model
RSHB:test-tsygankov
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
No description provided.
Delete Branch "feat/220-aurora-1842-svod2-column-virtual"
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 #220
Задача Jira: AURORA-1842. Стек: база PR —
feat/210-aurora-1835-svod1-formatter(AURORA-1835, PR #217), неtest.Что сделано
enableColumnVirtualization+columnVirtualizerOptionsна базе существующегоgetColumnVirtualizerOptions(columnLayoutUtils.jsне менялся), overscan колонок 3 переопределён снаружи.muiTableContainerProps.sx):td/th, полосаsvod2-band-1, толстая граница группыsvod2-group-end, zIndex закреплённых через[data-pinned="true"].muiTableBodyCellProps/muiTableHeadCellPropsвозвращают толькоclassNameиз картыcolumnId -> className, посчитанной один раз на лист вgetColumnConfig.smeta_typeиorg_name—spanс классами вместоBox sx.web/src/pages/Svod2Page/svod2Styles.js.ROW_VIRTUALIZER_OPTIONSиnumberFormatterне тронуты (AURORA-1836).Тесты
svod2Styles.test.js(полосы, границы групп, классы, карта классов, бейджи, наличие правил контейнера).node --test svod2Styles.test.js columnLayoutUtils.test.js: 9 pass, 0 fail.npm run buildпроходит. Бэк не менялся.Svod2Page.jsxостаётся одна ранее существующая претензия форматтера кscaleNumericColumns/Tab.Проверить руками
Замер до/после
Будет добавлен после ночного прогона на стенде perf/. Сценарий:
PERF_RUN_ID=1842-before PERF_TARGETS='svod/svod2_GO' PERF_ROLES=dfip PERF_REPEATS=3 npx playwright test scenarios/scroll.spec.ts --grep-invert filter, затемaggregate. Критерийmain_thread_ms_per_stepне больше 60 (база 184,0). Если 60 не наберётся, PR не блокируется: фиксируем факт, остаток на 1836/1837.Rulings I made
svod2-band-1только для полосы 1, полоса 0 — базовый фон в правилеtd/th. Цена ошибки: неверный фон ячеек, виден визуально.opacity: 1иposition: sticky; top: 0дляthперенесены в правило контейнера (были в sx). Цена ошибки: смещ��ние шапки.🤖 Generated with Claude Code
Ночной замер на стенде perf/ (29.10, масштаб 1, D0 без grow, CPU 1x, arm-ka-* остановлены; Apple M4)
Сборки: «до» —
test2a28748(свод 2 у 1835 не меняется, базу сняли наtest); «после» — этот PR399234a(= 1835 + 1842). Данные и API одни (0049).Команда:
PERF_TARGETS='svod/svod2_GO' PERF_ROLES=dfip PERF_REPEATS=2 PERF_TRACE=0 npx playwright test scenarios/scroll.spec.ts --grep-invert filter— полная прокрутка безPERF_MAX_STEPS(2074 шага), 2 повтора вместо 3 ради времени ночи (разброс внутри пары < 1 %).Рендеры (профилирующая сборка :8081,
hotspots.spec.ts PERF_HOT_MODE=react PERF_HOT_TARGETS='svod/svod2_GO:y', 80 шагов): рендеров компонентов на шаг 39 768 → 8 272, из нихStyled(td)7 810 → 1 326; self React 10 179 → 2 055 мс.Высота строки (getBoundingClientRect, 1600×900): 37.44 px до и после.
Скриншоты (1600×900; 3 позиции по горизонтали x0/x1/x2 и по вертикали y0/y1): до —
night/base/shots/base-svod2-1600-*.png, после —night/1842/shots/p1842-svod2-1600-*.png; каталог/private/tmp/claude-501/-Users-andrey-epifancev-projects-fomichev-claude/6fa9c75e-eb11-4e5d-98c1-05eb590ab14f/scratchpad/night/. Попиксельная сверка — в итоговом комментарии.🤖 Generated with Claude Code
Ночной замер — часть 2 (итог)
Сборки как в части 1 (до —
test, после —399234a= 1835 + 1842). Добавлено: попиксельная сверка и combo.combo: свод 2 GO полный (2046 шагов, 1 повтор — время ночи): 180.7 → 1842 39.7 → combo 32.6; CPU-профиль GO, main thread за 80 шагов: base 12 953 мс → combo 2 283 мс.
Сверка скриншотов 1600×900 (base против p1842): 10,2 – 13,1 % по 6 позициям (top, x0, x1, x2, y0, y1); в combo 12,1 – 15,2 %. Это не только высота строки. На картинках:
То есть числовые колонки на скриншотах свода 2 не видны ни в начале, ни при прокрутке вправо (скриншот делался через 700 мс после установки
scrollLeft). Причина не установлена. Если это не артефакт скриншота, то цифра 39.7 снята на таблице с 4 колонками вместо полной. Проверить руками до мержа.Сравнить:
/private/tmp/claude-501/-Users-andrey-epifancev-projects-fomichev-claude/6fa9c75e-eb11-4e5d-98c1-05eb590ab14f/scratchpad/night/base/shots/base-svod2-1600-x1.pngи/private/tmp/claude-501/-Users-andrey-epifancev-projects-fomichev-claude/6fa9c75e-eb11-4e5d-98c1-05eb590ab14f/scratchpad/night/1842/shots/p1842-svod2-1600-x1.png; разница —/private/tmp/claude-501/-Users-andrey-epifancev-projects-fomichev-claude/6fa9c75e-eb11-4e5d-98c1-05eb590ab14f/scratchpad/night/imgdiff/diff-p1842-svod2-1600-top.png.Вердикт по цели Jira (свод 2 GO ≤ 60 мс/шаг): по цифре выполнен (39.7; combo 32.6), с оговоркой выше.
Разбор ночной находки: свод 2 без числовых колонок — исправлено
Причины (проверено в браузере и по коду MRT 3.2.1):
layoutMode: 'grid', ячейки растягивались flex-grow (×3,7).enableColumnPinningMRT не учитывает закреплённые колонки в левом отступе виртуализатора — колонки уезжали за левый край (ночная картинка).Исправления:
b834f10—grid-no-grow+enableColumnPinning(как у листов форм).4cb0862— заголовок MRT без виртуализации порталом в<table>(enableTableHead: false+MRT_TableHead),flexShrink: 0у ячеек (распорки сжимались, сдвиг тела до 7,9 px), скрыта подложка::beforeзакреплённых ячеек.Проверка: границы 26 групп и 111 колонок совпадают (0 px) на ССП и РФ при scrollLeft 0/3000/8000/max; скриншоты против test совпадают (ССП и РФ), фильтры работают так же. Скриншоты:
scratchpad/fix1842/.Rulings исполнителя: R-1 портал штатного MRT_TableHead; R-2 flexShrink 0 на td/th; R-3 скрыт ::before у закреплённых; R-4 тест конфигурации стилей написан после правки; R-5 портал живёт, пока показана таблица.
Ночные 39.7 мс сняты на сломанной таблице — замер 1842 будет повторён.
Checkout
From your project repository, check out a new branch and test the changes.