"use client"; import { useQuery } from "@tanstack/react-query"; import { apiFetch } from "@/lib/api"; import type { components } from "@/lib/api-types"; // Reuse generated OpenAPI types (api-types.ts) — НЕ дублировать руками. export type UtilityInfrastructureResponse = components["schemas"]["UtilityInfrastructureResponse"]; export type UtilityInfrastructureFeature = components["schemas"]["UtilityInfrastructureFeature"]; export type UtilityInfrastructureSummary = components["schemas"]["UtilityInfrastructureSummary"]; /** * #1961 — единый радиус «зоны охвата» для раздела «Сети». Таблица utilities * (osm_noise_sources_ekb) считает «В 2 км», а карта-слой раньше тянула только * 500 м → внутри 500 м был 1 объект, а в 2 км — 153, и пользователь не видел * на карте то, что показывала таблица. Делаем радиус карты = радиус таблицы. * Бэкенд допускает 50..2000 м (ST_DWithin geography по ЕКБ на 2 км ок по перф). */ export const UTILITY_COVERAGE_RADIUS_M = 2000; /** * Слой инженерной инфраструктуры из OSM (#1746). Источник — open-data таблица * osm_utility_infrastructure_ekb (weekly-sync). Большинство объектов — ЛЭП * (power=line, LineString) и подстанции; точечных узлов (towers) меньше. * * Зеркалит useConnectionPoints, но с параметром radius_m (бэкенд: 50..2000). * #1961 — дефолт повышен до UTILITY_COVERAGE_RADIUS_M (2 км), чтобы охват карты * совпадал с таблицей «В 2 км». Сервер — единственный источник истины по форме * ответа (см. UtilityInfrastructureResponse в api-types.ts). */ export function useUtilityInfrastructure( cadNum: string | null | undefined, radiusM: number = UTILITY_COVERAGE_RADIUS_M, enabled = true, ) { return useQuery({ queryKey: ["utility-infrastructure", cadNum, radiusM], queryFn: () => apiFetch( `/api/v1/parcels/${encodeURIComponent(cadNum!)}/utility-infrastructure?radius_m=${radiusM}`, ), enabled: !!cadNum && enabled, staleTime: 5 * 60 * 1000, }); }