src/pages/home/components/HomePageLanguageCard.tsx (52 lines of code) (raw):
import React, { useEffect, useState } from "react";
import useBaseUrl from "@docusaurus/useBaseUrl";
import "../css/tailwind.css";
import { imageUrls } from "../../../constants";
export default function HomePageLanguageCard() {
const [locale, setLocale] = useState("en-US");
const [processedImageUrls, setProcessedImageUrls] = useState([]);
//用useBaseUrl处理一遍图像,防止本地资源不部署
const processedImages = imageUrls.map((item) => ({
...item,
src: useBaseUrl(item.src),
}));
useEffect(() => {
if (typeof navigator !== "undefined") {
setLocale(navigator.language || "en-US");
}
setProcessedImageUrls(processedImages);
}, []);
const getLanguageUrl = (language) => {
const baseUrl = locale.startsWith("zh-CN")
? "https://fury.apache.org/zh-CN/docs/start/usage/#"
: "https://fury.apache.org/docs/start/usage/#";
return `${baseUrl}${language}`;
};
return (
<div className="text-center">
<h2 className="text-2xl font-bold mb-5">Quick Start!</h2>
<p className="text-lg mb-5">Choose a language to get started.</p>
<div className="w-3/5 mx-auto rounded-md">
<div className="grid md:grid-cols-2 sm:grid-cols-1 min-w-0 border-gray-400 rounded-md">
{processedImageUrls.map(({ key, src, label }) => (
<div
key={key}
className="flex items-center justify-center h-24 text-lg font-bold border border-gray-400 rounded-md cursor-pointer transition-transform duration-300 transform hover:scale-105 active:scale-100 hover:bg-gray-100 hover:border-gray-200"
onClick={() =>
(window.location.href = getLanguageUrl(
key === "java"
? "java-serialization"
: key === "more"
? "crosslanguage-serialization"
: key
))
}
>
<img src={src} className="w-10 h-10 mr-2" alt={`${label} logo`} />
<span>{label}</span>
</div>
))}
</div>
</div>
</div>
);
}