Skip to content

build: upgrade @tanstack/react-table to v9 - #111

Closed
agentHits wants to merge 1 commit into
AgentHits-Devfrom
build/react-table-v9
Closed

agentHits wants to merge 1 commit into
AgentHits-Devfrom
build/react-table-v9

Conversation

@agentHits

Copy link
Copy Markdown
Collaborator

Зачем

Волна 3 мажорных обновлений UI-библиотек: @tanstack/react-table 8 → 9. В v9 переработан API: фичи таблицы подключаются явно, useReactTable заменён на useTable, get*RowModel — на слоты create*RowModel.

Что изменилось

Версия: @tanstack/react-table ^8.21.3 → ^9.3.1 (опубликована 2026-10-12) в apps/dokploy/package.json; в bun.lock добавились зависимости @tanstack/store и @tanstack/react-store 0.11.2.

Код (13 таблиц, 18 файлов в apps/dokploy/components):

  • в каждом файле с таблицей появился модульный const features = tableFeatures({...}) с теми фичами, которые таблица реально использует, и useReactTable({...}) → useTable({ features, ... });
  • getSortedRowModel/getPaginationRowModel/getFilteredRowModel → слоты sortedRowModel/paginatedRowModel/filteredRowModel с create*RowModel(); getCoreRowModel удалён (в v9 он встроен);
  • в v9 'auto' сортировка и фильтрация выбирают только зарегистрированные функции, поэтому явно зарегистрированы sortFns (alphanumeric, datetime, text, а basic — встроенный fallback) и, где есть фильтры, filterFns (includesString, equals). Так поведение совпадает с v8;
  • columnVisibilityFeature подключён во всех таблицах: в v9 через него работает row.getVisibleCells();
  • типы: ColumnDef<T> → ColumnDef<typeof features, T>; в файлах columns.tsx features импортируется как тип из файла таблицы; VisibilityState → ColumnVisibilityState;
  • table.getState().pagination → table.state.pagination (events, volumes, images, disk-usage, sessions, networks);
  • sortingFn → sortFn в колонке Size у томов Docker (docker/volumes/show-volumes.tsx);
  • swarm/applications/data-table.tsx: дженерик DataTable<TData extends RowData> без TValue (в v9 TValue инвариантен, а вызывающий код его не задаёт).

Что важно из migration guide v9: useLegacyTable (@tanstack/react-table/legacy) позволил бы почти не трогать код, но в v9 он объявлен deprecated и временным мостом, тянет все фичи, а guide прямо советует не делать его целевым вариантом. Поэтому сделана полноценная миграция на useTable. flexRender в v9 остался, его не трогали. Пересмотренная семантика getIsSomeRowsSelected нас не касается: эти методы в коде не используются.

Проверки

  • bun run typecheck — ок (все 4 workspace);
  • bunx biome check по 18 изменённым файлам — ок;
  • bun audit --audit-level=moderate — уязвимостей нет;
  • rg -l "react-table|DataTable" apps/dokploy/__test__ — тестов на таблицы нет;
  • одноразовый smoke-скрипт (useTable + тот же набор features, рендер через react-dom/server): сортировка по убыванию, фильтр includesString без учёта регистра, фильтр equals, пагинация (getPageCount, getCanNextPage), скрытие колонки через columnVisibility, table.state.pagination — всё как ожидалось;
  • next build и прокликивание в браузере локально не запускались, сборку сделает CI.

Что проверить вручную на dev

Во всех таблицах проверить, что строки отображаются и нет ошибок в консоли браузера.

  1. Деплойменты (deployments/show-deployments-table.tsx): сортировка по заголовкам, кнопки «назад/вперёд» пагинации.
  2. Audit logs (proprietary/audit-logs): сортировка по заголовкам (дата, пользователь и т. д.); пагинация и фильтры серверные, проверить переключение страниц и фильтров.
  3. Домены приложения (application/domains): поиск по host, меню «Columns» (скрытие/показ колонок), сортировка, пагинация.
  4. Docker → события (docker/events): сортировка, пагинация, поле «Page N of M» и переход на страницу.
  5. Docker → тома (docker/volumes): сортировка, особенно по колонке Size (своя функция сравнения), пагинация, «Page N of M».
  6. Docker → контейнеры (docker/show): поиск по имени, фильтр по state (all/running/exited… — точное совпадение), меню колонок, сортировка, пагинация.
  7. Docker → образы (docker/images): сортировка, пагинация, «Page N of M».
  8. Docker → disk usage / build cache (docker/disk-usage): сортировка, пагинация.
  9. Сессии (settings/sessions): сортировка, пагинация, адаптивное скрытие колонок на узком экране (meta.className).
  10. Swarm → приложения (swarm/applications): поиск по Name, меню колонок, сортировка, пагинация.
  11. Сети (networks/show-networks.tsx): сортировка, пагинация, «Page N of M».
  12. Requests (requests): серверная пагинация («назад/вперёд»), меню колонок, сортировка по заголовкам.
  13. DNS-записи (settings/dns): сортировка, пагинация.

🤖 Generated with Claude Code

Что: @tanstack/react-table ^8.21.3 -> ^9.3.1 в apps/dokploy. Все 13 таблиц
в apps/dokploy/components переведены с useReactTable на useTable: у каждой
таблицы модульный объект features (tableFeatures) с нужными фичами
(сортировка, пагинация, видимость колонок, фильтрация, выбор строк),
row models create*RowModel вместо get*RowModel и явный реестр функций
сортировки/фильтрации (alphanumeric, datetime, text; includesString,
equals), чтобы 'auto' работал как в v8. ColumnDef получил параметр
typeof features, VisibilityState -> ColumnVisibilityState,
table.getState() -> table.state, sortingFn -> sortFn (тома Docker).
DataTable в swarm/applications ограничен TData extends RowData.

Зачем: волна 3 мажорных обновлений UI-библиотек. Слой совместимости
useLegacyTable (@tanstack/react-table/legacy) не использован: в v9 он
помечен deprecated и временным, тянет все фичи.

Риски: в v9 API доступно только для зарегистрированных фич; 'auto'
сортировка/фильтрация находит только зарегистрированные функции.
Поведение таблиц в браузере локально не проверялось.

Проверки: bun run typecheck - ок; bunx biome check по 18 файлам - ок;
bun audit --audit-level=moderate - уязвимостей нет; smoke-скрипт с
useTable и теми же features (сортировка, includesString, equals,
пагинация, скрытие колонок) - ок. Тестов на таблицы в __test__ нет.
next build не запускался (соберёт CI).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@agentHits

Copy link
Copy Markdown
Collaborator Author

Влито в составе #112 одним PR, чтобы вся третья волна вышла одной версией. Этот PR закрываю без слияния, его коммит есть в #112.

@agentHits agentHits closed this Oct 27, 2026
@agentHits
agentHits deleted the build/react-table-v9 branch October 27, 2026 20:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant