import React from 'react'; import {JahiaCtx} from '@jahia/nextjs-sdk'; // Import 'animate.css/animate.css'; // import 'animate.css'; import {AnimatePropsType} from './types'; import {Waypoint} from 'react-waypoint'; export const Animate = ({properties, component, offset, children, className, ...props} : AnimatePropsType) => { const {isEditMode} = React.useContext(JahiaCtx); const cmp = React.useRef(null); const Component = component || 'div'; const style = isEditMode ? {} : {opacity: 0}; // Console.log("[Animate] properties: ",properties); // console.log("[Animate] props: ",props); if (!(properties && properties['j:animation'])) { return ({children}); } const handleWaypointEnter = () => { // Console.log("[handleWaypointEnter] start"); const potentialElement:HTMLElement | null = cmp.current; // Console.log("[handleWaypointEnter] potentialElement: ",potentialElement); if (potentialElement) { const element : HTMLElement = potentialElement; if (!element.className.includes('animate__animated')) { const run = () => { element.style.setProperty('opacity', '1'); element.classList.add(`animate__${properties['j:animation']}`, 'animate__animated'); }; if (properties['j:animationDuration']) { element.style.setProperty('--animate-duration', `${properties['j:animationDuration']}s`); } if (properties['j:animationIterationCount']) { element.style.setProperty('animation-iteration-count', properties['j:animationIterationCount']); } const delay = Number.parseFloat(properties['j:animationDelay'] as string); if (delay && delay > 0) { if (properties['j:animationDelayUsage'] === 'delayBeforeDisplay') { setTimeout(run, delay * 1000); return; } if (properties['j:animationDelayUsage'] === 'delayBeforeAnimation') { element.style.setProperty('animation-delay', `${properties['j:animationDelay']}s`); } } run(); } } }; // return ( <> handleWaypointEnter()}/> {children} ); };