"use client"; import * as React from "react"; import { useState } from "react"; // constants // types // import { DateTime } from '../types/DateTime'; type DateTime = { id: string; year: number; month: number; day: number; dayOfWeek: number; dayDiffFromToday: number; activities: any; level: number; }; // constants // types // import { DateTime } from '../types/DateTime'; type DayProps = { clickHandler: Function; dt: DateTime; color: string; top: string; right: string; // tooltipText style showTooltip: boolean; tooltipBgColor?: string; tooltipTextColor?: string; tooltipText?: string; // tooltipText content activities: any[]; year: number; month: number; day: number; }; import CONSTANTS from "../constants/constants"; const getDayRight = ({ right, tooltipPosition }) => { return ( "calc(" + right + " + " + (tooltipPosition === "left" ? "-178px" : tooltipPosition === "center" ? "-96px" : "-7px") + ")" ); }; const getTooltipText = ({ tooltipText, activities, year, month, day, CONSTANTS, }) => { if (!!tooltipText) { return tooltipText .replaceAll("{{numOfActivities}}", activities?.length) .replaceAll("{{year}}", year) .replaceAll("{{month}}", month) .replaceAll("{{day}}", day); } return `${activities?.length} activities on ${CONSTANTS.MONTH_MAP[month]} ${day}, ${year}`; }; function Day(props: DayProps) { const [_showTooltip, set_showTooltip] = useState(() => false); const [tooltipPosition, setTooltipPosition] = useState(() => "center"); function updateShowTooltip(action, event) { if (event.clientX < 132) { setTooltipPosition("left"); } else if (window.innerWidth - event.clientX < 132) { setTooltipPosition("right"); } else { setTooltipPosition("center"); } set_showTooltip(action === "enter"); } return ( <> <>
props.clickHandler(props.dt)} onMouseEnter={(event) => updateShowTooltip("enter", event)} onMouseLeave={(event) => updateShowTooltip("leave", event)} style={{ backgroundColor: props.color, top: props.top, right: props.right, }} /> {props.showTooltip && _showTooltip ? (
{getTooltipText({ tooltipText: props.tooltipText, activities: props.activities, year: props.year, month: props.month, day: props.day, CONSTANTS, })}
) : null} ); } export default Day;