62 lines
3.3 KiB
Markdown
62 lines
3.3 KiB
Markdown
---
|
||
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)
|