75 lines
6.3 KiB
Markdown
75 lines
6.3 KiB
Markdown
# frontend-loading-presentation Specification
|
||
|
||
## Purpose
|
||
Определяет единое пользовательское представление ожидания во frontend, чтобы
|
||
структура будущего содержимого оставалась понятной без потери уже доступного
|
||
контекста.
|
||
|
||
## Requirements
|
||
|
||
### Requirement: Структурные placeholders для загрузки содержимого
|
||
|
||
Frontend SHALL при первичной загрузке содержимого без доступного результата
|
||
показывать skeleton placeholders, которые передают расположение и визуальную
|
||
иерархию основных ожидаемых блоков. При частичной загрузке frontend MUST
|
||
ограничивать skeleton незагруженным блоком и сохранять уже доступные части
|
||
экрана видимыми. В этих состояниях frontend MUST NOT использовать отдельный
|
||
spinner как основное представление ожидаемого содержимого.
|
||
|
||
Skeleton placeholders MUST NOT содержать правдоподобные пользовательские
|
||
данные, быть интерактивными или попадать в последовательность клавиатурного
|
||
фокуса; область ожидания MUST оставаться доступно обозначенной как занятая.
|
||
|
||
#### Scenario: Экран впервые ожидает содержимое
|
||
|
||
- **WHEN** User открывает экран, для которого ещё нет доступного результата
|
||
- **THEN** frontend показывает структурные skeleton placeholders основных блоков без отдельного spinner в роли основного loading-состояния
|
||
|
||
#### Scenario: Загружается отдельный блок экрана
|
||
|
||
- **WHEN** часть экрана уже доступна, а один из его содержательных блоков всё ещё ожидает результат
|
||
- **THEN** frontend сохраняет доступные части видимыми и показывает skeleton только в границах ожидающего блока
|
||
|
||
#### Scenario: Пользователь перемещает клавиатурный фокус во время загрузки
|
||
|
||
- **WHEN** на экране видны skeleton placeholders и User перемещает клавиатурный фокус
|
||
- **THEN** placeholders не получают фокус и не воспринимаются как доступные действия или реальные пользовательские данные
|
||
|
||
### Requirement: Представление загрузки маршрута и восстановления сессии
|
||
|
||
Frontend SHALL во время загрузки отложенно открываемого маршрута показывать
|
||
skeleton ожидаемой области содержимого, сохраняя уже доступный каркас
|
||
приложения. Во время начального восстановления пользовательской сессии
|
||
frontend MUST показывать нейтральный skeleton каркаса до определения доступного
|
||
пользователю потока и MUST NOT кратковременно показывать содержимое public или
|
||
protected маршрута как результат загрузки. В обоих случаях отдельный spinner
|
||
MUST NOT быть основным loading-состоянием.
|
||
|
||
#### Scenario: Загружается отложенно открываемый маршрут
|
||
|
||
- **WHEN** User переходит на маршрут, содержимое которого ещё загружается
|
||
- **THEN** frontend сохраняет доступный каркас приложения и показывает skeleton в ожидаемой области содержимого без отдельного spinner в роли основного loading-состояния
|
||
|
||
#### Scenario: Приложение восстанавливает сессию при запуске
|
||
|
||
- **WHEN** frontend ещё не определил результат начального восстановления пользовательской сессии
|
||
- **THEN** User видит нейтральный skeleton каркаса без преждевременного отображения public или protected содержимого
|
||
|
||
### Requirement: Контекстная индикация действий и фонового обновления
|
||
|
||
Frontend MUST сохранять уже доступное содержимое или элемент управления
|
||
основным контекстом, когда выполняется пользовательское действие либо фоновое
|
||
обновление Client Cached Snapshot. В этих состояниях frontend SHALL показывать
|
||
компактный progress indicator рядом с соответствующим контекстом и MUST NOT
|
||
заменять этот контекст skeleton placeholders.
|
||
|
||
#### Scenario: Выполняется пользовательское действие
|
||
|
||
- **WHEN** User запустил действие и его результат ещё ожидается
|
||
- **THEN** frontend сохраняет соответствующий элемент управления или окружающий контекст видимым, показывает компактную индикацию процесса и не заменяет интерфейс skeleton placeholders
|
||
|
||
#### Scenario: Обновляется уже показанный snapshot
|
||
|
||
- **WHEN** frontend обновляет данные при наличии видимого Client Cached Snapshot
|
||
- **THEN** frontend оставляет snapshot видимым, показывает компактную индикацию фонового обновления и не заменяет snapshot skeleton placeholders
|