AURORA-1837: статичные стили ячеек в CSS, overscan #230

Open
aep wants to merge 2 commits from feat/226-aurora-1837-cell-styles-css into feat/211-aurora-1836-row-measure
Owner

Closes #226

Jira: AURORA-1837. Стек: база — feat/211-aurora-1836-row-measure (PR #222), не test.

Что сделано

  • tableConfig.js: getTableHeadCellStyles/getTableBodyCellProps заменены константой TABLE_CONTAINER_SX: tbody td (рамка, шрифт, высота из TABLE_ROW_HEIGHT в rem, как в 1836), td[data-pinned="true"] (zIndex 5), tr[data-selected="true"] > td::after (затемнение выбранной строки). Невалидное whiteSpace: 'auto' удалено.
  • RealtimeTable.jsx: muiTableBodyCellProps -> только data-col-id; muiTableBodyRowProps -> onClick, data-row-id (+ статичные hover:false и style.height, см. R-1); sx контейнера = TABLE_CONTAINER_SX + getActiveCellSx(activeSearchMatch).
  • utils/activeCellCss.js: чистая функция селектора подсветки текущего совпадения поиска (CSS.escape, в node — эквивалентный fallback).
  • Overscan: строки листа 5 -> 2 (через хелпер 1836), колонки columnLayoutUtils.js 10 -> 3.
  • Скрытый заголовок MRT (visibility:hidden, рендерит ячейки заголовка на каждый коммит) не тронут — отмечено, при заметной доле в профиле вынести отдельно.

Тесты

  • Новый activeCellCss.test.js (экранирование 0.3.2, ITEM:123, null/неполное -> {}, инжект escape); columnLayoutUtils.test.js — проверка overscan === 3.
  • node --test src/components/RealtimeTable/utils/*.test.js: 19 pass, 0 fail. npm run build проходит. Biome по новым файлам чист (в изменённых старых файлах остаются прежние замечания форматирования).

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

  • верх-лево и середина листа выглядят как до правки
  • закреплённая колонка поверх прокрученных (z-index)
  • выделенная строка (затемнение)
  • текущее совпадение поиска: рамка 3 px, Enter / Shift+Enter переходят по совпадениям
  • невалидная ячейка
  • ячейка, заблокированная соавтором
  • быстрый горизонтальный скролл: нет пустых колонок дольше кадра
  • масштаб 0.8 и 1.5

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

Будет добавлен после ночного прогона на стенде perf/: FORM_2/AHR, PERF_AXES=y,x (скролл по y и x), цель <= 50 мс.

Rulings I made

  • R-1: в muiTableBodyRowProps оставлены статичные hover:false и style:{height} (не sx), чтобы не менять вид hover и высоту строки из 1836. Цена ошибки: низкая (две статичные пропсы).
  • R-2: для CSS.escape в node-тестах написан fallback по алгоритму CSSOM; в браузере используется нативный. Цена: расхождение только в тестовой среде.

🤖 Generated with Claude Code

Closes #226 Jira: AURORA-1837. Стек: база — `feat/211-aurora-1836-row-measure` (PR #222), не `test`. ## Что сделано - `tableConfig.js`: `getTableHeadCellStyles`/`getTableBodyCellProps` заменены константой `TABLE_CONTAINER_SX`: `tbody td` (рамка, шрифт, высота из `TABLE_ROW_HEIGHT` в rem, как в 1836), `td[data-pinned="true"]` (zIndex 5), `tr[data-selected="true"] > td::after` (затемнение выбранной строки). Невалидное `whiteSpace: 'auto'` удалено. - `RealtimeTable.jsx`: `muiTableBodyCellProps` -> только `data-col-id`; `muiTableBodyRowProps` -> `onClick`, `data-row-id` (+ статичные `hover:false` и `style.height`, см. R-1); `sx` контейнера = `TABLE_CONTAINER_SX` + `getActiveCellSx(activeSearchMatch)`. - `utils/activeCellCss.js`: чистая функция селектора подсветки текущего совпадения поиска (CSS.escape, в node — эквивалентный fallback). - Overscan: строки листа 5 -> 2 (через хелпер 1836), колонки `columnLayoutUtils.js` 10 -> 3. - Скрытый заголовок MRT (`visibility:hidden`, рендерит ячейки заголовка на каждый коммит) не тронут — отмечено, при заметной доле в профиле вынести отдельно. ## Тесты - Новый `activeCellCss.test.js` (экранирование `0.3.2`, `ITEM:123`, null/неполное -> `{}`, инжект escape); `columnLayoutUtils.test.js` — проверка overscan === 3. - `node --test src/components/RealtimeTable/utils/*.test.js`: 19 pass, 0 fail. `npm run build` проходит. Biome по новым файлам чист (в изменённых старых файлах остаются прежние замечания форматирования). ## Проверить руками - [ ] верх-лево и середина листа выглядят как до правки - [ ] закреплённая колонка поверх прокрученных (z-index) - [ ] выделенная строка (затемнение) - [ ] текущее совпадение поиска: рамка 3 px, Enter / Shift+Enter переходят по совпадениям - [ ] невалидная ячейка - [ ] ячейка, заблокированная соавтором - [ ] быстрый горизонтальный скролл: нет пустых колонок дольше кадра - [ ] масштаб 0.8 и 1.5 ## Замер до/после Будет добавлен после ночного прогона на стенде perf/: FORM_2/AHR, `PERF_AXES=y,x` (скролл по y и x), цель <= 50 мс. ## Rulings I made - R-1: в `muiTableBodyRowProps` оставлены статичные `hover:false` и `style:{height}` (не sx), чтобы не менять вид hover и высоту строки из 1836. Цена ошибки: низкая (две статичные пропсы). - R-2: для `CSS.escape` в node-тестах написан fallback по алгоритму CSSOM; в браузере используется нативный. Цена: расхождение только в тестовой среде. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 2 commits 2026-10-28 17:15:24 +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/226-aurora-1837-cell-styles-css:feat/226-aurora-1837-cell-styles-css
git checkout feat/226-aurora-1837-cell-styles-css
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#230
No description provided.