"use client"; import { useState, useRef, useCallback } from "react"; import dynamic from "next/dynamic"; import { LayerPanel, getDefaultVisibility } from "./layer-panel"; import { BasemapSwitcher } from "./basemap-switcher"; import { SearchBar } from "./search-bar"; import { SelectionToolbar } from "./selection-toolbar"; import { FeatureInfoPanel } from "./feature-info-panel"; import type { MapViewerHandle } from "./map-viewer"; import type { BasemapId, ClickedFeature, LayerVisibility, SearchResult, SelectedFeature, } from "../types"; const MapViewer = dynamic( () => import("./map-viewer").then((m) => ({ default: m.MapViewer })), { ssr: false, loading: () => (

Se incarca harta...

), } ); export function GeoportalModule() { const mapHandleRef = useRef(null); const [basemap, setBasemap] = useState("liberty"); const [layerVisibility, setLayerVisibility] = useState(getDefaultVisibility); const [clickedFeature, setClickedFeature] = useState(null); const [selectionMode, setSelectionMode] = useState(false); const [selectedFeatures, setSelectedFeatures] = useState([]); const [flyTarget, setFlyTarget] = useState<{ center: [number, number]; zoom?: number } | undefined>(); const handleFeatureClick = useCallback((feature: ClickedFeature | null) => { // null = clicked on empty space, close panel if (!feature || !feature.properties) { setClickedFeature(null); return; } setClickedFeature(feature); }, []); const handleSearchResult = useCallback((result: SearchResult) => { if (result.coordinates) { setFlyTarget({ center: result.coordinates, zoom: result.type === "uat" ? 12 : 17 }); } }, []); const handleToggleSelectionMode = useCallback(() => { setSelectionMode((prev) => { if (prev) { mapHandleRef.current?.clearSelection(); setSelectedFeatures([]); } return !prev; }); }, []); return (
{/* Top-left: search + layers */}
{/* Top-right: basemap switcher + feature panel (aligned) */}
{clickedFeature && !selectionMode && ( setClickedFeature(null)} /> )}
{/* Bottom-left: selection toolbar */}
{ mapHandleRef.current?.clearSelection(); setSelectedFeatures([]); }} />
); }