Skip to content

СЦЕНАРИЙ: Внезапный Импорт (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-диалог намеренно предлагает только подложку или полную замену маршрута.