import { Tooltip } from "@mui/joy"; import clsx from "clsx"; import dayjs from "dayjs"; import { useTranslate } from "@/utils/i18n"; interface Props { // Format: 2021-1 month: string; selectedDate: string; data: Record; onClick?: (date: string) => void; } const getCellAdditionalStyles = (count: number, maxCount: number) => { if (count === 0) { return "bg-gray-100 text-gray-400 dark:bg-gray-700 dark:text-gray-500"; } const ratio = count / maxCount; if (ratio > 0.7) { return "bg-teal-700 text-gray-100 dark:opacity-80"; } else if (ratio > 0.4) { return "bg-teal-600 text-gray-100 dark:opacity-80"; } else { return "bg-teal-500 text-gray-100 dark:opacity-70"; } }; const ActivityCalendar = (props: Props) => { const t = useTranslate(); const { month: monthStr, data, onClick } = props; const year = dayjs(monthStr).toDate().getFullYear(); const month = dayjs(monthStr).toDate().getMonth() + 1; const dayInMonth = new Date(year, month, 0).getDate(); const firstDay = new Date(year, month - 1, 1).getDay(); const lastDay = new Date(year, month - 1, dayInMonth).getDay(); const maxCount = Math.max(...Object.values(data)); const days = []; for (let i = 0; i < firstDay; i++) { days.push(0); } for (let i = 1; i <= dayInMonth; i++) { days.push(i); } for (let i = 0; i < 6 - lastDay; i++) { days.push(0); } return (
Su
Mo
Tu
We
Th
Fr
Sa
{days.map((day, index) => { const date = dayjs(`${year}-${month}-${day}`).format("YYYY-MM-DD"); const count = data[date] || 0; const isToday = dayjs().format("YYYY-MM-DD") === date; const tooltipText = count ? t("memo.count-memos-in-date", { count: count, date: date }) : date; const isSelected = dayjs(props.selectedDate).format("YYYY-MM-DD") === date; return day ? ( count > 0 ? (
count && onClick && onClick(date)} > {day}
) : (
{day}
) ) : (
); })}
); }; export default ActivityCalendar;