AURORA-1842: свод 2 — виртуализация колонок и статичные стили #227

Open
aep wants to merge 1 commits from feat/220-aurora-1842-svod2-column-virtual into feat/210-aurora-1835-svod1-formatter
Owner

Closes #220

Задача Jira: AURORA-1842. Стек: база PR — feat/210-aurora-1835-svod1-formatter (AURORA-1835, PR #217), не test.

Что сделано

  • enableColumnVirtualization + columnVirtualizerOptions на базе существующего getColumnVirtualizerOptions (columnLayoutUtils.js не менялся), overscan колонок 3 переопределён снаружи.
  • Статичные стили ячеек и заголовков вынесены в одно CSS-правило на контейнере (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 проходит. Бэк не менялся.
  • biome: новые файлы чистые; в Svod2Page.jsx остаётся одна ранее существующая претензия форматтера к scaleNumericColumns/Tab.

Проверить руками

  • Горизонтальный скролл GO и RF до конца и обратно: заголовки групп в 2–3 ряда совпадают по ширине с телом.
  • Полосы и толстые границы групп на месте.
  • 4 закреплённые колонки не прыгают, их фон непрозрачный.
  • Select-фильтры в закреплённых колонках работают.
  • «Найдено N из M» при поиске.
  • Смена единиц.
  • Бейджи «Вид сметы» и «ССП» выглядят как раньше.

Замер до/после

Будет добавлен после ночного прогона на стенде 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

  • R-1: класс svod2-band-1 только для полосы 1, полоса 0 — базовый фон в правиле td/th. Цена ошибки: неверный фон ячеек, виден визуально.
  • R-2: opacity: 1 и position: sticky; top: 0 для th перенесены в правило контейнера (были в sx). Цена ошибки: смещ��ние шапки.

🤖 Generated with Claude Code

Closes #220 Задача Jira: AURORA-1842. Стек: база PR — `feat/210-aurora-1835-svod1-formatter` (AURORA-1835, PR #217), не `test`. ## Что сделано - `enableColumnVirtualization` + `columnVirtualizerOptions` на базе существующего `getColumnVirtualizerOptions` (`columnLayoutUtils.js` не менялся), overscan колонок 3 переопределён снаружи. - Статичные стили ячеек и заголовков вынесены в одно CSS-правило на контейнере (`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` проходит. Бэк не менялся. - biome: новые файлы чистые; в `Svod2Page.jsx` остаётся одна ранее существующая претензия форматтера к `scaleNumericColumns`/`Tab`. ## Проверить руками - Горизонтальный скролл GO и RF до конца и обратно: заголовки групп в 2–3 ряда совпадают по ширине с телом. - Полосы и толстые границы групп на месте. - 4 закреплённые колонки не прыгают, их фон непрозрачный. - Select-фильтры в закреплённых колонках работают. - «Найдено N из M» при поиске. - Смена единиц. - Бейджи «Вид сметы» и «ССП» выглядят как раньше. ## Замер до/после Будет добавлен после ночного прогона на стенде 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 - R-1: класс `svod2-band-1` только для полосы 1, полоса 0 — базовый фон в правиле `td`/`th`. Цена ошибки: неверный фон ячеек, виден визуально. - R-2: `opacity: 1` и `position: sticky; top: 0` для `th` перенесены в правило контейнера (были в sx). Цена ошибки: смещ��ние шапки. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 1 commit 2026-10-28 17:13:05 +03:00
This pull request can be merged automatically.
You are not authorized to merge this pull request.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/220-aurora-1842-svod2-column-virtual:feat/220-aurora-1842-svod2-column-virtual
git checkout feat/220-aurora-1842-svod2-column-virtual
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/DFiP_Budget_planing#227
No description provided.