tududi/frontend/components/Task/WeeklyCompletionChart.tsx
Chris 03f38f05dc
Setup intelligence (#84)
* Add next suggestions and remove console logs

* Add pomodoro timer

* Add pomodoro switch in settings

* Fix pomodoro setting

* Add timezones to settings

* Fix an issue with password reset

* Cleanup

* Sort tags alphabetically

* Clean up today's view

* Add an indicator for repeatedly added to today

* Refactor tags

* Add due date today item

* Move recurrence to the subtitle area

* Fix today layout

* Add a badge to Inbox items

* Move inbox badge to sidebar

* Add quotes and progress bar

* Add translations for quotes

* Fix test issues

* Add helper script for docker local

* Set up overdue tasks

* Add  linux/arm/v7 build to deploy script

* Add  linux/arm/v7 build to deploy script pt2

* Fix an issue with helmet and SSL

* Add volume db persistence

* Fix cog icon issues
2025-06-27 14:02:18 +03:00

74 lines
No EOL
2.4 KiB
TypeScript

import React from 'react';
import { BarChart, Bar, XAxis, YAxis, ResponsiveContainer, Tooltip } from 'recharts';
import { useTranslation } from 'react-i18next';
import { WeeklyCompletion } from '../../entities/Metrics';
interface WeeklyCompletionChartProps {
data: WeeklyCompletion[];
}
const WeeklyCompletionChart: React.FC<WeeklyCompletionChartProps> = ({ data }) => {
const { t } = useTranslation();
const CustomTooltip = ({ active, payload, label }: any) => {
if (active && payload && payload.length) {
const data = payload[0].payload;
return (
<div className="bg-white dark:bg-gray-800 p-3 border border-gray-200 dark:border-gray-600 rounded-lg shadow-lg">
<p className="text-sm font-medium text-gray-900 dark:text-gray-100">
{data.dayName}
</p>
<p className="text-sm text-gray-600 dark:text-gray-400">
{data.count} {data.count === 1 ? t('tasks.taskCompleted') : t('tasks.tasksCompleted')}
</p>
</div>
);
}
return null;
};
return (
<div className="bg-white dark:bg-gray-900 rounded-lg shadow p-4">
<h3 className="text-sm font-medium mb-2 text-gray-700 dark:text-gray-300">
{t('tasks.weeklyCompletions')}
</h3>
<div className="h-40">
<ResponsiveContainer width="100%" height="100%">
<BarChart data={data} margin={{ top: 5, right: 5, left: 5, bottom: 5 }}>
<XAxis
dataKey="dayName"
axisLine={false}
tickLine={false}
tick={{
fontSize: 10,
fill: 'currentColor',
className: 'text-gray-600 dark:text-gray-400'
}}
/>
<YAxis
axisLine={false}
tickLine={false}
tick={{
fontSize: 10,
fill: 'currentColor',
className: 'text-gray-600 dark:text-gray-400'
}}
allowDecimals={false}
width={25}
domain={[0, 'dataMax']}
/>
<Tooltip content={<CustomTooltip />} />
<Bar
dataKey="count"
fill="#3b82f6"
radius={[2, 2, 0, 0]}
minPointSize={2}
/>
</BarChart>
</ResponsiveContainer>
</div>
</div>
);
};
export default WeeklyCompletionChart;