AURORA-1881: фильтры и сортировка в окне «Этапы» (поверх #317) #319

Open
aep wants to merge 11 commits from feat/318-aurora-1881-stages-filters into test
Owner

Closes #318. Jira: AURORA-1881 (замечание Фомичева №2, эпик AURORA-1876).

Ветка поверх #317 (AURORA-1880), который поверх #315 (AURORA-1879). Порядок мержа: #315 → #317 → этот PR. Собственные коммиты: 63c3689, 59f9ebd.

Что сделано

  • Stages/stageFilters.js (чистые функции): filterStages(stages, filters, now) — лист+направление ('AHR|Development', 'OPER|'), роль, статус, поиск по названию (без учёта регистра, «ё» = «е»); sortStages(stages, sheetOrder) — листы в порядке вкладок задачи, затем «Поддержка», «Развитие», без направления, затем дата открытия, затем название.
  • StagesTable/utils.js: getStageStatus(stage, now = new Date()) — необязательный now для тестов, существующие вызовы не изменились.
  • Stages/StagesFilters.jsx: поиск, «Лист» (варианты из вкладок задачи с направлением: «АХР — Поддержка»), «Роль» (только админу), «Статус» (Запланирован / Активен / Завершен / Не определен), «Сбросить».
  • SettingModal.jsx: фильтры сбрасываются при закрытии окна; в таблицу идёт отсортированный и отфильтрованный список; пустой результат — «По выбранным фильтрам этапы не найдены»; в режиме project фильтр листа скрыт.
  • Бэкенд не менялся.

Проверка

  • node --test src/components/Stages/*.test.js src/api/*.test.js src/components/RealtimeTable/utils/*.test.js — 181/181 (новый stageFilters.test.js был красным до реализации).
  • npm run build — успешно.
  • biome check: новые файлы чистые; по изменённым старым — 5 ошибок до и 5 после.
  • Контроллер проверил: TaskPage передаёт в окно sheets = tables вида {name, sheet, direction} из TasksApi.getSheets — фильтр листа получает направления.
  • Ручная проверка в браузере не проводилась (критерий приёмки: FORM_1, «АХР — Развитие» + «Активен»; у исполнителя нет фильтра роли; в project нет фильтра листа).

Rulings I made

  • R-1 — StagesTable/utils.js без импортов, грузится в node --test как есть — getStageStatus не выносился.
  • R-2 — Порядок направлений: Support, Development, затем без направления; листы вне sheets — в конце; этапы без opens_at — последними в группе; название — localeCompare('ru').
  • R-3 — Поиск по phase_code (единственное название этапа), нормализация trim + нижний регистр + «ё»→«е».
  • R-4 — Фильтр роли только для админа (после AURORA-1888 исполните��ь видит лишь этапы своей роли).
  • R-5 — Фильтры живут в SettingModal, сброс при isOpen=false; сортировка всегда, фильтр после неё.
  • R-6 — В статусы добавлен «Не определен» (этапы без дат), в описании Jira его не было.
  • R-7 — Вопрос к заказчику решён по умолчанию: «фильтр этапов» — фильтр внутри окна «Этапы».

Findings

Маркер Суть Статус
R-1…R-5, R-7 рулинги исполнителя (см. выше) fixed 63c3689 / 59f9ebd
R-6 статус «Не определен» в фильтре fixed 59f9ebd
O-1 transformToSheetOptions в SettingModal схлопывает листы по sheet для AddStagesModal (старое поведение) rejected: фильтр его не использует
O-2 allStages = stagesInfo.stages || [] пересоздаётся при каждом рендере до загрузки — лишний пересчёт memo deferred
O-3 исполнитель не нашёл вызов SettingModal (импорт под именем SettingStageModal) rejected: проверено контроллером, sheets передаются

🤖 Generated with Claude Code

Closes #318. Jira: AURORA-1881 (замечание Фомичева №2, эпик AURORA-1876). **Ветка поверх #317 (AURORA-1880), который поверх #315 (AURORA-1879). Порядок мержа: #315 → #317 → этот PR.** Собственные коммиты: `63c3689`, `59f9ebd`. ## Что сделано - `Stages/stageFilters.js` (чистые функции): `filterStages(stages, filters, now)` — лист+направление (`'AHR|Development'`, `'OPER|'`), роль, статус, поиск по названию (без учёта регистра, «ё» = «е»); `sortStages(stages, sheetOrder)` — листы в порядке вкладок задачи, затем «Поддержка», «Развитие», без направления, затем дата открытия, затем название. - `StagesTable/utils.js`: `getStageStatus(stage, now = new Date())` — необязательный `now` для тестов, существующие вызовы не изменились. - `Stages/StagesFilters.jsx`: поиск, «Лист» (варианты из вкладок задачи с направлением: «АХР — Поддержка»), «Роль» (только админу), «Статус» (Запланирован / Активен / Завершен / Не определен), «Сбросить». - `SettingModal.jsx`: фильтры сбрасываются при закрытии окна; в таблицу идёт отсортированный и отфильтрованный список; пустой результат — «По выбранным фильтрам этапы не найдены»; в режиме project фильтр листа скрыт. - Бэкенд не менялся. ## Проверка - `node --test src/components/Stages/*.test.js src/api/*.test.js src/components/RealtimeTable/utils/*.test.js` — 181/181 (новый `stageFilters.test.js` был красным до реализации). - `npm run build` — успешно. - `biome check`: новые файлы чистые; по изменённым старым — 5 ошибок до и 5 после. - Контроллер проверил: `TaskPage` передаёт в окно `sheets = tables` вида `{name, sheet, direction}` из `TasksApi.getSheets` — фильтр листа получает направления. - Ручная проверка в браузере не проводилась (критерий приёмки: FORM_1, «АХР — Развитие» + «Активен»; у исполнителя нет фильтра роли; в project нет фильтра листа). ## Rulings I made - R-1 — `StagesTable/utils.js` без импортов, грузится в `node --test` как есть — `getStageStatus` не выносился. - R-2 — Порядок направлений: Support, Development, затем без направления; листы вне `sheets` — в конце; этапы без `opens_at` — последними в группе; название — `localeCompare('ru')`. - R-3 — Поиск по `phase_code` (единственное название этапа), нормализация trim + нижний регистр + «ё»→«е». - R-4 — Фильтр роли только для админа (после AURORA-1888 исполните��ь видит лишь этапы своей роли). - R-5 — Фильтры живут в `SettingModal`, сброс при `isOpen=false`; сортировка всегда, фильтр после неё. - R-6 — В статусы добавлен «Не определен» (этапы без дат), в описании Jira его не было. - R-7 — Вопрос к заказчику решён по умолчанию: «фильтр этапов» — фильтр внутри окна «Этапы». ## Findings | Маркер | Суть | Статус | |---|---|---| | R-1…R-5, R-7 | рулинги исполнителя (см. выше) | fixed 63c3689 / 59f9ebd | | R-6 | статус «Не определен» в фильтре | fixed 59f9ebd | | O-1 | `transformToSheetOptions` в SettingModal схлопывает листы по `sheet` для AddStagesModal (старое поведение) | rejected: фильтр его не использует | | O-2 | `allStages = stagesInfo.stages \|\| []` пересоздаётся при каждом рендере до загрузки — лишний пересчёт memo | deferred | | O-3 | исполнитель не нашёл вызов `SettingModal` (импорт под именем `SettingStageModal`) | rejected: проверено контроллером, `sheets` передаются | 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 7 commits 2026-11-11 16:11:37 +03:00
- ORM: direction входит в PK (nullable), одноимённые этапы Support/Development больше не склеиваются
- get_list: ORDER BY sheet, direction (NULL первыми), opens_at, phase_code
- 0059: del_form_phase фильтрует по phase_code, direction в v_phase_id (add/upd/del) и в payload upd,
  чистка дублей без направления и частичный уникальный индекс form_phase_nodir_uidx

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Интеграционные тесты одноимённых этапов, PATCH/DELETE одного этапа, дубль без направления, direction в аудите.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- sql_migration._split_statements узнаёт только $tag$, пустой $$ ломал разбиение:
  DO $$ … $$ → DO $do$ … $do$.
- test_form_phases_delete_removes_only_named_phase: ?sheet= без direction
  фильтрует direction IS NULL — читаем весь список и отбираем AHR в тесте.
- test_form_phases_duplicate_without_direction_rejected: после ошибки
  сессия клиента откатывается, число строк не проверяем; защиту БД
  проверяет новый test_form_phase_nodir_unique_index_blocks_duplicate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep requested review from PotapovaA 2026-11-11 16:11:59 +03:00
PotapovaA approved these changes 2026-11-11 17:15:02 +03:00
aep added 4 commits 2026-11-11 18:44:13 +03:00
Author
Owner

В ветку влит обновлённый #315 (миграция 1879 перенумерована 0059 → 0060, 7a5c89e; заодно свежий test f047031). Изменений в коде этого PR нет. Проверка вершины стека: front 296 pass / 1 известное падение SMETA.test.js, build ок, biome без новых ошибок.

В ветку влит обновлённый #315 (миграция 1879 перенумерована 0059 → 0060, 7a5c89e; заодно свежий test f047031). Изменений в коде этого PR нет. Проверка вершины стека: front 296 pass / 1 известное падение SMETA.test.js, build ок, biome без новых ошибок.
aep requested review from tsygankoviva 2026-11-11 18:49:39 +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/318-aurora-1881-stages-filters:feat/318-aurora-1881-stages-filters
git checkout feat/318-aurora-1881-stages-filters
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/DFiP_Budget_planing#319
No description provided.