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>
3.5 KiB
3.5 KiB
Фаза 55. Состояние экрана
Зависимости
Нет. Оболочка, люди, управление и соискатели уже на экране.
Зачем
F5 и выход в меню не должны выкидывать игрока на карту с пустыми фильтрами. Школа, вкладки и уже существующие поиски/фильтры восстанавливаются; сервер по-прежнему единственный источник игровых данных.
Задачи
- Query URL:
school,mode,tab,node,person,inspect. F5 сschool=снова открывает эту школу (OpenSchoolкак с карточки меню). Нет школы / не в списках — меню, URL чистится. Гость сmode=manageостаётся в обзоре sessionStorageключh-school.view.{id}: фильтры и пейджер людей, поиск/фильтры соискателей, вкладка и поиски карточки, вкладка управления и выбранный класс сетки, последнийmode/tab/выбор — чтобы повторный вход с меню поднял то же местоhistory.pushStateтолько вход и выход; смена вкладки и фильтров —replaceState. «Назад» из школы — меню. Протокол, HTTP и сейв не трогать; роутер не добавлять- Подписи через
t(...)не нужны: новых строк нет.docs/design/off-queue.mdи эта фаза — в том же коммите, что и код
Тесты, без которых фаза не закрыта
- Разбор и сборка query: валидные поля, мусорный
mode/school→ обзор / меню - Chrome в
sessionStorageпишется и читается по школе; битый JSON → значения по умолчанию - Школа из списка: своя, чужая (
mine: false), нет id →null - Панель людей:
showподнимает сохранённые фильтры в запрос; смена фильтра пишет storage - Экран школы: URL
tab=peopleоткрывает людей; гость игнорируетmode=manage - Управление: новая панель на той же школе открывает сохранённую вкладку «Правила»
Критерий готовности
- Открыть школу, вкладка «Люди», фильтр «ученики / 5», карточка. F5 — снова эта школа, те же фильтры и человек. Назад — меню. Снова открыть ту же школу с меню — те же вкладка и фильтры
- Гость не попадает в «Управление» по URL
npm --prefix src/HSchool.Client testпроходит на затронутых тестах
Стоп
Не класть состояние на сервер. Не бампить протокол. Не добавлять поиск по имени в списки, где его нет. Не держать открытым диалог соискателей и мастер создания. Не трогать скорость часов и паузу — они уже на сервере.