feat(tradein/sale-share): тумблер «Сейчас / За 45 дней» + фильтр «мин. объявлений» #2092

Merged
lekss361 merged 1 commit from feat/tradein-sale-share-45d-toggle into main 2026-06-28 23:13:14 +00:00
Owner

По запросу юзера. Frontend-only (бэк/API/deps не тронуты — потому cadastre-батч в tradein-backend не прерывается).

#3 — переключатель «Сейчас / За 45 дней» (которого не было)

45-дневная метрика (sale_share_pct_45d, listings_45d) уже была в API (схема BuildingSaleShare + сорты share_45d_desc/count_45d_desc валидны на бэке), но фронт её не показывал → тумблера не было. Добавлен сегмент-переключатель окна:

  • меняет показываемый % (sale_share_pctsale_share_pct_45d),
  • счётчик «X из Y» (active_secondarylistings_45d),
  • сортировку (share_descshare_45d_desc, active_desccount_45d_desc — мапится в page перед отправкой на API),
  • heat-color + бейдж «несколько корпусов» — по оконной метрике.

#2 — фильтр «Мин. объявлений в доме»

Number-input → client-side фильтр: дом остаётся, если оконный счётчик (45д ? listings_45d : active_secondary) ≥ min. Без изменения query-key/бэка (намеренно client-side, помечено в коде). Хедер «Найдено: N» отражает отфильтрованное.

Файлы

types/sale-share.ts (45d-поля + сорты), app/sale-share/page.tsx (state window/minCount, sort-маппинг, фильтр), SaleShareControls.tsx (тумблер + поле), SaleShareList.tsx (оконный рендер), trade-in.css (сегмент-стили).

Проверки

  • tsc --noEmit clean. Конвенции (no any/console, useMemo deps) — ок. ESLint headless недоступен (нет tracked-конфига в этом subproject).
  • NB: маркеры SaleShareMap пока по now-метрике (вне scope; мелкий follow-up если нужно).

После мержа

Деплой рестартит ТОЛЬКО фронт-контейнер (cadastre-батч в бэке выживает). Verify: тумблер на /sale-share переключает %/счётчик/сортировку; фильтр «мин. объявлений» режет список.

По запросу юзера. **Frontend-only** (бэк/API/deps не тронуты — потому cadastre-батч в `tradein-backend` не прерывается). ## #3 — переключатель «Сейчас / За 45 дней» (которого не было) 45-дневная метрика (`sale_share_pct_45d`, `listings_45d`) **уже была в API** (схема `BuildingSaleShare` + сорты `share_45d_desc`/`count_45d_desc` валидны на бэке), но фронт её не показывал → тумблера не было. Добавлен сегмент-переключатель окна: - меняет показываемый **%** (`sale_share_pct` ↔ `sale_share_pct_45d`), - **счётчик** «X из Y» (`active_secondary` ↔ `listings_45d`), - **сортировку** (`share_desc`↔`share_45d_desc`, `active_desc`↔`count_45d_desc` — мапится в page перед отправкой на API), - heat-color + бейдж «несколько корпусов» — по оконной метрике. ## #2 — фильтр «Мин. объявлений в доме» Number-input → **client-side** фильтр: дом остаётся, если оконный счётчик (`45д ? listings_45d : active_secondary`) ≥ min. Без изменения query-key/бэка (намеренно client-side, помечено в коде). Хедер «Найдено: N» отражает отфильтрованное. ## Файлы `types/sale-share.ts` (45d-поля + сорты), `app/sale-share/page.tsx` (state window/minCount, sort-маппинг, фильтр), `SaleShareControls.tsx` (тумблер + поле), `SaleShareList.tsx` (оконный рендер), `trade-in.css` (сегмент-стили). ## Проверки - `tsc --noEmit` clean. Конвенции (no any/console, useMemo deps) — ок. ESLint headless недоступен (нет tracked-конфига в этом subproject). - **NB:** маркеры `SaleShareMap` пока по now-метрике (вне scope; мелкий follow-up если нужно). ## После мержа Деплой рестартит ТОЛЬКО фронт-контейнер (cadastre-батч в бэке выживает). Verify: тумблер на /sale-share переключает %/счётчик/сортировку; фильтр «мин. объявлений» режет список.
lekss361 added 1 commit 2026-06-28 23:12:33 +00:00
feat(tradein/sale-share): тумблер «Сейчас / За 45 дней» + фильтр «мин. объявлений»
All checks were successful
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI / changes (pull_request) Successful in 7s
0ea850c957
#3: переключатель окна метрики (now/45д) — меняет показываемый %
(sale_share_pct↔sale_share_pct_45d), счётчик (active_secondary↔listings_45d) и
сортировку (share_desc↔share_45d_desc, active_desc↔count_45d_desc). 45д-данные
уже были в API — фронт их не показывал (потому тумблер и не находился).
#2: поле «Мин. объявлений в доме» — client-side фильтр по оконному счётчику.

Frontend-only (бэк/API/deps не тронуты). typecheck clean.
NB: маркеры карты пока по now-метрике (мелкий follow-up).
lekss361 merged commit 11a7018e78 into main 2026-06-28 23:13:14 +00:00
lekss361 deleted branch feat/tradein-sale-share-45d-toggle 2026-06-28 23:13:14 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2092
No description provided.