2024-11-28 15:21:06 +00:00
|
|
|
import React, { useState } from "react";
|
2024-11-30 14:48:32 +00:00
|
|
|
import { Button } from "../ui/button";
|
2024-12-17 14:27:48 +00:00
|
|
|
import { Reveal } from "./Reveal";
|
2024-12-18 16:28:31 +00:00
|
|
|
import { Icon } from "@iconify/react/dist/iconify.js";
|
2024-12-30 16:00:25 +00:00
|
|
|
import { Link } from "@/i18n/routing";
|
2025-01-05 13:46:18 +00:00
|
|
|
import { useTranslations } from "next-intl";
|
|
|
|
|
import { usePathname } from "next/navigation";
|
2025-03-07 12:32:47 +00:00
|
|
|
import Image from "next/image";
|
2024-11-28 15:21:06 +00:00
|
|
|
|
2025-01-04 03:44:57 +00:00
|
|
|
const regions = [
|
2025-03-10 09:54:57 +00:00
|
|
|
{ name: "Polda Metro Jaya", slug: "metro-jaya", logo: "/logo/logo-polda/polda-metro.png" },
|
|
|
|
|
{ name: "Polda Jawa Barat", slug: "jawa-barat", logo: "/logo/logo-polda/polda-jawabarat.png" },
|
|
|
|
|
{ name: "Polda Banten", slug: "banten", logo: "/logo/logo-polda/polda-banten.png" },
|
|
|
|
|
{ name: "Polda Jawa Tengah", slug: "jawa-tengah", logo: "/logo/logo-polda/polda-jawatengah.png" },
|
|
|
|
|
{ name: "Polda D.I Yogyakarta", slug: "di-yogyakarta", logo: "/logo/logo-polda/polda-jogja.png" },
|
|
|
|
|
{ name: "Polda Jawa Timur", slug: "jawa-timur", logo: "/logo/logo-polda/polda-jawatimur.png" },
|
|
|
|
|
{ name: "Polda Aceh", slug: "aceh", logo: "/logo/logo-polda/polda-aceh.png" },
|
|
|
|
|
{ name: "Polda Sumatera Utara", slug: "sumatera-utara", logo: "/logo/logo-polda/polda-sumut.png" },
|
|
|
|
|
{ name: "Polda Sumatera Barat", slug: "sumatera-barat", logo: "/logo/logo-polda/polda-sumatera-barat.png" },
|
|
|
|
|
{ name: "Polda Riau", slug: "riau", logo: "/logo/logo-polda/polda-riau.png" },
|
|
|
|
|
{ name: "Polda Kep. Riau", slug: "kepulauan-riau", logo: "/logo/logo-polda/polda-kepri.png" },
|
|
|
|
|
{ name: "Polda Jambi", slug: "jambi", logo: "/logo/logo-polda/polda-jambi.png" },
|
|
|
|
|
{ name: "Polda Sumatera Selatan", slug: "sumatera-selatan", logo: "/logo/logo-polda/polda-sumsel.png" },
|
|
|
|
|
{ name: "Polda Kep. Bangka Belitung", slug: "bangka-belitung", logo: "/logo/logo-polda/polda-bangkabelitung.png" },
|
|
|
|
|
{ name: "Polda Bengkulu", slug: "bengkulu", logo: "/logo/logo-polda/polda-bengkulu.png" },
|
|
|
|
|
{ name: "Polda Lampung", slug: "lampung", logo: "/logo/logo-polda/polda-lampung.png" },
|
|
|
|
|
{ name: "Polda Nusa Tenggara Barat", slug: "ntb", logo: "/logo/logo-polda/polda-ntb.png" },
|
|
|
|
|
{ name: "Polda Nusa Tenggara Timur", slug: "ntt", logo: "/logo/logo-polda/polda-ntt.png" },
|
|
|
|
|
{ name: "Polda Bali", slug: "bali", logo: "/logo/logo-polda/polda-bali.png" },
|
|
|
|
|
{ name: "Polda Kalimantan Barat", slug: "kalimantan-barat", logo: "/logo/logo-polda/polda-kalbar.png" },
|
|
|
|
|
{ name: "Polda Kalimantan Tengah", slug: "kalimantan-tengah", logo: "/logo/logo-polda/polda-kalteng.png" },
|
|
|
|
|
{ name: "Polda Kalimantan Selatan", slug: "kalimantan-selatan", logo: "/logo/logo-polda/polda-kalsel.png" },
|
|
|
|
|
{ name: "Polda Kalimantan Timur", slug: "kalimantan-timur", logo: "/logo/logo-polda/polda-kaltim.png" },
|
|
|
|
|
{ name: "Polda Kalimantan Utara", slug: "kaltara", logo: "/logo/logo-polda/polda-kaltara.png" },
|
|
|
|
|
{ name: "Polda Sulawesi Tengah", slug: "sulawesi-tengah", logo: "/logo/logo-polda/polda-sulawesi-tengah.png" },
|
|
|
|
|
{ name: "Polda Sulawesi Utara", slug: "sulawesi-utara", logo: "/logo/logo-polda/polda-sulawesi-utara.png" },
|
|
|
|
|
{ name: "Polda Gorontalo", slug: "gorontalo", logo: "/logo/logo-polda/polda-gorontalo.png" },
|
|
|
|
|
{ name: "Polda Sulawesi Barat", slug: "sulawesi-barat", logo: "/logo/logo-polda/polda-sulbar.png" },
|
|
|
|
|
{ name: "Polda Sulawesi Selatan", slug: "sulawesi-selatan", logo: "/logo/logo-polda/polda-sulsel.png" },
|
|
|
|
|
{ name: "Polda Sulawesi Tenggara", slug: "sulawesi-tenggara", logo: "/logo/logo-polda/polda-sulawesi-tenggara.png" },
|
|
|
|
|
{ name: "Polda Maluku Utara", slug: "maluku-utara", logo: "/logo/logo-polda/polda-maluku-utara.png" },
|
|
|
|
|
{ name: "Polda Maluku", slug: "maluku", logo: "/logo/logo-polda/polda-maluku.png" },
|
|
|
|
|
{ name: "Polda Papua Barat", slug: "papua-barat", logo: "/logo/logo-polda/polda-papua-barat.png" },
|
|
|
|
|
{ name: "Polda Papua", slug: "papua", logo: "/logo/logo-polda/polda-papua.png" },
|
2025-03-10 13:05:15 +00:00
|
|
|
{ name: "Satuan Kerja POLRI", slug: "satker-polri", logo: "/logo/logo-satker/SATUAN-KERJA-POLRI.png" },
|
2025-01-04 03:44:57 +00:00
|
|
|
{ name: "Internasional", slug: "internasional", logo: "/assets/polda/internasional.png" },
|
|
|
|
|
];
|
|
|
|
|
|
2024-12-04 14:12:10 +00:00
|
|
|
const Coverage: React.FC = () => {
|
2024-11-30 14:48:32 +00:00
|
|
|
const [seeAllValue, setSeeAllValue] = useState(false);
|
2025-01-04 03:44:57 +00:00
|
|
|
const [searchTerm, setSearchTerm] = useState("");
|
|
|
|
|
const [filteredList, setFilteredList] = useState<typeof regions | undefined>(regions);
|
2025-01-05 13:46:18 +00:00
|
|
|
const pathname = usePathname();
|
|
|
|
|
const t = useTranslations("LandingPage");
|
2025-01-04 03:44:57 +00:00
|
|
|
|
|
|
|
|
const handleSearch = () => {
|
|
|
|
|
const value = searchTerm.toLowerCase();
|
2024-11-28 15:21:06 +00:00
|
|
|
|
2025-01-04 03:44:57 +00:00
|
|
|
const filtered = regions.filter((polda) => polda.name.toLowerCase().includes(value));
|
|
|
|
|
setFilteredList(filtered);
|
|
|
|
|
};
|
2024-11-28 15:21:06 +00:00
|
|
|
|
2025-03-07 12:32:47 +00:00
|
|
|
const shimmer = (w: number, h: number) => `
|
|
|
|
|
<svg width="${w}" height="${h}" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
|
|
|
<defs>
|
|
|
|
|
<linearGradient id="g">
|
|
|
|
|
<stop stop-color="#bcbcbd" offset="20%" />
|
|
|
|
|
<stop stop-color="#f9fafb" offset="50%" />
|
|
|
|
|
<stop stop-color="#bcbcbd" offset="70%" />
|
|
|
|
|
</linearGradient>
|
|
|
|
|
</defs>
|
|
|
|
|
<rect width="${w}" height="${h}" fill="#bcbcbd" />
|
|
|
|
|
<rect id="r" width="${w}" height="${h}" fill="url(#g)" />
|
|
|
|
|
<animate xlink:href="#r" attributeName="x" from="-${w}" to="${w}" dur="1s" repeatCount="indefinite" />
|
|
|
|
|
</svg>`;
|
|
|
|
|
|
|
|
|
|
const toBase64 = (str: string) => (typeof window === "undefined" ? Buffer.from(str).toString("base64") : window.btoa(str));
|
|
|
|
|
|
2024-11-28 15:21:06 +00:00
|
|
|
return (
|
2025-03-07 12:32:47 +00:00
|
|
|
<div className="w-full">
|
2025-03-05 10:05:44 +00:00
|
|
|
{/* Header */}
|
|
|
|
|
{/* <h2 className="text-center text-2xl font-bold text-gray-800 dark:text-white mb-4">
|
|
|
|
|
{pathname?.split("/")[1] == "in" ? (
|
|
|
|
|
<>
|
|
|
|
|
{t("coverageOnly")} <span className="text-[#bb3523]">{t("area")}</span>{" "}
|
|
|
|
|
</>
|
|
|
|
|
) : (
|
|
|
|
|
<>
|
|
|
|
|
{t("area")}
|
|
|
|
|
<span className="text-[#bb3523]">{t("coverageOnly")}</span>
|
|
|
|
|
</>
|
|
|
|
|
)}
|
|
|
|
|
</h2> */}
|
2024-11-28 15:21:06 +00:00
|
|
|
|
2025-03-05 10:05:44 +00:00
|
|
|
{/* <h2 className="text-center text-2xl font-bold text-gray-800 dark:text-white mb-4">
|
2025-01-05 13:46:18 +00:00
|
|
|
Liputan <span className="text-[#bb3523]">Wilayah</span>
|
|
|
|
|
</h2> */}
|
2025-02-24 16:36:33 +00:00
|
|
|
|
2025-03-05 10:05:44 +00:00
|
|
|
{/* <div className="h-1 w-48 bg-[#bb3523] mx-auto mb-6 rounded"></div> */}
|
2025-02-24 16:36:33 +00:00
|
|
|
|
2025-03-05 10:05:44 +00:00
|
|
|
{/* Pencarian */}
|
|
|
|
|
{/* <div className="flex items-center justify-center gap-4 mb-6">
|
|
|
|
|
<input onChange={(e) => setSearchTerm(e.target.value)} type="text" placeholder={t("search")} className="w-4/5 px-4 py-2 border border-gray-300 rounded-md focus:ring-2 focus:ring-[#bb3523] focus:outline-none" />
|
|
|
|
|
<button onClick={handleSearch} className="px-2 w-1/5 lg:px-4 py-2 bg-[#bb3523] text-xs lg:text-base text-white flex justify-center items-center gap-2 rounded-md hover:bg-red-700">
|
|
|
|
|
{t("searchRegional")}
|
|
|
|
|
<Icon icon="ri:arrow-right-s-line" fontSize={20} />
|
|
|
|
|
</button>
|
|
|
|
|
</div> */}
|
2025-02-24 16:36:33 +00:00
|
|
|
|
2025-03-05 10:05:44 +00:00
|
|
|
{/* Grid Wilayah */}
|
2025-03-07 12:32:47 +00:00
|
|
|
<div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6 gap-6 overflow-y-auto px-4 max-h-[60vh]">
|
2025-03-05 10:05:44 +00:00
|
|
|
{filteredList?.map((region: any) => (
|
2025-03-07 12:32:47 +00:00
|
|
|
<Link key={region.slug} href={`/polda/${region.slug}`} className="flex flex-col items-center text-center p-3 border rounded-lg shadow-md hover:shadow-lg transition-all">
|
|
|
|
|
<div className="mb-1 flex items-center justify-center">
|
|
|
|
|
<Image placeholder={`data:image/svg+xml;base64,${toBase64(shimmer(700, 475))}`} width={1920} height={1080} src={region.logo} alt={region.name} className="w-14 h-14 object-contain" />
|
2025-03-05 10:05:44 +00:00
|
|
|
</div>
|
2025-03-07 12:32:47 +00:00
|
|
|
<p className="text-xs font-semibold">{region.name}</p>
|
2025-03-05 10:05:44 +00:00
|
|
|
</Link>
|
|
|
|
|
))}
|
|
|
|
|
</div>
|
2025-02-24 16:36:33 +00:00
|
|
|
|
2025-03-05 10:05:44 +00:00
|
|
|
{/* {filteredList && filteredList.length > 9 && (
|
|
|
|
|
<div className="flex justify-center py-5">
|
|
|
|
|
<Button onClick={() => setSeeAllValue(!seeAllValue)} className="bg-white hover:bg-[#bb3523] text-[#bb3523] hover:text-white border-2 border-[#bb3523]">
|
|
|
|
|
{seeAllValue ? t("seeLess") : t("seeMore")}
|
|
|
|
|
</Button>
|
|
|
|
|
</div>
|
|
|
|
|
)} */}
|
2024-11-28 15:21:06 +00:00
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
2024-12-04 14:12:10 +00:00
|
|
|
export default Coverage;
|