import CalendarHeatmap from 'react-calendar-heatmap'; import { Tooltip as ReactTooltip } from 'react-tooltip'; import 'react-calendar-heatmap/dist/styles.css'; import 'react-tooltip/dist/react-tooltip.css'; import { formatActivityDate, formatMonthDate } from '../../lib/date'; import type { UserActivityCount } from '../../api/user'; import dayjs from 'dayjs'; type UserActivityHeatmapProps = { activity: UserActivityCount; joinedAt: string; }; const legends = [ { count: '1-2', color: 'bg-gray-200' }, { count: '3-4', color: 'bg-gray-300' }, { count: '5-9', color: 'bg-gray-500' }, { count: '10-19', color: 'bg-gray-600' }, { count: '20+', color: 'bg-gray-800' }, ]; type ReactCalendarHeatmapValue = { date: T; count: number }; type TooltipDataAttrs = { /* TooltipDataAttrs türünü burada tanımlayın */ }; export function UserActivityHeatmap(props: UserActivityHeatmapProps) { const { activity } = props; const data = Object.entries(activity.activityCount).map(([date, count]) => ({ date, count, })); const startDate = dayjs().subtract(1, 'year').toDate(); const endDate = dayjs().toDate(); return (

Activity

Progress updates over the past year

Member since: {formatMonthDate(props.joinedAt)}
{ if (!value) { return 'fill-gray-100 rounded-md [rx:2px] focus:outline-none'; } const { count } = value; if (count >= 20) { return 'fill-gray-800 rounded-md [rx:2px] focus:outline-none'; } else if (count >= 10) { return 'fill-gray-600 rounded-md [rx:2px] focus:outline-none'; } else if (count >= 5) { return 'fill-gray-500 rounded-md [rx:2px] focus:outline-none'; } else if (count >= 3) { return 'fill-gray-300 rounded-md [rx:2px] focus:outline-none'; } else { return 'fill-gray-200 rounded-md [rx:2px] focus:outline-none'; } }} tooltipDataAttrs={(value): TooltipDataAttrs => { if (!value) { return { 'data-tooltip': 'No activity on this day' }; } return { 'data-tooltip': `${value.count} activities on ${value.date}` }; }} />
Number of topics marked as learning, or completed by day
Less {legends.map((legend) => (
))} More
); }