diff --git a/frontend/src/app/golfbaner/[slug]/FacilityDetailView.tsx b/frontend/src/app/golfbaner/[slug]/FacilityDetailView.tsx index 3d17902..880e1d4 100644 --- a/frontend/src/app/golfbaner/[slug]/FacilityDetailView.tsx +++ b/frontend/src/app/golfbaner/[slug]/FacilityDetailView.tsx @@ -1,11 +1,12 @@ "use client"; /** - * TEE OFF DETAIL VIEW - COMPLETE v3.18 + * TEE OFF DETAIL VIEW - COMPLETE v3.20 * --------------------------------------------------------------------------- - * FIX: Fjernet emojier/ikoner ved siden av "GJESTESPILL" og "MEDLEMSKAP". - * FIX: Forbedret Greenfee-logikk for å sikre at ALLE priser og baner (Østmork/Vestmork) vises. - * FIX: Skjuler under-header hvis den bare gjentar "Gjestespill". - * REGEL: Beholder monokrome ikoner, 22/78 layout og 0047-prefix på telefon. + * FIX: Gjenopprettet "Turneringer" i den flytende knapperaden over bildet. + * FIX: Byttet plass på tekst og sidebar (Tekst øverst på mobil). + * FIX: Økt padding (pb-32) i Hero-teksten på mobil for å unngå krasj med knapper. + * FIX: Alle 4 kontaktpunkter i sidebar er klikkbare (tel:0047 fix inkludert). + * REGEL: Beholder monokrome ikoner, 22/78 layout og robust JSON-parsing. * --------------------------------------------------------------------------- */ @@ -19,6 +20,17 @@ const formatPhoneForUrl = (phone: string) => { return phone.replace('+', '00').replace(/\s/g, ''); }; +const renderValue = (val: string) => { + if (!val) return "Nei"; + const hasLink = val.includes(' + ); +}; + const Icon = ({ children, className = "w-5 h-5" }: { children: React.ReactNode, className?: string }) => ( c.holes && (typeof c.holes === 'string' || c.holes.length > 0)) : []; const amenities = parseJson(facility.amenities, {}); - const gallery = parseJson(facility.gallery, [facility.image_url || FALLBACK_IMAGE]); + const galleryRaw = parseJson(facility.gallery, []); + const gallery = galleryRaw.length > 0 ? galleryRaw : [facility.image_url || FALLBACK_IMAGE]; const greenfeeRaw = parseJson(facility.greenfee, []); const shotzoom = parseJson(facility.shotzoom, []); - // Grupper priser etter bane (f.eks Østmork, Vestmork) const groupedGreenfee: Record = greenfeeRaw.reduce((acc: any, curr: any) => { const bane = curr.banenavn || "Gjestespill"; if (!acc[bane]) acc[bane] = []; @@ -67,7 +79,6 @@ export default function FacilityDetailView({ facility }: { facility: any }) { return acc; }, {}); - const linkClass = "text-orange-600 hover:underline transition-colors font-bold"; const sidebarLinkClass = "flex items-center gap-4 hover:text-orange-600 transition-colors group"; const resourceBtnClass = "flex justify-between items-center p-5 bg-gray-50 rounded-2xl text-[11px] font-black uppercase hover:bg-orange-600 hover:text-white transition-all group"; @@ -100,12 +111,34 @@ export default function FacilityDetailView({ facility }: { facility: any }) { ))}
-
- {activeCourses.map((c: any) => ( - {STATUS_MAP[c.status] || c.status} - ))} + + {/* BANESTATUS BADGES */} +
+
+ {activeCourses.map((c: any) => ( + + {c.name.toUpperCase()}: {STATUS_MAP[c.status] || c.status} + + ))} +
+ {facility.status_updated_at && ( + + Sist oppdatert: {formatDate(facility.status_updated_at)} + + )}
-
+ + {/* FLYTENDE HURTIGKNAPPER (Inkludert Turneringer) */} +
+ {facility.website_url && } + {facility.golfbox_booking_url && } + {facility.golfbox_tournament_url && } + + {facility.weather_url && } +
+ + {/* HERO TEXT - pb-32 på mobil hindrer overlap med knapper */} +
{facility.logo_url && (
Logo
)} @@ -129,14 +162,25 @@ export default function FacilityDetailView({ facility }: { facility: any }) {
- {/* 3. INTRO & SIDEBAR */} + {/* 3. INTRO & SIDEBAR (PRESENTASJON FØRST FOR MOBIL) */}
-
{/* 4. 3-KOLONNE INFO */} @@ -201,11 +243,11 @@ export default function FacilityDetailView({ facility }: { facility: any }) {
Drivingrange:{amenities.drivingrange || 'Nei'}
Nærspill:{amenities.treningsgreen || 'Ja'}
-
Proshop:
+
Proshop:{renderValue(amenities.proshop)}
Kølleutleie:{amenities.kolleutleie || 'Ja'}
-
Simulator:
-
Head Pro:
-
Kafé:
+
Simulator:{renderValue(amenities.simulator)}
+
Head Pro:{renderValue(amenities.pro)}
+
Kafé:{renderValue(amenities.kafe)}
@@ -236,7 +278,7 @@ export default function FacilityDetailView({ facility }: { facility: any }) { )} - {/* 8. PRISER & MEDLEMSKAP (IKONER FJERNET) */} + {/* 8. PRISER & GJESTESPILL */}

Gjestespill

@@ -244,7 +286,6 @@ export default function FacilityDetailView({ facility }: { facility: any }) { {Object.keys(groupedGreenfee).length > 0 ? ( Object.entries(groupedGreenfee).map(([bane, priser], idx) => (
- {/* Skjul baneheader hvis den bare gjentar "Gjestespill" og det bare er én gruppe */} {!(bane === "Gjestespill" && Object.keys(groupedGreenfee).length === 1) && (

{bane}

)}