fix(tradein/maps): убрать украинский флаг Leaflet и починить атрибуцию OSM #2621
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2621
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/tradein-leaflet-attribution"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что и почему
1. Украинский флаг в атрибуции карт.
Leaflet 1.9.4 по умолчанию вшивает флаг в prefix контрола атрибуции — подтверждено в исходнике:
Ни в одной карте МЕРЫ prefix не переопределялся → флаг висел на всех шести картах. Гасим через
map.attributionControl.setPrefix(false). Это уносит и собственную подпись Leaflet — законно, BSD-лицензия Leaflet не требует упоминания в UI.attributionControl: falseнамеренно НЕ используется: он снёс бы весь контрол вместе с атрибуцией тайлов, обязательной по ODbL.2. Атрибуция тайлов OSM была нелегитимной.
Во всех картах стояло голое
"© OpenStreetMap"— без ссылки на лицензию и без слова contributors, что не соответствует Attribution Guidelines OSMF. Заменено на канонический кредит со ссылкой наhttps://www.openstreetmap.org/copyright. Имя OpenStreetMap не переводится (требование гайдлайнов), поэтому строка в канонической английской форме.Побочный эффект: новая строка короче прежнего рендера (
флаг + Leaflet | © OpenStreetMap→© OpenStreetMap contributors), риска распирания узкого HeroBar-локатора (560×152) нет.3. Дедупликация.
loadLeaflet()и константыLEAFLET_*были дословно (побайтово) скопированы в шести компонентах. Из-за этого правку атрибуции пришлось бы вносить шесть раз, и любая забытая копия молча осталась бы со старым поведением. Вынесено в новыйtradein-mvp/frontend/src/lib/leaflet.ts:loadLeaflet(),LEAFLET_VER/CSS/JS/*_SRI— перенесены без изменений;OSM_TILE_URL/OSM_ATTRIBUTION/OSM_MAX_ZOOM;createMap(L, container, options?)— обёртка надL.map(), которая сразу делаетsetPrefix(false). Возвращает ту же карту, чейнинг.setView(...)работает как раньше. Смысл обёртки: при добавлении седьмой карты забыть про флаг физически нельзя.Версия Leaflet и SRI-хэши сохранены как есть, на npm-пакет не переводил — отдельная задача.
Затронутые файлы
Все шесть точек создания карты в МЕРЕ (список перепроверен грепом
L.map(по всемуtradein-mvp/frontend/src— других нет):components/trade-in/MapCard.tsxcomponents/trade-in/MapPicker.tsxcomponents/trade-in/SaleShareMap.tsx(карта sale-share)components/trade-in/v2/HeroBar.tsxcomponents/trade-in/v2/ParamsPanel.tsxcomponents/trade-in/v2/SourcesMap.tsx-281/+185строк: чистое сокращение за счёт удаления пяти дублей загрузчика.Проверено
npx tsc --noEmit— exit 0, чисто.npm run lint(next lint) — exit 0. Остались две warning'а в файлах, которых PR не касается и которые были красными до него:app/scrapers/cian/page.tsx:167(CianAuthBannerunused),components/trade-in/OfferCard.tsx:208(pctunused).const LEAFLET_, ни одногоfunction loadLeaflet, ни одного"© OpenStreetMap"и ни одного прямогоL.map(в компонентах.loadLeafletперед выносом сверены попарно — они были идентичны, поведение при дедупликации не изменилось.ParamsPanel.tsx/HeroBar.tsx, ссылающиеся на OSM-атрибуцию и её расположение, перечитаны — остались корректными.НЕ проверено (честно)
Control.Attribution._updateпишетprefixAndAttribsвinnerHTML, пустой prefix просто не пушится в массив), а не наблюдение. Нужен post-deploy smoke: открыть/v2и/sale-share, убедиться, что в правом нижнем углу карты нет флага и есть кликабельный «OpenStreetMap contributors».next buildне гонял — CI-гейт для tradein-фронта этоtype-check+lint, оба зелёные; импорты покрыты tsc.Границы
Тронут только
tradein-mvp/frontend/. Основной фронтfrontend/(Site Finder, Птица) со своими картами и своей проблемой атрибуции не затронут — отдельный PR.tradein-mvp/frontend/src/app/v2/page.tsxне трогал.