diff --git a/IMPLEMENTATION_LOG.md b/IMPLEMENTATION_LOG.md index 134d726..6d4626e 100644 --- a/IMPLEMENTATION_LOG.md +++ b/IMPLEMENTATION_LOG.md @@ -561,3 +561,23 @@ - Что изменено: из `TaskView.tsx` и `TaskDetail.tsx` убрана обёртка `` из основного return (заменена на фрагмент), удалён неиспользуемый импорт. Контент (`flex flex-col h-full overflow-hidden`) корректно ложится в `
` от AppShell. - Как проверялось: `npm run check`, `npm run build`, `npx vitest run` (129/129) — зелёные. - Подводные камни: Chat.tsx и ShareTarget.tsx тоже рендерят свой Sidebar — но они вне SHELL_ROUTE_PATTERNS, дублирования нет, не трогали. Правило: страницы внутри shell НЕ должны рендерить `` сами. + +--- + +## [Реестр задач] Возврат горизонтальной прокрутки, sticky-шапка, ресайз колонок, лимит строк + +- Статус: ✅ done (коммиты `c8b7741`, `e32def4`; деплой на iistwin.ru, health 200) +- Зачем: (1) на десктопе пропала горизонтальная прокрутка реестра — при широкой таблице скроллбар оказывался внизу всей высоты таблицы и был недостижим, шапка реестра уезжала при вертикальной прокрутке; (2) запрос пользователя: настройка «максимум строк в строке» 1–8 (в режиме 1 — компактный однострочный реестр); (3) ресайз колонок drag'ом с запоминанием у каждого пользователя. +- Причины бага (установлены через WebBridge на проде, замеры scrollWidth/clientHeight): + - Горизонталь: `ui/table` оборачивает `` в `div.relative.w-full.overflow-auto`; wrapper сжимался под ширину контейнера и перехватывал горизонтальный скролл, его скроллбар рисовался внизу полной высоты таблицы (~29,5 тыс. px), а не видимой области. Sticky-шапки в реестре никогда не было. + - Вертикаль/мобильный: мобильный `main#content` (Sidebar.tsx) был блочным `flex-1 overflow-auto`; обёртка `PageTransition` (flex-1 min-h-0) в блочном родителе теряла flex-1 → высота росла по контенту → h-full-цепочки страниц рушились, весь скролл уходил в main. Десктопный main уже был `flex flex-col` — баг проявлялся только на <768px. +- Что изменено: + - `Sidebar.tsx`: мобильный `main` — `flex flex-col` (как десктопный). + - `ui/table.tsx`: пропс `wrapperClassName` (cn/twMerge), обратная совместимость. + - `TaskRegistry.tsx`: + - wrapper таблицы `w-max min-w-full overflow-visible` + `w-fit min-w-full` на обёртке с border → переполнение по ширине всплывает в контейнер реестра (`tableScrollRef`), скроллбар — внизу видимой области; вертикальный скролл и виртуализация на том же контейнере; + - `` (+ явный фон tr для plain-варианта шапки скина); + - ресайз: ручка на правом крае каждого `
` (только mouse, скрыта на ``, min 80 / max 1200 px), двойной клик — сброс; хранение `registry-colwidths-` в localStorage (per-user/per-form, как видимость и порядок колонок); у title/description убирается max-w-xs/max-w-sm при заданной ширине; + - настройка «Строк в ячейке» (Авто / 1–8) в диалоге «Настройки реестра», хранится в `registry-rowlines-`; CSS `-webkit-line-clamp` на текстовых ячейках (титул, описание, исполнители, автор, текстовые поля; readView inline-редакторов — кламп только на read-view, редактор не затронут); оценка высоты виртуализатора 32 px в однострочном режиме. +- Как проверялось: `npm run check` (heap 6144), `npm run build`, `npx vitest run` (129/129), eslint 0 errors. Деплой через GitHub Actions — success, health 200. +- Подводные камни: (1) кламп не применяется к file/contract-number/составным полям — намеренно; (2) при `table-fixed` колонки без заданной ширины делят оставшееся место поровну (ожидаемо); (3) ширины/строки хранятся в localStorage — не мигрируют между устройствами (единообразно с прочими настройками реестра; серверный вариант — отдельная задача); (4) настройки реестра надо проверить на проде глазами: браузерная сессия WebBridge истекла, ручная проверка отложена за пользователем.