From 95706260c6face252262cdbd7305ae9b233401dc Mon Sep 17 00:00:00 2001 From: Erol Date: Fri, 27 Feb 2026 11:12:53 +0100 Subject: [PATCH] =?UTF-8?q?F=C3=B8r=20fiks=20av=20toppslider=20og=20knappe?= =?UTF-8?q?r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/__pycache__/main.cpython-311.pyc | Bin 5446 -> 7814 bytes backend/sync_greenfee.py | 79 ++++++++++++++++ .../golfbaner/[slug]/FacilityDetailView.tsx | 87 ++++++++++++------ 3 files changed, 140 insertions(+), 26 deletions(-) create mode 100644 backend/sync_greenfee.py diff --git a/backend/__pycache__/main.cpython-311.pyc b/backend/__pycache__/main.cpython-311.pyc index 81e3fbe211fbd17aa643f9d3de64a45f93409a48..105c763d842569c4043ce85db90262b102ffdf4f 100644 GIT binary patch literal 7814 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 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 greenfee = parseJson(facility.greenfee, []); + 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] = []; + acc[bane].push(curr); + 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"; @@ -148,8 +155,6 @@ export default function FacilityDetailView({ facility }: { facility: any }) { {/* 4. 3-KOLONNE INFO */}
- - {/* KOLONNE 1: ANDRE RESSURSER (Ensrettet uttrykk & Sortering) */}

Andre Ressurser

@@ -175,13 +180,11 @@ export default function FacilityDetailView({ facility }: { facility: any }) { )} {shotzoom.map((sz: any, i: number) => ( - Statistikk: {sz.shotzoom_beskrivelse?.replace(/ /g, ' ').toUpperCase()} + Statistikk: {sz.shotzoom_beskrivelse?.replace(/ ?/g, ' ').trim().toUpperCase()} ))}
- - {/* KOLONNE 2: BANEN */}

Banen

@@ -193,8 +196,6 @@ export default function FacilityDetailView({ facility }: { facility: any }) {
Arkitekt:{facility.architect || '--'}
- - {/* KOLONNE 3: ANDRE TILBUD (Oransje lenker) */}

Andre Tilbud

@@ -235,26 +236,58 @@ export default function FacilityDetailView({ facility }: { facility: any }) {
)} - {/* 8. PRISER SEKSJON */} + {/* 8. PRISER & MEDLEMSKAP (IKONER FJERNET) */}
-
-

⛳ Gjestespill

-
- {greenfee.length > 0 ? ( - greenfee.map((g: any, i: number) => ( -
{g.priskategori}kr {g.pris_voksne || '--'},-
+
+

Gjestespill

+
+ {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}

+ )} +
+

Voksne

+ {priser.map((g, i) => ( +
+ {g.priskategori} + kr {g.pris_voksne || '--'},- +
+ ))} +
+ {priser.some(g => g.pris_junior) && ( +
+

Junior

+ {priser.map((g, i) => ( +
+ {g.priskategori} + kr {g.pris_junior || '--'},- +
+ ))} +
+ )} +
)) ) :

Ingen priser funnet.

}
+

Krav: {facility.guest_requirements || 'Klubbhandicap'}

-
+ +
-

💛 Medlemskap

+

Medlemskap

+

{facility.navn_standard_medlemskap || "Standard"}

kr {facility.standard_medlemskap || '--'},-

+ {facility.standard_medlemskap_kommentarer &&

{facility.standard_medlemskap_kommentarer}

}
+ {facility.navn_rimeligste_alternativ && ( +
{facility.navn_rimeligste_alternativ}kr {facility.rimeligste_alternativ},-
+ )}
- Se alle alternativer + Se alle alternativer
@@ -271,7 +304,9 @@ export default function FacilityDetailView({ facility }: { facility: any }) { - {showBackToTop && ( )} + {showBackToTop && ( + + )} ); } \ No newline at end of file