/** @jsxRuntime classic */ /** @jsx jsx */ import { FC, useMemo, useState, useEffect } from 'react'; import { jsx, useTheme } from '@emotion/react'; import { Droppable } from '../Droppable'; import { Draggable } from './Draggable'; import { IDayToDropProps, ISlot } from '../../types'; import { useMiddlewareContext } from '../../hooks/useMiddlewareContext'; import { collisionGroupContainer, moreItemsButton, moreModal, weekDayToDropContainer, } from '../styles'; import { calculateModalPosition } from '../../utils'; import { BnClose } from '../../../icons/BnClose'; import { AddNewSlotButtons } from './AddNewSlotButtons'; export const DayToDrop: FC = ({ id, EventComponent, withoutChildren, hiddenEvents, onAddNewSlotClick, }) => { const { partialRanges, options, getPartialEvents, getEventsGroups, isResizing, eventsToSpaces, } = useMiddlewareContext(); const { partialRendering } = options; const colors = useTheme(); const [hover, setHover] = useState(false); const eventsGroups = useMemo(() => { const events = hiddenEvents ? [] : ((Array.isArray(eventsToSpaces?.[id]) ? partialRendering ? getPartialEvents( eventsToSpaces[id], partialRanges.vertical.from, partialRanges.vertical.to ) : eventsToSpaces[id] : []) as ISlot[]); return getEventsGroups(events); }, [ eventsToSpaces, id, partialRanges.vertical.from, partialRanges.vertical.to, partialRendering, hiddenEvents, ]); const eventsFullGroups = useMemo(() => { const events = hiddenEvents ? [] : ((Array.isArray(eventsToSpaces?.[id]) ? eventsToSpaces[id] : []) as ISlot[]); return getEventsGroups(events); }, [eventsToSpaces, id, hiddenEvents]); const [modals, setModals] = useState([]); useEffect(() => { setModals(Array(eventsGroups.length).fill(false)); }, [eventsGroups]); const handleToggleModal = (index: number) => { let newModals = modals.slice(); newModals[index] = !newModals[index]; setModals(newModals); }; const MAX_COUNT = 4; return (
setHover(true)} onMouseLeave={() => setHover(false)} css={weekDayToDropContainer(colors, withoutChildren)} > {eventsGroups.map((group, index) => { const withModal = (group.groups?.length || 0) > MAX_COUNT; if (Array.isArray(group.groups)) { const moreItemsCount = withModal ? group.groups .slice(3) .reduce((acc, events) => acc + events.length, 0) : 0; const element = document.querySelector(`#group-${index}`); const box = element as HTMLElement; const container = box?.parentElement; const boxW = container?.parentElement?.parentElement; const containerW = boxW?.parentElement; return (
{group.groups?.map((groupItems, index) => { return (
{groupItems.map((event) => ( ))}
); })} {withModal && ( )} {withModal && modals[index] && (
handleToggleModal(index)}>
{group.items.map((event) => (
))}
)}
); } else if (group.item) { return ( ); } else { return null; } })} {hover && !isResizing && ( )}
); };