import React, { useMemo, useState } from "react";
// --- Types ---
type Status = "Ledig" | "SOLGT" | "Visningshytte";
type LotOption = {
model: string;
turnkeyPrice: number | null; // NOK (ex. tomt)
totalPrice: number | null; // NOK (tomt + betong + hytte), som i vedlegg
note?: string; // f.eks. "Visningshytte – pris på forespørsel"
partner?: string; // valgfritt: hytteselskap
};
type Lot = {
id: number;
status: Status;
areaSqm?: number; // m²
felt?: string; // H3/H4
plotPrice?: number; // pris byggeklar tomt
options?: LotOption[];
};
// --- Data hentet fra vedlagt prisliste ---
// Tallene nedenfor er direkte fra prislisten. Du kan fritt utvide listen eller redigere.
const LOTS: Lot[] = [
{ id: 1, status: "SOLGT" },
{ id: 2, status: "Ledig", areaSqm: 771, felt: "H3", plotPrice: 1_850_000, options: [
{ model: "Mer 40", turnkeyPrice: 1_699_275, totalPrice: 3_549_275 },
{ model: "Furutangen 70", turnkeyPrice: 2_265_091, totalPrice: 4_115_091 },
{ model: "Furutangen 75", turnkeyPrice: 2_387_570, totalPrice: 4_237_570 },
{ model: "Frøya 75", turnkeyPrice: 2_818_540, totalPrice: 4_668_540 },
{ model: "Frøya 90", turnkeyPrice: 3_051_690, totalPrice: 4_901_690 },
{ model: "Lofoten 76", turnkeyPrice: 2_651_020, totalPrice: 4_501_020 },
{ model: "Lofoten 85", turnkeyPrice: 2_837_180, totalPrice: 4_687_180 },
{ model: "Vy-19AH T5", turnkeyPrice: 3_448_580, totalPrice: 5_298_580 },
]},
{ id: 3, status: "SOLGT" },
{ id: 4, status: "SOLGT" },
{ id: 5, status: "SOLGT" },
{ id: 6, status: "SOLGT" },
{ id: 7, status: "SOLGT" },
{ id: 8, status: "SOLGT" },
{ id: 9, status: "Ledig", areaSqm: 568, felt: "H3", plotPrice: 1_550_000, options: [
{ model: "Fjellrypa (L), spesial", turnkeyPrice: 2_578_000, totalPrice: 4_128_000 },
]},
{ id: 10, status: "Ledig", areaSqm: 601, felt: "H3", plotPrice: 1_412_000, options: [
{ model: "Fjellrypa (L), spesial", turnkeyPrice: 2_578_000, totalPrice: 3_990_000 },
]},
{ id: 11, status: "Visningshytte", areaSqm: 590, felt: "H3", options: [
{ model: "Fjellrypa (L), spesial", turnkeyPrice: null, totalPrice: null, note: "Visningshytte – pris på forespørsel" },
]},
{ id: 12, status: "Ledig", areaSqm: 596, felt: "H3", plotPrice: 1_412_000, options: [
{ model: "Fjellrypa (L), spesial", turnkeyPrice: 2_578_000, totalPrice: 3_990_000 },
]},
{ id: 13, status: "Ledig", areaSqm: 602, felt: "H3", plotPrice: 1_412_000, options: [
{ model: "Fjellrypa (L), spesial", turnkeyPrice: 2_578_000, totalPrice: 3_990_000 },
]},
{ id: 14, status: "Ledig", areaSqm: 588, felt: "H3", plotPrice: 1_412_000, options: [
{ model: "Fjellrypa (L), spesial", turnkeyPrice: 2_578_000, totalPrice: 3_990_000 },
]},
{ id: 15, status: "SOLGT" },
{ id: 16, status: "Ledig", areaSqm: 818, felt: "H4", plotPrice: 1_860_000, options: [
{ model: "Mer 40", turnkeyPrice: 1_699_275, totalPrice: 3_559_275 },
{ model: "Mjuken 65", turnkeyPrice: 2_008_801, totalPrice: 3_868_801 },
{ model: "Furutangen 70", turnkeyPrice: 2_265_091, totalPrice: 4_125_091 },
{ model: "Furutangen 75", turnkeyPrice: 2_387_570, totalPrice: 4_247_570 },
{ model: "Furutangen 85", turnkeyPrice: 2_511_360, totalPrice: 4_371_360 },
{ model: "Frøya 75", turnkeyPrice: 2_818_540, totalPrice: 4_678_540 },
{ model: "Frøya 90", turnkeyPrice: 3_051_690, totalPrice: 4_911_690 },
{ model: "Frøya 105", turnkeyPrice: 3_297_335, totalPrice: 5_157_335 },
{ model: "Lofoten 76, spesial", turnkeyPrice: 2_651_020, totalPrice: 4_511_020 },
{ model: "Lofoten 85, spesial", turnkeyPrice: 2_837_180, totalPrice: 4_697_180 },
{ model: "Lofoten 94, spesial", turnkeyPrice: 3_005_125, totalPrice: 4_865_125 },
{ model: "Lofoten 103, spesial", turnkeyPrice: 3_129_755, totalPrice: 4_989_755 },
{ model: "Lofoten 112, spesial", turnkeyPrice: 3_322_445, totalPrice: 5_182_445 },
{ model: "Vy-19AH T5", turnkeyPrice: 3_448_580, totalPrice: 5_308_580, partner: "Leve Hytter" },
{ model: "Vy-21AH", turnkeyPrice: 3_880_250, totalPrice: 5_740_250, partner: "Leve Hytter" },
{ model: "Vy-23CTHS", turnkeyPrice: 3_732_630, totalPrice: 5_592_630, partner: "Leve Hytter" },
{ model: "Vy-26CTH", turnkeyPrice: 4_121_255, totalPrice: 5_981_255, partner: "Leve Hytter" },
{ model: "Rognli panorama oppstue", turnkeyPrice: 3_962_690, totalPrice: 5_822_690, partner: "Telemarkhytter" },
{ model: "Storeble panorama hems", turnkeyPrice: 4_214_900, totalPrice: 6_074_900, partner: "Telemarkhytter" },
]},
{ id: 17, status: "Ledig", areaSqm: 526, felt: "H4", plotPrice: 1_760_000, options: [
{ model: "Mer 40", turnkeyPrice: 1_699_275, totalPrice: 3_459_275 },
{ model: "Mjuken 65", turnkeyPrice: 2_008_801, totalPrice: 3_768_801 },
{ model: "Furutangen 70", turnkeyPrice: 2_265_091, totalPrice: 4_025_091 },
{ model: "Furutangen 75", turnkeyPrice: 2_387_570, totalPrice: 4_147_570 },
{ model: "Furutangen 85", turnkeyPrice: 2_511_360, totalPrice: 4_271_360 },
{ model: "Frøya 75", turnkeyPrice: 2_818_540, totalPrice: 4_578_540 },
{ model: "Frøya 90", turnkeyPrice: 3_051_690, totalPrice: 4_811_690 },
{ model: "Frøya 105", turnkeyPrice: 3_297_335, totalPrice: 5_057_335 },
{ model: "Lofoten 76, spesial", turnkeyPrice: 2_651_020, totalPrice: 4_411_020 },
{ model: "Lofoten 85, spesial", turnkeyPrice: 2_837_180, totalPrice: 4_597_180 },
{ model: "Lofoten 94, spesial", turnkeyPrice: 3_005_125, totalPrice: 4_765_125 },
{ model: "Lofoten 103, spesial", turnkeyPrice: 3_129_755, totalPrice: 4_889_755 },
{ model: "Lofoten 112, spesial", turnkeyPrice: 3_322_445, totalPrice: 5_082_445 },
{ model: "Vy-19AH T5", turnkeyPrice: 3_448_580, totalPrice: 5_208_580, partner: "Leve Hytter" },
{ model: "Vy-21AH", turnkeyPrice: 3_880_250, totalPrice: 5_640_250, partner: "Leve Hytter" },
{ model: "Vy-23CTHS", turnkeyPrice: 3_732_630, totalPrice: 5_492_630, partner: "Leve Hytter" },
{ model: "Vy-26CTH", turnkeyPrice: 4_121_255, totalPrice: 5_881_255, partner: "Leve Hytter" }, // (valgfritt: legg inn hvis ønskelig)
{ model: "Rognli panorama oppstue", turnkeyPrice: 3_962_690, totalPrice: 5_722_690, partner: "Telemarkhytter" },
{ model: "Storeble panorama hems", turnkeyPrice: 4_214_900, totalPrice: 5_974_900, partner: "Telemarkhytter" },
]},
{ id: 18, status: "Ledig", areaSqm: 854, felt: "H4", plotPrice: 1_900_000, options: [
{ model: "Mer 40", turnkeyPrice: 1_699_275, totalPrice: 3_599_275 },
{ model: "Mjuken 65", turnkeyPrice: 2_008_801, totalPrice: 3_908_801 },
{ model: "Furutangen 70", turnkeyPrice: 2_265_091, totalPrice: 4_165_091 },
{ model: "Furutangen 75", turnkeyPrice: 2_387_570, totalPrice: 4_287_570 },
{ model: "Furutangen 85", turnkeyPrice: 2_511_360, totalPrice: 4_411_360 },
{ model: "Frøya 75", turnkeyPrice: 2_818_540, totalPrice: 4_718_540 },
{ model: "Frøya 90", turnkeyPrice: 3_051_690, totalPrice: 4_951_690 },
{ model: "Frøya 105", turnkeyPrice: 3_297_335, totalPrice: 5_197_335 },
{ model: "Lofoten 76, spesial", turnkeyPrice: 2_651_020, totalPrice: 4_551_020 },
{ model: "Lofoten 85, spesial", turnkeyPrice: 2_837_180, totalPrice: 4_737_180 },
{ model: "Lofoten 94, spesial", turnkeyPrice: 3_005_125, totalPrice: 4_905_125 },
{ model: "Lofoten 103, spesial", turnkeyPrice: 3_129_755, totalPrice: 5_029_755 },
{ model: "Lofoten 112, spesial", turnkeyPrice: 3_322_445, totalPrice: 5_222_445 },
{ model: "Vy-19AH T5", turnkeyPrice: 3_448_580, totalPrice: 5_348_580, partner: "Leve Hytter" },
{ model: "Vy-21AH", turnkeyPrice: 3_880_250, totalPrice: 5_780_250, partner: "Leve Hytter" },
{ model: "Vy-23CTHS", turnkeyPrice: 3_732_630, totalPrice: 5_632_630, partner: "Leve Hytter" },
{ model: "Rognli panorama oppstue", turnkeyPrice: 3_962_690, totalPrice: 5_862_690, partner: "Telemarkhytter" },
{ model: "Storeble panorama hems", turnkeyPrice: 4_214_900, totalPrice: 6_114_900, partner: "Telemarkhytter" },
]},
{ id: 19, status: "Ledig", areaSqm: 720, felt: "H4", plotPrice: 2_150_000, options: [
{ model: "Mer 40", turnkeyPrice: 1_699_275, totalPrice: 3_849_275 },
{ model: "Mjuken 65", turnkeyPrice: 2_008_801, totalPrice: 4_158_801 },
{ model: "Furutangen 70", turnkeyPrice: 2_265_091, totalPrice: 4_415_091 },
{ model: "Furutangen 75", turnkeyPrice: 2_387_570, totalPrice: 4_537_570 },
{ model: "Furutangen 85", turnkeyPrice: 2_511_360, totalPrice: 4_661_360 },
{ model: "Frøya 75", turnkeyPrice: 2_818_540, totalPrice: 4_968_540 },
{ model: "Frøya 90", turnkeyPrice: 3_051_690, totalPrice: 5_201_690 },
{ model: "Frøya 105", turnkeyPrice: 3_297_335, totalPrice: 5_447_335 },
{ model: "Lofoten 76, spesial", turnkeyPrice: 2_651_020, totalPrice: 4_801_020 },
{ model: "Lofoten 85, spesial", turnkeyPrice: 2_837_180, totalPrice: 4_987_180 },
{ model: "Lofoten 94, spesial", turnkeyPrice: 3_005_125, totalPrice: 5_155_125 },
{ model: "Lofoten 103, spesial", turnkeyPrice: 3_129_755, totalPrice: 5_279_755 },
{ model: "Lofoten 112, spesial", turnkeyPrice: 3_322_445, totalPrice: 5_472_445 },
{ model: "Vy-19AH T5", turnkeyPrice: 3_448_580, totalPrice: 5_598_580, partner: "Leve Hytter" },
{ model: "Vy-21AH", turnkeyPrice: 3_880_250, totalPrice: 6_030_250, partner: "Leve Hytter" },
{ model: "Vy-23CTHS", turnkeyPrice: 3_732_630, totalPrice: 5_882_630, partner: "Leve Hytter" },
{ model: "Vy-26CTH", turnkeyPrice: 4_121_255, totalPrice: 6_271_255, partner: "Leve Hytter" },
{ model: "Rognli panorama oppstue", turnkeyPrice: 3_962_690, totalPrice: 6_112_690, partner: "Telemarkhytter" },
{ model: "Storeble panorama hems", turnkeyPrice: 4_214_900, totalPrice: 6_364_900, partner: "Telemarkhytter" },
]},
];
// --- Utils ---
const nok = (n?: number | null) => {
if (n == null || Number.isNaN(n)) return "-";
return new Intl.NumberFormat("nb-NO", { style: "currency", currency: "NOK", maximumFractionDigits: 0 }).format(n);
};
const fromPrice = (lot: Lot): number | null => {
if (!lot.options || lot.options.length === 0) return lot.plotPrice ?? null;
const totals = lot.options
.map(o => o.totalPrice)
.filter((n): n is number => typeof n === "number" && !Number.isNaN(n));
return totals.length ? Math.min(...totals) : (lot.plotPrice ?? null);
};
// --- UI ---
export default function EikedalenPrisliste() {
const [showSold, setShowSold] = useState(false);
const [search, setSearch] = useState("");
const [felt, setFelt] = useState
("Alle");
const [maxFrom, setMaxFrom] = useState(null);
const filtered = useMemo(() => {
return LOTS.filter(l => {
if (!showSold && l.status === "SOLGT") return false;
if (felt !== "Alle" && l.felt !== felt) return false;
if (search.trim()) {
const s = search.toLowerCase();
const inModels = (l.options || []).some(o => o.model.toLowerCase().includes(s));
const inId = ("tomt " + l.id).includes(s) || String(l.id).includes(s);
if (!inModels && !inId) return false;
}
if (maxFrom != null) {
const fp = fromPrice(l);
if (fp != null && fp > maxFrom) return false;
}
return true;
}).sort((a, b) => (a.id - b.id));
}, [showSold, search, felt, maxFrom]);
return (
{/* Filters */}
{/* Cards */}
{/* Info */}
Viktig informasjon og forbehold
- Prisestimat for «nøkkelferdig hytte» inkluderer betong og byggeklar tomt. Du kan også kjøpe byggeklar tomt + byggesett/elektroklar hytte og ferdigstille i egenregi.
- Nøkkelferdig leveranse følger hytteselskapenes tilbud/leveransebeskrivelse. Be om uforpliktende tilbud for endelig spesifikasjon.
- «Lofoten» leveres uten utebod. Enkelte modeller fra Leve Hytter krever dispensasjon (Tomt 3 fikk disp.).
- Tilleggskostnader: dokumentavgift 2,5% av tomteverdi, tinglysing/panteattest (kr 1 500), byggestrøm og renovasjon under bygging, byggesaksgebyr til kommunen (kr 25 500) og tilkoblingsavgift V/A (kr 26 000).
- Med forbehold om feil i beskrivelser og priser.
);
}
function StatusBadge({ status }: { status: Status }) {
const styles: Record = {
Ledig: "bg-emerald-100 text-emerald-800 border-emerald-200",
SOLGT: "bg-rose-100 text-rose-800 border-rose-200",
Visningshytte: "bg-indigo-100 text-indigo-800 border-indigo-200",
};
return (
{status}
);
}
function Th({ children }: { children: React.ReactNode }) {
return {children};
}
function Td({ children }: { children: React.ReactNode }) {
return {children};
}