Files
enduro-trails/docs/work-items/ET-002/01-brd.md

62 lines
3.3 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.
---
type: brd
work_item_id: ET-002
title: "BRD: Чекбокс показа/скрытия POI в попапе рельефа"
version: 1
status: approved
created_at: 2026-05-20
authors:
- "agent:analyst"
---
# BRD — ET-002: Чекбокс показа/скрытия POI в попапе рельефа
## 1. Цель
Дать пользователю возможность скрывать маркеры POI на карте, чтобы они не загромождали обзор при планировании маршрута. Управление — через чекбокс в существующем попапе кнопки «Рельеф».
## 2. Контекст
- Сейчас POI (слои `poi-circles`, `poi-labels`) отображаются всегда при загрузке карты.
- Попап кнопки «Рельеф» (`terrain-popup`) уже содержит чекбоксы: Тени рельефа, Перепады, Грунтовки, Тропы.
- Механизм `toggleLayer('poi')` уже реализован в коде, но не привязан к UI в попапе.
## 3. Scope
### In scope
- Добавить чекбокс «POI» в попап кнопки «Рельеф» (после секции «Тропы»)
- POI включены по умолчанию (checked)
- Состояние чекбокса сохраняется в localStorage (ключ `poi-visible`)
- При загрузке страницы — восстанавливать состояние из localStorage
- Скрытие/показ слоёв `poi-circles` и `poi-labels` через MapLibre `setLayoutProperty`
### Out of scope
- Фильтрация POI по типу (кафе, заправки, и т.д.)
- Отдельная кнопка для POI вне попапа рельефа
- Изменение иконок или стилей POI
- Backend-изменения
## 4. Метрики успеха
| Метрика | Критерий |
|---------|----------|
| Чекбокс отображается в попапе | Визуально присутствует после «Тропы» |
| Снятие чекбокса скрывает POI | Слои `poi-circles` и `poi-labels` получают visibility: none |
| Установка чекбокса показывает POI | Слои получают visibility: visible |
| Состояние сохраняется | После перезагрузки страницы чекбокс и видимость POI соответствуют последнему выбору |
| Не ломает существующий функционал | Грунтовки, тропы, рельеф, роутинг работают как прежде |
## 5. Риски
| Риск | Вероятность | Митигация |
|------|-------------|-----------|
| Конфликт с существующим toggleLayer('poi') | Низкая | Использовать тот же механизм layerState, не дублировать логику |
| Попап становится слишком длинным на мобильных | Низкая | Один чекбокс — минимальное увеличение высоты |
## 6. Зависимости
- Нет внешних зависимостей
- Только фронтенд (vanilla JS + HTML)