diff --git a/src/components/Dashboard/AttendanceChart.jsx b/src/components/Dashboard/AttendanceChart.jsx index 7fcc862e..df99b07d 100644 --- a/src/components/Dashboard/AttendanceChart.jsx +++ b/src/components/Dashboard/AttendanceChart.jsx @@ -6,180 +6,198 @@ import flatColors from "../Charts/flatColor"; import ChartSkeleton from "../Charts/Skelton"; const formatDate = (dateStr) => { - const date = new Date(dateStr); - return date.toLocaleDateString("en-GB", { - day: "2-digit", - month: "long", - }); + const date = new Date(dateStr); + return date.toLocaleDateString("en-GB", { + day: "2-digit", + month: "long", + }); }; const AttendanceOverview = () => { - const [dayRange, setDayRange] = useState(7); - const [view, setView] = useState("chart"); + const [dayRange, setDayRange] = useState(7); + const [view, setView] = useState("chart"); - const projectId = useSelector((store) => store.localVariables.projectId); - const { attendanceOverviewData, loading, error } = useAttendanceOverviewData(projectId, dayRange); + const projectId = useSelector((store) => store.localVariables.projectId); + const { attendanceOverviewData, loading, error } = useAttendanceOverviewData( + projectId, + dayRange + ); - const { tableData, roles, dates } = useMemo(() => { - const map = new Map(); + const { tableData, roles, dates } = useMemo(() => { + const map = new Map(); - attendanceOverviewData.forEach((entry) => { - const date = formatDate(entry.date); - if (!map.has(date)) map.set(date, {}); - map.get(date)[entry.role.trim()] = entry.present; - }); + attendanceOverviewData.forEach((entry) => { + const date = formatDate(entry.date); + if (!map.has(date)) map.set(date, {}); + map.get(date)[entry.role.trim()] = entry.present; + }); - const uniqueRoles = [...new Set(attendanceOverviewData.map((e) => e.role.trim()))]; - const sortedDates = [...map.keys()]; - const data = sortedDates.map((date) => { - const row = { date }; - uniqueRoles.forEach((role) => { - row[role] = map.get(date)?.[role] ?? 0; - }); - return row; - }); + const uniqueRoles = [ + ...new Set(attendanceOverviewData.map((e) => e.role.trim())), + ]; + const sortedDates = [...map.keys()]; + const data = sortedDates.map((date) => { + const row = { date }; + uniqueRoles.forEach((role) => { + row[role] = map.get(date)?.[role] ?? 0; + }); + return row; + }); - return { - tableData: data, - roles: uniqueRoles, - dates: sortedDates, - }; - }, [attendanceOverviewData]); - - const chartSeries = roles.map((role) => ({ - name: role, - data: tableData.map((row) => row[role]), - })); - - const chartOptions = { - chart: { - type: "bar", - stacked: true, - height: 400, - toolbar: { show: false }, - }, - plotOptions: { - bar: { - borderRadius: 2, - columnWidth: "60%", - }, - }, - xaxis: { - categories: tableData.map((row) => row.date), - }, - yaxis: { - show: true, - axisBorder: { - show: true, - color: '#78909C', - offsetX: 0, - offsetY: 0 - }, - axisTicks: { - show: true, - borderType: 'solid', - color: '#78909C', - width: 6, - offsetX: 0, - offsetY: 0 - }, - }, - legend: { - position: "bottom", - }, - fill: { - opacity: 1, - }, - colors: roles.map((_, i) => flatColors[i % flatColors.length]), + return { + tableData: data, + roles: uniqueRoles, + dates: sortedDates, }; + }, [attendanceOverviewData]); - return ( -
Role-wise present count
-{error}
- ) : view === "chart" ? ( -Role | - {dates.map((date, idx) => ( -{date} | - ))} -
---|---|
{role} | - {tableData.map((row, idx) => { - const value = row[role]; - const cellStyle = value > 0 ? { backgroundColor: '#d5d5d5' } : {}; - return ( -- {value} - | - ); - })} -
Role-wise present count
{error}
+ ) : view === "chart" ? ( ++ Role + | + {dates.map((date, idx) => ( ++ {date} + | + ))} +
---|---|
{role} | + {tableData.map((row, idx) => { + const value = row[role]; + const cellStyle = + value > 0 ? { backgroundColor: "#d5d5d5" } : {}; + return ( ++ {value} + | + ); + })} +