Appearance
СЦЕНАРИЙ: Внезапный Импорт (Import Collision)
1. Контекст и Жизненная Боль
Сценарий: Юзер находится в режиме активного рисования (например, уже поставил 5 точек и проложил 40 км). Внезапно он нажимает кнопку [ Импорт GPX ] и выбирает чужой файл (скачал трек друга, скачал маршрут местной гонки и т.д.).
🛑 В чем проблема (Боль)?
- Удаление (Hard Reset): Если мы просто сотрем то, что он уже нарисовал — это приведет к потере данных и фрустрации.
- Слепое добавление: Если мы просто добавим координаты импортированного файла в конец массива текущих точек — алгоритм маршрутизации нарисует прямую линию или огромный крюк от текущего маршрута до чужого трека.
🧠 Психология (Зачем юзер вообще это делает?): В 95% случаев, если человек импортирует трек во время рисования своего, он делает это с одной целью: Он хочет использовать чужой трек как ШПАРГАЛКУ (трафарет), чтобы обвести его сложные куски и безопасно включить их в свой маршрут.
2. ИДЕАЛЬНОЕ UX РЕШЕНИЕ: Умный Диалог и «Слой-Подложка»
Процесс обработки импорта (флоу):
Шаг 1: Пауза и валидация стейта
Скрипт проверяет глобальный стейт (например, plannerStore). Если на карте есть несохраненные точки (активный черновик, route.points.length > 0), процесс парсинга импорта ставится на паузу.
Шаг 2: Smart-Диалог (Модальное окно)
Поверх карты всплывает аккуратное окно:
⚠️ У вас есть активный маршрут. Как вы хотите добавить новый файл?
- 🔘 [ 👻 Использовать как Подложку (Reference Layer) ] (Рекомендуемый)
- 🔘 [ 🗑️ Удалить мой черновик и открыть новый ]
Шаг 3: Логика взаимодействия кнопок
Кнопка 1: Подложка (КИЛЛЕР-ФИЧА)
Импортированный трек падает на карту в виде полупрозрачной серой или фиолетовой линии (reference-layer).
- Физика: Трек НЕ кликабельный, он не ломает текущий роутинг, не добавляет точки в стейт
plannerStore. - UX: Юзер просто видит его на карте и продолжает спокойно рисовать свой основной синий трек, визуально "обводя" нужные куски чужого маршрута.
- Интерфейс: В боковом меню (или LibrarySidebar) этот трек появляется в отдельном блоке "Референсы" с иконкой "Глазика" (Скрыть/Показать).
Кнопка 2: Заменить (Hard Reset)
Обычный хард-ресет стейта.
- Текущий холст очищается, чужой трек парсится и становится главным/активным для редактирования.
- Маленький секрет: Перед очисткой необходимо тихонько сохранить старый трек в стейт истории (
undoStore) илиlocalStorage, чтобы юзер мог нажатьCtrl+Z, если нажал "Заменить" по ошибке (мисклик).
Почему прямое склеивание не предлагается
Импортированный GPX может содержать несколько несвязанных <trkseg>, собственные POI/cue-точки и несовместимые статистические данные. Пока для этих случаев нет однозначного и безопасного контракта, collision-диалог намеренно предлагает только подложку или полную замену маршрута.