diff --git a/2026-04-20 09.00.46 teeoff.no d8d72ce0bea9.jpg b/2026-04-20 09.00.46 teeoff.no d8d72ce0bea9.jpg deleted file mode 100644 index 2d40e7a..0000000 Binary files a/2026-04-20 09.00.46 teeoff.no d8d72ce0bea9.jpg and /dev/null differ diff --git a/2026-04-20 09.33.55 teeoff.no cc7384f6fb3e.jpg b/2026-04-20 09.33.55 teeoff.no cc7384f6fb3e.jpg new file mode 100644 index 0000000..4c5dcf9 Binary files /dev/null and b/2026-04-20 09.33.55 teeoff.no cc7384f6fb3e.jpg differ diff --git a/frontend/src/app/FacilitySearch.tsx b/frontend/src/app/FacilitySearch.tsx index b8fca0d..9b179d1 100755 --- a/frontend/src/app/FacilitySearch.tsx +++ b/frontend/src/app/FacilitySearch.tsx @@ -4,7 +4,7 @@ import { STATUS_MAP } from "@/config/constants"; import Image from "next/image"; import Link from "next/link"; import { useEffect, useMemo, useState, type CSSProperties } from "react"; -import { type EnrichedFacility } from "@/app/facilityData"; +import { getPublicCourseDisplayName, type EnrichedFacility } from "@/app/facilityData"; type SortMethod = "updated" | "dist" | "alpha"; type Variant = "home" | "catalog"; @@ -247,6 +247,38 @@ const formatUpdatedDate = (value: string | null | undefined) => { const getStatusLabel = (status: string) => STATUS_MAP[status] || "Ukjent"; +type StatusBadge = { + label: string; + status: string; +}; + +const buildFacilityStatusBadges = (statuses: CourseStatus[]): StatusBadge[] => { + const normalizedStatuses = (Array.isArray(statuses) ? statuses : []) + .map((status) => ({ + name: String(status?.name || "").trim(), + status: normalizeStatus(status?.status) || "ukjent", + })) + .filter((status) => status.status); + + if (normalizedStatuses.length === 0) { + return [{ label: getStatusLabel("ukjent"), status: "ukjent" }]; + } + + const uniqueStatuses = [...new Set(normalizedStatuses.map((status) => status.status))]; + if (normalizedStatuses.length === 1 || uniqueStatuses.length === 1) { + const status = uniqueStatuses[0] || "ukjent"; + return [{ label: getStatusLabel(status), status }]; + } + + return normalizedStatuses.map((course, index) => { + const courseName = getPublicCourseDisplayName(course.name, index, normalizedStatuses.length); + return { + label: courseName ? `${courseName}: ${getStatusLabel(course.status)}` : getStatusLabel(course.status), + status: course.status, + }; + }); +}; + const buildMapUrl = (lat?: number | null, lng?: number | null) => { if (typeof lat !== "number" || typeof lng !== "number") return null; return `https://www.google.com/maps/search/?api=1&query=${lat},${lng}`; @@ -505,7 +537,7 @@ export default function FacilitySearch({ const statuses = Array.isArray(rawStatuses) && rawStatuses.length > 0 ? rawStatuses - : [{ status: "ukjent", name: "Hovedbane" }]; + : [{ status: "ukjent", name: "" }]; const countySlug = slugify(facility.county || ""); const regions = getFacilityRegions(facility.county || ""); @@ -870,11 +902,14 @@ export default function FacilitySearch({ ) : (
Par {course.par} • {course.length_meters || '--'} meter
diff --git a/frontend/src/app/golfbaner/[slug]/FacilityDetailView.tsx b/frontend/src/app/golfbaner/[slug]/FacilityDetailView.tsx index cfcd86a..0245412 100644 --- a/frontend/src/app/golfbaner/[slug]/FacilityDetailView.tsx +++ b/frontend/src/app/golfbaner/[slug]/FacilityDetailView.tsx @@ -16,7 +16,7 @@ import { useState, useEffect } from 'react'; import dynamic from "next/dynamic"; import { STATUS_MAP, FALLBACK_IMAGE } from "@/config/constants"; -import { STATUS_ICON_PATHS, buildMapUrl, getPrimaryStatus, parseJson as parseSharedJson, slugify } from "@/app/facilityData"; +import { STATUS_ICON_PATHS, buildMapUrl, getPrimaryStatus, getPublicCourseDisplayName, parseJson as parseSharedJson, slugify } from "@/app/facilityData"; import Link from 'next/link'; import CourseDisplay from './CourseDisplay'; import FacilityFeedbackForm from './FacilityFeedbackForm'; @@ -277,11 +277,16 @@ export default function FacilityDetailView({ facility }: { facility: any }) { {/* BANESTATUS BADGES */}