refactor(account-operations): split page state views into components

Extract loading/error/loaded state views from the single
AccountOperationsPage.view.tsx into dedicated files under components/.
Document the "one state per view file" rule as a mandatory review
convention in CONVENTIONS.md and UI-PATTERN.md.

Co-Authored-By: opencode <opencode@anthropic.com>
This commit is contained in:
2026-08-27 10:53:23 +03:00
co-authored by opencode
parent 8f9caa946e
commit 695cda0456
6 changed files with 73 additions and 53 deletions
+10 -3
View File
@@ -9,6 +9,8 @@
- Публичный импорт слайса идёт через его `index.ts`.
- Тесты лежат рядом с исходником как `*.test.tsx`.
- Зависимости используют exact versions; не добавлять semver ranges.
- Главный `*.view.tsx` страницы не содержит несколько state-компонентов:
каждый state/section — отдельный `*.view.tsx` в `components/` (см. File roles).
- Полный локальный gate: `npm run verify`. Pre-commit запускает staged formatting, OpenAPI check и FSD dependency checks; commit message должен следовать Conventional Commits.
## React component style
@@ -37,6 +39,11 @@ Mandatory review conventions:
- `Component.types.ts` - props и локальные типы.
- `Component.module.css` - локальные стили.
Большие view files дробить по ответственности. Если section/state можно
самостоятельно назвать, вынести его в соседний presentation component вместо
накопления смысловой нагрузки в одном файле.
State-компоненты страницы не колоцируются в одном `*.view.tsx`. Каждый
top-level state (loading, error, empty, loaded) и каждый именуемый section
выносится в отдельный `*.view.tsx` в подпапку `components/`. Имя файла
отражает state/section: `AccountOperationsPageLoaded.view.tsx`,
`AccountOperationsPageLoading.view.tsx`, `AccountOperationsPageError.view.tsx`.
Контейнер (`AccountOperationsPage.tsx`) импортирует их из `./components` и
выбирает нужный по `viewModel.state`. Нельзя держать несколько state components
внутри одного файла view — это mandatory review convention.