Files
salmakis/app/components/HeroSplit.tsx

126 lines
5.9 KiB
TypeScript

"use client";
import styles from "./HeroSplit.module.css";
import Link from "next/link";
import { heroSectionsData } from "../data/hero-sections";
export default function HeroSplit({ dict, currentLang }: { dict: any; currentLang: string }) {
const handleMouseEnter = (e: React.MouseEvent<HTMLDivElement>, videoId?: string) => {
if (videoId) {
const iframe = e.currentTarget.querySelector('iframe');
if (iframe?.contentWindow) {
iframe.contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}', '*');
}
}
};
const handleMouseLeave = (e: React.MouseEvent<HTMLDivElement>, videoId?: string) => {
if (videoId) {
const iframe = e.currentTarget.querySelector('iframe');
if (iframe?.contentWindow) {
iframe.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}', '*');
}
}
};
const mapDataToDict = heroSectionsData.map(item => {
// @ts-ignore
const translation = dict.sections[item.key] || {};
return {
...item,
title: translation.title || item.title,
subtitle: translation.subtitle || item.subtitle
}
});
return (
<section className={styles.heroContainer}>
<nav className={styles.navOverlay}>
<div className={styles.logo}>SALMAKIS</div>
<div className={styles.navLinks}>
<Link href="/tr" className={styles.langBtn} style={{ opacity: currentLang === 'tr' ? 1 : 0.5 }}>TR</Link>
<span className={styles.divider}></span>
<Link href="/en" className={styles.langBtn} style={{ opacity: currentLang === 'en' ? 1 : 0.5 }}>EN</Link>
<Link href="#contact" className={styles.contactIcon}>
<svg width="24" height="24" fill="none" stroke="currentColor" strokeWidth="2" viewBox="0 0 24 24">
<path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path>
<polyline points="22,6 12,13 2,6"></polyline>
</svg>
</Link>
</div>
</nav>
<div className={styles.splitWrapper}>
{mapDataToDict.map((section, index) => (
<div
key={index}
className={styles.splitPane}
onMouseEnter={(e) => handleMouseEnter(e, section.videoId)}
onMouseLeave={(e) => handleMouseLeave(e, section.videoId)}
>
{section.videoId ? (
<div className={styles.paneBg}>
{/* The background overlay thumbnail ensuring video loads smoothly behind */}
<div style={{ backgroundImage: `url(${section.bgUrl})`, position: 'absolute', top: 0, left: 0, width: '100%', height: '100%', backgroundSize: 'cover', backgroundPosition: 'center', zIndex: 0 }}></div>
<iframe
className={styles.videoIfrm}
src={`https://www.youtube.com/embed/${section.videoId}?autoplay=0&mute=1&controls=0&loop=1&playlist=${section.videoId}&showinfo=0&rel=0&modestbranding=1&playsinline=1&enablejsapi=1&vq=hd1080`}
allow="autoplay; encrypted-media"
frameBorder="0"
></iframe>
{/* The background overlay thumbnail ensuring YouTube UI is hidden until hover */}
<div
className={styles.videoPlaceholder}
style={{ backgroundImage: `url(${section.bgUrl})` }}
></div>
</div>
) : (
<div
className={styles.paneBg}
style={{ backgroundImage: `url(${section.bgUrl})` }}
></div>
)}
<div className={styles.overlay}></div>
<div className={styles.paneContent}>
<h2 className={styles.title}>{section.title}</h2>
<p className={styles.subtitle}>{section.subtitle}</p>
<a href={section.link} target={section.link.startsWith('#') ? '_self' : '_blank'} rel="noreferrer" className={styles.exploreBtn}>
{dict.nav.discover}
</a>
<div className={styles.socialsWrapper}>
{section.socials.instagram && (
<a href={section.socials.instagram} target="_blank" rel="noreferrer" className={styles.socialLink}>
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<rect x="2" y="2" width="20" height="20" rx="5" ry="5"></rect>
<path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"></path>
<line x1="17.5" y1="6.5" x2="17.51" y2="6.5"></line>
</svg>
</a>
)}
{section.socials.twitter && (
<a href={section.socials.twitter} target="_blank" rel="noreferrer" className={styles.socialLink}>
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<path d="M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z"></path>
</svg>
</a>
)}
{section.socials.facebook && (
<a href={section.socials.facebook} target="_blank" rel="noreferrer" className={styles.socialLink}>
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"></path>
</svg>
</a>
)}
</div>
</div>
</div>
))}
</div>
</section>
);
}