Last sync of dashboard systems
This commit is contained in:
@@ -1,275 +1,278 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import Switch from '@mui/material/Switch';
|
||||
import { Typography, Button } from '@mui/material';
|
||||
import { useNavigate, Link, useParams } from "react-router-dom";
|
||||
import { Bar } from 'react-chartjs-2';
|
||||
import Grid from '@mui/material/Grid';
|
||||
import SearchIcon from '@mui/icons-material/Search';
|
||||
import NewReleasesIcon from '@mui/icons-material/NewReleases';
|
||||
import MailOutlineIcon from '@mui/icons-material/MailOutline';
|
||||
// import React, { useEffect, useState } from 'react';
|
||||
// import Switch from '@mui/material/Switch';
|
||||
// import { Typography, Button } from '@mui/material';
|
||||
// import { useNavigate, Link, useParams } from "react-router-dom";
|
||||
// import { Bar } from 'react-chartjs-2';
|
||||
// import Grid from '@mui/material/Grid';
|
||||
// import SearchIcon from '@mui/icons-material/Search';
|
||||
// import NewReleasesIcon from '@mui/icons-material/NewReleases';
|
||||
// import MailOutlineIcon from '@mui/icons-material/MailOutline';
|
||||
|
||||
const AnalyticsTab = (props) => {
|
||||
const { userdata, globalUrl, serverside } = props;
|
||||
const [checked, setChecked] = useState(false);
|
||||
const [selectedOption, setSelectedOption] = useState('all');
|
||||
const [expand, setExpand] = useState(false)
|
||||
const isCloud = (window.location.host === "localhost:3002" || window.location.host === "shuffler.io") ? true : (process.env.IS_SSR === "true");
|
||||
|
||||
console.log("if you need this, work without react-rechartjs-2")
|
||||
|
||||
// const [checked, setChecked] = useState(false);
|
||||
// const [selectedOption, setSelectedOption] = useState('all');
|
||||
// const [expand, setExpand] = useState(false)
|
||||
// const isCloud = (window.location.host === "localhost:3002" || window.location.host === "shuffler.io") ? true : (process.env.IS_SSR === "true");
|
||||
|
||||
const handleOptionChange = (option) => {
|
||||
setSelectedOption(option);
|
||||
// You can perform actions based on the selected option, such as filtering data
|
||||
};
|
||||
// const handleOptionChange = (option) => {
|
||||
// setSelectedOption(option);
|
||||
// // You can perform actions based on the selected option, such as filtering data
|
||||
// };
|
||||
|
||||
const handleChange = (event) => {
|
||||
setChecked(event.target.checked);
|
||||
};
|
||||
// const handleChange = (event) => {
|
||||
// setChecked(event.target.checked);
|
||||
// };
|
||||
|
||||
const allData = {
|
||||
labels: ['Email analysis', 'Email Management', 'EDR to Ticket', 'Ticket Analysis'],
|
||||
datasets: [
|
||||
{
|
||||
label: 'Revisions',
|
||||
data: [12, 19, 3, 5], // Data for revisions
|
||||
backgroundColor: '#FF8444',
|
||||
borderWidth: 1,
|
||||
// borderRadius: 60,
|
||||
barPercentage: 0.7,
|
||||
categoryPercentage: 0.5,
|
||||
},
|
||||
{
|
||||
label: 'Runs',
|
||||
data: [8, 15, 5, 8], // Data for runs
|
||||
backgroundColor: '#9747FF',
|
||||
borderWidth: 1,
|
||||
// borderRadius: 60,
|
||||
barPercentage: 0.7,
|
||||
categoryPercentage: 0.5
|
||||
}
|
||||
]
|
||||
};
|
||||
// const allData = {
|
||||
// labels: ['Email analysis', 'Email Management', 'EDR to Ticket', 'Ticket Analysis'],
|
||||
// datasets: [
|
||||
// {
|
||||
// label: 'Revisions',
|
||||
// data: [12, 19, 3, 5], // Data for revisions
|
||||
// backgroundColor: '#FF8444',
|
||||
// borderWidth: 1,
|
||||
// // borderRadius: 60,
|
||||
// barPercentage: 0.7,
|
||||
// categoryPercentage: 0.5,
|
||||
// },
|
||||
// {
|
||||
// label: 'Runs',
|
||||
// data: [8, 15, 5, 8], // Data for runs
|
||||
// backgroundColor: '#9747FF',
|
||||
// borderWidth: 1,
|
||||
// // borderRadius: 60,
|
||||
// barPercentage: 0.7,
|
||||
// categoryPercentage: 0.5
|
||||
// }
|
||||
// ]
|
||||
// };
|
||||
|
||||
let data;
|
||||
if (selectedOption === 'all') {
|
||||
data = allData;
|
||||
} else if (selectedOption === 'revisions') {
|
||||
data = {
|
||||
labels: allData.labels,
|
||||
datasets: [allData.datasets[0]] // Show only revisions data
|
||||
};
|
||||
} else if (selectedOption === 'run') {
|
||||
data = {
|
||||
labels: allData.labels,
|
||||
datasets: [allData.datasets[1]] // Show only runs data
|
||||
};
|
||||
}
|
||||
// let data;
|
||||
// if (selectedOption === 'all') {
|
||||
// data = allData;
|
||||
// } else if (selectedOption === 'revisions') {
|
||||
// data = {
|
||||
// labels: allData.labels,
|
||||
// datasets: [allData.datasets[0]] // Show only revisions data
|
||||
// };
|
||||
// } else if (selectedOption === 'run') {
|
||||
// data = {
|
||||
// labels: allData.labels,
|
||||
// datasets: [allData.datasets[1]] // Show only runs data
|
||||
// };
|
||||
// }
|
||||
|
||||
// Options for the chart
|
||||
const options = {
|
||||
scales: {
|
||||
yAxes: [
|
||||
{
|
||||
ticks: {
|
||||
beginAtZero: true
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
};
|
||||
return (
|
||||
<div style={{ width: 1030, marginLeft: 20, marginTop:10, paddingRight: 17, paddingLeft: 17}}>
|
||||
<div style={{ width: 985, display: 'flex', alignItems: 'start', paddingTop: 16, paddingBottom: '48px', fontSize: '16px', color: '#ffffff', backgroundColor: '#1A1A1A', borderRadius: '16px', }}>
|
||||
<div style={{ marginLeft: 18 }}>Timeline</div>
|
||||
</div>
|
||||
<div style={{ display: "flex", width: "100%", marginTop: 16 }}>
|
||||
<div>
|
||||
<div style={{ width: 595, alignItems: 'start', paddingTop: 16, paddingBottom: checked ? 28 : 20, marginRight: 20, fontSize: '16px', color: '#ffffff', backgroundColor: '#1A1A1A', borderRadius: '16px', }}>
|
||||
<div style={{ display: "flex", alignItems: "center" }}>
|
||||
<div style={{ marginLeft: 18, marginRight: 310 }}>Apps</div>
|
||||
<Switch checked={checked}
|
||||
onChange={handleChange} /> Category
|
||||
<div style={{ marginLeft: 16, borderLeft: "1px solid #D9D9D9", width: 10, height: 15 }} />
|
||||
<Link onClick={() => { setExpand(prevExpand => !prevExpand); }} style={{ color: "#FF8444" }}>Expand</Link>
|
||||
</div>
|
||||
{expand ? null :
|
||||
<div style={{ marginTop: 8, display: "flex" }}>
|
||||
<div style={{ marginLeft: 19, }}>
|
||||
<Typography style={{ fontSize: 13, color: "#9E9E9E", textAlign: "start" }}>Onboarding</Typography>
|
||||
<Grid container spacing={2} style={{ marginTop: 1 }} >
|
||||
<Grid item xs={4}>
|
||||
<div style={{ position: 'relative' }}>
|
||||
<img src="/images/adminpage/app1.svg" style={{ margin: 'auto' }} />
|
||||
{checked ?
|
||||
<div style={{
|
||||
position: 'absolute',
|
||||
bottom: 0,
|
||||
left: '50%',
|
||||
top: 30,
|
||||
transform: 'translateX(-50%)',
|
||||
backgroundColor: '#2f2f2f',
|
||||
borderRadius: '50%',
|
||||
height: 24,
|
||||
width: 24,
|
||||
transition: 'transform 0.5s ease',
|
||||
}}><SearchIcon style={{ width: 16, height: 16, marginTop: 5 }} /></div> :
|
||||
null
|
||||
}
|
||||
</div>
|
||||
</Grid>
|
||||
<Grid item xs={4}>
|
||||
<div style={{ position: 'relative' }}>
|
||||
<img src="/images/adminpage/app1.svg" style={{ margin: 'auto' }} />
|
||||
{checked ?
|
||||
<div style={{
|
||||
position: 'absolute',
|
||||
bottom: 0,
|
||||
left: '50%',
|
||||
top: 30,
|
||||
transform: 'translateX(-50%)',
|
||||
backgroundColor: '#2f2f2f',
|
||||
borderRadius: '50%',
|
||||
height: 24,
|
||||
width: 24,
|
||||
transition: 'transform 0.5s ease',
|
||||
}}><MailOutlineIcon style={{ width: 16, height: 16, marginTop: 5 }} /></div> :
|
||||
null
|
||||
}
|
||||
</div>
|
||||
</Grid>
|
||||
<Grid item xs={4}>
|
||||
<div style={{ position: 'relative' }}>
|
||||
<img src="/images/adminpage/app1.svg" style={{ margin: 'auto' }} />
|
||||
{checked ?
|
||||
<div style={{
|
||||
position: 'absolute',
|
||||
bottom: 0,
|
||||
left: '50%',
|
||||
top: 30,
|
||||
transform: 'translateX(-50%)',
|
||||
backgroundColor: '#2f2f2f',
|
||||
borderRadius: '50%',
|
||||
height: 24,
|
||||
width: 24,
|
||||
transition: 'transform 0.5s ease',
|
||||
}}><NewReleasesIcon style={{ width: 16, height: 16, marginTop: 5 }} /></div> :
|
||||
null
|
||||
}
|
||||
</div>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</div>
|
||||
<div style={{ borderLeft: "1px solid #494949", justifyContent: "center", alignItems: "center", marginTop: 40, marginLeft: 20, marginRight: 20, height: 40 }}></div>
|
||||
<div style={{}}>
|
||||
<Typography style={{ fontSize: 13, color: "#9E9E9E", textAlign: "start" }}>Other</Typography>
|
||||
<Grid container spacing={2} style={{ marginTop: 1 }} >
|
||||
<Grid item xs={4}>
|
||||
<div style={{ position: 'relative' }}>
|
||||
<img src="/images/adminpage/app1.svg" style={{ margin: 'auto' }} />
|
||||
{checked ?
|
||||
<div style={{
|
||||
position: 'absolute',
|
||||
bottom: 0,
|
||||
left: '50%',
|
||||
top: 30,
|
||||
transform: 'translateX(-50%)',
|
||||
backgroundColor: '#2f2f2f',
|
||||
borderRadius: '50%',
|
||||
height: 24,
|
||||
width: 24,
|
||||
transition: 'transform 0.5s ease',
|
||||
}}><SearchIcon style={{ width: 16, height: 16, marginTop: 5 }} /></div> :
|
||||
null
|
||||
}
|
||||
</div>
|
||||
</Grid>
|
||||
<Grid item xs={4}>
|
||||
<div style={{ position: 'relative' }}>
|
||||
<img src="/images/adminpage/app1.svg" style={{ margin: 'auto' }} />
|
||||
{checked ?
|
||||
<div style={{
|
||||
position: 'absolute',
|
||||
bottom: 0,
|
||||
left: '50%',
|
||||
top: 30,
|
||||
transform: 'translateX(-50%)',
|
||||
backgroundColor: '#2f2f2f',
|
||||
borderRadius: '50%',
|
||||
height: 24,
|
||||
width: 24,
|
||||
transition: 'transform 10s ease-in-out',
|
||||
}}><NewReleasesIcon style={{ width: 16, height: 16, marginTop: 5 }} /></div> :
|
||||
null
|
||||
}
|
||||
</div>
|
||||
</Grid>
|
||||
<Grid item xs={4}>
|
||||
<div style={{ position: 'relative' }}>
|
||||
<img src="/images/adminpage/app1.svg" style={{ margin: 'auto' }} />
|
||||
{checked ?
|
||||
<div style={{
|
||||
position: 'absolute',
|
||||
bottom: 0,
|
||||
left: '50%',
|
||||
top: 30,
|
||||
transform: 'translateX(-50%)',
|
||||
backgroundColor: '#2f2f2f',
|
||||
borderRadius: '50%',
|
||||
height: 24,
|
||||
width: 24,
|
||||
transition: 'transform 10s ease-in-out',
|
||||
}}><MailOutlineIcon style={{ width: 16, height: 16, marginTop: 5 }} /></div> :
|
||||
null
|
||||
}
|
||||
</div>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</div>
|
||||
</div>}
|
||||
</div>
|
||||
<div style={{ width: 595, height: 322, marginTop: 16, paddingTop: 16, paddingBottom: '48px', fontSize: '16px', color: '#ffffff', backgroundColor: '#1A1A1A', borderRadius: '16px', }}>
|
||||
<div style={{ marginLeft: 18, textAlign: "start" }}>Workflows</div>
|
||||
<div style={{textAlign:"center"}}>
|
||||
<Button style={{ textTransform: "capitalize", background: selectedOption === 'all' ? "#494949" : "#1A1A1A", borderRadius: selectedOption === 'all' ? 15 : null, color: "#FFFFFF" }} onClick={() => handleOptionChange('all')}>All</Button>
|
||||
<Button style={{ textTransform: "capitalize", background: selectedOption === 'revisions' ? "#494949" : "#1A1A1A", borderRadius: selectedOption === 'revisions' ? 15 : null, color: "#FFFFFF" }} onClick={() => handleOptionChange('revisions')}>Revisions</Button>
|
||||
<Button style={{ textTransform: "capitalize", background: selectedOption === 'run' ? "#494949" : "#1A1A1A", borderRadius: selectedOption === 'run' ? 15 : null, color: "#FFFFFF" }} onClick={() => handleOptionChange('run')}>Runs</Button>
|
||||
</div>
|
||||
<Bar data={data} options={options} style={{ width: 400, marginLeft: 25, padding:20,marginTop: 10 }} />
|
||||
</div>
|
||||
</div>
|
||||
<div style={{ width: 375, height: 440, display: 'flex', alignItems: 'start', paddingTop: '16px', paddingBottom: '48px', fontSize: '16px', color: '#ffffff', backgroundColor: '#1A1A1A', borderRadius: '16px', }}>
|
||||
<div style={{ marginLeft: 18 }}>Insights</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style={{ width: 985, paddingTop: 16, marginTop: 16, paddingBottom: '48px', fontSize: '16px', color: '#ffffff', backgroundColor: '#1A1A1A', borderRadius: '16px', }}>
|
||||
<div style={{ marginLeft: 18, textAlign: 'start', marginBottom: 16 }}>Sessions Overview</div>
|
||||
<div style={{ display: "flex", width: "100%", justifyContent: "center" }}>
|
||||
<div style={{ fontSize: '16px',width: "30%", borderRadius: 8, background: '#212121', color: '#9CA3AF' }}>
|
||||
<div style={{ marginTop: 21, color: "#ffffff", marginLeft:20,fontSize: 16, fontWeight: "bold", }}>
|
||||
2.8 Hours
|
||||
</div>
|
||||
<div style={{ marginTop: 13, marginBottom: 16, marginLeft:20, }}>
|
||||
Avg. Activity per session
|
||||
</div>
|
||||
</div>
|
||||
<div style={{ marginLeft: 16, fontSize: '16px', width: "30%", borderRadius: 8, background: '#212121', color: '#9CA3AF' }}>
|
||||
<div style={{ marginTop: 21, marginLeft:20, color: "#ffffff", fontSize: 16, fontWeight: "bold", }}>
|
||||
/usercases/edr to ticket
|
||||
</div>
|
||||
<div style={{ marginTop: 13, marginLeft:20, marginBottom: 16, }}>
|
||||
Last visited page
|
||||
</div>
|
||||
</div>
|
||||
<div style={{ marginLeft: 16, fontSize: '16px', width: "30%", borderRadius: 8, background: '#212121', color: '#9CA3AF' }}>
|
||||
<div style={{ marginTop: 21, marginLeft:20,color: "#ffffff", fontSize: 16, fontWeight: "bold", }}>
|
||||
/workflow/email management
|
||||
</div>
|
||||
<div style={{ marginTop: 13, marginLeft:20, marginBottom: 16, }}>
|
||||
Most visited page
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
// // Options for the chart
|
||||
// const options = {
|
||||
// scales: {
|
||||
// yAxes: [
|
||||
// {
|
||||
// ticks: {
|
||||
// beginAtZero: true
|
||||
// }
|
||||
// }
|
||||
// ]
|
||||
// },
|
||||
// };
|
||||
// return (
|
||||
// <div style={{ width: 1030, marginLeft: 20, marginTop:10, paddingRight: 17, paddingLeft: 17}}>
|
||||
// <div style={{ width: 985, display: 'flex', alignItems: 'start', paddingTop: 16, paddingBottom: '48px', fontSize: '16px', color: '#ffffff', backgroundColor: '#1A1A1A', borderRadius: '16px', }}>
|
||||
// <div style={{ marginLeft: 18 }}>Timeline</div>
|
||||
// </div>
|
||||
// <div style={{ display: "flex", width: "100%", marginTop: 16 }}>
|
||||
// <div>
|
||||
// <div style={{ width: 595, alignItems: 'start', paddingTop: 16, paddingBottom: checked ? 28 : 20, marginRight: 20, fontSize: '16px', color: '#ffffff', backgroundColor: '#1A1A1A', borderRadius: '16px', }}>
|
||||
// <div style={{ display: "flex", alignItems: "center" }}>
|
||||
// <div style={{ marginLeft: 18, marginRight: 310 }}>Apps</div>
|
||||
// <Switch checked={checked}
|
||||
// onChange={handleChange} /> Category
|
||||
// <div style={{ marginLeft: 16, borderLeft: "1px solid #D9D9D9", width: 10, height: 15 }} />
|
||||
// <Link onClick={() => { setExpand(prevExpand => !prevExpand); }} style={{ color: "#FF8444" }}>Expand</Link>
|
||||
// </div>
|
||||
// {expand ? null :
|
||||
// <div style={{ marginTop: 8, display: "flex" }}>
|
||||
// <div style={{ marginLeft: 19, }}>
|
||||
// <Typography style={{ fontSize: 13, color: "#9E9E9E", textAlign: "start" }}>Onboarding</Typography>
|
||||
// <Grid container spacing={2} style={{ marginTop: 1 }} >
|
||||
// <Grid item xs={4}>
|
||||
// <div style={{ position: 'relative' }}>
|
||||
// <img src="/images/adminpage/app1.svg" style={{ margin: 'auto' }} />
|
||||
// {checked ?
|
||||
// <div style={{
|
||||
// position: 'absolute',
|
||||
// bottom: 0,
|
||||
// left: '50%',
|
||||
// top: 30,
|
||||
// transform: 'translateX(-50%)',
|
||||
// backgroundColor: '#2f2f2f',
|
||||
// borderRadius: '50%',
|
||||
// height: 24,
|
||||
// width: 24,
|
||||
// transition: 'transform 0.5s ease',
|
||||
// }}><SearchIcon style={{ width: 16, height: 16, marginTop: 5 }} /></div> :
|
||||
// null
|
||||
// }
|
||||
// </div>
|
||||
// </Grid>
|
||||
// <Grid item xs={4}>
|
||||
// <div style={{ position: 'relative' }}>
|
||||
// <img src="/images/adminpage/app1.svg" style={{ margin: 'auto' }} />
|
||||
// {checked ?
|
||||
// <div style={{
|
||||
// position: 'absolute',
|
||||
// bottom: 0,
|
||||
// left: '50%',
|
||||
// top: 30,
|
||||
// transform: 'translateX(-50%)',
|
||||
// backgroundColor: '#2f2f2f',
|
||||
// borderRadius: '50%',
|
||||
// height: 24,
|
||||
// width: 24,
|
||||
// transition: 'transform 0.5s ease',
|
||||
// }}><MailOutlineIcon style={{ width: 16, height: 16, marginTop: 5 }} /></div> :
|
||||
// null
|
||||
// }
|
||||
// </div>
|
||||
// </Grid>
|
||||
// <Grid item xs={4}>
|
||||
// <div style={{ position: 'relative' }}>
|
||||
// <img src="/images/adminpage/app1.svg" style={{ margin: 'auto' }} />
|
||||
// {checked ?
|
||||
// <div style={{
|
||||
// position: 'absolute',
|
||||
// bottom: 0,
|
||||
// left: '50%',
|
||||
// top: 30,
|
||||
// transform: 'translateX(-50%)',
|
||||
// backgroundColor: '#2f2f2f',
|
||||
// borderRadius: '50%',
|
||||
// height: 24,
|
||||
// width: 24,
|
||||
// transition: 'transform 0.5s ease',
|
||||
// }}><NewReleasesIcon style={{ width: 16, height: 16, marginTop: 5 }} /></div> :
|
||||
// null
|
||||
// }
|
||||
// </div>
|
||||
// </Grid>
|
||||
// </Grid>
|
||||
// </div>
|
||||
// <div style={{ borderLeft: "1px solid #494949", justifyContent: "center", alignItems: "center", marginTop: 40, marginLeft: 20, marginRight: 20, height: 40 }}></div>
|
||||
// <div style={{}}>
|
||||
// <Typography style={{ fontSize: 13, color: "#9E9E9E", textAlign: "start" }}>Other</Typography>
|
||||
// <Grid container spacing={2} style={{ marginTop: 1 }} >
|
||||
// <Grid item xs={4}>
|
||||
// <div style={{ position: 'relative' }}>
|
||||
// <img src="/images/adminpage/app1.svg" style={{ margin: 'auto' }} />
|
||||
// {checked ?
|
||||
// <div style={{
|
||||
// position: 'absolute',
|
||||
// bottom: 0,
|
||||
// left: '50%',
|
||||
// top: 30,
|
||||
// transform: 'translateX(-50%)',
|
||||
// backgroundColor: '#2f2f2f',
|
||||
// borderRadius: '50%',
|
||||
// height: 24,
|
||||
// width: 24,
|
||||
// transition: 'transform 0.5s ease',
|
||||
// }}><SearchIcon style={{ width: 16, height: 16, marginTop: 5 }} /></div> :
|
||||
// null
|
||||
// }
|
||||
// </div>
|
||||
// </Grid>
|
||||
// <Grid item xs={4}>
|
||||
// <div style={{ position: 'relative' }}>
|
||||
// <img src="/images/adminpage/app1.svg" style={{ margin: 'auto' }} />
|
||||
// {checked ?
|
||||
// <div style={{
|
||||
// position: 'absolute',
|
||||
// bottom: 0,
|
||||
// left: '50%',
|
||||
// top: 30,
|
||||
// transform: 'translateX(-50%)',
|
||||
// backgroundColor: '#2f2f2f',
|
||||
// borderRadius: '50%',
|
||||
// height: 24,
|
||||
// width: 24,
|
||||
// transition: 'transform 10s ease-in-out',
|
||||
// }}><NewReleasesIcon style={{ width: 16, height: 16, marginTop: 5 }} /></div> :
|
||||
// null
|
||||
// }
|
||||
// </div>
|
||||
// </Grid>
|
||||
// <Grid item xs={4}>
|
||||
// <div style={{ position: 'relative' }}>
|
||||
// <img src="/images/adminpage/app1.svg" style={{ margin: 'auto' }} />
|
||||
// {checked ?
|
||||
// <div style={{
|
||||
// position: 'absolute',
|
||||
// bottom: 0,
|
||||
// left: '50%',
|
||||
// top: 30,
|
||||
// transform: 'translateX(-50%)',
|
||||
// backgroundColor: '#2f2f2f',
|
||||
// borderRadius: '50%',
|
||||
// height: 24,
|
||||
// width: 24,
|
||||
// transition: 'transform 10s ease-in-out',
|
||||
// }}><MailOutlineIcon style={{ width: 16, height: 16, marginTop: 5 }} /></div> :
|
||||
// null
|
||||
// }
|
||||
// </div>
|
||||
// </Grid>
|
||||
// </Grid>
|
||||
// </div>
|
||||
// </div>}
|
||||
// </div>
|
||||
// <div style={{ width: 595, height: 322, marginTop: 16, paddingTop: 16, paddingBottom: '48px', fontSize: '16px', color: '#ffffff', backgroundColor: '#1A1A1A', borderRadius: '16px', }}>
|
||||
// <div style={{ marginLeft: 18, textAlign: "start" }}>Workflows</div>
|
||||
// <div style={{textAlign:"center"}}>
|
||||
// <Button style={{ textTransform: "capitalize", background: selectedOption === 'all' ? "#494949" : "#1A1A1A", borderRadius: selectedOption === 'all' ? 15 : null, color: "#FFFFFF" }} onClick={() => handleOptionChange('all')}>All</Button>
|
||||
// <Button style={{ textTransform: "capitalize", background: selectedOption === 'revisions' ? "#494949" : "#1A1A1A", borderRadius: selectedOption === 'revisions' ? 15 : null, color: "#FFFFFF" }} onClick={() => handleOptionChange('revisions')}>Revisions</Button>
|
||||
// <Button style={{ textTransform: "capitalize", background: selectedOption === 'run' ? "#494949" : "#1A1A1A", borderRadius: selectedOption === 'run' ? 15 : null, color: "#FFFFFF" }} onClick={() => handleOptionChange('run')}>Runs</Button>
|
||||
// </div>
|
||||
// <Bar data={data} options={options} style={{ width: 400, marginLeft: 25, padding:20,marginTop: 10 }} />
|
||||
// </div>
|
||||
// </div>
|
||||
// <div style={{ width: 375, height: 440, display: 'flex', alignItems: 'start', paddingTop: '16px', paddingBottom: '48px', fontSize: '16px', color: '#ffffff', backgroundColor: '#1A1A1A', borderRadius: '16px', }}>
|
||||
// <div style={{ marginLeft: 18 }}>Insights</div>
|
||||
// </div>
|
||||
// </div>
|
||||
// <div style={{ width: 985, paddingTop: 16, marginTop: 16, paddingBottom: '48px', fontSize: '16px', color: '#ffffff', backgroundColor: '#1A1A1A', borderRadius: '16px', }}>
|
||||
// <div style={{ marginLeft: 18, textAlign: 'start', marginBottom: 16 }}>Sessions Overview</div>
|
||||
// <div style={{ display: "flex", width: "100%", justifyContent: "center" }}>
|
||||
// <div style={{ fontSize: '16px',width: "30%", borderRadius: 8, background: '#212121', color: '#9CA3AF' }}>
|
||||
// <div style={{ marginTop: 21, color: "#ffffff", marginLeft:20,fontSize: 16, fontWeight: "bold", }}>
|
||||
// 2.8 Hours
|
||||
// </div>
|
||||
// <div style={{ marginTop: 13, marginBottom: 16, marginLeft:20, }}>
|
||||
// Avg. Activity per session
|
||||
// </div>
|
||||
// </div>
|
||||
// <div style={{ marginLeft: 16, fontSize: '16px', width: "30%", borderRadius: 8, background: '#212121', color: '#9CA3AF' }}>
|
||||
// <div style={{ marginTop: 21, marginLeft:20, color: "#ffffff", fontSize: 16, fontWeight: "bold", }}>
|
||||
// /usercases/edr to ticket
|
||||
// </div>
|
||||
// <div style={{ marginTop: 13, marginLeft:20, marginBottom: 16, }}>
|
||||
// Last visited page
|
||||
// </div>
|
||||
// </div>
|
||||
// <div style={{ marginLeft: 16, fontSize: '16px', width: "30%", borderRadius: 8, background: '#212121', color: '#9CA3AF' }}>
|
||||
// <div style={{ marginTop: 21, marginLeft:20,color: "#ffffff", fontSize: 16, fontWeight: "bold", }}>
|
||||
// /workflow/email management
|
||||
// </div>
|
||||
// <div style={{ marginTop: 13, marginLeft:20, marginBottom: 16, }}>
|
||||
// Most visited page
|
||||
// </div>
|
||||
// </div>
|
||||
// </div>
|
||||
// </div>
|
||||
// </div>
|
||||
// );
|
||||
};
|
||||
|
||||
export default AnalyticsTab;
|
||||
|
||||
@@ -65,80 +65,83 @@ export const LoadStats = (globalUrl, cachekey) => {
|
||||
}
|
||||
|
||||
const DashboardBarchart = (props) => {
|
||||
const { timelineData, title, height, } = props;
|
||||
var inputHeight = 15
|
||||
if (height !== undefined && height !== null) {
|
||||
inputHeight = height
|
||||
}
|
||||
// this is clearly unfinished and not worth my time.
|
||||
// refer to health page to see how i made it work there w/o using chartjs
|
||||
|
||||
const barOptions = {
|
||||
plugins: {
|
||||
tooltip: {
|
||||
enabled: true, // Ensure tooltips are enabled
|
||||
},
|
||||
},
|
||||
tooltips: {
|
||||
mode: 'index',
|
||||
intersect: false,
|
||||
},
|
||||
legend: {
|
||||
display: false
|
||||
},
|
||||
layout: {
|
||||
padding: {
|
||||
top: 0, // Adjust the top padding as needed
|
||||
bottom: -10, // Adjust the bottom padding as needed
|
||||
left: 0, // Adjust the left padding as needed
|
||||
right: 0, // Adjust the right padding as needed
|
||||
},
|
||||
},
|
||||
scales: {
|
||||
y: {
|
||||
beginAtZero: false,
|
||||
},
|
||||
yAxes: [{
|
||||
ticks: {
|
||||
display: false
|
||||
},
|
||||
beginAtZero: false,
|
||||
}],
|
||||
xAxes: [{
|
||||
ticks: {
|
||||
display: false
|
||||
},
|
||||
beginAtZero: false,
|
||||
}]
|
||||
},
|
||||
tooltips: {
|
||||
callbacks: {
|
||||
label: function (tooltipItem, data) {
|
||||
const label = data.labels[tooltipItem.index]
|
||||
return label.split('\n')[0]
|
||||
},
|
||||
afterLabel: function (tooltipItem, data) {
|
||||
const amount = tooltipItem.value === undefined || tooltipItem.value === null ? 0 : tooltipItem.value
|
||||
return `Amount: ${amount}`
|
||||
},
|
||||
title: function () {
|
||||
return title === undefined ? '' : title
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// const { timelineData, title, height, } = props;
|
||||
// var inputHeight = 15
|
||||
// if (height !== undefined && height !== null) {
|
||||
// inputHeight = height
|
||||
// }
|
||||
|
||||
return (
|
||||
<Bar
|
||||
data={timelineData}
|
||||
options={barOptions}
|
||||
height={inputHeight}
|
||||
getElementAtEvent={(elements) => {
|
||||
if (elements && elements.length > 0) {
|
||||
//toast("Click event")
|
||||
console.log("Clicked: ", elements)
|
||||
}
|
||||
}}
|
||||
/>
|
||||
)
|
||||
// const barOptions = {
|
||||
// plugins: {
|
||||
// tooltip: {
|
||||
// enabled: true, // Ensure tooltips are enabled
|
||||
// },
|
||||
// },
|
||||
// tooltips: {
|
||||
// mode: 'index',
|
||||
// intersect: false,
|
||||
// },
|
||||
// legend: {
|
||||
// display: false
|
||||
// },
|
||||
// layout: {
|
||||
// padding: {
|
||||
// top: 0, // Adjust the top padding as needed
|
||||
// bottom: -10, // Adjust the bottom padding as needed
|
||||
// left: 0, // Adjust the left padding as needed
|
||||
// right: 0, // Adjust the right padding as needed
|
||||
// },
|
||||
// },
|
||||
// scales: {
|
||||
// y: {
|
||||
// beginAtZero: false,
|
||||
// },
|
||||
// yAxes: [{
|
||||
// ticks: {
|
||||
// display: false
|
||||
// },
|
||||
// beginAtZero: false,
|
||||
// }],
|
||||
// xAxes: [{
|
||||
// ticks: {
|
||||
// display: false
|
||||
// },
|
||||
// beginAtZero: false,
|
||||
// }]
|
||||
// },
|
||||
// tooltips: {
|
||||
// callbacks: {
|
||||
// label: function (tooltipItem, data) {
|
||||
// const label = data.labels[tooltipItem.index]
|
||||
// return label.split('\n')[0]
|
||||
// },
|
||||
// afterLabel: function (tooltipItem, data) {
|
||||
// const amount = tooltipItem.value === undefined || tooltipItem.value === null ? 0 : tooltipItem.value
|
||||
// return `Amount: ${amount}`
|
||||
// },
|
||||
// title: function () {
|
||||
// return title === undefined ? '' : title
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// return (
|
||||
// <Bar
|
||||
// data={timelineData}
|
||||
// options={barOptions}
|
||||
// height={inputHeight}
|
||||
// getElementAtEvent={(elements) => {
|
||||
// if (elements && elements.length > 0) {
|
||||
// //toast("Click event")
|
||||
// console.log("Clicked: ", elements)
|
||||
// }
|
||||
// }}
|
||||
// />
|
||||
// )
|
||||
}
|
||||
|
||||
export default DashboardBarchart;
|
||||
|
||||
@@ -3,7 +3,6 @@ import { Link, useNavigate, useLocation } from "react-router-dom";
|
||||
import Billing from "../components/Billing.jsx";
|
||||
import Priorities from "../components/Priorities.jsx";
|
||||
import Branding from "../components/Branding.jsx";
|
||||
import AnalyticsTab from '../components/AnalyticsTab.jsx';
|
||||
import EditOrgTab from '../components/EditOrgTab.jsx';
|
||||
import CloudSyncTab from '../components/CloudSyncTab.jsx';
|
||||
import SSOTab from "../components/ssoTab.jsx"
|
||||
|
||||
@@ -6,12 +6,9 @@ import classNames from "classnames";
|
||||
import theme from '../theme.jsx';
|
||||
import { useNavigate, Link, useParams } from "react-router-dom";
|
||||
|
||||
// react plugin used to create charts
|
||||
//import { Line, Bar } from "react-chartjs-2";
|
||||
//import { useAlert
|
||||
import { ToastContainer, toast } from "react-toastify"
|
||||
import Draggable from "react-draggable";
|
||||
import DashboardBarchart, { LoadStats } from '../components/DashboardBarchart.jsx';
|
||||
// import DashboardBarchart, { LoadStats } from '../components/DashboardBarchart.jsx';
|
||||
|
||||
import {
|
||||
Autocomplete,
|
||||
@@ -311,9 +308,13 @@ const RadialChart = ({keys, setSelectedCategory}) => {
|
||||
//axis={<RadialAxis type="category" />}
|
||||
}
|
||||
|
||||
|
||||
// 0x0elliot: not cleaning this up. this seems clearly experimental. not worth my time.
|
||||
|
||||
// This is the start of a dashboard that can be used.
|
||||
// What data do we fill in here? Idk
|
||||
const Dashboard = (props) => {
|
||||
|
||||
const { globalUrl, isLoggedIn } = props;
|
||||
//const alert = useAlert();
|
||||
const [bigChartData, setBgChartData] = useState("data1");
|
||||
|
||||
Reference in New Issue
Block a user