import dynamic from 'next/dynamic'; import Image from 'next/image'; import { useRouter } from 'next/router'; import { useEffect, useState, useRef } from 'react'; import { useProductContext } from '@/contexts/ProductContext'; import odooApi from '@/core/api/odooApi'; import whatsappUrl from '@/core/utils/whatsappUrl'; import Navbar from '../elements/Navbar/Navbar'; import styles from './BasicLayout.module.css'; // Import modul CSS import useDevice from '@/core/hooks/useDevice'; const AnimationLayout = dynamic(() => import('./AnimationLayout'), { ssr: false, }); const BasicFooter = dynamic(() => import('../elements/Footer/BasicFooter'), { ssr: false, }); const BasicLayout = ({ children }) => { const [templateWA, setTemplateWA] = useState(null); const [payloadWA, setPayloadWa] = useState(null); const [urlPath, setUrlPath] = useState(null); const [highlight, setHighlight] = useState(false); const [buttonPosition, setButtonPosition] = useState(null); const [wobble, setWobble] = useState(false); const [isProductPage, setIsProductPage] = useState(false); const { isDesktop, isMobile } = useDevice(); const router = useRouter(); const buttonRef = useRef(null); const { product } = useProductContext(); const hasPrice = product && Number(product?.lowest_price?.price || product?.price?.price) > 0; useEffect(() => { if ( router.pathname === '/shop/product/[slug]' || router.pathname === '/shop/product/variant/[slug]' ) { setPayloadWa({ name: product?.name, manufacture: product?.manufacture.name, url: process.env.NEXT_PUBLIC_SELF_HOST + router.asPath, }); setTemplateWA('product'); setUrlPath(router.asPath); } if (router.pathname.includes('/shop/product/')) { setIsProductPage(true); } }, [product, router]); useEffect(() => { const handleMouseOut = (event) => { if (!buttonRef.current) return; const rect = buttonRef.current.getBoundingClientRect(); if (event.clientY <= 0) { setButtonPosition(rect); setHighlight(true); } else { setHighlight(false); } }; window.addEventListener('mouseout', handleMouseOut); return () => { window.removeEventListener('mouseout', handleMouseOut); }; }, []); useEffect(() => { if (highlight) { // Set wobble animation after overlay highlight animation completes const timer = setTimeout(() => setWobble(true), 1000); // Adjust timing if needed return () => clearTimeout(timer); } }, [highlight]); const recordActivity = async (pathname) => { const ONLY_ON_PATH = false; const recordedPath = []; if (ONLY_ON_PATH && !recordedPath.includes(pathname)) return; const ip = await odooApi('GET', '/api/ip-address'); const data = new URLSearchParams({ page_title: document.title, url: window.location.href, ip, }); fetch(`/api/user-activity?${data.toString()}`); }; useEffect(() => { recordActivity(router.pathname); }, [router.pathname]); return ( <> {highlight && buttonPosition && (