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-05-19 01:24:48 +00:00
|
|
|
{
|
|
|
|
|
name: "Polda Metro Jaya",
|
|
|
|
|
slug: "metro-jaya",
|
|
|
|
|
logo: "/logo/polda/polda-metro.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Jawa Barat",
|
|
|
|
|
slug: "jawa-barat",
|
|
|
|
|
logo: "/logo/polda/polda-jawabarat.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Banten",
|
|
|
|
|
slug: "banten",
|
|
|
|
|
logo: "/logo/polda/polda-banten.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Jawa Tengah",
|
|
|
|
|
slug: "jawa-tengah",
|
|
|
|
|
logo: "/logo/polda/polda-jawatengah.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda D.I Yogyakarta",
|
|
|
|
|
slug: "di-yogyakarta",
|
|
|
|
|
logo: "/logo/polda/polda-jogja.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Jawa Timur",
|
|
|
|
|
slug: "jawa-timur",
|
|
|
|
|
logo: "/logo/polda/polda-jawatimur.png",
|
|
|
|
|
},
|
2025-03-10 13:15:02 +00:00
|
|
|
{ name: "Polda Aceh", slug: "aceh", logo: "/logo/polda/polda-aceh.png" },
|
2025-05-19 01:24:48 +00:00
|
|
|
{
|
|
|
|
|
name: "Polda Sumatera Utara",
|
|
|
|
|
slug: "sumatera-utara",
|
|
|
|
|
logo: "/logo/polda/polda-sumut.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Sumatera Barat",
|
|
|
|
|
slug: "sumatera-barat",
|
|
|
|
|
logo: "/logo/polda/polda-sumatera-barat.png",
|
|
|
|
|
},
|
2025-03-10 13:15:02 +00:00
|
|
|
{ name: "Polda Riau", slug: "riau", logo: "/logo/polda/polda-riau.png" },
|
2025-05-19 01:24:48 +00:00
|
|
|
{
|
|
|
|
|
name: "Polda Kep. Riau",
|
|
|
|
|
slug: "kepulauan-riau",
|
|
|
|
|
logo: "/logo/polda/polda-kepri.png",
|
|
|
|
|
},
|
2025-03-10 13:15:02 +00:00
|
|
|
{ name: "Polda Jambi", slug: "jambi", logo: "/logo/polda/polda-jambi.png" },
|
2025-05-19 01:24:48 +00:00
|
|
|
{
|
|
|
|
|
name: "Polda Sumatera Selatan",
|
|
|
|
|
slug: "sumatera-selatan",
|
|
|
|
|
logo: "/logo/polda/polda-sumsel.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Kep. Bangka Belitung",
|
|
|
|
|
slug: "bangka-belitung",
|
|
|
|
|
logo: "/logo/polda/polda-bangkabelitung.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Bengkulu",
|
|
|
|
|
slug: "bengkulu",
|
|
|
|
|
logo: "/logo/polda/polda-bengkulu.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Lampung",
|
|
|
|
|
slug: "lampung",
|
|
|
|
|
logo: "/logo/polda/polda-lampung.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Nusa Tenggara Barat",
|
|
|
|
|
slug: "ntb",
|
|
|
|
|
logo: "/logo/polda/polda-ntb.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Nusa Tenggara Timur",
|
|
|
|
|
slug: "ntt",
|
|
|
|
|
logo: "/logo/polda/polda-ntt.png",
|
|
|
|
|
},
|
2025-03-10 13:15:02 +00:00
|
|
|
{ name: "Polda Bali", slug: "bali", logo: "/logo/polda/polda-bali.png" },
|
2025-05-19 01:24:48 +00:00
|
|
|
{
|
|
|
|
|
name: "Polda Kalimantan Barat",
|
|
|
|
|
slug: "kalimantan-barat",
|
|
|
|
|
logo: "/logo/polda/polda-kalbar.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Kalimantan Tengah",
|
|
|
|
|
slug: "kalimantan-tengah",
|
|
|
|
|
logo: "/logo/polda/polda-kalteng.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Kalimantan Selatan",
|
|
|
|
|
slug: "kalimantan-selatan",
|
|
|
|
|
logo: "/logo/polda/polda-kalsel.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Kalimantan Timur",
|
|
|
|
|
slug: "kalimantan-timur",
|
|
|
|
|
logo: "/logo/polda/polda-kaltim.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Kalimantan Utara",
|
|
|
|
|
slug: "kaltara",
|
|
|
|
|
logo: "/logo/polda/polda-kaltara.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Sulawesi Tengah",
|
|
|
|
|
slug: "sulawesi-tengah",
|
|
|
|
|
logo: "/logo/polda/polda-sulawesi-tengah.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Sulawesi Utara",
|
|
|
|
|
slug: "sulawesi-utara",
|
|
|
|
|
logo: "/logo/polda/polda-sulawesi-utara.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Gorontalo",
|
|
|
|
|
slug: "gorontalo",
|
|
|
|
|
logo: "/logo/polda/polda-gorontalo.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Sulawesi Barat",
|
|
|
|
|
slug: "sulawesi-barat",
|
|
|
|
|
logo: "/logo/polda/polda-sulbar.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Sulawesi Selatan",
|
|
|
|
|
slug: "sulawesi-selatan",
|
|
|
|
|
logo: "/logo/polda/polda-sulsel.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Sulawesi Tenggara",
|
|
|
|
|
slug: "sulawesi-tenggara",
|
|
|
|
|
logo: "/logo/polda/polda-sulawesi-tenggara.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Maluku Utara",
|
|
|
|
|
slug: "maluku-utara",
|
|
|
|
|
logo: "/logo/polda/polda-maluku-utara.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Maluku",
|
|
|
|
|
slug: "maluku",
|
|
|
|
|
logo: "/logo/polda/polda-maluku.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Polda Papua Barat",
|
|
|
|
|
slug: "papua-barat",
|
|
|
|
|
logo: "/logo/polda/polda-papua-barat.png",
|
|
|
|
|
},
|
2025-03-10 13:15:02 +00:00
|
|
|
{ name: "Polda Papua", slug: "papua", logo: "/logo/polda/polda-papua.png" },
|
2025-05-19 01:24:48 +00:00
|
|
|
{
|
|
|
|
|
name: "Satuan Kerja POLRI",
|
|
|
|
|
slug: "satker-polri",
|
|
|
|
|
logo: "/logo/satker/SATUAN-KERJA-POLRI.png",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "Internasional",
|
|
|
|
|
slug: "internasional",
|
|
|
|
|
logo: "/assets/polda/internasional.png",
|
|
|
|
|
},
|
2025-01-04 03:44:57 +00:00
|
|
|
];
|
|
|
|
|
|
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("");
|
2025-05-19 01:24:48 +00:00
|
|
|
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-05-19 01:24:48 +00:00
|
|
|
const filtered = regions.filter((polda) =>
|
|
|
|
|
polda.name.toLowerCase().includes(value)
|
|
|
|
|
);
|
2025-01-04 03:44:57 +00:00
|
|
|
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>`;
|
|
|
|
|
|
2025-05-19 01:24:48 +00:00
|
|
|
const toBase64 = (str: string) =>
|
|
|
|
|
typeof window === "undefined"
|
|
|
|
|
? Buffer.from(str).toString("base64")
|
|
|
|
|
: window.btoa(str);
|
2025-03-07 12:32:47 +00:00
|
|
|
|
2024-11-28 15:21:06 +00:00
|
|
|
return (
|
2025-03-07 12:32:47 +00:00
|
|
|
<div className="w-full">
|
2025-05-19 01:24:48 +00:00
|
|
|
<div className="max-h-[60vh] overflow-y-auto px-4">
|
|
|
|
|
<div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6 gap-6 px-4 max-h-[60vh]">
|
|
|
|
|
{filteredList?.map((region: any) => (
|
|
|
|
|
<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"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<p className="text-xs font-semibold">{region.name}</p>
|
|
|
|
|
</Link>
|
|
|
|
|
))}
|
2025-03-05 10:05:44 +00:00
|
|
|
</div>
|
2025-05-19 01:24:48 +00:00
|
|
|
</div>
|
2024-11-28 15:21:06 +00:00
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
2024-12-04 14:12:10 +00:00
|
|
|
export default Coverage;
|