fix: avoid duplicate leader panel
This commit is contained in:
@@ -10,7 +10,7 @@ RF4 Spotter — неофициальный сервис свежих точек
|
|||||||
|
|
||||||
RF4DB/RF4-STAT/RF4MAP/RF4 Posts сначала принимаются в изолированный staging. Полные записи с ранее подтверждёнными алиасами источника публикуются автоматически; новые соответствия и неполные записи остаются на ручной проверке. Для разрешённых community-источников действует интервал не менее 30 минут на источник. Открытая альфа не использует продуктовый allowlist: интерфейс показывает весь корректно загруженный разрешённый каталог, сохраняя требования полноты и модерации.
|
RF4DB/RF4-STAT/RF4MAP/RF4 Posts сначала принимаются в изолированный staging. Полные записи с ранее подтверждёнными алиасами источника публикуются автоматически; новые соответствия и неполные записи остаются на ручной проверке. Для разрешённых community-источников действует интервал не менее 30 минут на источник. Открытая альфа не использует продуктовый allowlist: интерфейс показывает весь корректно загруженный разрешённый каталог, сохраняя требования полноты и модерации.
|
||||||
|
|
||||||
На сайте у каждой записи отображается источник, а у агрегированной активности — все вошедшие в расчёт источники. Неполные community-наблюдения публикуются сразу в отдельной ленте «Полевые сигналы» с предупреждением и перечнем отсутствующих полей; до подтверждения полноты они не влияют на индекс клёва. Лента раскрывается серверной кнопкой «Показать ещё», сохраняет выбранные фильтры и ограничена 48 сигналами на страницу. Совпадающие рыба, водоём, координаты и вес объединяются визуально, при этом карточка сохраняет все уникальные ссылки на исходные наблюдения.
|
На сайте у каждой записи отображается источник, а у агрегированной активности — все вошедшие в расчёт источники. Неполные community-наблюдения публикуются сразу в отдельной ленте «Полевые сигналы» с предупреждением и перечнем отсутствующих полей; до подтверждения полноты они не влияют на индекс клёва. Лента раскрывается серверной кнопкой «Показать ещё», сохраняет выбранные фильтры и ограничена 48 сигналами на страницу. Совпадающие рыба, водоём, координаты и вес объединяются визуально, при этом карточка сохраняет все уникальные ссылки на исходные наблюдения. Sidebar лидера скрывается при единственном результате, чтобы не повторять ту же карточку.
|
||||||
|
|
||||||
Базовый SEO-контур готов для `rf4spotter.ru`: страницы имеют уникальные метаданные, canonical, Open Graph/Twitter Card, фирменное изображение 1200×630 и JSON-LD; доступны динамические `/robots.txt` и `/sitemap.xml`, административные и ошибочные страницы закрыты от индексации, добавлена собственная страница 404. Индексируемые каталоги рыб и водоёмов, detail-страницы и сочетания водоём + рыба строятся из актуального разрешённого справочника и включаются в sitemap. Подключены фирменные favicon/app icons, web manifest и production-кэширование статических ресурсов. Карточки активности показывают единый паспорт данных: источники, свежесть, полноту и уровень доверия. На `/status` опубликована легенда цветов всех источников и статусов качества.
|
Базовый SEO-контур готов для `rf4spotter.ru`: страницы имеют уникальные метаданные, canonical, Open Graph/Twitter Card, фирменное изображение 1200×630 и JSON-LD; доступны динамические `/robots.txt` и `/sitemap.xml`, административные и ошибочные страницы закрыты от индексации, добавлена собственная страница 404. Индексируемые каталоги рыб и водоёмов, detail-страницы и сочетания водоём + рыба строятся из актуального разрешённого справочника и включаются в sitemap. Подключены фирменные favicon/app icons, web manifest и production-кэширование статических ресурсов. Карточки активности показывают единый паспорт данных: источники, свежесть, полноту и уровень доверия. На `/status` опубликована легенда цветов всех источников и статусов качества.
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import "../styles/fish-silhouette.css";
|
|||||||
import "../styles/empty-states.css";
|
import "../styles/empty-states.css";
|
||||||
import "../styles/alpha-banner.css";
|
import "../styles/alpha-banner.css";
|
||||||
import "../styles/signal-pagination.css";
|
import "../styles/signal-pagination.css";
|
||||||
|
import "../styles/dashboard-polish.css";
|
||||||
import FishingIcon from "../components/FishingIcon.astro";
|
import FishingIcon from "../components/FishingIcon.astro";
|
||||||
import AlphaBanner from "../components/AlphaBanner.astro";
|
import AlphaBanner from "../components/AlphaBanner.astro";
|
||||||
const {
|
const {
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ try {
|
|||||||
items = await api<Activity[]>(`/api/v1/activity?${query}`);
|
items = await api<Activity[]>(`/api/v1/activity?${query}`);
|
||||||
}
|
}
|
||||||
} catch { unavailable = true; }
|
} catch { unavailable = true; }
|
||||||
const leaderLevel = items[0] ? activityLevel(items[0].activity_score) : null;
|
const leaderLevel = items.length > 1 && items[0] ? activityLevel(items[0].activity_score) : null;
|
||||||
const selectedWaterbody = waterbodies.find(item => item.slug === waterbody)?.name_ru ?? "Все водоёмы";
|
const selectedWaterbody = waterbodies.find(item => item.slug === waterbody)?.name_ru ?? "Все водоёмы";
|
||||||
const selectedFish = fishes.find(item => item.slug === fish)?.name_ru ?? "Любая рыба";
|
const selectedFish = fishes.find(item => item.slug === fish)?.name_ru ?? "Любая рыба";
|
||||||
const periodLabel = { "6": "6 часов", "12": "12 часов", "24": "24 часа", "72": "72 часа" }[hours] ?? hours;
|
const periodLabel = { "6": "6 часов", "12": "12 часов", "24": "24 часа", "72": "72 часа" }[hours] ?? hours;
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
.dashboard:has(>.results-column:only-child){grid-template-columns:1fr}
|
||||||
@@ -123,6 +123,7 @@
|
|||||||
|
|
||||||
### Графические элементы и объяснение данных
|
### Графические элементы и объяснение данных
|
||||||
|
|
||||||
|
- [x] Не показывать дублирующий sidebar лидера при единственной найденной точке (7 сентября 2026).
|
||||||
- [x] Подготовить фирменный знак «крючок + поплавок + координатная сетка» и согласованный набор favicon/app icons (7 сентября 2026).
|
- [x] Подготовить фирменный знак «крючок + поплавок + координатная сетка» и согласованный набор favicon/app icons (7 сентября 2026).
|
||||||
- [x] Добавить честный координатный радар без имитации отсутствующей карты на страницу точки (7 сентября 2026).
|
- [x] Добавить честный координатный радар без имитации отсутствующей карты на страницу точки (7 сентября 2026).
|
||||||
- [x] Добавить временную шкалу активности 72 часа с 12-часовым шагом в виде лески с поплавками (7 сентября 2026).
|
- [x] Добавить временную шкалу активности 72 часа с 12-часовым шагом в виде лески с поплавками (7 сентября 2026).
|
||||||
|
|||||||
+2
-2
@@ -73,9 +73,9 @@
|
|||||||
|
|
||||||
- [x] Заменить slug-input фильтрами из справочников и добавить сброс.
|
- [x] Заменить slug-input фильтрами из справочников и добавить сброс.
|
||||||
- [x] Сделать мобильную выдачу рекордов самодостаточной с подписями значений.
|
- [x] Сделать мобильную выдачу рекордов самодостаточной с подписями значений.
|
||||||
- [ ] Убрать CLI-команду из публичного empty state.
|
- [x] Убрать CLI-команду из публичного empty state.
|
||||||
- [ ] Добавить к уловам detail-страницы дату/свежесть и происхождение, если API их отдаёт.
|
- [ ] Добавить к уловам detail-страницы дату/свежесть и происхождение, если API их отдаёт.
|
||||||
- [ ] Устранить дублирование карточки и sidebar на малой выборке.
|
- [x] Устранить дублирование карточки и sidebar на малой выборке: блок лидера показывается только при двух и более результатах (7 сентября 2026).
|
||||||
|
|
||||||
Критерий: фильтрация не требует технических терминов; каждая мобильная запись читается без заголовка таблицы; источник и свежесть понятны.
|
Критерий: фильтрация не требует технических терминов; каждая мобильная запись читается без заголовка таблицы; источник и свежесть понятны.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user