Restore school tabs and filters after refresh.
The URL keeps the open school and current view; sessionStorage keeps list filters and searches so F5 and re-entry do not dump the player on an empty map. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
# Фаза 55. Состояние экрана
|
||||
|
||||
## Зависимости
|
||||
|
||||
Нет. Оболочка, люди, управление и соискатели уже на экране.
|
||||
|
||||
## Зачем
|
||||
|
||||
F5 и выход в меню не должны выкидывать игрока на карту с пустыми фильтрами. Школа, вкладки и
|
||||
уже существующие поиски/фильтры восстанавливаются; сервер по-прежнему единственный источник
|
||||
игровых данных.
|
||||
|
||||
## Задачи
|
||||
|
||||
- [x] Query URL: `school`, `mode`, `tab`, `node`, `person`, `inspect`. F5 с `school=` снова
|
||||
открывает эту школу (`OpenSchool` как с карточки меню). Нет школы / не в списках — меню,
|
||||
URL чистится. Гость с `mode=manage` остаётся в обзоре
|
||||
- [x] `sessionStorage` ключ `h-school.view.{id}`: фильтры и пейджер людей, поиск/фильтры
|
||||
соискателей, вкладка и поиски карточки, вкладка управления и выбранный класс сетки,
|
||||
последний `mode`/`tab`/выбор — чтобы повторный вход с меню поднял то же место
|
||||
- [x] `history.pushState` только вход и выход; смена вкладки и фильтров — `replaceState`.
|
||||
«Назад» из школы — меню. Протокол, HTTP и сейв не трогать; роутер не добавлять
|
||||
- [x] Подписи через `t(...)` не нужны: новых строк нет. `docs/design/off-queue.md` и эта фаза —
|
||||
в том же коммите, что и код
|
||||
|
||||
## Тесты, без которых фаза не закрыта
|
||||
|
||||
- [x] Разбор и сборка query: валидные поля, мусорный `mode`/`school` → обзор / меню
|
||||
- [x] Chrome в `sessionStorage` пишется и читается по школе; битый JSON → значения по умолчанию
|
||||
- [x] Школа из списка: своя, чужая (`mine: false`), нет id → `null`
|
||||
- [x] Панель людей: `show` поднимает сохранённые фильтры в запрос; смена фильтра пишет storage
|
||||
- [x] Экран школы: URL `tab=people` открывает людей; гость игнорирует `mode=manage`
|
||||
- [x] Управление: новая панель на той же школе открывает сохранённую вкладку «Правила»
|
||||
|
||||
## Критерий готовности
|
||||
|
||||
- Открыть школу, вкладка «Люди», фильтр «ученики / 5», карточка. F5 — снова эта школа, те же
|
||||
фильтры и человек. Назад — меню. Снова открыть ту же школу с меню — те же вкладка и фильтры
|
||||
- Гость не попадает в «Управление» по URL
|
||||
- `npm --prefix src/HSchool.Client test` проходит на затронутых тестах
|
||||
|
||||
## Стоп
|
||||
|
||||
Не класть состояние на сервер. Не бампить протокол. Не добавлять поиск по имени в списки, где
|
||||
его нет. Не держать открытым диалог соискателей и мастер создания. Не трогать скорость часов и
|
||||
паузу — они уже на сервере.
|
||||
Reference in New Issue
Block a user