2026-04-10 07:21:29 +00:00
|
|
|
import type { CmsPartnerContent } from "@/types/cms-landing";
|
2026-02-17 09:05:22 +00:00
|
|
|
|
2026-04-10 07:21:29 +00:00
|
|
|
const FALLBACK: { name: string; src: string }[] = [
|
2026-02-17 09:05:22 +00:00
|
|
|
{ name: "Tableau", src: "/image/tableu.png" },
|
|
|
|
|
{ name: "TVU Networks", src: "/image/tvu.png" },
|
|
|
|
|
{ name: "AWS", src: "/image/aws.png" },
|
|
|
|
|
{ name: "Dell", src: "/image/dell.png" },
|
|
|
|
|
{ name: "Zenlayer", src: "/image/zen.png" },
|
|
|
|
|
{ name: "Ui", src: "/image/uipath.png" },
|
|
|
|
|
];
|
|
|
|
|
|
2026-04-10 07:21:29 +00:00
|
|
|
export default function Technology({
|
|
|
|
|
partners,
|
|
|
|
|
}: {
|
|
|
|
|
partners?: CmsPartnerContent[] | null;
|
|
|
|
|
}) {
|
|
|
|
|
const list =
|
|
|
|
|
partners && partners.length > 0
|
|
|
|
|
? partners.map((p) => ({
|
|
|
|
|
name: p.primary_title,
|
|
|
|
|
src: p.image_url || p.image_path || "",
|
|
|
|
|
}))
|
|
|
|
|
: FALLBACK;
|
|
|
|
|
|
|
|
|
|
const loop = [...list, ...list];
|
|
|
|
|
|
2026-02-17 09:05:22 +00:00
|
|
|
return (
|
|
|
|
|
<section className="relative overflow-hidden bg-gradient-to-r from-[#faf6ee] to-[#f4efe6] py-14">
|
|
|
|
|
<div className="container mx-auto px-6">
|
2026-04-10 07:21:29 +00:00
|
|
|
<p className="mb-8 text-center text-lg font-semibold tracking-widest text-gray-500">
|
2026-02-17 09:05:22 +00:00
|
|
|
TECHNOLOGY PARTNERS
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<div className="relative w-full overflow-hidden">
|
2026-04-10 18:54:11 +00:00
|
|
|
<div className="flex w-max animate-tech-scroll gap-2">
|
2026-04-10 07:21:29 +00:00
|
|
|
{loop.map((tech, index) => (
|
2026-02-17 09:05:22 +00:00
|
|
|
<div
|
2026-04-10 07:21:29 +00:00
|
|
|
key={`${tech.name}-${index}`}
|
|
|
|
|
className="flex min-w-[140px] items-center justify-center opacity-80 transition hover:opacity-100"
|
2026-02-17 09:05:22 +00:00
|
|
|
>
|
2026-04-10 07:21:29 +00:00
|
|
|
{tech.src && /^https?:\/\//i.test(tech.src) ? (
|
|
|
|
|
// eslint-disable-next-line @next/next/no-img-element
|
|
|
|
|
<img
|
|
|
|
|
src={tech.src}
|
|
|
|
|
alt={tech.name}
|
|
|
|
|
width={120}
|
2026-04-10 18:54:11 +00:00
|
|
|
height={80}
|
|
|
|
|
className="max-h-[80px] object-contain"
|
2026-04-10 07:21:29 +00:00
|
|
|
/>
|
|
|
|
|
) : tech.src ? (
|
|
|
|
|
// eslint-disable-next-line @next/next/no-img-element
|
|
|
|
|
<img
|
|
|
|
|
src={tech.src}
|
|
|
|
|
alt={tech.name}
|
|
|
|
|
width={120}
|
|
|
|
|
height={50}
|
|
|
|
|
className="object-contain"
|
|
|
|
|
/>
|
|
|
|
|
) : (
|
|
|
|
|
<span className="text-sm text-gray-500">{tech.name}</span>
|
|
|
|
|
)}
|
2026-02-17 09:05:22 +00:00
|
|
|
</div>
|
|
|
|
|
))}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</section>
|
|
|
|
|
);
|
|
|
|
|
}
|