'use client' // React Imports import { useState } from 'react' // MUI Imports import Badge from '@mui/material/Badge' import Card from '@mui/material/Card' import Grid from '@mui/material/Grid2' import Typography from '@mui/material/Typography' import { useTheme } from '@mui/material/styles' // Third-party Components import classnames from 'classnames' import { useKeenSlider } from 'keen-slider/react' import type { KeenSliderPlugin } from 'keen-slider/react' // Components Imports import CustomAvatar from '@core/components/mui/Avatar' import AppKeenSlider from '@/libs/styles/AppKeenSlider' type DataType = { img: string title: string details: { [key: string]: string } } // Vars const data: DataType[] = [ { title: 'Traffic', img: '/images/cards/graphic-illustration-1.png', details: { Sessions: '28%', 'Page Views': '3.1k', Leads: '1.2k', Conversions: '12%' } }, { title: 'Spending', img: '/images/cards/graphic-illustration-2.png', details: { Spend: '12h', Orders: '18', Order: '127', Items: '2.3k' } }, { title: 'Revenue Sources', img: '/images/cards/graphic-illustration-3.png', details: { Direct: '268', Organic: '890', Referral: '62', Campaign: '1.2k' } } ] const Slides = () => { return ( <> {data.map((slide: DataType, index: number) => { return (
Website Analytics Total 28.5% Conversion Rate
{slide.title} {Object.keys(slide.details).map((key: string, index: number) => { return (
{slide.details[key]} {key}
) })}
) })} ) } const WebsiteAnalyticsSlider = () => { // States const [loaded, setLoaded] = useState(false) const [currentSlide, setCurrentSlide] = useState(0) // Hooks const theme = useTheme() const ResizePlugin: KeenSliderPlugin = slider => { const observer = new ResizeObserver(function () { slider.update() }) slider.on('created', () => { observer.observe(slider.container) }) slider.on('destroyed', () => { observer.unobserve(slider.container) }) } const [sliderRef, instanceRef] = useKeenSlider( { loop: true, initial: 0, rtl: theme.direction === 'rtl', slideChanged(slider) { setCurrentSlide(slider.track.details.rel) }, created() { setLoaded(true) } }, [ ResizePlugin, slider => { let mouseOver = false let timeout: number | ReturnType const clearNextTimeout = () => { clearTimeout(timeout as number) } const nextTimeout = () => { clearTimeout(timeout as number) if (mouseOver) return timeout = setTimeout(() => { slider.next() }, 2000) } slider.on('created', () => { slider.container.addEventListener('mouseover', () => { mouseOver = true clearNextTimeout() }) slider.container.addEventListener('mouseout', () => { mouseOver = false nextTimeout() }) nextTimeout() }) slider.on('dragStarted', clearNextTimeout) slider.on('animationEnded', nextTimeout) slider.on('updated', nextTimeout) } ] ) return (
{loaded && instanceRef.current && (
{[...Array(instanceRef.current.track.details.slides.length).keys()].map(idx => { return ( { instanceRef.current?.moveToIdx(idx) }} sx={{ '& .MuiBadge-dot': { width: '8px !important', height: '8px !important', backgroundColor: 'var(--mui-palette-common-white) !important', opacity: 0.4 }, '&.active .MuiBadge-dot': { opacity: 1 } }} > ) })}
)}
) } export default WebsiteAnalyticsSlider