"use client"; import { useState, useMemo } from "react"; import { CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { DashboardCard } from "@/components/dashboard-card"; import { Input } from "@/components/ui/input"; import { SearchIcon, FuelIcon } from "@/components/ui/phosphor-icons"; import { ContinuousTabs } from "@/components/ui/continuous-tabs"; import type { FuelPricesResponse } from "./gas-station-stats-cards"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; interface PertaminaPriceTableProps { fuelPrices: FuelPricesResponse | null; loading: boolean; } export function PertaminaPriceTable({ fuelPrices, loading }: PertaminaPriceTableProps) { const [activeTab, setActiveTab] = useState("gasoline"); const [searchQuery, setSearchQuery] = useState(""); const dataList = useMemo(() => { if (!fuelPrices) return []; return activeTab === "gasoline" ? fuelPrices.gasoline : fuelPrices.diesel; }, [fuelPrices, activeTab]); const filteredData = useMemo(() => { return dataList.filter((row) => row.region?.toLowerCase().includes(searchQuery.toLowerCase()) ); }, [dataList, searchQuery]); const formatVal = (val: number | null) => { if (val == null) return ; return Rp {val.toLocaleString("id-ID")}; }; return (
Daftar Harga BBM Pertamina Seluruh Indonesia Data real-time disinkronkan dari Pertamina Patra Niaga ({fuelPrices?.lastUpdated || "Update terbaru"}).
setSearchQuery(e.target.value)} />
{loading ? (
Memuat data harga BBM terbaru...
) : filteredData.length === 0 ? (
Tidak ada data provinsi yang cocok.
) : (
Provinsi / Wilayah {activeTab === "gasoline" ? ( <> Pertalite (90) Pertamax (92) Pertamax Green 95 Pertamax Turbo (98) Pertamax Pertashop ) : ( <> Bio Solar (Subsidi) Bio Solar (Non-Sub) Dexlite Pertamina Dex )} {filteredData.map((row) => { const isKalbar = row.region === "Prov. Kalimantan Barat"; return ( {isKalbar && ( )} {row.region} {activeTab === "gasoline" ? ( <> {formatVal(row.pertalite)} {formatVal(row.pertamax)} {formatVal(row.pertamaxGreen)} {formatVal(row.pertamaxTurbo)} {formatVal(row.pertamaxPertashop)} ) : ( <> {formatVal(row.bioSolarSubsidi)} {formatVal(row.bioSolarNonSubsidi)} {formatVal(row.dexlite)} {formatVal(row.pertaminaDex)} )} ); })}
)}
); }