Files
h-school/docs/phases/off-queue/55-view-state.md
T

3.6 KiB
Raw Blame History

Фаза 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/view-state.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 проходит на затронутых тестах

Стоп

Не класть состояние на сервер. Не бампить протокол. Не добавлять поиск по имени в списки, где его нет. Не держать открытым диалог соискателей и мастер создания. Не трогать скорость часов и паузу — они уже на сервере.