diff --git a/packages/widgets/src/calendar/calender-day.tsx b/packages/widgets/src/calendar/calender-day.tsx index 70f2f26a8..650356d2c 100644 --- a/packages/widgets/src/calendar/calender-day.tsx +++ b/packages/widgets/src/calendar/calender-day.tsx @@ -1,6 +1,4 @@ -import { useCallback, useState } from "react"; -import { Box, Container, Flex, Popover, Text, useMantineTheme } from "@mantine/core"; -import { useElementSize } from "@mantine/hooks"; +import { Box, Container, Flex, HoverCard, Text, useMantineTheme } from "@mantine/core"; import { useRequiredBoard } from "@homarr/boards/context"; import type { CalendarEvent } from "@homarr/integrations/types"; @@ -13,14 +11,9 @@ interface CalendarDayProps { disabled: boolean; rootWidth: number; rootHeight: number; - onOpen: (close: () => void) => void; } -export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth, onOpen }: CalendarDayProps) => { - const [opened, setOpened] = useState(false); - const [pinned, setPinned] = useState(false); - const { primaryColor } = useMantineTheme(); - const { ref, height } = useElementSize(); +export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth }: CalendarDayProps) => { const board = useRequiredBoard(); const mantineTheme = useMantineTheme(); const actualItemRadius = mantineTheme.radius[board.itemRadius]; @@ -29,39 +22,19 @@ export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth, onO const shouldScaleDown = minAxisSize < 350; const isSmall = rootHeight < 256; - const isTooSmallForIndicators = height < 30; - - const handleMouseEnter = useCallback(() => { - if (disabled) return; - onOpen(() => { - setOpened(false); - setPinned(false); - }); - setOpened(true); - }, [disabled, onOpen]); - - const handleMouseLeave = useCallback(() => { - if (!pinned) setOpened(false); - }, [pinned]); - return ( - { - setOpened(value); - if (!value) setPinned(false); - }} - opened={opened} + transitionProps={{ transition: "pop" }} + openDelay={350} + closeDelay={400} disabled={disabled} > - + { - if (!disabled) setPinned((prev) => !prev); - }} - onMouseEnter={handleMouseEnter} - onMouseLeave={handleMouseLeave} > {date.getDate()} - {!isTooSmallForIndicators && } + - - {/* Popover has some offset on the left side, padding is removed because of scrollarea paddings */} - setOpened(true)} - onMouseLeave={handleMouseLeave} - > + + - - + + ); }; @@ -111,7 +69,6 @@ interface NotificationIndicatorProps { const NotificationIndicator = ({ events, isSmall }: NotificationIndicatorProps) => { const notificationEvents = [...new Set(events.map((event) => event.indicatorColor))].filter(String); - /* position bottom is lower when small to not be on top of number*/ return ( splitEvents(events), [events]); - const activeCloseRef = useRef<(() => void) | null>(null); - const onDayOpen = useCallback((close: () => void) => { - activeCloseRef.current?.(); - activeCloseRef.current = close; - }, []); return ( ); }}