Files
h-school/docs/phases/55-view-state.md
T
Leonid PershinandCursor 36ec5e9f8e 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>
2026-08-20 12:03:04 +03:00

47 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Фаза 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` проходит на затронутых тестах
## Стоп
Не класть состояние на сервер. Не бампить протокол. Не добавлять поиск по имени в списки, где
его нет. Не держать открытым диалог соискателей и мастер создания. Не трогать скорость часов и
паузу — они уже на сервере.