import type { SearchResult } from "@/routes/search";
interface SearchResultsProps {
results: SearchResult;
}
const formatDateTime = (date: Date): string => {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, "0"); // 月份从0开始,补0
const day = String(date.getDate()).padStart(2, "0");
const hour = String(date.getHours()).padStart(2, "0");
const minute = String(date.getMinutes()).padStart(2, "0");
const second = String(date.getSeconds()).padStart(2, "0");
return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
};
export function SearchResults({ results }: SearchResultsProps) {
if (!results || results.length === 0) {
return (
);
}
return (
{results.map((result, index) => (
{result.type === "song" ? : }
))}
);
}
function SongResult({ result }: { result: Exclude[number] }) {
if (result.type !== "song") return null;
const { data } = result;
return (
{data.image && (

)}
{data.name}
{data.producer &&
{data.producer}
}
{data.duration && (
{Math.floor(data.duration / 60)}:{(data.duration % 60).toString().padStart(2, "0")}
)}
{data.publishedAt && {formatDateTime(new Date(data.publishedAt))}}
);
}
function BiliVideoResult({ result }: { result: Exclude[number] }) {
if (result.type !== "bili-video") return null;
const { data } = result;
return (
{data.coverUrl && (

)}
{data.title}
{data.description && (
{data.description}
)}
{data.duration && (
{Math.floor(data.duration / 60)}:{(data.duration % 60).toString().padStart(2, "0")}
)}
{data.publishedAt && {formatDateTime(new Date(data.publishedAt))}}
{data.bvid && {data.bvid}}
{data.views && {data.views.toLocaleString()} 播放}
);
}