diff --git a/src/app/projects/map/page.js b/src/app/projects/map/page.js index f308312..7875050 100644 --- a/src/app/projects/map/page.js +++ b/src/app/projects/map/page.js @@ -4,22 +4,15 @@ import React, { useEffect, useState, Suspense } from "react"; import Link from "next/link"; import dynamic from "next/dynamic"; import { useSearchParams, useRouter } from "next/navigation"; +import { useTranslation } from "@/lib/i18n"; import Button from "@/components/ui/Button"; import { mapLayers } from "@/components/ui/mapLayers"; - -// Dynamically import the map component to avoid SSR issues -const DynamicMap = dynamic(() => import("@/components/ui/LeafletMap"), { - ssr: false, - loading: () => ( -
- Loading map... -
- ), -}); +import { formatProjectStatus } from "@/lib/utils"; function ProjectsMapPageContent() { const searchParams = useSearchParams(); const router = useRouter(); + const { t } = useTranslation(); const [projects, setProjects] = useState([]); const [loading, setLoading] = useState(true); const [mapCenter, setMapCenter] = useState([50.0614, 19.9366]); // Default to Krakow, Poland @@ -36,31 +29,41 @@ function ProjectsMapPageContent() { const [showLayerPanel, setShowLayerPanel] = useState(true); const [currentTool, setCurrentTool] = useState("move"); // Current map tool + // Dynamically import the map component to avoid SSR issues + const DynamicMap = dynamic(() => import("@/components/ui/LeafletMap"), { + ssr: false, + loading: () => ( +
+ {t('map.loadingMap')} +
+ ), + }); + // Status configuration with colors and labels const statusConfig = { registered: { color: "#6B7280", - label: "Registered", + label: formatProjectStatus("registered"), shortLabel: "Zarejestr.", }, in_progress_design: { color: "#3B82F6", - label: "In Progress (Design)", + label: formatProjectStatus("in_progress_design"), shortLabel: "W real. (P)", }, in_progress_construction: { color: "#F59E0B", - label: "In Progress (Construction)", + label: formatProjectStatus("in_progress_construction"), shortLabel: "W real. (R)", }, fulfilled: { color: "#10B981", - label: "Completed", + label: formatProjectStatus("fulfilled"), shortLabel: "Zakończony", }, cancelled: { color: "#EF4444", - label: "Cancelled", + label: formatProjectStatus("cancelled"), shortLabel: "Wycofany", }, }; @@ -331,7 +334,7 @@ function ProjectsMapPageContent() { d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z" /> - View Project Details + {t('map.viewProjectDetails')} @@ -346,9 +349,9 @@ function ProjectsMapPageContent() {
-

Loading projects map...

+

{t('map.loadingProjectsMap')}

- Preparing your full-screen map experience + {t('map.preparingMap')}

@@ -362,10 +365,10 @@ function ProjectsMapPageContent() {

- Projects Map + {t('map.projectsMap')}

- {markers.length} of {projects.length} projects with coordinates + {markers.length} of {projects.length} {t('map.projectsWithCoordinates')}
{" "}
@@ -380,7 +383,7 @@ function ProjectsMapPageContent() { const event = new CustomEvent("mapZoomIn"); window.dispatchEvent(event); }} - title="Zoom In" + title={t('map.zoomIn')} > + @@ -391,7 +394,7 @@ function ProjectsMapPageContent() { const event = new CustomEvent("mapZoomOut"); window.dispatchEvent(event); }} - title="Zoom Out" + title={t('map.zoomOut')} > − {" "} @@ -410,7 +413,7 @@ function ProjectsMapPageContent() { : "text-gray-700 hover:bg-gray-50" }`} onClick={() => setCurrentTool("move")} - title="Move Tool (Pan Map)" + title={t('map.moveTool')} > @@ -424,7 +427,7 @@ function ProjectsMapPageContent() { : "text-gray-700 hover:bg-gray-50" }`} onClick={() => setCurrentTool("select")} - title="Select Tool" + title={t('map.selectTool')} > setCurrentTool("measure")} - title="Measure Distance" + title={t('map.measureDistance')} > setCurrentTool("draw")} - title="Draw/Markup" + title={t('map.drawMarkup')} > setCurrentTool("pin")} - title="Add Pin/Marker" + title={t('map.addPinMarker')} > setCurrentTool("area")} - title="Measure Area" + title={t('map.measureArea')} > - List View + {t('map.listView')} @@ -585,7 +588,7 @@ function ProjectsMapPageContent() { d="M12 4v16m8-8H4" /> - Add Project + {t('map.addProject')} @@ -597,7 +600,7 @@ function ProjectsMapPageContent() {
- Map Layers + {t('map.mapLayers')} - {1 + activeOverlays.length} active + {1 + activeOverlays.length} {t('map.active')}
- Base Maps + {t('map.baseMaps')}
{mapLayers.base.map((layer, index) => ( @@ -702,7 +705,7 @@ function ProjectsMapPageContent() { d="M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M9 19l3 3m0 0l3-3m-3 3V10" /> - Overlay Layers + {t('map.overlayLayers')} {" "}
{mapLayers.overlays.map((layer, index) => ( @@ -733,7 +736,7 @@ function ProjectsMapPageContent() {
- Filters: + {t('map.filters')} {/* Toggle All Button */} @@ -852,7 +855,7 @@ function ProjectsMapPageContent() { className={`flex items-center gap-1 px-2 py-1 rounded text-xs font-medium transition-all duration-200 hover:bg-gray-100 ${ isActive ? "opacity-100 scale-100" : "opacity-40 scale-95" }`} - title={`Toggle ${config.label} (${projectCount} projects)`} + title={`Toggle ${config.label} (${projectCount} ${t('map.projects')})`} >

- No projects with coordinates + {t('map.noProjectsWithCoordinates')}

- Projects need coordinates to appear on the map. Add coordinates - when creating or editing projects. + {t('map.noProjectsMessage')}

- + - +
diff --git a/src/lib/i18n.js b/src/lib/i18n.js index 1daed25..156ba9a 100644 --- a/src/lib/i18n.js +++ b/src/lib/i18n.js @@ -69,6 +69,7 @@ const translations = { actions: "Akcje", view: "Wyświetl", clearSearch: "Wyczyść wyszukiwanie", + filters:"Filtry", clearAllFilters: "Wyczyść wszystkie filtry", sortBy: "Sortuj według" }, @@ -273,6 +274,40 @@ const translations = { failedToDeleteFile: "Nie udało się usunąć pliku" }, + // Map + map: { + loadingMap: "Ładowanie mapy...", + preparingMap: "Przygotowywanie pełnoekranowego widoku mapy", + projectsMap: "Mapa projektów", + projectsWithCoordinates: "projektów z współrzędnymi", + loadingProjectsMap: "Ładowanie mapy projektów...", + moveTool: "Narzędzie przesuwania (przesuń mapę)", + selectTool: "Narzędzie wyboru", + measureDistance: "Zmierz odległość", + drawMarkup: "Rysuj/oznacz", + addPinMarker: "Dodaj pinezkę/znacznik", + measureArea: "Zmierz powierzchnię", + listView: "Widok listy", + addProject: "Dodaj projekt", + toggleLayerControls: "Przełącz kontrolki warstw", + mapLayers: "Warstwy mapy", + active: "aktywnych", + baseMaps: "Mapy bazowe", + overlayLayers: "Warstwy nakładkowe", + filters: "Filtry:", + toggleAllFilters: "Przełącz wszystkie filtry", + hideAll: "Ukryj wszystkie", + showAll: "Pokaż wszystkie", + toggleFilter: "Przełącz filtr", + projects: "projektów", + noProjectsWithCoordinates: "Brak projektów ze współrzędnymi", + noProjectsMessage: "Projekty potrzebują współrzędnych, aby pojawić się na mapie. Dodaj współrzędne podczas tworzenia lub edycji projektów.", + viewAllProjects: "Zobacz wszystkie projekty", + zoomIn: "Przybliż", + zoomOut: "Oddal", + viewProjectDetails: "Zobacz szczegóły projektu" + }, + // Tasks tasks: { title: "Zadania", @@ -552,6 +587,7 @@ const translations = { actions: "Actions", view: "View", clearSearch: "Clear search", + filters: "Filters", clearAllFilters: "Clear all filters", sortBy: "Sort by" }, @@ -672,6 +708,40 @@ const translations = { } }, + // Map + map: { + loadingMap: "Loading map...", + preparingMap: "Preparing your full-screen map experience", + projectsMap: "Projects Map", + projectsWithCoordinates: "projects with coordinates", + loadingProjectsMap: "Loading projects map...", + moveTool: "Move Tool (Pan Map)", + selectTool: "Select Tool", + measureDistance: "Measure Distance", + drawMarkup: "Draw/Markup", + addPinMarker: "Add Pin/Marker", + measureArea: "Measure Area", + listView: "List View", + addProject: "Add Project", + toggleLayerControls: "Toggle Layer Controls", + mapLayers: "Map Layers", + active: "active", + baseMaps: "Base Maps", + overlayLayers: "Overlay Layers", + filters: "Filters:", + toggleAllFilters: "Toggle all filters", + hideAll: "Hide All", + showAll: "Show All", + toggleFilter: "Toggle filter", + projects: "projects", + noProjectsWithCoordinates: "No projects with coordinates", + noProjectsMessage: "Projects need coordinates to appear on the map. Add coordinates when creating or editing projects.", + viewAllProjects: "View All Projects", + zoomIn: "Zoom In", + zoomOut: "Zoom Out", + viewProjectDetails: "View Project Details" + }, + contracts: { title: "Contracts", subtitle: "Manage your contracts and agreements",