react-garden
Version:
React + TypeScript + ThreeJS app using Material UI on NextJS, Apollo Client, GraphQL + WordPress REST APIs, for ThreeD web development.. a part of the threed.ai code family.
168 lines (154 loc) • 4.13 kB
JavaScript
// ** React Imports
import { forwardRef, useState } from 'react'
// ** MUI Imports
import Card from '@mui/material/Card'
import TextField from '@mui/material/TextField'
import CardHeader from '@mui/material/CardHeader'
import CardContent from '@mui/material/CardContent'
import InputAdornment from '@mui/material/InputAdornment'
// ** Third Party Imports
import format from 'date-fns/format'
import DatePicker from 'react-datepicker'
// ** Icons Imports
import BellOutline from 'mdi-material-ui/BellOutline'
import ChevronDown from 'mdi-material-ui/ChevronDown'
// ** Component Import
import ReactApexcharts from '~/@core/components/react-apexcharts'
const areaColors = {
series1: '#ab7efd',
series2: '#b992fe',
series3: '#e0cffe'
}
const ApexAreaChart = () => {
// ** States
const [endDate, setEndDate] = useState(null)
const [startDate, setStartDate] = useState(new Date())
const options = {
chart: {
parentHeightOffset: 0,
toolbar: {
show: false
}
},
dataLabels: {
enabled: false
},
stroke: {
show: false,
curve: 'straight'
},
legend: {
position: 'top',
horizontalAlign: 'left'
},
grid: {
show: true,
xaxis: {
lines: {
show: true
}
}
},
colors: [areaColors.series3, areaColors.series2, areaColors.series1],
xaxis: {
categories: [
'7/12',
'8/12',
'9/12',
'10/12',
'11/12',
'12/12',
'13/12',
'14/12',
'15/12',
'16/12',
'17/12',
'18/12',
'19/12'
]
},
fill: {
opacity: 1,
type: 'solid'
},
tooltip: {
shared: false
}
}
const series = [
{
name: 'Visits',
data: [100, 120, 90, 170, 130, 160, 140, 240, 220, 180, 270, 280, 375]
},
{
name: 'Clicks',
data: [60, 80, 70, 110, 80, 100, 90, 180, 160, 140, 200, 220, 275]
},
{
name: 'Sales',
data: [20, 40, 30, 70, 40, 60, 50, 140, 120, 100, 140, 180, 220]
}
]
const CustomInput = forwardRef((props, ref) => {
const startDate = format(props.start, 'MM/dd/yyyy')
const endDate = props.end !== null ? ` - ${format(props.end, 'MM/dd/yyyy')}` : null
const value = `${startDate}${endDate !== null ? endDate : ''}`
return (
<TextField
{...props}
size='small'
value={value}
inputRef={ref}
InputProps={{
startAdornment: (
<InputAdornment position='start'>
<BellOutline />
</InputAdornment>
),
endAdornment: (
<InputAdornment position='end'>
<ChevronDown />
</InputAdornment>
)
}}
/>
)
})
const handleOnChange = dates => {
const [start, end] = dates
setStartDate(start)
setEndDate(end)
}
return (
<Card>
<CardHeader
title='Line Chart'
subheader='Commercial networks'
titleTypographyProps={{ variant: 'h6' }}
subheaderTypographyProps={{ variant: 'caption', sx: { color: 'text.disabled' } }}
sx={{
flexDirection: ['column', 'row'],
alignItems: ['flex-start', 'center'],
'& .MuiCardHeader-action': { mb: 0 },
'& .MuiCardHeader-content': { mb: [2, 0] }
}}
action={
<DatePicker
selectsRange
endDate={endDate}
id='apexchart-area'
selected={startDate}
startDate={startDate}
onChange={handleOnChange}
placeholderText='Click to select a date'
customInput={<CustomInput start={startDate} end={endDate} />}
/>
}
/>
<CardContent>
<ReactApexcharts options={options} series={series} type='area' height={400} />
</CardContent>
</Card>
)
}
export default ApexAreaChart