2025-01-22 17:37:56 +08:00
|
|
|
"use client";
|
|
|
|
import Link from "next/link";
|
2025-01-23 16:46:23 +08:00
|
|
|
import { LinkType } from "../_lib/data/linkType";
|
|
|
|
import { Link as _Link } from "../_lib/data/link";
|
|
|
|
import { useMemo } from "react";
|
|
|
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
|
|
import { faClock, faFire, faTimeline, faTimesCircle, faTimesRectangle, faVolumeTimes } from "@fortawesome/free-solid-svg-icons";
|
2025-01-22 17:37:56 +08:00
|
|
|
|
2025-01-23 16:46:23 +08:00
|
|
|
export default function LinkListBox({ linkTypeList, linkList, showHot, showRecent }: { linkTypeList: LinkType[]; linkList: _Link[]; showHot: boolean; showRecent: boolean }) {
|
|
|
|
const hotList = useMemo(() => linkList.filter((val, index) => val.isHot && index < 12), [])
|
|
|
|
const recentList = useMemo(() => linkList.map(val => val).sort((a, b) => b.addTime - a.addTime).filter((_, idx) => idx < 12), [])
|
2025-01-23 11:31:05 +08:00
|
|
|
return <div className="flex w-full flex-col gap-y-4">
|
2025-01-23 16:46:23 +08:00
|
|
|
{
|
|
|
|
showHot && <div className="flex flex-col gap-y-2" >
|
|
|
|
<div className="flex items-center text-[#555555] gap-x-2 text-xl">
|
|
|
|
<FontAwesomeIcon icon={faFire} className="text-red-500"></FontAwesomeIcon>
|
|
|
|
<span className="text-white bg-red-500/90 rounded-2xl px-3 text-[14px] font-bold">热门网站</span>
|
|
|
|
</div>
|
|
|
|
<div className=" grid grid-cols-3 lg:grid-cols-6 gap-4 ">
|
|
|
|
{
|
|
|
|
hotList.map(val => (
|
|
|
|
<Link key={val._id} className="flex gap-x-2 bg-white rounded-lg py-4 pl-2 cursor-pointer duration-150 hover:-translate-y-1 shadow-sm"
|
|
|
|
href={val.link || ''} target="_blank">
|
|
|
|
<img src={val.logoLink} className="w-[40px] h-[40px]"></img>
|
|
|
|
<div className="flex-1 w-0 flex flex-col justify-between">
|
|
|
|
<span className=" font-bold text-ellipsis overflow-hidden whitespace-nowrap">{val.name}</span>
|
|
|
|
<span className=" text-ellipsis overflow-hidden whitespace-nowrap text-[#666] text-xs" title={val.description}>{val.description}</span>
|
|
|
|
</div>
|
|
|
|
</Link>
|
|
|
|
))
|
|
|
|
}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
}
|
|
|
|
{
|
|
|
|
showRecent && <div className="flex flex-col gap-y-2" >
|
|
|
|
<div className="flex items-center text-[#555555] gap-x-2 text-xl">
|
|
|
|
<FontAwesomeIcon icon={faClock} className="text-blue-500"></FontAwesomeIcon>
|
|
|
|
<span className="text-white bg-blue-500/90 rounded-2xl px-3 text-[14px] font-bold">最新收录</span>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div className=" grid grid-cols-3 lg:grid-cols-6 gap-4 ">
|
|
|
|
{
|
|
|
|
recentList.map(val => (
|
|
|
|
<Link key={val._id} className="flex gap-x-2 bg-white rounded-lg py-4 pl-2 cursor-pointer duration-150 hover:-translate-y-1 shadow-sm"
|
|
|
|
href={val.link || ''} target="_blank">
|
|
|
|
<img src={val.logoLink} className="w-[40px] h-[40px]"></img>
|
|
|
|
<div className="flex-1 w-0 flex flex-col justify-between">
|
|
|
|
<span className=" font-bold text-ellipsis overflow-hidden whitespace-nowrap">{val.name}</span>
|
|
|
|
<span className=" text-ellipsis overflow-hidden whitespace-nowrap text-[#666] text-xs" title={val.description}>{val.description}</span>
|
|
|
|
</div>
|
|
|
|
</Link>
|
|
|
|
))
|
|
|
|
}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
}
|
2025-01-22 17:37:56 +08:00
|
|
|
{
|
|
|
|
linkTypeList.map(item => (
|
|
|
|
<div className="flex flex-col gap-y-2" key={item._id}>
|
2025-01-23 16:46:23 +08:00
|
|
|
<div className="flex items-center text-[#555555] gap-x-2 text-xl">
|
2025-01-22 17:37:56 +08:00
|
|
|
<img src={item.icon as string} className="w-[30px] h-[30px] object-cover"></img>
|
|
|
|
|
|
|
|
<span>{item.label}</span>
|
|
|
|
</div>
|
|
|
|
<div className=" grid grid-cols-3 lg:grid-cols-6 gap-4 ">
|
|
|
|
{
|
|
|
|
linkList.filter(val => val.type === item._id).map(val => (
|
|
|
|
<Link key={val._id} className="flex gap-x-2 bg-white rounded-lg py-4 pl-2 cursor-pointer duration-150 hover:-translate-y-1 shadow-sm"
|
2025-01-23 11:31:05 +08:00
|
|
|
href={val.link || ''} target="_blank">
|
2025-01-22 17:37:56 +08:00
|
|
|
<img src={val.logoLink} className="w-[40px] h-[40px]"></img>
|
|
|
|
<div className="flex-1 w-0 flex flex-col justify-between">
|
|
|
|
<span className=" font-bold text-ellipsis overflow-hidden whitespace-nowrap">{val.name}</span>
|
2025-01-23 11:31:05 +08:00
|
|
|
<span className=" text-ellipsis overflow-hidden whitespace-nowrap text-[#666] text-xs" title={val.description}>{val.description}</span>
|
2025-01-22 17:37:56 +08:00
|
|
|
</div>
|
|
|
|
</Link>
|
|
|
|
))
|
|
|
|
}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
))
|
|
|
|
}
|
|
|
|
</div>
|
|
|
|
}
|