'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