diff --git a/packages/widgets/src/calendar/calender-day.module.css b/packages/widgets/src/calendar/calender-day.module.css new file mode 100644 index 000000000..01be2aa8b --- /dev/null +++ b/packages/widgets/src/calendar/calender-day.module.css @@ -0,0 +1,7 @@ +.day { + border: 2px solid transparent; +} + +.day[aria-expanded="true"] { + border-color: var(--mantine-primary-color-filled); +} diff --git a/packages/widgets/src/calendar/calender-day.tsx b/packages/widgets/src/calendar/calender-day.tsx index 70f2f26a8..be6d9d63f 100644 --- a/packages/widgets/src/calendar/calender-day.tsx +++ b/packages/widgets/src/calendar/calender-day.tsx @@ -1,4 +1,3 @@ -import { useCallback, useState } from "react"; import { Box, Container, Flex, Popover, Text, useMantineTheme } from "@mantine/core"; import { useElementSize } from "@mantine/hooks"; @@ -6,6 +5,7 @@ import { useRequiredBoard } from "@homarr/boards/context"; import type { CalendarEvent } from "@homarr/integrations/types"; import { CalendarEventList } from "./calendar-event-list"; +import classes from "./calender-day.module.css"; interface CalendarDayProps { date: Date; @@ -13,13 +13,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(); +export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth }: CalendarDayProps) => { const { ref, height } = useElementSize(); const board = useRequiredBoard(); const mantineTheme = useMantineTheme(); @@ -31,19 +27,6 @@ export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth, onO 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" }} disabled={disabled} > @@ -70,17 +46,12 @@ export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth, onO pb={isSmall ? 0 : 10} m={0} ref={ref} - bd={`2px solid ${opened && !disabled ? primaryColor : "transparent"}`} + className={classes.day} style={{ alignContent: "center", borderRadius: actualItemRadius, cursor: disabled ? "default" : "pointer", }} - onClick={() => { - if (!disabled) setPinned((prev) => !prev); - }} - onMouseEnter={handleMouseEnter} - onMouseLeave={handleMouseLeave} > {date.getDate()} @@ -88,16 +59,7 @@ export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth, onO {!isTooSmallForIndicators && } - {/* Popover has some offset on the left side, padding is removed because of scrollarea paddings */} - setOpened(true)} - onMouseLeave={handleMouseLeave} - > + @@ -111,7 +73,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 ( ); }}