"use client"; import { Icon } from "@iconify/react"; import Link from "next/link"; import { useMemo, useState } from "react"; import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Input, Typography, } from "poyraz-ui/atoms"; import { Tabs, TabsList, TabsTrigger } from "poyraz-ui/molecules"; import { LINK_DIRECTORY, LINK_DIRECTORY_CATEGORIES, type LinkDirectoryCategory, } from "@/lib/links"; type CategoryFilter = "all" | LinkDirectoryCategory; const FILTER_ITEMS: ReadonlyArray<{ id: CategoryFilter; label: string }> = [ { id: "all", label: "Tümü" }, ...LINK_DIRECTORY_CATEGORIES, ]; function normalize(value: string) { return value .toLocaleLowerCase("tr-TR") .normalize("NFD") .replace(/[\u0300-\u036f]/g, ""); } function getCategoryLabel(category: LinkDirectoryCategory) { return LINK_DIRECTORY_CATEGORIES.find((item) => item.id === category)?.label ?? "Kategori"; } export function LinksContent() { const [activeCategory, setActiveCategory] = useState("all"); const [query, setQuery] = useState(""); const [copiedId, setCopiedId] = useState(null); const filteredLinks = useMemo(() => { const normalizedQuery = normalize(query.trim()); const queryTokens = normalizedQuery.split(/\s+/).filter(Boolean); return LINK_DIRECTORY.filter((item) => { const categoryMatch = activeCategory === "all" || item.category === activeCategory; if (!categoryMatch) return false; if (queryTokens.length === 0) return true; const haystack = normalize([ item.label, item.href, ...item.keywords, getCategoryLabel(item.category), ].join(" ")); return queryTokens.every((token) => haystack.includes(token)); }); }, [activeCategory, query]); const handleCopy = async (id: string, href: string) => { try { await navigator.clipboard.writeText(href); setCopiedId(id); setTimeout(() => { setCopiedId((current) => (current === id ? null : current)); }, 1400); } catch { setCopiedId(null); } }; return (
Link Merkezi Tüm sosyal medya, sayfa ve kaynak linklerini tek yerden ara, filtrele ve yönet.
setQuery(event.target.value)} placeholder="Linklerde ara... (örn: github, medium, /blog)" aria-label="Linklerde arama" /> {filteredLinks.length} / {LINK_DIRECTORY.length} sonuç
setActiveCategory(value as CategoryFilter)} > {FILTER_ITEMS.map((item) => ( {item.label} ))}
{filteredLinks.length === 0 ? ( Arama kriterine uygun link bulunamadı. ) : (
{filteredLinks.map((item) => (
{item.label} {item.href}
{getCategoryLabel(item.category)}
))}
)}
); }