5.1 KiB
Миграция таблиц на дизайн-систему — Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Перевести legacy-таблицы frontend на единый дизайн-системный слой без изменения бизнес-логики
и без отказа от TanStack Table.
Architecture: packages/design-system/src/components/DataTable становится общим UI-каркасом для
таблиц, а приложение продолжает владеть TanStack Table instance, колонками и доменными cell renderers.
Вся предметная логика остаётся в apps/frontend, а дизайн-система забирает только переиспользуемую
табличную оболочку и связанные presentation-состояния.
Tech Stack: React 18, TanStack Table, @moex-vibe/design-system, Vitest, Testing Library.
Связанные документы:
- Spec:
docs/features/table-migration/spec.md - DS foundation:
docs/features/design-system-foundation/spec.md - DS migration precedent:
docs/features/broker-account-sections-ds-migration/spec.md
Task 1: Уточнить API DataTable
Подготовить минимальное расширение API DataTable, которое покрывает реальные кейсы существующих таблиц.
- Проверить текущий
DataTableвpackages/design-system/src/components/DataTable/DataTable.tsx. - Зафиксировать минимально необходимую поддержку:
table/ table model fromTanStack Table;- empty state;
- loading state / skeleton mode;
- row actions column or slot;
- controlled pagination / pagination slot;
- cell alignment.
- Не добавлять API, которое не подтверждено текущими 4 таблицами.
- Не добавлять MUI table-компоненты в код приложения.
Task 2: Мигрировать DividendsTable
Сделать DividendsTable первым и самым простым потребителем общего DS-слоя.
- Перевести сырой HTML table на
DataTable. - Сохранить текущие колонки и форматирование.
- Убедиться, что пустое состояние и базовый layout совпадают по смыслу с текущим экраном.
Task 3: Мигрировать ScreenerTable
Перевести табличную оболочку ScreenerTable на DataTable, сохранив текущее поведение.
- Оставить sorting и pagination под контролем существующей логики.
- Сохранить кастомные ячейки и действия над строками.
- Не менять query/data-flow скринера.
Task 4: Мигрировать SharePositionTable
Заменить локальную табличную разметку на DataTable, не вынося доменную логику в DS.
- Сохранить row/cell renderers в приложении.
- Сохранить update/delete actions.
- Не менять вычисления и форматтеры, если это не требуется для миграции UI.
Task 5: Мигрировать BondPositionTable
Перевести наиболее сложную таблицу позиций облигаций на DS-каркас.
- Сохранить предметно-специфичные bond columns и rendering.
- Сохранить все row actions.
- Не менять финансовую логику, сортировку и представление данных сверх UI-слоя.
Task 6: Очистка legacy-слоя и документация
После миграции проверить связанные legacy-компоненты и документацию.
- Проверить судьбу
apps/frontend/src/shared/ui/Table/*иTableSkeleton. - Удалить или сократить helper-код, если он остаётся без потребителей.
- Обновить
apps/docs/docs/design-system/components.mdиapps/docs/docs/frontend/styling.md:- явно зафиксировать, что
DataTableпостроен наTanStack Table; - отразить ожидаемый способ миграции legacy-таблиц.
- явно зафиксировать, что
Task 7: Верификация
Подтвердить, что миграция не сломала текущие контракты frontend.
- Запустить frontend-тесты для затронутых областей.
- Запустить lint для frontend и design-system.
- Запустить build frontend и design-system.
- Проверить, что во frontend не появились новые запрещённые MUI table imports.