@mantine/schedule 9.6.3 → 9.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/components/DayView/DayView.cjs +46 -31
- package/cjs/components/DayView/DayView.cjs.map +1 -1
- package/cjs/components/DayView/DayView.module.cjs.map +1 -1
- package/cjs/components/MonthView/MonthView.cjs +11 -4
- package/cjs/components/MonthView/MonthView.cjs.map +1 -1
- package/cjs/components/MonthView/get-month-view-events/get-month-positioned-events.cjs +10 -8
- package/cjs/components/MonthView/get-month-view-events/get-month-positioned-events.cjs.map +1 -1
- package/cjs/components/MonthView/get-month-view-events/reserve-row.cjs +12 -0
- package/cjs/components/MonthView/get-month-view-events/reserve-row.cjs.map +1 -0
- package/cjs/components/ResourcesDayView/ResourcesDayView.cjs +75 -60
- package/cjs/components/ResourcesDayView/ResourcesDayView.cjs.map +1 -1
- package/cjs/components/ResourcesDayView/ResourcesDayView.module.cjs.map +1 -1
- package/cjs/components/ResourcesMonthView/ResourcesMonthView.cjs +19 -7
- package/cjs/components/ResourcesMonthView/ResourcesMonthView.cjs.map +1 -1
- package/cjs/components/ResourcesSchedule/ResourcesSchedule.cjs +6 -1
- package/cjs/components/ResourcesSchedule/ResourcesSchedule.cjs.map +1 -1
- package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs +85 -58
- package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs.map +1 -1
- package/cjs/components/ResourcesWeekView/ResourcesWeekView.module.cjs.map +1 -1
- package/cjs/components/Schedule/Schedule.cjs +14 -1
- package/cjs/components/Schedule/Schedule.cjs.map +1 -1
- package/cjs/components/ScheduleEvent/ScheduleEvent.module.cjs.map +1 -1
- package/cjs/components/WeekView/WeekView.cjs +70 -46
- package/cjs/components/WeekView/WeekView.cjs.map +1 -1
- package/cjs/components/WeekView/WeekView.module.cjs.map +1 -1
- package/cjs/hooks/use-day-grid-event-resize.cjs +38 -8
- package/cjs/hooks/use-day-grid-event-resize.cjs.map +1 -1
- package/cjs/hooks/use-drag-drop-handlers.cjs +126 -10
- package/cjs/hooks/use-drag-drop-handlers.cjs.map +1 -1
- package/cjs/hooks/use-event-resize.cjs +36 -12
- package/cjs/hooks/use-event-resize.cjs.map +1 -1
- package/cjs/hooks/use-horizontal-event-resize.cjs +37 -12
- package/cjs/hooks/use-horizontal-event-resize.cjs.map +1 -1
- package/cjs/hooks/validate-event-resize.cjs +37 -0
- package/cjs/hooks/validate-event-resize.cjs.map +1 -0
- package/cjs/index.cjs +2 -0
- package/cjs/utils/is-event-placement-allowed/is-event-placement-allowed.cjs +52 -0
- package/cjs/utils/is-event-placement-allowed/is-event-placement-allowed.cjs.map +1 -0
- package/esm/components/DayView/DayView.mjs +46 -31
- package/esm/components/DayView/DayView.mjs.map +1 -1
- package/esm/components/DayView/DayView.module.mjs.map +1 -1
- package/esm/components/MonthView/MonthView.mjs +11 -4
- package/esm/components/MonthView/MonthView.mjs.map +1 -1
- package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs +10 -8
- package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs.map +1 -1
- package/esm/components/MonthView/get-month-view-events/reserve-row.mjs +12 -0
- package/esm/components/MonthView/get-month-view-events/reserve-row.mjs.map +1 -0
- package/esm/components/ResourcesDayView/ResourcesDayView.mjs +75 -60
- package/esm/components/ResourcesDayView/ResourcesDayView.mjs.map +1 -1
- package/esm/components/ResourcesDayView/ResourcesDayView.module.mjs.map +1 -1
- package/esm/components/ResourcesMonthView/ResourcesMonthView.mjs +19 -7
- package/esm/components/ResourcesMonthView/ResourcesMonthView.mjs.map +1 -1
- package/esm/components/ResourcesSchedule/ResourcesSchedule.mjs +6 -1
- package/esm/components/ResourcesSchedule/ResourcesSchedule.mjs.map +1 -1
- package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs +85 -58
- package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs.map +1 -1
- package/esm/components/ResourcesWeekView/ResourcesWeekView.module.mjs.map +1 -1
- package/esm/components/Schedule/Schedule.mjs +14 -1
- package/esm/components/Schedule/Schedule.mjs.map +1 -1
- package/esm/components/ScheduleEvent/ScheduleEvent.module.mjs.map +1 -1
- package/esm/components/WeekView/WeekView.mjs +70 -46
- package/esm/components/WeekView/WeekView.mjs.map +1 -1
- package/esm/components/WeekView/WeekView.module.mjs.map +1 -1
- package/esm/hooks/use-day-grid-event-resize.mjs +38 -8
- package/esm/hooks/use-day-grid-event-resize.mjs.map +1 -1
- package/esm/hooks/use-drag-drop-handlers.mjs +126 -10
- package/esm/hooks/use-drag-drop-handlers.mjs.map +1 -1
- package/esm/hooks/use-event-resize.mjs +36 -12
- package/esm/hooks/use-event-resize.mjs.map +1 -1
- package/esm/hooks/use-horizontal-event-resize.mjs +37 -12
- package/esm/hooks/use-horizontal-event-resize.mjs.map +1 -1
- package/esm/hooks/validate-event-resize.mjs +37 -0
- package/esm/hooks/validate-event-resize.mjs.map +1 -0
- package/esm/index.mjs +2 -1
- package/esm/utils/is-event-placement-allowed/is-event-placement-allowed.mjs +50 -0
- package/esm/utils/is-event-placement-allowed/is-event-placement-allowed.mjs.map +1 -0
- package/lib/components/DayView/DayView.d.ts +11 -1
- package/lib/components/MonthView/MonthView.d.ts +9 -1
- package/lib/components/MonthView/get-month-view-events/reserve-row.d.ts +7 -0
- package/lib/components/ResourcesDayView/ResourcesDayView.d.ts +11 -1
- package/lib/components/ResourcesMonthView/ResourcesMonthView.d.ts +11 -1
- package/lib/components/ResourcesSchedule/ResourcesSchedule.d.ts +12 -2
- package/lib/components/ResourcesWeekView/ResourcesWeekView.d.ts +11 -1
- package/lib/components/Schedule/Schedule.d.ts +12 -2
- package/lib/components/WeekView/WeekView.d.ts +11 -1
- package/lib/hooks/use-day-grid-event-resize.d.ts +4 -2
- package/lib/hooks/use-drag-drop-handlers.d.ts +17 -1
- package/lib/hooks/use-event-resize.d.ts +4 -2
- package/lib/hooks/use-horizontal-event-resize.d.ts +4 -2
- package/lib/hooks/validate-event-resize.d.ts +33 -0
- package/lib/types.d.ts +65 -0
- package/lib/utils/index.d.ts +2 -0
- package/lib/utils/is-event-placement-allowed/is-event-placement-allowed.d.ts +22 -0
- package/package.json +6 -6
- package/styles.css +29 -0
- package/styles.layer.css +29 -0
- package/cjs/components/MonthView/get-month-view-events/find-available-row.cjs +0 -18
- package/cjs/components/MonthView/get-month-view-events/find-available-row.cjs.map +0 -1
- package/esm/components/MonthView/get-month-view-events/find-available-row.mjs +0 -16
- package/esm/components/MonthView/get-month-view-events/find-available-row.mjs.map +0 -1
- package/lib/components/MonthView/get-month-view-events/find-available-row.d.ts +0 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourcesMonthView.cjs","names":["createVarsResolver","getRadius","rem","factory","useProps","useStyles","useResolvedStylesApi","useMantineTheme","useDatesContext","useMemo","getOrderedResources","useRef","useMergedRef","useCallback","expandRecurringEvents","useDayGridEventResize","useDragDropHandlers","calculateMonthDropDate","getGroupToResourceIdMap","useSlotDragSelect","Box","formatDate","getIndexFromDragPoint","ScheduleEvent","MoreEvents","UnstyledButton","ScheduleHeaderBase","toDateString","ScrollArea","getLabel","DragContext","classes"],"sources":["../../../src/components/ResourcesMonthView/ResourcesMonthView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useMemo, useRef } from 'react';\nimport {\n Box,\n BoxProps,\n createVarsResolver,\n DataAttributes,\n ElementProps,\n factory,\n Factory,\n getRadius,\n MantineRadius,\n rem,\n ScrollArea,\n ScrollAreaProps,\n StylesApiProps,\n UnstyledButton,\n useMantineTheme,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '@mantine/core';\nimport { useDatesContext } from '@mantine/dates';\nimport { useIsomorphicEffect, useMergedRef } from '@mantine/hooks';\nimport { useDayGridEventResize } from '../../hooks/use-day-grid-event-resize';\nimport { useDragDropHandlers } from '../../hooks/use-drag-drop-handlers';\nimport { useSlotDragSelect } from '../../hooks/use-slot-drag-select';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport {\n DateLabelFormat,\n DateStringValue,\n DateTimeStringValue,\n DayOfWeek,\n ScheduleEventData,\n ScheduleMode,\n ScheduleResourceData,\n ScheduleResourceGroup,\n ScheduleViewLevel,\n} from '../../types';\nimport {\n calculateMonthDropDate,\n expandRecurringEvents,\n formatDate,\n getGroupToResourceIdMap,\n getIndexFromDragPoint,\n getOrderedResources,\n toDateString,\n} from '../../utils';\nimport { DragContext } from '../DragContext/DragContext';\nimport { MoreEvents, MoreEventsProps, MoreEventsStylesNames } from '../MoreEvents/MoreEvents';\nimport { RenderEvent, RenderEventBody, ScheduleEvent } from '../ScheduleEvent/ScheduleEvent';\nimport { MonthYearSelectProps } from '../ScheduleHeader/MonthYearSelect/MonthYearSelect';\nimport { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';\nimport { ScheduleHeaderBase } from '../ScheduleHeader/ScheduleHeaderBase';\nimport { ViewSelectProps } from '../ScheduleHeader/ViewSelect/ViewSelect';\nimport classes from './ResourcesMonthView.module.css';\n\nexport type ResourcesMonthViewStylesNames =\n | 'resourcesMonthView'\n | 'resourcesMonthViewRoot'\n | 'resourcesMonthViewScrollArea'\n | 'resourcesMonthViewDayLabelsRow'\n | 'resourcesMonthViewCorner'\n | 'resourcesMonthViewDayLabel'\n | 'resourcesMonthViewDayLabelWeekday'\n | 'resourcesMonthViewDayLabelNumber'\n | 'resourcesMonthViewRow'\n | 'resourcesMonthViewResourceLabel'\n | 'resourcesMonthViewRowSlots'\n | 'resourcesMonthViewCell'\n | 'resourcesMonthViewEventWrapper'\n | 'resourcesMonthViewResizeHandle'\n | 'resourcesMonthViewInner'\n | 'resourcesMonthViewGroupColumn'\n | 'resourcesMonthViewGroupColumnEmpty'\n | MoreEventsStylesNames\n | CombinedScheduleHeaderStylesNames;\n\nexport type ResourcesMonthViewCssVariables = {\n resourcesMonthView:\n | '--resources-month-view-radius'\n | '--resources-month-view-day-width'\n | '--resources-month-view-row-height'\n | '--resources-month-view-group-label-width';\n};\n\nexport interface ResourcesMonthViewProps\n extends BoxProps, StylesApiProps<ResourcesMonthViewFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Date to display, Date object or date string in `YYYY-MM-DD` format */\n date: Date | string;\n\n /** Called with the new date value when a date is selected */\n onDateChange?: (value: DateStringValue) => void;\n\n /** List of resources to display as rows */\n resources: ScheduleResourceData[];\n\n /** Locale passed down to dayjs */\n locale?: string;\n\n /** `dayjs` format for weekdays in day column headers @default 'dd' */\n weekdayFormat?: DateLabelFormat;\n\n /** Indices of weekend days */\n weekendDays?: DayOfWeek[];\n\n /** If set to false, weekend days are hidden @default true */\n withWeekendDays?: boolean;\n\n /** Date to scroll to on initial render, in `YYYY-MM-DD` format */\n startScrollDate?: string;\n\n /** Called when a cell is clicked, includes resourceId */\n onDayClick?: (data: {\n date: DateStringValue;\n nativeEvent: React.MouseEvent<HTMLButtonElement>;\n resourceId?: string | number;\n }) => void;\n\n /** If set, highlights the current day @default true */\n highlightToday?: boolean;\n\n /** Key of `theme.radius` or any valid CSS value to set `border-radius` @default theme.defaultRadius */\n radius?: MantineRadius;\n\n /** If set, the header is displayed @default true */\n withHeader?: boolean;\n\n /** Props passed down to `MonthYearSelect` component */\n monthYearSelectProps?: Partial<MonthYearSelectProps>;\n\n /** Called when view level select button is clicked */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Props passed to previous control */\n previousControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to next control */\n nextControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to today control */\n todayControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to view level select */\n viewSelectProps?: Partial<ViewSelectProps> & DataAttributes;\n\n /** Events to display */\n events?: ScheduleEventData[];\n\n /** Width of each day column @default 40px */\n dayWidth?: React.CSSProperties['width'];\n\n /** Height of each resource row @default 48px */\n rowHeight?: React.CSSProperties['height'];\n\n /** Function to customize event body */\n renderEventBody?: RenderEventBody;\n\n /** Function to fully customize event rendering */\n renderEvent?: RenderEvent;\n\n /** Function to customize resource label rendering */\n renderResourceLabel?: (resource: ScheduleResourceData) => React.ReactNode;\n\n /** List of resource groups to display as a column to the left of resource labels */\n groups?: ScheduleResourceGroup[];\n\n /** Function to customize group label rendering */\n renderGroupLabel?: (group: ScheduleResourceGroup) => React.ReactNode;\n\n /** Width of the group label column @default 80px */\n groupLabelWidth?: React.CSSProperties['width'];\n\n /** If true, events can be dragged and dropped @default false */\n withEventsDragAndDrop?: boolean;\n\n /** Called when event is dropped, includes target resourceId */\n onEventDrop?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n resourceId?: string | number;\n }) => void;\n\n /** Function to determine if event can be dragged */\n canDragEvent?: (event: ScheduleEventData) => boolean;\n\n /** Called when any event drag starts */\n onEventDragStart?: (event: ScheduleEventData) => void;\n\n /** Called when any event drag ends */\n onEventDragEnd?: () => void;\n\n /** If true, events can be resized by dragging their start and end edges, resizing snaps to whole days @default false */\n withEventResize?: boolean;\n\n /** Called when event is resized */\n onEventResize?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => void;\n\n /** Function to determine if event can be resized */\n canResizeEvent?: (event: ScheduleEventData) => boolean;\n\n /** Called when event is clicked */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** If set, enables drag-to-select day ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a day range is selected by dragging, includes resourceId */\n onSlotDragEnd?: (data: {\n rangeStart: DateTimeStringValue;\n rangeEnd: DateTimeStringValue;\n resourceId?: string | number;\n }) => void;\n\n /** Labels override for i18n */\n labels?: ScheduleLabelsOverride;\n\n /** Interaction mode @default default */\n mode?: ScheduleMode;\n\n /** Props passed down to `ScrollArea` component */\n scrollAreaProps?: Partial<ScrollAreaProps> & DataAttributes;\n\n /** Called when an external item is dropped */\n onExternalEventDrop?: (data: {\n dataTransfer: DataTransfer;\n dropDateTime: DateTimeStringValue;\n resourceId?: string | number;\n }) => void;\n\n /** Maximum number of events visible per cell before \"+more\" indicator @default 2 */\n maxEventsPerTimeSlot?: number;\n\n /** Props passed down to `MoreEvents` component */\n moreEventsProps?: Partial<MoreEventsProps>;\n\n /** Max number of generated recurring instances @default 2000 */\n recurrenceExpansionLimit?: number;\n}\n\nexport type ResourcesMonthViewFactory = Factory<{\n props: ResourcesMonthViewProps;\n ref: HTMLDivElement;\n stylesNames: ResourcesMonthViewStylesNames;\n vars: ResourcesMonthViewCssVariables;\n}>;\n\nconst varsResolver = createVarsResolver<ResourcesMonthViewFactory>(\n (_theme, { radius, dayWidth, rowHeight, groupLabelWidth }) => ({\n resourcesMonthView: {\n '--resources-month-view-radius': radius ? getRadius(radius) : undefined,\n '--resources-month-view-day-width': rem(dayWidth),\n '--resources-month-view-row-height': rem(rowHeight),\n '--resources-month-view-group-label-width': rem(groupLabelWidth),\n },\n })\n);\n\nconst defaultProps = {\n __staticSelector: 'ResourcesMonthView',\n highlightToday: true,\n withHeader: true,\n weekdayFormat: 'ddd',\n withWeekendDays: true,\n withEventsDragAndDrop: false,\n withDragSlotSelect: false,\n withEventResize: false,\n mode: 'default',\n} satisfies Partial<ResourcesMonthViewProps>;\n\nfunction compareCellEvents(a: ScheduleEventData, b: ScheduleEventData): number {\n const aStart = dayjs(a.start);\n const bStart = dayjs(b.start);\n const aSpan = dayjs(a.end).startOf('day').diff(aStart.startOf('day'), 'day');\n const bSpan = dayjs(b.end).startOf('day').diff(bStart.startOf('day'), 'day');\n\n if (aSpan !== bSpan) {\n return bSpan - aSpan;\n }\n\n return aStart.valueOf() - bStart.valueOf();\n}\n\nfunction getFirstAvailableRow(usedRows: Set<number>, maxRows: number): number | null {\n for (let row = 0; row < maxRows; row += 1) {\n if (!usedRows.has(row)) {\n return row;\n }\n }\n\n return null;\n}\n\ninterface ResourcesMonthViewCellLayout {\n visible: { event: ScheduleEventData; row: number }[];\n hiddenCount: number;\n}\n\ninterface ResourcesMonthViewSegment {\n event: ScheduleEventData;\n startDayIndex: number;\n endDayIndex: number;\n row: number;\n clipStart: boolean;\n clipEnd: boolean;\n hanging: 'start' | 'end' | 'both' | 'none';\n\n /** True when any day the segment covers shows a \"+N more\" indicator (those days compress rows) */\n hiddenInSpan: boolean;\n}\n\ninterface ResourcesMonthViewResourceLayout {\n byDay: Record<string, ResourcesMonthViewCellLayout>;\n segments: ResourcesMonthViewSegment[];\n}\n\nfunction isMultiDayEvent(event: ScheduleEventData): boolean {\n return dayjs(event.end).startOf('day').isAfter(dayjs(event.start).startOf('day'));\n}\n\nexport const ResourcesMonthView = factory<ResourcesMonthViewFactory>((_props) => {\n const props = useProps('ResourcesMonthView', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n attributes,\n vars,\n mod,\n date,\n onDateChange,\n resources,\n locale,\n weekdayFormat,\n weekendDays,\n withWeekendDays,\n startScrollDate,\n __staticSelector,\n onDayClick,\n highlightToday,\n radius,\n withHeader,\n monthYearSelectProps,\n onViewChange,\n todayControlProps,\n nextControlProps,\n previousControlProps,\n viewSelectProps,\n events,\n dayWidth,\n rowHeight,\n renderResourceLabel,\n groups,\n renderGroupLabel,\n groupLabelWidth,\n renderEventBody,\n renderEvent,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n withEventResize,\n onEventResize,\n canResizeEvent,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n labels,\n mode,\n scrollAreaProps,\n onExternalEventDrop,\n maxEventsPerTimeSlot: _maxEventsPerTimeSlot,\n moreEventsProps,\n recurrenceExpansionLimit,\n ...others\n } = props;\n\n const maxEventsPerTimeSlot = Math.min(10, Math.max(1, _maxEventsPerTimeSlot ?? 2));\n\n const getStyles = useStyles<ResourcesMonthViewFactory>({\n name: __staticSelector,\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n varsResolver,\n rootSelector: 'resourcesMonthView',\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<ResourcesMonthViewFactory>({\n classNames,\n styles,\n props,\n });\n\n const stylesApiProps = {\n classNames: resolvedClassNames,\n styles: resolvedStyles,\n attributes,\n __staticSelector,\n radius,\n };\n\n const theme = useMantineTheme();\n const ctx = useDatesContext();\n const resolvedWeekendDays = ctx.getWeekendDays(weekendDays);\n const { orderedResources, groupRanges, resourceGroupMap } = useMemo(\n () => getOrderedResources(resources, groups),\n [resources, groups]\n );\n const hasGroups = groupRanges.length > 0;\n\n const monthDays = useMemo(() => {\n const start = dayjs(date).startOf('month');\n const daysCount = start.endOf('month').date();\n const weekendDayList = ctx.getWeekendDays(weekendDays);\n const days: string[] = [];\n for (let d = 1; d <= daysCount; d++) {\n const day = start.date(d);\n if (!withWeekendDays && weekendDayList.includes(day.day() as DayOfWeek)) {\n continue;\n }\n days.push(day.format('YYYY-MM-DD'));\n }\n return days;\n }, [date, withWeekendDays, weekendDays, ctx]);\n\n const viewportRef = useRef<HTMLDivElement>(null);\n const mergedViewportRef = useMergedRef(viewportRef, scrollAreaProps?.viewportRef);\n const dayLabelRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n const resourceLabelRef = useRef<HTMLDivElement>(null);\n\n const scrollToDay = useCallback(\n (targetDate: string) => {\n if (!viewportRef.current) {\n return;\n }\n const targetIndex = monthDays.indexOf(targetDate);\n if (targetIndex < 0) {\n return;\n }\n const targetLabel = dayLabelRefs.current[targetIndex];\n if (!targetLabel) {\n return;\n }\n const labelRect = targetLabel.getBoundingClientRect();\n const viewportRect = viewportRef.current.getBoundingClientRect();\n const labelWidth = resourceLabelRef.current?.getBoundingClientRect().width ?? 0;\n viewportRef.current.scrollTo({\n left: labelRect.left - viewportRect.left - labelWidth,\n top: 0,\n });\n },\n [monthDays]\n );\n\n useIsomorphicEffect(() => {\n if (startScrollDate) {\n scrollToDay(startScrollDate);\n }\n }, []);\n\n const expandedEvents = useMemo(\n () =>\n expandRecurringEvents({\n events,\n rangeStart: dayjs(date).startOf('month').toDate(),\n rangeEnd: dayjs(date).endOf('month').toDate(),\n expansionLimit: recurrenceExpansionLimit,\n }),\n [events, date, recurrenceExpansionLimit]\n );\n\n const monthDaySet = useMemo(() => new Set(monthDays), [monthDays]);\n\n const eventResize = useDayGridEventResize({\n enabled: withEventResize,\n mode,\n onEventResize,\n canResizeEvent,\n });\n\n const { resizingEventId, previewStart, previewEnd } = eventResize;\n\n const layoutEvents = useMemo(() => {\n if (resizingEventId === null || previewStart === null || previewEnd === null) {\n return expandedEvents;\n }\n\n return expandedEvents.map((event) =>\n event.id === resizingEventId ? { ...event, start: previewStart, end: previewEnd } : event\n );\n }, [expandedEvents, resizingEventId, previewStart, previewEnd]);\n\n const { eventsByResourceAndDay, eventLayoutByResource } = useMemo(() => {\n const eventsByResourceAndDay: Record<string | number, Record<string, ScheduleEventData[]>> = {};\n for (const resource of resources) {\n eventsByResourceAndDay[resource.id] = {};\n for (const day of monthDays) {\n eventsByResourceAndDay[resource.id][day] = [];\n }\n }\n\n if (layoutEvents) {\n for (const event of layoutEvents) {\n if (event.resourceId === undefined || !(event.resourceId in eventsByResourceAndDay)) {\n continue;\n }\n\n const eventStart = dayjs(event.start);\n const eventEnd = dayjs(event.end);\n\n for (const day of monthDays) {\n const dayStart = dayjs(day).startOf('day');\n const dayEnd = dayjs(day).endOf('day');\n\n if (eventStart.isBefore(dayEnd) && eventEnd.isAfter(dayStart)) {\n eventsByResourceAndDay[event.resourceId][day].push(event);\n }\n }\n }\n }\n\n const eventLayoutByResource: Record<string | number, ResourcesMonthViewResourceLayout> = {};\n const monthRangeStart = dayjs(monthDays[0]).startOf('day');\n const monthEndExclusive = dayjs(monthDays[monthDays.length - 1])\n .add(1, 'day')\n .startOf('day');\n\n for (const resource of resources) {\n const byDay: Record<string, ResourcesMonthViewCellLayout> = {};\n const lastRow = new Map<string | number, number>();\n const rowByEventDay = new Map<string | number, Map<number, number>>();\n const overlapByEvent = new Map<\n string | number,\n { event: ScheduleEventData; days: number[] }\n >();\n\n monthDays.forEach((day, dayIndex) => {\n const dayEvents = eventsByResourceAndDay[resource.id][day];\n dayEvents.sort(compareCellEvents);\n\n for (const event of dayEvents) {\n const overlap = overlapByEvent.get(event.id);\n if (overlap) {\n overlap.days.push(dayIndex);\n } else {\n overlapByEvent.set(event.id, { event, days: [dayIndex] });\n }\n }\n\n const usedRows = new Set<number>();\n const visible: ResourcesMonthViewCellLayout['visible'] = [];\n let hiddenCount = 0;\n\n for (const event of dayEvents) {\n let row: number | null | undefined = lastRow.get(event.id);\n\n if (row === undefined || row >= maxEventsPerTimeSlot || usedRows.has(row)) {\n row = getFirstAvailableRow(usedRows, maxEventsPerTimeSlot);\n }\n\n if (row === null) {\n hiddenCount += 1;\n continue;\n }\n\n usedRows.add(row);\n visible.push({ event, row });\n if (!rowByEventDay.has(event.id)) {\n rowByEventDay.set(event.id, new Map());\n }\n rowByEventDay.get(event.id)!.set(dayIndex, row);\n lastRow.set(event.id, row);\n }\n\n byDay[day] = { visible, hiddenCount };\n });\n\n const segments: ResourcesMonthViewSegment[] = [];\n\n for (const { event, days } of overlapByEvent.values()) {\n if (!isMultiDayEvent(event)) {\n continue;\n }\n\n const firstOverlap = days[0];\n const lastOverlap = days[days.length - 1];\n const rows = rowByEventDay.get(event.id);\n const extendsBefore = dayjs(event.start).isBefore(monthRangeStart);\n const extendsAfter = dayjs(event.end).isAfter(monthEndExclusive);\n let run: { startDayIndex: number; endDayIndex: number; row: number } | null = null;\n\n const flushRun = () => {\n if (!run) {\n return;\n }\n const clipStart = run.startDayIndex > firstOverlap;\n const clipEnd = run.endDayIndex < lastOverlap;\n const hangStart = !clipStart && extendsBefore;\n const hangEnd = !clipEnd && extendsAfter;\n let hiddenInSpan = false;\n for (let dayIndex = run.startDayIndex; dayIndex <= run.endDayIndex; dayIndex += 1) {\n if ((byDay[monthDays[dayIndex]]?.hiddenCount ?? 0) > 0) {\n hiddenInSpan = true;\n break;\n }\n }\n segments.push({\n event,\n startDayIndex: run.startDayIndex,\n endDayIndex: run.endDayIndex,\n row: run.row,\n clipStart,\n clipEnd,\n hanging: hangStart && hangEnd ? 'both' : hangStart ? 'start' : hangEnd ? 'end' : 'none',\n hiddenInSpan,\n });\n run = null;\n };\n\n for (let dayIndex = firstOverlap; dayIndex <= lastOverlap; dayIndex += 1) {\n const row = rows?.get(dayIndex);\n\n if (row === undefined) {\n flushRun();\n continue;\n }\n\n if (run && run.row === row && run.endDayIndex === dayIndex - 1) {\n run.endDayIndex = dayIndex;\n } else {\n flushRun();\n run = { startDayIndex: dayIndex, endDayIndex: dayIndex, row };\n }\n }\n\n flushRun();\n }\n\n eventLayoutByResource[resource.id] = { byDay, segments };\n }\n\n return { eventsByResourceAndDay, eventLayoutByResource };\n }, [resources, monthDays, layoutEvents, maxEventsPerTimeSlot]);\n\n type DropTargetCell = { day: string; resourceId: string | number };\n\n const handleExternalDrop = useCallback(\n (e: React.DragEvent, target: DropTargetCell) => {\n if (!onExternalEventDrop) {\n return;\n }\n onExternalEventDrop({\n dataTransfer: e.dataTransfer,\n dropDateTime: `${dayjs(target.day).format('YYYY-MM-DD')} 00:00:00`,\n resourceId: target.resourceId,\n });\n },\n [onExternalEventDrop]\n );\n\n const dragDrop = useDragDropHandlers<DropTargetCell>({\n enabled: withEventsDragAndDrop,\n mode,\n onEventDrop: (data) => {\n onEventDrop?.({ ...data, resourceId: lastDropResourceId.current });\n },\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget: (target: DropTargetCell, draggedEvent: ScheduleEventData) => {\n lastDropResourceId.current = target.resourceId;\n return calculateMonthDropDate({ draggedEvent, targetDay: target.day });\n },\n onExternalDrop: onExternalEventDrop ? handleExternalDrop : undefined,\n });\n\n const lastDropResourceId = useRef<string | number | undefined>(undefined);\n\n const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== 'static';\n\n const groupToResourceId = useMemo(() => getGroupToResourceIdMap(resources), [resources]);\n\n const slotDragSelect = useSlotDragSelect({\n enabled: withDragSlotSelect && mode !== 'static',\n onDragEnd: (startIndex, endIndex, group) => {\n if (!onSlotDragEnd) {\n return;\n }\n const startDay = monthDays[startIndex];\n const endDay = monthDays[endIndex];\n if (startDay && endDay) {\n onSlotDragEnd({\n rangeStart: dayjs(startDay).startOf('day').format('YYYY-MM-DD HH:mm:ss'),\n rangeEnd: dayjs(endDay).endOf('day').format('YYYY-MM-DD HH:mm:ss'),\n resourceId: groupToResourceId.get(group) ?? group,\n });\n }\n },\n });\n\n const dayLabels = monthDays.map((day, dayIndex) => {\n const d = dayjs(day);\n const weekend = resolvedWeekendDays.includes(d.day() as DayOfWeek);\n const today = d.isSame(dayjs(), 'day') && highlightToday;\n\n return (\n <Box\n {...getStyles('resourcesMonthViewDayLabel')}\n key={day}\n mod={{ weekend, today }}\n ref={(node) => {\n dayLabelRefs.current[dayIndex] = node;\n }}\n >\n <span {...getStyles('resourcesMonthViewDayLabelWeekday')}>\n {formatDate({ date: d, locale: ctx.getLocale(locale), format: weekdayFormat })}\n </span>\n <span {...getStyles('resourcesMonthViewDayLabelNumber')}>{d.date()}</span>\n </Box>\n );\n });\n\n const cellsRef = useRef<HTMLButtonElement[][]>([]);\n\n const getDayIndexFromDragPoint = useCallback((event: React.DragEvent, resourceIndex: number) => {\n return getIndexFromDragPoint(cellsRef.current[resourceIndex] ?? [], event.clientX);\n }, []);\n\n const handleCellKeyDown = (\n event: React.KeyboardEvent<HTMLButtonElement>,\n resourceIndex: number,\n dayIndex: number\n ) => {\n const key = event.key;\n let nextResourceIndex = resourceIndex;\n let nextDayIndex = dayIndex;\n\n if (key === 'ArrowRight') {\n nextDayIndex = Math.min(dayIndex + 1, monthDays.length - 1);\n } else if (key === 'ArrowLeft') {\n nextDayIndex = Math.max(dayIndex - 1, 0);\n } else if (key === 'ArrowDown') {\n nextResourceIndex = Math.min(resourceIndex + 1, resources.length - 1);\n } else if (key === 'ArrowUp') {\n nextResourceIndex = Math.max(resourceIndex - 1, 0);\n } else {\n return;\n }\n\n event.preventDefault();\n cellsRef.current[nextResourceIndex]?.[nextDayIndex]?.focus();\n };\n\n const rowHeightPercent = 100 / maxEventsPerTimeSlot;\n\n const renderEventNode = ({\n key,\n event,\n resourceIndex,\n style,\n hanging,\n eventMod,\n withStartHandle,\n withEndHandle,\n }: {\n key: string;\n event: ScheduleEventData;\n resourceIndex: number;\n style: React.CSSProperties;\n hanging?: ResourcesMonthViewSegment['hanging'];\n eventMod?: Record<string, any>;\n withStartHandle: boolean;\n withEndHandle: boolean;\n }) => {\n const isResizable = eventResize.isResizableEvent(event);\n const isThisEventResizing = eventResize.resizingEventId === event.id;\n\n const eventEnd = dayjs(event.end);\n const endsAtMidnight =\n eventEnd.hour() === 0 && eventEnd.minute() === 0 && eventEnd.second() === 0;\n const lastDay = (endsAtMidnight ? eventEnd.subtract(1, 'day') : eventEnd).format('YYYY-MM-DD');\n\n const showStartHandle =\n withStartHandle && monthDaySet.has(dayjs(event.start).format('YYYY-MM-DD'));\n const showEndHandle = withEndHandle && monthDaySet.has(lastDay);\n\n const eventColors = isResizable\n ? theme.variantColorResolver({\n color: event.color || theme.primaryColor,\n theme,\n variant: event.variant || 'light',\n autoContrast: true,\n })\n : null;\n\n const getHandleProps = (edge: 'start' | 'end') => ({\n ...getStyles('resourcesMonthViewResizeHandle'),\n 'data-edge': edge,\n 'data-active': (isThisEventResizing && eventResize.resizingEdge === edge) || undefined,\n onPointerDown: (e: React.PointerEvent) =>\n eventResize.handleResizeStart({\n event,\n edge,\n cells: cellsRef.current[resourceIndex] ?? [],\n days: monthDays,\n pointerEvent: e,\n }),\n });\n\n return (\n <Box\n key={key}\n {...getStyles('resourcesMonthViewEventWrapper', {\n style: { position: 'absolute', zIndex: 3, ...style },\n })}\n __vars={eventColors ? { '--event-color': eventColors.color } : undefined}\n data-resizing={isThisEventResizing || undefined}\n >\n <ScheduleEvent\n event={event}\n nowrap\n autoSize\n size=\"sm\"\n hanging={hanging}\n mod={eventMod}\n draggable={dragDrop.isDraggableEvent(event)}\n isResizing={isThisEventResizing}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n radius={radius}\n mode={mode}\n onClick={\n onEventClick\n ? (e) => {\n if (!eventResize.wasResizing()) {\n onEventClick(event, e);\n }\n }\n : undefined\n }\n style={{ width: '100%', height: '100%' }}\n />\n {isResizable && showStartHandle && <div {...getHandleProps('start')} />}\n {isResizable && showEndHandle && <div {...getHandleProps('end')} />}\n </Box>\n );\n };\n\n const rows = orderedResources.map((resource, resourceIndex) => {\n if (!cellsRef.current[resourceIndex]) {\n cellsRef.current[resourceIndex] = [];\n }\n\n cellsRef.current[resourceIndex].length = monthDays.length;\n\n const slotGroup = String(resource.id);\n const dropTarget = dragDrop.dropTarget;\n\n const totalDays = monthDays.length;\n const eventNodes: React.ReactNode[] = [];\n const moreNodes: React.ReactNode[] = [];\n\n const cells = monthDays.map((day, dayIndex) => {\n const d = dayjs(day);\n const weekend = ctx.getWeekendDays(weekendDays).includes(d.day() as DayOfWeek);\n const isDropTarget =\n dropTarget !== null &&\n typeof dropTarget === 'object' &&\n 'day' in dropTarget &&\n (dropTarget as DropTargetCell).day === day &&\n (dropTarget as DropTargetCell).resourceId === resource.id;\n const isDragSelected = slotDragSelect.isSlotSelected(dayIndex, slotGroup);\n const dayEvents = eventsByResourceAndDay[resource.id]?.[day] || [];\n const layout = eventLayoutByResource[resource.id]?.byDay[day];\n const visibleEvents = layout?.visible ?? [];\n const hiddenEventsCount = layout?.hiddenCount ?? 0;\n const isFirstCell = resourceIndex === 0 && dayIndex === 0;\n const dayLeftPercent = (dayIndex / totalDays) * 100;\n const dayWidthPercent = 100 / totalDays;\n\n const hasHiddenEvents = hiddenEventsCount > 0 && mode !== 'static';\n\n visibleEvents.forEach(({ event, row }) => {\n if (isMultiDayEvent(event)) {\n return;\n }\n\n const topValue = hasHiddenEvents\n ? `calc((100% - 18px) * ${row} / ${maxEventsPerTimeSlot} + 1px)`\n : `calc(${row * rowHeightPercent}% + 1px)`;\n const heightValue = hasHiddenEvents\n ? `calc((100% - 18px) / ${maxEventsPerTimeSlot} - 2px)`\n : `calc(${rowHeightPercent}% - 2px)`;\n\n eventNodes.push(\n renderEventNode({\n key: `${event.id}-${day}`,\n event,\n resourceIndex,\n withStartHandle: true,\n withEndHandle: true,\n style: {\n top: topValue,\n left: `calc(${dayLeftPercent}% + 1px)`,\n width: `calc(${dayWidthPercent}% - 2px)`,\n height: heightValue,\n },\n })\n );\n });\n\n if (hiddenEventsCount > 0 && mode !== 'static') {\n moreNodes.push(\n <MoreEvents\n key={`more-${resource.id}-${day}`}\n events={dayEvents}\n moreEventsCount={hiddenEventsCount}\n mode={mode}\n labels={labels}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n onEventClick={onEventClick}\n style={{\n position: 'absolute',\n bottom: 1,\n left: `calc(${dayLeftPercent}% + 1px)`,\n width: `calc(${dayWidthPercent}% - 2px)`,\n height: 18,\n zIndex: 4,\n }}\n {...stylesApiProps}\n {...moreEventsProps}\n />\n );\n }\n\n return (\n <UnstyledButton\n key={day}\n ref={(node) => {\n if (node) {\n if (!cellsRef.current[resourceIndex]) {\n cellsRef.current[resourceIndex] = [];\n }\n cellsRef.current[resourceIndex][dayIndex] = node;\n }\n }}\n {...getStyles('resourcesMonthViewCell')}\n aria-label={`${resource.label} ${d.format('MMMM D, YYYY')}`}\n data-drag-slot-index={withDragSlotSelect && mode !== 'static' ? dayIndex : undefined}\n data-drag-slot-group={withDragSlotSelect && mode !== 'static' ? slotGroup : undefined}\n mod={{\n weekend,\n 'drop-target': isDropTarget,\n 'drag-selected': isDragSelected,\n static: mode === 'static',\n }}\n tabIndex={mode === 'static' ? -1 : isFirstCell ? 0 : -1}\n onClick={\n mode === 'static'\n ? undefined\n : (e) => onDayClick?.({ date: day, nativeEvent: e, resourceId: resource.id })\n }\n onKeyDown={\n mode === 'static' ? undefined : (e) => handleCellKeyDown(e, resourceIndex, dayIndex)\n }\n onPointerDown={\n withDragSlotSelect && mode !== 'static'\n ? (e) =>\n slotDragSelect.handleSlotPointerDown(\n e as React.PointerEvent<HTMLButtonElement>,\n dayIndex,\n slotGroup\n )\n : undefined\n }\n onDragOver={withDragHandlers ? (e) => e.preventDefault() : undefined}\n />\n );\n });\n\n const resourceSegments = eventLayoutByResource[resource.id]?.segments ?? [];\n\n resourceSegments.forEach((segment) => {\n const segmentLeftPercent = (segment.startDayIndex / totalDays) * 100;\n const segmentWidthPercent =\n ((segment.endDayIndex - segment.startDayIndex + 1) / totalDays) * 100;\n const compressed = segment.hiddenInSpan && mode !== 'static';\n const topValue = compressed\n ? `calc((100% - 18px) * ${segment.row} / ${maxEventsPerTimeSlot} + 1px)`\n : `calc(${segment.row * rowHeightPercent}% + 1px)`;\n const heightValue = compressed\n ? `calc((100% - 18px) / ${maxEventsPerTimeSlot} - 2px)`\n : `calc(${rowHeightPercent}% - 2px)`;\n\n eventNodes.push(\n renderEventNode({\n key: `${segment.event.id}-segment-${segment.startDayIndex}`,\n event: segment.event,\n resourceIndex,\n hanging: segment.hanging,\n eventMod: { 'clip-start': segment.clipStart, 'clip-end': segment.clipEnd },\n withStartHandle:\n !segment.clipStart && segment.hanging !== 'start' && segment.hanging !== 'both',\n withEndHandle:\n !segment.clipEnd && segment.hanging !== 'end' && segment.hanging !== 'both',\n style: {\n top: topValue,\n left: `calc(${segmentLeftPercent}% + 1px)`,\n width: `calc(${segmentWidthPercent}% - 2px)`,\n height: heightValue,\n },\n })\n );\n });\n\n const groupInfo = hasGroups ? resourceGroupMap[resourceIndex] : undefined;\n const isGroupStart = groupInfo?.position === 'first' || groupInfo?.position === 'only';\n\n const groupCell =\n groupInfo !== undefined ? (\n groupInfo !== null ? (\n <Box\n {...getStyles('resourcesMonthViewGroupColumn')}\n mod={{ 'group-position': groupInfo.position }}\n >\n {isGroupStart && (\n <span\n style={\n groupInfo.count > 1\n ? {\n transform: `translateY(calc((${groupInfo.count - 1} * (var(--resources-month-view-row-height) + 1px)) / 2))`,\n }\n : undefined\n }\n >\n {renderGroupLabel ? renderGroupLabel(groupInfo.group) : groupInfo.group.label}\n </span>\n )}\n </Box>\n ) : (\n <Box {...getStyles('resourcesMonthViewGroupColumnEmpty')} />\n )\n ) : null;\n\n return (\n <div {...getStyles('resourcesMonthViewRow')} key={resource.id}>\n {groupCell}\n <div\n {...getStyles('resourcesMonthViewResourceLabel')}\n data-has-groups={hasGroups || undefined}\n >\n {renderResourceLabel ? renderResourceLabel(resource) : resource.label}\n </div>\n <div\n {...getStyles('resourcesMonthViewRowSlots')}\n onDragOver={\n withDragHandlers\n ? (e) => {\n const dayIndex = getDayIndexFromDragPoint(e, resourceIndex);\n if (dayIndex !== null && monthDays[dayIndex]) {\n dragDrop.handleDragOver(e, {\n day: monthDays[dayIndex],\n resourceId: resource.id,\n });\n }\n }\n : undefined\n }\n onDragLeave={withDragHandlers ? dragDrop.handleDragLeave : undefined}\n onDrop={\n withDragHandlers\n ? (e) => {\n const dayIndex = getDayIndexFromDragPoint(e, resourceIndex);\n if (dayIndex !== null && monthDays[dayIndex]) {\n dragDrop.handleDrop(e, {\n day: monthDays[dayIndex],\n resourceId: resource.id,\n });\n }\n }\n : undefined\n }\n >\n {eventNodes}\n {moreNodes}\n {cells}\n </div>\n </div>\n );\n });\n\n const content = (\n <Box\n mod={[\n {\n static: mode === 'static',\n 'slot-dragging': slotDragSelect.isDragging,\n 'event-interaction': eventResize.isResizing || dragDrop.dragContextValue.isDragging,\n resizing: eventResize.isResizing,\n },\n mod,\n ]}\n {...getStyles('resourcesMonthView')}\n {...others}\n >\n {withHeader && (\n <ScheduleHeaderBase\n view=\"month\"\n navigationHandlers={{\n previous: () => toDateString(dayjs(date).subtract(1, 'month').startOf('month')),\n next: () => toDateString(dayjs(date).add(1, 'month').startOf('month')),\n today: () => {\n requestAnimationFrame(() => {\n scrollToDay(dayjs().format('YYYY-MM-DD'));\n });\n return toDateString(dayjs());\n },\n }}\n control={{\n monthYearSelect: {\n locale,\n yearValue: dayjs(date).get('year'),\n monthValue: dayjs(date).get('month'),\n onYearChange: (year) =>\n onDateChange?.(toDateString(dayjs(date).set('year', year).startOf('month'))),\n onMonthChange: (month) =>\n onDateChange?.(toDateString(dayjs(date).set('month', month).startOf('month'))),\n ...monthYearSelectProps,\n },\n }}\n labels={labels}\n onDateChange={onDateChange}\n onViewChange={onViewChange}\n previousControlProps={previousControlProps}\n nextControlProps={nextControlProps}\n todayControlProps={todayControlProps}\n viewSelectProps={{ views: ['day', 'week', 'month'] as const, ...viewSelectProps }}\n stylesApiProps={stylesApiProps}\n />\n )}\n\n <Box {...getStyles('resourcesMonthViewRoot')}>\n <ScrollArea\n scrollbars=\"x\"\n scrollbarSize={4}\n {...scrollAreaProps}\n {...getStyles('resourcesMonthViewScrollArea', {\n className: scrollAreaProps?.className,\n style: scrollAreaProps?.style,\n })}\n viewportRef={mergedViewportRef}\n >\n <div {...getStyles('resourcesMonthViewInner')}>\n <div {...getStyles('resourcesMonthViewDayLabelsRow')}>\n <div\n {...getStyles('resourcesMonthViewCorner')}\n key=\"corner\"\n ref={resourceLabelRef}\n style={\n hasGroups\n ? {\n flexBasis:\n 'calc(var(--resources-month-view-resource-label-width) + var(--resources-month-view-group-label-width))',\n minWidth:\n 'calc(var(--resources-month-view-resource-label-width) + var(--resources-month-view-group-label-width))',\n }\n : undefined\n }\n >\n {getLabel('resources', labels)}\n </div>\n {dayLabels}\n </div>\n\n {rows}\n </div>\n </ScrollArea>\n </Box>\n </Box>\n );\n\n if (withEventsDragAndDrop) {\n return <DragContext.Provider value={dragDrop.dragContextValue}>{content}</DragContext.Provider>;\n }\n\n return content;\n});\n\nResourcesMonthView.displayName = '@mantine/schedule/ResourcesMonthView';\nResourcesMonthView.classes = classes;\nResourcesMonthView.varsResolver = varsResolver;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ResourcesMonthView.cjs","names":["createVarsResolver","getRadius","rem","factory","useProps","useStyles","useResolvedStylesApi","useMantineTheme","useDatesContext","useMemo","getOrderedResources","useRef","useMergedRef","useCallback","expandRecurringEvents","useDayGridEventResize","useDragDropHandlers","calculateMonthDropDate","getGroupToResourceIdMap","useSlotDragSelect","Box","formatDate","getIndexFromDragPoint","ScheduleEvent","MoreEvents","UnstyledButton","ScheduleHeaderBase","toDateString","ScrollArea","getLabel","DragContext","classes"],"sources":["../../../src/components/ResourcesMonthView/ResourcesMonthView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useMemo, useRef } from 'react';\nimport {\n Box,\n BoxProps,\n createVarsResolver,\n DataAttributes,\n ElementProps,\n factory,\n Factory,\n getRadius,\n MantineRadius,\n rem,\n ScrollArea,\n ScrollAreaProps,\n StylesApiProps,\n UnstyledButton,\n useMantineTheme,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '@mantine/core';\nimport { useDatesContext } from '@mantine/dates';\nimport { useIsomorphicEffect, useMergedRef } from '@mantine/hooks';\nimport { useDayGridEventResize } from '../../hooks/use-day-grid-event-resize';\nimport { useDragDropHandlers } from '../../hooks/use-drag-drop-handlers';\nimport { useSlotDragSelect } from '../../hooks/use-slot-drag-select';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport {\n DateLabelFormat,\n DateStringValue,\n DateTimeStringValue,\n DayOfWeek,\n PreventEventOverlap,\n ScheduleCanDropEventData,\n ScheduleCanDropExternalEventData,\n ScheduleCanResizeEventToData,\n ScheduleEventData,\n ScheduleEventPlacementRejectedData,\n ScheduleMode,\n ScheduleResourceData,\n ScheduleResourceGroup,\n ScheduleViewLevel,\n} from '../../types';\nimport {\n calculateMonthDropDate,\n expandRecurringEvents,\n formatDate,\n getGroupToResourceIdMap,\n getIndexFromDragPoint,\n getOrderedResources,\n toDateString,\n} from '../../utils';\nimport { DragContext } from '../DragContext/DragContext';\nimport { MoreEvents, MoreEventsProps, MoreEventsStylesNames } from '../MoreEvents/MoreEvents';\nimport { RenderEvent, RenderEventBody, ScheduleEvent } from '../ScheduleEvent/ScheduleEvent';\nimport { MonthYearSelectProps } from '../ScheduleHeader/MonthYearSelect/MonthYearSelect';\nimport { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';\nimport { ScheduleHeaderBase } from '../ScheduleHeader/ScheduleHeaderBase';\nimport { ViewSelectProps } from '../ScheduleHeader/ViewSelect/ViewSelect';\nimport classes from './ResourcesMonthView.module.css';\n\nexport type ResourcesMonthViewStylesNames =\n | 'resourcesMonthView'\n | 'resourcesMonthViewRoot'\n | 'resourcesMonthViewScrollArea'\n | 'resourcesMonthViewDayLabelsRow'\n | 'resourcesMonthViewCorner'\n | 'resourcesMonthViewDayLabel'\n | 'resourcesMonthViewDayLabelWeekday'\n | 'resourcesMonthViewDayLabelNumber'\n | 'resourcesMonthViewRow'\n | 'resourcesMonthViewResourceLabel'\n | 'resourcesMonthViewRowSlots'\n | 'resourcesMonthViewCell'\n | 'resourcesMonthViewEventWrapper'\n | 'resourcesMonthViewResizeHandle'\n | 'resourcesMonthViewInner'\n | 'resourcesMonthViewGroupColumn'\n | 'resourcesMonthViewGroupColumnEmpty'\n | MoreEventsStylesNames\n | CombinedScheduleHeaderStylesNames;\n\nexport type ResourcesMonthViewCssVariables = {\n resourcesMonthView:\n | '--resources-month-view-radius'\n | '--resources-month-view-day-width'\n | '--resources-month-view-row-height'\n | '--resources-month-view-group-label-width';\n};\n\nexport interface ResourcesMonthViewProps\n extends BoxProps, StylesApiProps<ResourcesMonthViewFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Date to display, Date object or date string in `YYYY-MM-DD` format */\n date: Date | string;\n\n /** Called with the new date value when a date is selected */\n onDateChange?: (value: DateStringValue) => void;\n\n /** List of resources to display as rows */\n resources: ScheduleResourceData[];\n\n /** Locale passed down to dayjs */\n locale?: string;\n\n /** `dayjs` format for weekdays in day column headers @default 'dd' */\n weekdayFormat?: DateLabelFormat;\n\n /** Indices of weekend days */\n weekendDays?: DayOfWeek[];\n\n /** If set to false, weekend days are hidden @default true */\n withWeekendDays?: boolean;\n\n /** Date to scroll to on initial render, in `YYYY-MM-DD` format */\n startScrollDate?: string;\n\n /** Called when a cell is clicked, includes resourceId */\n onDayClick?: (data: {\n date: DateStringValue;\n nativeEvent: React.MouseEvent<HTMLButtonElement>;\n resourceId?: string | number;\n }) => void;\n\n /** If set, highlights the current day @default true */\n highlightToday?: boolean;\n\n /** Key of `theme.radius` or any valid CSS value to set `border-radius` @default theme.defaultRadius */\n radius?: MantineRadius;\n\n /** If set, the header is displayed @default true */\n withHeader?: boolean;\n\n /** Props passed down to `MonthYearSelect` component */\n monthYearSelectProps?: Partial<MonthYearSelectProps>;\n\n /** Called when view level select button is clicked */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Props passed to previous control */\n previousControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to next control */\n nextControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to today control */\n todayControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to view level select */\n viewSelectProps?: Partial<ViewSelectProps> & DataAttributes;\n\n /** Events to display */\n events?: ScheduleEventData[];\n\n /** Width of each day column @default 40px */\n dayWidth?: React.CSSProperties['width'];\n\n /** Height of each resource row @default 48px */\n rowHeight?: React.CSSProperties['height'];\n\n /** Function to customize event body */\n renderEventBody?: RenderEventBody;\n\n /** Function to fully customize event rendering */\n renderEvent?: RenderEvent;\n\n /** Function to customize resource label rendering */\n renderResourceLabel?: (resource: ScheduleResourceData) => React.ReactNode;\n\n /** List of resource groups to display as a column to the left of resource labels */\n groups?: ScheduleResourceGroup[];\n\n /** Function to customize group label rendering */\n renderGroupLabel?: (group: ScheduleResourceGroup) => React.ReactNode;\n\n /** Width of the group label column @default 80px */\n groupLabelWidth?: React.CSSProperties['width'];\n\n /** If true, events can be dragged and dropped @default false */\n withEventsDragAndDrop?: boolean;\n\n /** Called when event is dropped, includes target resourceId */\n onEventDrop?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n resourceId?: string | number;\n }) => void;\n\n /** Function to determine if event can be dragged */\n canDragEvent?: (event: ScheduleEventData) => boolean;\n\n /** Called when any event drag starts */\n onEventDragStart?: (event: ScheduleEventData) => void;\n\n /** Called when any event drag ends */\n onEventDragEnd?: () => void;\n\n /** If true, events can be resized by dragging their start and end edges, resizing snaps to whole days @default false */\n withEventResize?: boolean;\n\n /** Called when event is resized */\n onEventResize?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => void;\n\n /** Function to determine if event can be resized */\n canResizeEvent?: (event: ScheduleEventData) => boolean;\n\n /** Called while an event is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. */\n canDropEvent?: (data: ScheduleCanDropEventData) => boolean;\n\n /** Called while an external item is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. Only `dataTransfer.types` can be read while the drag is in progress. */\n canDropExternalEvent?: (data: ScheduleCanDropExternalEventData) => boolean;\n\n /** Called on every pointer move while an event is resized to compute live feedback and again before the resize is committed, return `false` to reject the new size. Must be pure and cheap. */\n canResizeEventTo?: (data: ScheduleCanResizeEventToData) => boolean;\n\n /** If set, drops and resizes that would make the event overlap another event are rejected. Pass a function to decide per pair of events: return `true` to forbid the overlap. The function runs while dragging and resizing to compute live feedback, it must be pure and cheap. @default false */\n preventEventOverlap?: PreventEventOverlap;\n\n /** Called when a drop or resize is rejected */\n onEventPlacementRejected?: (data: ScheduleEventPlacementRejectedData) => void;\n\n /** Called when event is clicked */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** If set, enables drag-to-select day ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a day range is selected by dragging, includes resourceId */\n onSlotDragEnd?: (data: {\n rangeStart: DateTimeStringValue;\n rangeEnd: DateTimeStringValue;\n resourceId?: string | number;\n }) => void;\n\n /** Labels override for i18n */\n labels?: ScheduleLabelsOverride;\n\n /** Interaction mode @default default */\n mode?: ScheduleMode;\n\n /** Props passed down to `ScrollArea` component */\n scrollAreaProps?: Partial<ScrollAreaProps> & DataAttributes;\n\n /** Called when an external item is dropped */\n onExternalEventDrop?: (data: {\n dataTransfer: DataTransfer;\n dropDateTime: DateTimeStringValue;\n resourceId?: string | number;\n }) => void;\n\n /** Maximum number of events visible per cell before \"+more\" indicator @default 2 */\n maxEventsPerTimeSlot?: number;\n\n /** Props passed down to `MoreEvents` component */\n moreEventsProps?: Partial<MoreEventsProps>;\n\n /** Max number of generated recurring instances @default 2000 */\n recurrenceExpansionLimit?: number;\n}\n\nexport type ResourcesMonthViewFactory = Factory<{\n props: ResourcesMonthViewProps;\n ref: HTMLDivElement;\n stylesNames: ResourcesMonthViewStylesNames;\n vars: ResourcesMonthViewCssVariables;\n}>;\n\nconst varsResolver = createVarsResolver<ResourcesMonthViewFactory>(\n (_theme, { radius, dayWidth, rowHeight, groupLabelWidth }) => ({\n resourcesMonthView: {\n '--resources-month-view-radius': radius ? getRadius(radius) : undefined,\n '--resources-month-view-day-width': rem(dayWidth),\n '--resources-month-view-row-height': rem(rowHeight),\n '--resources-month-view-group-label-width': rem(groupLabelWidth),\n },\n })\n);\n\nconst defaultProps = {\n __staticSelector: 'ResourcesMonthView',\n highlightToday: true,\n withHeader: true,\n weekdayFormat: 'ddd',\n withWeekendDays: true,\n withEventsDragAndDrop: false,\n withDragSlotSelect: false,\n withEventResize: false,\n mode: 'default',\n} satisfies Partial<ResourcesMonthViewProps>;\n\nfunction compareCellEvents(a: ScheduleEventData, b: ScheduleEventData): number {\n const aStart = dayjs(a.start);\n const bStart = dayjs(b.start);\n const aSpan = dayjs(a.end).startOf('day').diff(aStart.startOf('day'), 'day');\n const bSpan = dayjs(b.end).startOf('day').diff(bStart.startOf('day'), 'day');\n\n if (aSpan !== bSpan) {\n return bSpan - aSpan;\n }\n\n return aStart.valueOf() - bStart.valueOf();\n}\n\nfunction getFirstAvailableRow(usedRows: Set<number>, maxRows: number): number | null {\n for (let row = 0; row < maxRows; row += 1) {\n if (!usedRows.has(row)) {\n return row;\n }\n }\n\n return null;\n}\n\ninterface ResourcesMonthViewCellLayout {\n visible: { event: ScheduleEventData; row: number }[];\n hiddenCount: number;\n}\n\ninterface ResourcesMonthViewSegment {\n event: ScheduleEventData;\n startDayIndex: number;\n endDayIndex: number;\n row: number;\n clipStart: boolean;\n clipEnd: boolean;\n hanging: 'start' | 'end' | 'both' | 'none';\n\n /** True when any day the segment covers shows a \"+N more\" indicator (those days compress rows) */\n hiddenInSpan: boolean;\n}\n\ninterface ResourcesMonthViewResourceLayout {\n byDay: Record<string, ResourcesMonthViewCellLayout>;\n segments: ResourcesMonthViewSegment[];\n}\n\nfunction isMultiDayEvent(event: ScheduleEventData): boolean {\n return dayjs(event.end).startOf('day').isAfter(dayjs(event.start).startOf('day'));\n}\n\nexport const ResourcesMonthView = factory<ResourcesMonthViewFactory>((_props) => {\n const props = useProps('ResourcesMonthView', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n attributes,\n vars,\n mod,\n date,\n onDateChange,\n resources,\n locale,\n weekdayFormat,\n weekendDays,\n withWeekendDays,\n startScrollDate,\n __staticSelector,\n onDayClick,\n highlightToday,\n radius,\n withHeader,\n monthYearSelectProps,\n onViewChange,\n todayControlProps,\n nextControlProps,\n previousControlProps,\n viewSelectProps,\n events,\n dayWidth,\n rowHeight,\n renderResourceLabel,\n groups,\n renderGroupLabel,\n groupLabelWidth,\n renderEventBody,\n renderEvent,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n withEventResize,\n onEventResize,\n canResizeEvent,\n canDropEvent,\n canDropExternalEvent,\n canResizeEventTo,\n preventEventOverlap,\n onEventPlacementRejected,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n labels,\n mode,\n scrollAreaProps,\n onExternalEventDrop,\n maxEventsPerTimeSlot: _maxEventsPerTimeSlot,\n moreEventsProps,\n recurrenceExpansionLimit,\n ...others\n } = props;\n\n const maxEventsPerTimeSlot = Math.min(10, Math.max(1, _maxEventsPerTimeSlot ?? 2));\n\n const getStyles = useStyles<ResourcesMonthViewFactory>({\n name: __staticSelector,\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n varsResolver,\n rootSelector: 'resourcesMonthView',\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<ResourcesMonthViewFactory>({\n classNames,\n styles,\n props,\n });\n\n const stylesApiProps = {\n classNames: resolvedClassNames,\n styles: resolvedStyles,\n attributes,\n __staticSelector,\n radius,\n };\n\n const theme = useMantineTheme();\n const ctx = useDatesContext();\n const resolvedWeekendDays = ctx.getWeekendDays(weekendDays);\n const { orderedResources, groupRanges, resourceGroupMap } = useMemo(\n () => getOrderedResources(resources, groups),\n [resources, groups]\n );\n const hasGroups = groupRanges.length > 0;\n\n const monthDays = useMemo(() => {\n const start = dayjs(date).startOf('month');\n const daysCount = start.endOf('month').date();\n const weekendDayList = ctx.getWeekendDays(weekendDays);\n const days: string[] = [];\n for (let d = 1; d <= daysCount; d++) {\n const day = start.date(d);\n if (!withWeekendDays && weekendDayList.includes(day.day() as DayOfWeek)) {\n continue;\n }\n days.push(day.format('YYYY-MM-DD'));\n }\n return days;\n }, [date, withWeekendDays, weekendDays, ctx]);\n\n const viewportRef = useRef<HTMLDivElement>(null);\n const mergedViewportRef = useMergedRef(viewportRef, scrollAreaProps?.viewportRef);\n const dayLabelRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n const resourceLabelRef = useRef<HTMLDivElement>(null);\n\n const scrollToDay = useCallback(\n (targetDate: string) => {\n if (!viewportRef.current) {\n return;\n }\n const targetIndex = monthDays.indexOf(targetDate);\n if (targetIndex < 0) {\n return;\n }\n const targetLabel = dayLabelRefs.current[targetIndex];\n if (!targetLabel) {\n return;\n }\n const labelRect = targetLabel.getBoundingClientRect();\n const viewportRect = viewportRef.current.getBoundingClientRect();\n const labelWidth = resourceLabelRef.current?.getBoundingClientRect().width ?? 0;\n viewportRef.current.scrollTo({\n left: labelRect.left - viewportRect.left + viewportRef.current.scrollLeft - labelWidth,\n top: 0,\n });\n },\n [monthDays]\n );\n\n useIsomorphicEffect(() => {\n if (startScrollDate) {\n scrollToDay(startScrollDate);\n }\n }, []);\n\n const expandedEvents = useMemo(\n () =>\n expandRecurringEvents({\n events,\n rangeStart: dayjs(date).startOf('month').toDate(),\n rangeEnd: dayjs(date).endOf('month').toDate(),\n expansionLimit: recurrenceExpansionLimit,\n }),\n [events, date, recurrenceExpansionLimit]\n );\n\n const monthDaySet = useMemo(() => new Set(monthDays), [monthDays]);\n\n const eventResize = useDayGridEventResize({\n enabled: withEventResize,\n mode,\n onEventResize,\n canResizeEvent,\n events: expandedEvents,\n preventEventOverlap,\n canResizeEventTo,\n onEventPlacementRejected,\n });\n\n const { resizingEventId, previewStart, previewEnd } = eventResize;\n\n const layoutEvents = useMemo(() => {\n if (resizingEventId === null || previewStart === null || previewEnd === null) {\n return expandedEvents;\n }\n\n return expandedEvents.map((event) =>\n event.id === resizingEventId ? { ...event, start: previewStart, end: previewEnd } : event\n );\n }, [expandedEvents, resizingEventId, previewStart, previewEnd]);\n\n const { eventsByResourceAndDay, eventLayoutByResource } = useMemo(() => {\n const eventsByResourceAndDay: Record<string | number, Record<string, ScheduleEventData[]>> = {};\n for (const resource of resources) {\n eventsByResourceAndDay[resource.id] = {};\n for (const day of monthDays) {\n eventsByResourceAndDay[resource.id][day] = [];\n }\n }\n\n if (layoutEvents) {\n for (const event of layoutEvents) {\n if (event.resourceId === undefined || !(event.resourceId in eventsByResourceAndDay)) {\n continue;\n }\n\n const eventStart = dayjs(event.start);\n const eventEnd = dayjs(event.end);\n\n for (const day of monthDays) {\n const dayStart = dayjs(day).startOf('day');\n const dayEnd = dayjs(day).endOf('day');\n\n if (eventStart.isBefore(dayEnd) && eventEnd.isAfter(dayStart)) {\n eventsByResourceAndDay[event.resourceId][day].push(event);\n }\n }\n }\n }\n\n const eventLayoutByResource: Record<string | number, ResourcesMonthViewResourceLayout> = {};\n const monthRangeStart = dayjs(monthDays[0]).startOf('day');\n const monthEndExclusive = dayjs(monthDays[monthDays.length - 1])\n .add(1, 'day')\n .startOf('day');\n\n for (const resource of resources) {\n const byDay: Record<string, ResourcesMonthViewCellLayout> = {};\n const lastRow = new Map<string | number, number>();\n const rowByEventDay = new Map<string | number, Map<number, number>>();\n const overlapByEvent = new Map<\n string | number,\n { event: ScheduleEventData; days: number[] }\n >();\n\n monthDays.forEach((day, dayIndex) => {\n const dayEvents = eventsByResourceAndDay[resource.id][day];\n dayEvents.sort(compareCellEvents);\n\n for (const event of dayEvents) {\n const overlap = overlapByEvent.get(event.id);\n if (overlap) {\n overlap.days.push(dayIndex);\n } else {\n overlapByEvent.set(event.id, { event, days: [dayIndex] });\n }\n }\n\n const usedRows = new Set<number>();\n const visible: ResourcesMonthViewCellLayout['visible'] = [];\n let hiddenCount = 0;\n\n for (const event of dayEvents) {\n let row: number | null | undefined = lastRow.get(event.id);\n\n if (row === undefined || row >= maxEventsPerTimeSlot || usedRows.has(row)) {\n row = getFirstAvailableRow(usedRows, maxEventsPerTimeSlot);\n }\n\n if (row === null) {\n hiddenCount += 1;\n continue;\n }\n\n usedRows.add(row);\n visible.push({ event, row });\n if (!rowByEventDay.has(event.id)) {\n rowByEventDay.set(event.id, new Map());\n }\n rowByEventDay.get(event.id)!.set(dayIndex, row);\n lastRow.set(event.id, row);\n }\n\n byDay[day] = { visible, hiddenCount };\n });\n\n const segments: ResourcesMonthViewSegment[] = [];\n\n for (const { event, days } of overlapByEvent.values()) {\n if (!isMultiDayEvent(event)) {\n continue;\n }\n\n const firstOverlap = days[0];\n const lastOverlap = days[days.length - 1];\n const rows = rowByEventDay.get(event.id);\n const extendsBefore = dayjs(event.start).isBefore(monthRangeStart);\n const extendsAfter = dayjs(event.end).isAfter(monthEndExclusive);\n let run: { startDayIndex: number; endDayIndex: number; row: number } | null = null;\n\n const flushRun = () => {\n if (!run) {\n return;\n }\n const clipStart = run.startDayIndex > firstOverlap;\n const clipEnd = run.endDayIndex < lastOverlap;\n const hangStart = !clipStart && extendsBefore;\n const hangEnd = !clipEnd && extendsAfter;\n let hiddenInSpan = false;\n for (let dayIndex = run.startDayIndex; dayIndex <= run.endDayIndex; dayIndex += 1) {\n if ((byDay[monthDays[dayIndex]]?.hiddenCount ?? 0) > 0) {\n hiddenInSpan = true;\n break;\n }\n }\n segments.push({\n event,\n startDayIndex: run.startDayIndex,\n endDayIndex: run.endDayIndex,\n row: run.row,\n clipStart,\n clipEnd,\n hanging: hangStart && hangEnd ? 'both' : hangStart ? 'start' : hangEnd ? 'end' : 'none',\n hiddenInSpan,\n });\n run = null;\n };\n\n for (let dayIndex = firstOverlap; dayIndex <= lastOverlap; dayIndex += 1) {\n const row = rows?.get(dayIndex);\n\n if (row === undefined) {\n flushRun();\n continue;\n }\n\n if (run && run.row === row && run.endDayIndex === dayIndex - 1) {\n run.endDayIndex = dayIndex;\n } else {\n flushRun();\n run = { startDayIndex: dayIndex, endDayIndex: dayIndex, row };\n }\n }\n\n flushRun();\n }\n\n eventLayoutByResource[resource.id] = { byDay, segments };\n }\n\n return { eventsByResourceAndDay, eventLayoutByResource };\n }, [resources, monthDays, layoutEvents, maxEventsPerTimeSlot]);\n\n type DropTargetCell = { day: string; resourceId: string | number };\n\n const getExternalDropDateTime = useCallback(\n (target: DropTargetCell) => `${dayjs(target.day).format('YYYY-MM-DD')} 00:00:00`,\n []\n );\n\n const handleExternalDrop = useCallback(\n (e: React.DragEvent, target: DropTargetCell) => {\n if (!onExternalEventDrop) {\n return;\n }\n onExternalEventDrop({\n dataTransfer: e.dataTransfer,\n dropDateTime: getExternalDropDateTime(target),\n resourceId: target.resourceId,\n });\n },\n [onExternalEventDrop, getExternalDropDateTime]\n );\n\n const dragDrop = useDragDropHandlers<DropTargetCell>({\n enabled: withEventsDragAndDrop,\n mode,\n onEventDrop: (data) => {\n onEventDrop?.({ ...data, resourceId: lastDropResourceId.current });\n },\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget: (target: DropTargetCell, draggedEvent: ScheduleEventData) => {\n lastDropResourceId.current = target.resourceId;\n return calculateMonthDropDate({ draggedEvent, targetDay: target.day });\n },\n onExternalDrop: onExternalEventDrop ? handleExternalDrop : undefined,\n events: expandedEvents,\n preventEventOverlap,\n canDropEvent,\n canDropExternalEvent,\n onEventPlacementRejected,\n getExternalDropDateTime,\n getTargetResourceId: (target) => target.resourceId,\n });\n\n const lastDropResourceId = useRef<string | number | undefined>(undefined);\n\n const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== 'static';\n\n const groupToResourceId = useMemo(() => getGroupToResourceIdMap(resources), [resources]);\n\n const slotDragSelect = useSlotDragSelect({\n enabled: withDragSlotSelect && mode !== 'static',\n onDragEnd: (startIndex, endIndex, group) => {\n if (!onSlotDragEnd) {\n return;\n }\n const startDay = monthDays[startIndex];\n const endDay = monthDays[endIndex];\n if (startDay && endDay) {\n onSlotDragEnd({\n rangeStart: dayjs(startDay).startOf('day').format('YYYY-MM-DD HH:mm:ss'),\n rangeEnd: dayjs(endDay).endOf('day').format('YYYY-MM-DD HH:mm:ss'),\n resourceId: groupToResourceId.get(group) ?? group,\n });\n }\n },\n });\n\n const dayLabels = monthDays.map((day, dayIndex) => {\n const d = dayjs(day);\n const weekend = resolvedWeekendDays.includes(d.day() as DayOfWeek);\n const today = d.isSame(dayjs(), 'day') && highlightToday;\n\n return (\n <Box\n {...getStyles('resourcesMonthViewDayLabel')}\n key={day}\n mod={{ weekend, today }}\n ref={(node) => {\n dayLabelRefs.current[dayIndex] = node;\n }}\n >\n <span {...getStyles('resourcesMonthViewDayLabelWeekday')}>\n {formatDate({ date: d, locale: ctx.getLocale(locale), format: weekdayFormat })}\n </span>\n <span {...getStyles('resourcesMonthViewDayLabelNumber')}>{d.date()}</span>\n </Box>\n );\n });\n\n const cellsRef = useRef<HTMLButtonElement[][]>([]);\n\n const getDayIndexFromDragPoint = useCallback((event: React.DragEvent, resourceIndex: number) => {\n return getIndexFromDragPoint(cellsRef.current[resourceIndex] ?? [], event.clientX);\n }, []);\n\n const handleCellKeyDown = (\n event: React.KeyboardEvent<HTMLButtonElement>,\n resourceIndex: number,\n dayIndex: number\n ) => {\n const key = event.key;\n let nextResourceIndex = resourceIndex;\n let nextDayIndex = dayIndex;\n\n if (key === 'ArrowRight') {\n nextDayIndex = Math.min(dayIndex + 1, monthDays.length - 1);\n } else if (key === 'ArrowLeft') {\n nextDayIndex = Math.max(dayIndex - 1, 0);\n } else if (key === 'ArrowDown') {\n nextResourceIndex = Math.min(resourceIndex + 1, resources.length - 1);\n } else if (key === 'ArrowUp') {\n nextResourceIndex = Math.max(resourceIndex - 1, 0);\n } else {\n return;\n }\n\n event.preventDefault();\n cellsRef.current[nextResourceIndex]?.[nextDayIndex]?.focus();\n };\n\n const rowHeightPercent = 100 / maxEventsPerTimeSlot;\n\n const renderEventNode = ({\n key,\n event,\n resourceIndex,\n style,\n hanging,\n eventMod,\n withStartHandle,\n withEndHandle,\n }: {\n key: string;\n event: ScheduleEventData;\n resourceIndex: number;\n style: React.CSSProperties;\n hanging?: ResourcesMonthViewSegment['hanging'];\n eventMod?: Record<string, any>;\n withStartHandle: boolean;\n withEndHandle: boolean;\n }) => {\n const isResizable = eventResize.isResizableEvent(event);\n const isThisEventResizing = eventResize.resizingEventId === event.id;\n\n const eventEnd = dayjs(event.end);\n const endsAtMidnight =\n eventEnd.hour() === 0 && eventEnd.minute() === 0 && eventEnd.second() === 0;\n const lastDay = (endsAtMidnight ? eventEnd.subtract(1, 'day') : eventEnd).format('YYYY-MM-DD');\n\n const showStartHandle =\n withStartHandle && monthDaySet.has(dayjs(event.start).format('YYYY-MM-DD'));\n const showEndHandle = withEndHandle && monthDaySet.has(lastDay);\n\n const eventColors = isResizable\n ? theme.variantColorResolver({\n color: event.color || theme.primaryColor,\n theme,\n variant: event.variant || 'light',\n autoContrast: true,\n })\n : null;\n\n const getHandleProps = (edge: 'start' | 'end') => ({\n ...getStyles('resourcesMonthViewResizeHandle'),\n 'data-edge': edge,\n 'data-active': (isThisEventResizing && eventResize.resizingEdge === edge) || undefined,\n onPointerDown: (e: React.PointerEvent) =>\n eventResize.handleResizeStart({\n event,\n edge,\n cells: cellsRef.current[resourceIndex] ?? [],\n days: monthDays,\n pointerEvent: e,\n }),\n });\n\n return (\n <Box\n key={key}\n {...getStyles('resourcesMonthViewEventWrapper', {\n style: { position: 'absolute', zIndex: 3, ...style },\n })}\n __vars={eventColors ? { '--event-color': eventColors.color } : undefined}\n data-resizing={isThisEventResizing || undefined}\n >\n <ScheduleEvent\n event={event}\n nowrap\n autoSize\n size=\"sm\"\n hanging={hanging}\n mod={[eventMod, { invalid: isThisEventResizing && !eventResize.resizeValid }]}\n draggable={dragDrop.isDraggableEvent(event)}\n isResizing={isThisEventResizing}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n radius={radius}\n mode={mode}\n onClick={\n onEventClick\n ? (e) => {\n if (!eventResize.wasResizing()) {\n onEventClick(event, e);\n }\n }\n : undefined\n }\n style={{ width: '100%', height: '100%' }}\n />\n {isResizable && showStartHandle && <div {...getHandleProps('start')} />}\n {isResizable && showEndHandle && <div {...getHandleProps('end')} />}\n </Box>\n );\n };\n\n const rows = orderedResources.map((resource, resourceIndex) => {\n if (!cellsRef.current[resourceIndex]) {\n cellsRef.current[resourceIndex] = [];\n }\n\n cellsRef.current[resourceIndex].length = monthDays.length;\n\n const slotGroup = String(resource.id);\n const dropTarget = dragDrop.dropTarget;\n\n const totalDays = monthDays.length;\n const eventNodes: React.ReactNode[] = [];\n const moreNodes: React.ReactNode[] = [];\n\n const cells = monthDays.map((day, dayIndex) => {\n const d = dayjs(day);\n const weekend = ctx.getWeekendDays(weekendDays).includes(d.day() as DayOfWeek);\n const isDropTarget =\n dropTarget !== null &&\n typeof dropTarget === 'object' &&\n 'day' in dropTarget &&\n (dropTarget as DropTargetCell).day === day &&\n (dropTarget as DropTargetCell).resourceId === resource.id;\n const isDragSelected = slotDragSelect.isSlotSelected(dayIndex, slotGroup);\n const dayEvents = eventsByResourceAndDay[resource.id]?.[day] || [];\n const layout = eventLayoutByResource[resource.id]?.byDay[day];\n const visibleEvents = layout?.visible ?? [];\n const hiddenEventsCount = layout?.hiddenCount ?? 0;\n const isFirstCell = resourceIndex === 0 && dayIndex === 0;\n const dayLeftPercent = (dayIndex / totalDays) * 100;\n const dayWidthPercent = 100 / totalDays;\n\n const hasHiddenEvents = hiddenEventsCount > 0 && mode !== 'static';\n\n visibleEvents.forEach(({ event, row }) => {\n if (isMultiDayEvent(event)) {\n return;\n }\n\n const topValue = hasHiddenEvents\n ? `calc((100% - 18px) * ${row} / ${maxEventsPerTimeSlot} + 1px)`\n : `calc(${row * rowHeightPercent}% + 1px)`;\n const heightValue = hasHiddenEvents\n ? `calc((100% - 18px) / ${maxEventsPerTimeSlot} - 2px)`\n : `calc(${rowHeightPercent}% - 2px)`;\n\n eventNodes.push(\n renderEventNode({\n key: `${event.id}-${day}`,\n event,\n resourceIndex,\n withStartHandle: true,\n withEndHandle: true,\n style: {\n top: topValue,\n left: `calc(${dayLeftPercent}% + 1px)`,\n width: `calc(${dayWidthPercent}% - 2px)`,\n height: heightValue,\n },\n })\n );\n });\n\n if (hiddenEventsCount > 0 && mode !== 'static') {\n moreNodes.push(\n <MoreEvents\n key={`more-${resource.id}-${day}`}\n events={dayEvents}\n moreEventsCount={hiddenEventsCount}\n mode={mode}\n labels={labels}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n onEventClick={onEventClick}\n style={{\n position: 'absolute',\n bottom: 1,\n left: `calc(${dayLeftPercent}% + 1px)`,\n width: `calc(${dayWidthPercent}% - 2px)`,\n height: 18,\n zIndex: 4,\n }}\n {...stylesApiProps}\n {...moreEventsProps}\n />\n );\n }\n\n return (\n <UnstyledButton\n key={day}\n ref={(node) => {\n if (node) {\n if (!cellsRef.current[resourceIndex]) {\n cellsRef.current[resourceIndex] = [];\n }\n cellsRef.current[resourceIndex][dayIndex] = node;\n }\n }}\n {...getStyles('resourcesMonthViewCell')}\n aria-label={`${resource.label} ${d.format('MMMM D, YYYY')}`}\n data-drag-slot-index={withDragSlotSelect && mode !== 'static' ? dayIndex : undefined}\n data-drag-slot-group={withDragSlotSelect && mode !== 'static' ? slotGroup : undefined}\n mod={{\n weekend,\n 'drop-target': isDropTarget,\n 'drag-selected': isDragSelected,\n static: mode === 'static',\n }}\n tabIndex={mode === 'static' ? -1 : isFirstCell ? 0 : -1}\n onClick={\n mode === 'static'\n ? undefined\n : (e) => onDayClick?.({ date: day, nativeEvent: e, resourceId: resource.id })\n }\n onKeyDown={\n mode === 'static' ? undefined : (e) => handleCellKeyDown(e, resourceIndex, dayIndex)\n }\n onPointerDown={\n withDragSlotSelect && mode !== 'static'\n ? (e) =>\n slotDragSelect.handleSlotPointerDown(\n e as React.PointerEvent<HTMLButtonElement>,\n dayIndex,\n slotGroup\n )\n : undefined\n }\n onDragOver={withDragHandlers ? (e) => e.preventDefault() : undefined}\n />\n );\n });\n\n const resourceSegments = eventLayoutByResource[resource.id]?.segments ?? [];\n\n resourceSegments.forEach((segment) => {\n const segmentLeftPercent = (segment.startDayIndex / totalDays) * 100;\n const segmentWidthPercent =\n ((segment.endDayIndex - segment.startDayIndex + 1) / totalDays) * 100;\n const compressed = segment.hiddenInSpan && mode !== 'static';\n const topValue = compressed\n ? `calc((100% - 18px) * ${segment.row} / ${maxEventsPerTimeSlot} + 1px)`\n : `calc(${segment.row * rowHeightPercent}% + 1px)`;\n const heightValue = compressed\n ? `calc((100% - 18px) / ${maxEventsPerTimeSlot} - 2px)`\n : `calc(${rowHeightPercent}% - 2px)`;\n\n eventNodes.push(\n renderEventNode({\n key: `${segment.event.id}-segment-${segment.startDayIndex}`,\n event: segment.event,\n resourceIndex,\n hanging: segment.hanging,\n eventMod: { 'clip-start': segment.clipStart, 'clip-end': segment.clipEnd },\n withStartHandle:\n !segment.clipStart && segment.hanging !== 'start' && segment.hanging !== 'both',\n withEndHandle:\n !segment.clipEnd && segment.hanging !== 'end' && segment.hanging !== 'both',\n style: {\n top: topValue,\n left: `calc(${segmentLeftPercent}% + 1px)`,\n width: `calc(${segmentWidthPercent}% - 2px)`,\n height: heightValue,\n },\n })\n );\n });\n\n const groupInfo = hasGroups ? resourceGroupMap[resourceIndex] : undefined;\n const isGroupStart = groupInfo?.position === 'first' || groupInfo?.position === 'only';\n\n const groupCell =\n groupInfo !== undefined ? (\n groupInfo !== null ? (\n <Box\n {...getStyles('resourcesMonthViewGroupColumn')}\n mod={{ 'group-position': groupInfo.position }}\n >\n {isGroupStart && (\n <span\n style={\n groupInfo.count > 1\n ? {\n transform: `translateY(calc((${groupInfo.count - 1} * (var(--resources-month-view-row-height) + 1px)) / 2))`,\n }\n : undefined\n }\n >\n {renderGroupLabel ? renderGroupLabel(groupInfo.group) : groupInfo.group.label}\n </span>\n )}\n </Box>\n ) : (\n <Box {...getStyles('resourcesMonthViewGroupColumnEmpty')} />\n )\n ) : null;\n\n return (\n <div {...getStyles('resourcesMonthViewRow')} key={resource.id}>\n {groupCell}\n <div\n {...getStyles('resourcesMonthViewResourceLabel')}\n data-has-groups={hasGroups || undefined}\n >\n {renderResourceLabel ? renderResourceLabel(resource) : resource.label}\n </div>\n <div\n {...getStyles('resourcesMonthViewRowSlots')}\n onDragOver={\n withDragHandlers\n ? (e) => {\n const dayIndex = getDayIndexFromDragPoint(e, resourceIndex);\n if (dayIndex !== null && monthDays[dayIndex]) {\n dragDrop.handleDragOver(e, {\n day: monthDays[dayIndex],\n resourceId: resource.id,\n });\n }\n }\n : undefined\n }\n onDragLeave={withDragHandlers ? dragDrop.handleDragLeave : undefined}\n onDrop={\n withDragHandlers\n ? (e) => {\n const dayIndex = getDayIndexFromDragPoint(e, resourceIndex);\n if (dayIndex !== null && monthDays[dayIndex]) {\n dragDrop.handleDrop(e, {\n day: monthDays[dayIndex],\n resourceId: resource.id,\n });\n }\n }\n : undefined\n }\n >\n {eventNodes}\n {moreNodes}\n {cells}\n </div>\n </div>\n );\n });\n\n const content = (\n <Box\n mod={[\n {\n static: mode === 'static',\n 'slot-dragging': slotDragSelect.isDragging,\n 'event-interaction': eventResize.isResizing || dragDrop.dragContextValue.isDragging,\n resizing: eventResize.isResizing,\n },\n mod,\n ]}\n {...getStyles('resourcesMonthView')}\n {...others}\n >\n {withHeader && (\n <ScheduleHeaderBase\n view=\"month\"\n navigationHandlers={{\n previous: () => toDateString(dayjs(date).subtract(1, 'month').startOf('month')),\n next: () => toDateString(dayjs(date).add(1, 'month').startOf('month')),\n today: () => {\n requestAnimationFrame(() => {\n scrollToDay(dayjs().format('YYYY-MM-DD'));\n });\n return toDateString(dayjs());\n },\n }}\n control={{\n monthYearSelect: {\n locale,\n yearValue: dayjs(date).get('year'),\n monthValue: dayjs(date).get('month'),\n onYearChange: (year) =>\n onDateChange?.(toDateString(dayjs(date).set('year', year).startOf('month'))),\n onMonthChange: (month) =>\n onDateChange?.(toDateString(dayjs(date).set('month', month).startOf('month'))),\n ...monthYearSelectProps,\n },\n }}\n labels={labels}\n onDateChange={onDateChange}\n onViewChange={onViewChange}\n previousControlProps={previousControlProps}\n nextControlProps={nextControlProps}\n todayControlProps={todayControlProps}\n viewSelectProps={{ views: ['day', 'week', 'month'] as const, ...viewSelectProps }}\n stylesApiProps={stylesApiProps}\n />\n )}\n\n <Box {...getStyles('resourcesMonthViewRoot')}>\n <ScrollArea\n scrollbars=\"x\"\n scrollbarSize={4}\n {...scrollAreaProps}\n {...getStyles('resourcesMonthViewScrollArea', {\n className: scrollAreaProps?.className,\n style: scrollAreaProps?.style,\n })}\n viewportRef={mergedViewportRef}\n >\n <div {...getStyles('resourcesMonthViewInner')}>\n <div {...getStyles('resourcesMonthViewDayLabelsRow')}>\n <div\n {...getStyles('resourcesMonthViewCorner')}\n key=\"corner\"\n ref={resourceLabelRef}\n style={\n hasGroups\n ? {\n flexBasis:\n 'calc(var(--resources-month-view-resource-label-width) + var(--resources-month-view-group-label-width))',\n minWidth:\n 'calc(var(--resources-month-view-resource-label-width) + var(--resources-month-view-group-label-width))',\n }\n : undefined\n }\n >\n {getLabel('resources', labels)}\n </div>\n {dayLabels}\n </div>\n\n {rows}\n </div>\n </ScrollArea>\n </Box>\n </Box>\n );\n\n if (withEventsDragAndDrop) {\n return <DragContext.Provider value={dragDrop.dragContextValue}>{content}</DragContext.Provider>;\n }\n\n return content;\n});\n\nResourcesMonthView.displayName = '@mantine/schedule/ResourcesMonthView';\nResourcesMonthView.classes = classes;\nResourcesMonthView.varsResolver = varsResolver;\n"],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ const defaultProps = {
|
|
|
13
13
|
};
|
|
14
14
|
const ResourcesSchedule = (0, _mantine_core.factory)((_props) => {
|
|
15
15
|
const props = (0, _mantine_core.useProps)("ResourcesSchedule", defaultProps, _props);
|
|
16
|
-
const { classNames, className, style, styles, unstyled, vars, resources, date, defaultDate, onDateChange, view, defaultView, onViewChange, events, locale, radius, labels, renderEventBody, renderResourceLabel, withEventsDragAndDrop, onEventDrop, canDragEvent, onEventDragStart, onEventDragEnd, onTimeSlotClick, onDayClick, onEventClick, withDragSlotSelect, onSlotDragEnd, onExternalEventDrop, withEventResize, onEventResize, canResizeEvent, withInteractiveBackgroundEvents, recurrenceExpansionLimit, mode, dayViewProps, weekViewProps, monthViewProps, __staticSelector, mod, ...others } = props;
|
|
16
|
+
const { classNames, className, style, styles, unstyled, vars, resources, date, defaultDate, onDateChange, view, defaultView, onViewChange, events, locale, radius, labels, renderEventBody, renderResourceLabel, withEventsDragAndDrop, onEventDrop, canDragEvent, onEventDragStart, onEventDragEnd, onTimeSlotClick, onDayClick, onEventClick, withDragSlotSelect, onSlotDragEnd, onExternalEventDrop, withEventResize, onEventResize, canResizeEvent, canDropEvent, canDropExternalEvent, canResizeEventTo, preventEventOverlap, onEventPlacementRejected, withInteractiveBackgroundEvents, recurrenceExpansionLimit, mode, dayViewProps, weekViewProps, monthViewProps, __staticSelector, mod, ...others } = props;
|
|
17
17
|
const getStyles = (0, _mantine_core.useStyles)({
|
|
18
18
|
name: __staticSelector || "ResourcesSchedule",
|
|
19
19
|
classes: require_ResourcesSchedule_module.default,
|
|
@@ -61,6 +61,11 @@ const ResourcesSchedule = (0, _mantine_core.factory)((_props) => {
|
|
|
61
61
|
withDragSlotSelect,
|
|
62
62
|
onSlotDragEnd,
|
|
63
63
|
onExternalEventDrop,
|
|
64
|
+
canDropEvent,
|
|
65
|
+
canDropExternalEvent,
|
|
66
|
+
canResizeEventTo,
|
|
67
|
+
preventEventOverlap,
|
|
68
|
+
onEventPlacementRejected,
|
|
64
69
|
recurrenceExpansionLimit,
|
|
65
70
|
mode
|
|
66
71
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourcesSchedule.cjs","names":["factory","useProps","useStyles","useUncontrolled","ResourcesDayView","ResourcesWeekView","ResourcesMonthView","Box","classes"],"sources":["../../../src/components/ResourcesSchedule/ResourcesSchedule.tsx"],"sourcesContent":["import {\n Box,\n BoxProps,\n ElementProps,\n factory,\n Factory,\n MantineRadius,\n StylesApiProps,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { useUncontrolled } from '@mantine/hooks';\nimport { ScheduleLabelsOverride } from '../../labels';\nimport {\n DateStringValue,\n DateTimeStringValue,\n ScheduleEventData,\n ScheduleMode,\n ScheduleResourceData,\n ScheduleViewLevel,\n} from '../../types';\nimport {\n ResourcesDayView,\n ResourcesDayViewProps,\n ResourcesDayViewStylesNames,\n} from '../ResourcesDayView/ResourcesDayView';\nimport {\n ResourcesMonthView,\n ResourcesMonthViewProps,\n ResourcesMonthViewStylesNames,\n} from '../ResourcesMonthView/ResourcesMonthView';\nimport {\n ResourcesWeekView,\n ResourcesWeekViewProps,\n ResourcesWeekViewStylesNames,\n} from '../ResourcesWeekView/ResourcesWeekView';\nimport { RenderEventBody } from '../ScheduleEvent/ScheduleEvent';\nimport classes from './ResourcesSchedule.module.css';\n\nexport type ResourcesScheduleStylesNames =\n | 'root'\n | ResourcesDayViewStylesNames\n | ResourcesWeekViewStylesNames\n | ResourcesMonthViewStylesNames;\n\nexport type ResourcesScheduleViewLevel = 'day' | 'week' | 'month';\n\ntype ResourcesScheduleCommonProps =\n | 'date'\n | 'onDateChange'\n | 'resources'\n | 'events'\n | 'locale'\n | 'radius'\n | 'labels'\n | 'renderEventBody'\n | 'renderResourceLabel'\n | 'withEventsDragAndDrop'\n | 'onEventDrop'\n | 'canDragEvent'\n | 'onEventDragStart'\n | 'onEventDragEnd'\n | 'onTimeSlotClick'\n | 'onEventClick'\n | 'onDayClick'\n | 'withDragSlotSelect'\n | 'onSlotDragEnd'\n | 'view'\n | 'onViewChange'\n | 'mode'\n | 'onExternalEventDrop'\n | 'withEventResize'\n | 'onEventResize'\n | 'canResizeEvent'\n | 'recurrenceExpansionLimit'\n | 'withInteractiveBackgroundEvents';\n\ntype ResourcesScheduleViewProps<T> = Partial<Omit<T, ResourcesScheduleCommonProps>>;\n\nexport interface ResourcesScheduleProps\n extends BoxProps, StylesApiProps<ResourcesScheduleFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** List of resources to display */\n resources: ScheduleResourceData[];\n\n /** Current date to display (controlled) */\n date?: Date | DateStringValue;\n\n /** Default date (uncontrolled) */\n defaultDate?: Date | DateStringValue;\n\n /** Called when date changes via navigation */\n onDateChange?: (date: DateStringValue) => void;\n\n /** Current view level (controlled) */\n view?: ResourcesScheduleViewLevel;\n\n /** Default view level (uncontrolled) @default 'day' */\n defaultView?: ResourcesScheduleViewLevel;\n\n /** Called when view level changes */\n onViewChange?: (view: ResourcesScheduleViewLevel) => void;\n\n /** Events to display across all views */\n events?: ScheduleEventData[];\n\n /** Locale for date formatting */\n locale?: string;\n\n /** Key of theme.radius or any valid CSS value to set border-radius */\n radius?: MantineRadius;\n\n /** Labels override for i18n */\n labels?: ScheduleLabelsOverride;\n\n /** Custom event body renderer */\n renderEventBody?: RenderEventBody;\n\n /** Custom resource label renderer */\n renderResourceLabel?: (resource: ScheduleResourceData) => React.ReactNode;\n\n /** Enable drag and drop for events @default false */\n withEventsDragAndDrop?: boolean;\n\n /** Called when event is dropped */\n onEventDrop?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n resourceId?: string | number;\n }) => void;\n\n /** Function to determine if event can be dragged */\n canDragEvent?: (event: ScheduleEventData) => boolean;\n\n /** Called when any event drag starts */\n onEventDragStart?: (event: ScheduleEventData) => void;\n\n /** Called when any event drag ends */\n onEventDragEnd?: () => void;\n\n /** Called when time slot is clicked */\n onTimeSlotClick?: (data: {\n slotStart: DateTimeStringValue;\n slotEnd: DateTimeStringValue;\n nativeEvent: React.MouseEvent<HTMLButtonElement>;\n resourceId?: string | number;\n }) => void;\n\n /** Called when day is clicked in month view */\n onDayClick?: (data: {\n date: DateStringValue;\n nativeEvent: React.MouseEvent<HTMLButtonElement>;\n resourceId?: string | number;\n }) => void;\n\n /** Called when event is clicked */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** If set, enables drag-to-select slot ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a slot range is selected by dragging */\n onSlotDragEnd?: (data: {\n rangeStart: DateTimeStringValue;\n rangeEnd: DateTimeStringValue;\n resourceId?: string | number;\n }) => void;\n\n /** Interaction mode @default default */\n mode?: ScheduleMode;\n\n /** Called when an external item is dropped onto the schedule */\n onExternalEventDrop?: (data: {\n dataTransfer: DataTransfer;\n dropDateTime: DateTimeStringValue;\n resourceId?: string | number;\n }) => void;\n\n /** If true, events can be resized by dragging their edges, resizing snaps to whole days in month view @default false */\n withEventResize?: boolean;\n\n /** Called when event is resized */\n onEventResize?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => void;\n\n /** Function to determine if event can be resized */\n canResizeEvent?: (event: ScheduleEventData) => boolean;\n\n /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick`. Applies to `day` and `week` views only – `ResourcesMonthView` does not render background events separately. Combined with `withEventResize`, timed background events can also be resized by dragging their edges. @default false */\n withInteractiveBackgroundEvents?: boolean;\n\n /** Max number of generated recurring instances @default 2000 */\n recurrenceExpansionLimit?: number;\n\n /** Props specific to ResourcesDayView */\n dayViewProps?: ResourcesScheduleViewProps<ResourcesDayViewProps>;\n\n /** Props specific to ResourcesWeekView */\n weekViewProps?: ResourcesScheduleViewProps<ResourcesWeekViewProps>;\n\n /** Props specific to ResourcesMonthView */\n monthViewProps?: ResourcesScheduleViewProps<ResourcesMonthViewProps>;\n}\n\nexport type ResourcesScheduleFactory = Factory<{\n props: ResourcesScheduleProps;\n ref: HTMLDivElement;\n stylesNames: ResourcesScheduleStylesNames;\n}>;\n\nconst defaultProps: Partial<ResourcesScheduleProps> = {\n defaultView: 'day',\n mode: 'default',\n};\n\nexport const ResourcesSchedule = factory<ResourcesScheduleFactory>((_props) => {\n const props = useProps('ResourcesSchedule', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n resources,\n date,\n defaultDate,\n onDateChange,\n view,\n defaultView,\n onViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n renderResourceLabel,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onDayClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n withEventResize,\n onEventResize,\n canResizeEvent,\n withInteractiveBackgroundEvents,\n recurrenceExpansionLimit,\n mode,\n dayViewProps,\n weekViewProps,\n monthViewProps,\n __staticSelector,\n mod,\n ...others\n } = props;\n\n const getStyles = useStyles<ResourcesScheduleFactory>({\n name: __staticSelector || 'ResourcesSchedule',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n });\n\n const [_view, _setView] = useUncontrolled<ResourcesScheduleViewLevel>({\n value: view,\n defaultValue: defaultView,\n onChange: onViewChange,\n });\n\n const [_date, _setDate] = useUncontrolled<Date | DateStringValue>({\n value: date,\n defaultValue: defaultDate ?? new Date(),\n });\n\n const handleDateChange = (newDate: DateStringValue) => {\n _setDate(newDate);\n onDateChange?.(newDate);\n };\n\n const handleViewChange = (newView: ScheduleViewLevel) => {\n if (newView === 'day' || newView === 'week' || newView === 'month') {\n _setView(newView);\n }\n };\n\n const commonProps = {\n resources,\n date: _date,\n onDateChange: handleDateChange,\n onViewChange: handleViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n renderResourceLabel,\n withEventsDragAndDrop: mode === 'static' ? false : withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n recurrenceExpansionLimit,\n mode,\n };\n\n const content = (() => {\n switch (_view) {\n case 'day':\n return (\n <ResourcesDayView\n {...commonProps}\n onTimeSlotClick={onTimeSlotClick}\n withEventResize={mode === 'static' ? false : withEventResize}\n onEventResize={onEventResize}\n canResizeEvent={canResizeEvent}\n withInteractiveBackgroundEvents={\n mode === 'static' ? false : withInteractiveBackgroundEvents\n }\n {...dayViewProps}\n />\n );\n case 'week':\n return (\n <ResourcesWeekView\n {...commonProps}\n onTimeSlotClick={onTimeSlotClick}\n withEventResize={mode === 'static' ? false : withEventResize}\n onEventResize={onEventResize}\n canResizeEvent={canResizeEvent}\n withInteractiveBackgroundEvents={\n mode === 'static' ? false : withInteractiveBackgroundEvents\n }\n {...weekViewProps}\n />\n );\n case 'month':\n return (\n <ResourcesMonthView\n {...commonProps}\n onDayClick={onDayClick}\n withEventResize={mode === 'static' ? false : withEventResize}\n onEventResize={onEventResize}\n canResizeEvent={canResizeEvent}\n {...monthViewProps}\n />\n );\n default:\n return null;\n }\n })();\n\n return (\n <Box {...getStyles('root')} mod={mod} {...others}>\n {content}\n </Box>\n );\n});\n\nResourcesSchedule.displayName = '@mantine/schedule/ResourcesSchedule';\nResourcesSchedule.classes = classes;\n\nexport namespace ResourcesSchedule {\n export type Props = ResourcesScheduleProps;\n export type StylesNames = ResourcesScheduleStylesNames;\n export type Factory = ResourcesScheduleFactory;\n export type ViewLevel = ResourcesScheduleViewLevel;\n}\n"],"mappings":";;;;;;;;;AAyNA,MAAM,eAAgD;CACpD,aAAa;CACb,MAAM;AACR;AAEA,MAAa,qBAAA,GAAoBA,cAAAA,QAAAA,EAAmC,WAAW;CAC7E,MAAM,SAAA,GAAQC,cAAAA,SAAAA,CAAS,qBAAqB,cAAc,MAAM;CAChE,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,WACA,MACA,aACA,cACA,MACA,aACA,cACA,QACA,QACA,QACA,QACA,iBACA,qBACA,uBACA,aACA,cACA,kBACA,gBACA,iBACA,YACA,cACA,oBACA,eACA,qBACA,iBACA,eACA,gBACA,iCACA,0BACA,MACA,cACA,eACA,gBACA,kBACA,KACA,GAAG,WACD;CAEJ,MAAM,aAAA,GAAYC,cAAAA,UAAAA,CAAoC;EACpD,MAAM,oBAAoB;EAC1B,SAAA,iCAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,CAAC,OAAO,aAAA,GAAYC,eAAAA,gBAAAA,CAA4C;EACpE,OAAO;EACP,cAAc;EACd,UAAU;CACZ,CAAC;CAED,MAAM,CAAC,OAAO,aAAA,GAAYA,eAAAA,gBAAAA,CAAwC;EAChE,OAAO;EACP,cAAc,+BAAe,IAAI,KAAK;CACxC,CAAC;CAED,MAAM,oBAAoB,YAA6B;EACrD,SAAS,OAAO;EAChB,eAAe,OAAO;CACxB;CAEA,MAAM,oBAAoB,YAA+B;EACvD,IAAI,YAAY,SAAS,YAAY,UAAU,YAAY,SACzD,SAAS,OAAO;CAEpB;CAEA,MAAM,cAAc;EAClB;EACA,MAAM;EACN,cAAc;EACd,cAAc;EACd;EACA;EACA;EACA;EACA;EACA;EACA,uBAAuB,SAAS,WAAW,QAAQ;EACnD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CAEA,MAAM,iBAAiB;EACrB,QAAQ,OAAR;GACE,KAAK,OACH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,kBAAD;IACE,GAAI;IACa;IACjB,iBAAiB,SAAS,WAAW,QAAQ;IAC9B;IACC;IAChB,iCACE,SAAS,WAAW,QAAQ;IAE9B,GAAI;GACL,CAAA;GAEL,KAAK,QACH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,0BAAAA,mBAAD;IACE,GAAI;IACa;IACjB,iBAAiB,SAAS,WAAW,QAAQ;IAC9B;IACC;IAChB,iCACE,SAAS,WAAW,QAAQ;IAE9B,GAAI;GACL,CAAA;GAEL,KAAK,SACH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,2BAAAA,oBAAD;IACE,GAAI;IACQ;IACZ,iBAAiB,SAAS,WAAW,QAAQ;IAC9B;IACC;IAChB,GAAI;GACL,CAAA;GAEL,SACE,OAAO;EACX;CACF,EAAA,CAAG;CAEH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,KAAD;EAAK,GAAI,UAAU,MAAM;EAAQ;EAAK,GAAI;EACvC,UAAA;CACE,CAAA;AAET,CAAC;AAED,kBAAkB,cAAc;AAChC,kBAAkB,UAAUC,iCAAAA"}
|
|
1
|
+
{"version":3,"file":"ResourcesSchedule.cjs","names":["factory","useProps","useStyles","useUncontrolled","ResourcesDayView","ResourcesWeekView","ResourcesMonthView","Box","classes"],"sources":["../../../src/components/ResourcesSchedule/ResourcesSchedule.tsx"],"sourcesContent":["import {\n Box,\n BoxProps,\n ElementProps,\n factory,\n Factory,\n MantineRadius,\n StylesApiProps,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { useUncontrolled } from '@mantine/hooks';\nimport { ScheduleLabelsOverride } from '../../labels';\nimport {\n DateStringValue,\n DateTimeStringValue,\n PreventEventOverlap,\n ScheduleCanDropEventData,\n ScheduleCanDropExternalEventData,\n ScheduleCanResizeEventToData,\n ScheduleEventData,\n ScheduleEventPlacementRejectedData,\n ScheduleMode,\n ScheduleResourceData,\n ScheduleViewLevel,\n} from '../../types';\nimport {\n ResourcesDayView,\n ResourcesDayViewProps,\n ResourcesDayViewStylesNames,\n} from '../ResourcesDayView/ResourcesDayView';\nimport {\n ResourcesMonthView,\n ResourcesMonthViewProps,\n ResourcesMonthViewStylesNames,\n} from '../ResourcesMonthView/ResourcesMonthView';\nimport {\n ResourcesWeekView,\n ResourcesWeekViewProps,\n ResourcesWeekViewStylesNames,\n} from '../ResourcesWeekView/ResourcesWeekView';\nimport { RenderEventBody } from '../ScheduleEvent/ScheduleEvent';\nimport classes from './ResourcesSchedule.module.css';\n\nexport type ResourcesScheduleStylesNames =\n | 'root'\n | ResourcesDayViewStylesNames\n | ResourcesWeekViewStylesNames\n | ResourcesMonthViewStylesNames;\n\nexport type ResourcesScheduleViewLevel = 'day' | 'week' | 'month';\n\ntype ResourcesScheduleCommonProps =\n | 'date'\n | 'onDateChange'\n | 'resources'\n | 'events'\n | 'locale'\n | 'radius'\n | 'labels'\n | 'renderEventBody'\n | 'renderResourceLabel'\n | 'withEventsDragAndDrop'\n | 'onEventDrop'\n | 'canDragEvent'\n | 'onEventDragStart'\n | 'onEventDragEnd'\n | 'onTimeSlotClick'\n | 'onEventClick'\n | 'onDayClick'\n | 'withDragSlotSelect'\n | 'onSlotDragEnd'\n | 'view'\n | 'onViewChange'\n | 'mode'\n | 'onExternalEventDrop'\n | 'withEventResize'\n | 'onEventResize'\n | 'canResizeEvent'\n | 'canDropEvent'\n | 'canDropExternalEvent'\n | 'canResizeEventTo'\n | 'preventEventOverlap'\n | 'onEventPlacementRejected'\n | 'recurrenceExpansionLimit'\n | 'withInteractiveBackgroundEvents';\n\ntype ResourcesScheduleViewProps<T> = Partial<Omit<T, ResourcesScheduleCommonProps>>;\n\nexport interface ResourcesScheduleProps\n extends BoxProps, StylesApiProps<ResourcesScheduleFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** List of resources to display */\n resources: ScheduleResourceData[];\n\n /** Current date to display (controlled) */\n date?: Date | DateStringValue;\n\n /** Default date (uncontrolled) */\n defaultDate?: Date | DateStringValue;\n\n /** Called when date changes via navigation */\n onDateChange?: (date: DateStringValue) => void;\n\n /** Current view level (controlled) */\n view?: ResourcesScheduleViewLevel;\n\n /** Default view level (uncontrolled) @default 'day' */\n defaultView?: ResourcesScheduleViewLevel;\n\n /** Called when view level changes */\n onViewChange?: (view: ResourcesScheduleViewLevel) => void;\n\n /** Events to display across all views */\n events?: ScheduleEventData[];\n\n /** Locale for date formatting */\n locale?: string;\n\n /** Key of theme.radius or any valid CSS value to set border-radius */\n radius?: MantineRadius;\n\n /** Labels override for i18n */\n labels?: ScheduleLabelsOverride;\n\n /** Custom event body renderer */\n renderEventBody?: RenderEventBody;\n\n /** Custom resource label renderer */\n renderResourceLabel?: (resource: ScheduleResourceData) => React.ReactNode;\n\n /** Enable drag and drop for events @default false */\n withEventsDragAndDrop?: boolean;\n\n /** Called when event is dropped */\n onEventDrop?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n resourceId?: string | number;\n }) => void;\n\n /** Function to determine if event can be dragged */\n canDragEvent?: (event: ScheduleEventData) => boolean;\n\n /** Called when any event drag starts */\n onEventDragStart?: (event: ScheduleEventData) => void;\n\n /** Called when any event drag ends */\n onEventDragEnd?: () => void;\n\n /** Called when time slot is clicked */\n onTimeSlotClick?: (data: {\n slotStart: DateTimeStringValue;\n slotEnd: DateTimeStringValue;\n nativeEvent: React.MouseEvent<HTMLButtonElement>;\n resourceId?: string | number;\n }) => void;\n\n /** Called when day is clicked in month view */\n onDayClick?: (data: {\n date: DateStringValue;\n nativeEvent: React.MouseEvent<HTMLButtonElement>;\n resourceId?: string | number;\n }) => void;\n\n /** Called when event is clicked */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** If set, enables drag-to-select slot ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a slot range is selected by dragging */\n onSlotDragEnd?: (data: {\n rangeStart: DateTimeStringValue;\n rangeEnd: DateTimeStringValue;\n resourceId?: string | number;\n }) => void;\n\n /** Interaction mode @default default */\n mode?: ScheduleMode;\n\n /** Called when an external item is dropped onto the schedule */\n onExternalEventDrop?: (data: {\n dataTransfer: DataTransfer;\n dropDateTime: DateTimeStringValue;\n resourceId?: string | number;\n }) => void;\n\n /** If true, events can be resized by dragging their edges, resizing snaps to whole days in month view @default false */\n withEventResize?: boolean;\n\n /** Called when event is resized */\n onEventResize?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => void;\n\n /** Function to determine if event can be resized */\n canResizeEvent?: (event: ScheduleEventData) => boolean;\n\n /** Called while an event is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. */\n canDropEvent?: (data: ScheduleCanDropEventData) => boolean;\n\n /** Called while an external item is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. Only `dataTransfer.types` can be read while the drag is in progress. */\n canDropExternalEvent?: (data: ScheduleCanDropExternalEventData) => boolean;\n\n /** Called on every pointer move while an event is resized to compute live feedback and again before the resize is committed, return `false` to reject the new size. Must be pure and cheap. */\n canResizeEventTo?: (data: ScheduleCanResizeEventToData) => boolean;\n\n /** If set, drops and resizes that would make the event overlap another event are rejected. Pass a function to decide per pair of events: return `true` to forbid the overlap. The function runs while dragging and resizing to compute live feedback, it must be pure and cheap. @default false */\n preventEventOverlap?: PreventEventOverlap;\n\n /** Called when a drop or resize is rejected */\n onEventPlacementRejected?: (data: ScheduleEventPlacementRejectedData) => void;\n\n /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick`. Applies to `day` and `week` views only – `ResourcesMonthView` does not render background events separately. Combined with `withEventResize`, timed background events can also be resized by dragging their edges. @default false */\n withInteractiveBackgroundEvents?: boolean;\n\n /** Max number of generated recurring instances @default 2000 */\n recurrenceExpansionLimit?: number;\n\n /** Props specific to ResourcesDayView */\n dayViewProps?: ResourcesScheduleViewProps<ResourcesDayViewProps>;\n\n /** Props specific to ResourcesWeekView */\n weekViewProps?: ResourcesScheduleViewProps<ResourcesWeekViewProps>;\n\n /** Props specific to ResourcesMonthView */\n monthViewProps?: ResourcesScheduleViewProps<ResourcesMonthViewProps>;\n}\n\nexport type ResourcesScheduleFactory = Factory<{\n props: ResourcesScheduleProps;\n ref: HTMLDivElement;\n stylesNames: ResourcesScheduleStylesNames;\n}>;\n\nconst defaultProps: Partial<ResourcesScheduleProps> = {\n defaultView: 'day',\n mode: 'default',\n};\n\nexport const ResourcesSchedule = factory<ResourcesScheduleFactory>((_props) => {\n const props = useProps('ResourcesSchedule', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n resources,\n date,\n defaultDate,\n onDateChange,\n view,\n defaultView,\n onViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n renderResourceLabel,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onDayClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n withEventResize,\n onEventResize,\n canResizeEvent,\n canDropEvent,\n canDropExternalEvent,\n canResizeEventTo,\n preventEventOverlap,\n onEventPlacementRejected,\n withInteractiveBackgroundEvents,\n recurrenceExpansionLimit,\n mode,\n dayViewProps,\n weekViewProps,\n monthViewProps,\n __staticSelector,\n mod,\n ...others\n } = props;\n\n const getStyles = useStyles<ResourcesScheduleFactory>({\n name: __staticSelector || 'ResourcesSchedule',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n });\n\n const [_view, _setView] = useUncontrolled<ResourcesScheduleViewLevel>({\n value: view,\n defaultValue: defaultView,\n onChange: onViewChange,\n });\n\n const [_date, _setDate] = useUncontrolled<Date | DateStringValue>({\n value: date,\n defaultValue: defaultDate ?? new Date(),\n });\n\n const handleDateChange = (newDate: DateStringValue) => {\n _setDate(newDate);\n onDateChange?.(newDate);\n };\n\n const handleViewChange = (newView: ScheduleViewLevel) => {\n if (newView === 'day' || newView === 'week' || newView === 'month') {\n _setView(newView);\n }\n };\n\n const commonProps = {\n resources,\n date: _date,\n onDateChange: handleDateChange,\n onViewChange: handleViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n renderResourceLabel,\n withEventsDragAndDrop: mode === 'static' ? false : withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n canDropEvent,\n canDropExternalEvent,\n canResizeEventTo,\n preventEventOverlap,\n onEventPlacementRejected,\n recurrenceExpansionLimit,\n mode,\n };\n\n const content = (() => {\n switch (_view) {\n case 'day':\n return (\n <ResourcesDayView\n {...commonProps}\n onTimeSlotClick={onTimeSlotClick}\n withEventResize={mode === 'static' ? false : withEventResize}\n onEventResize={onEventResize}\n canResizeEvent={canResizeEvent}\n withInteractiveBackgroundEvents={\n mode === 'static' ? false : withInteractiveBackgroundEvents\n }\n {...dayViewProps}\n />\n );\n case 'week':\n return (\n <ResourcesWeekView\n {...commonProps}\n onTimeSlotClick={onTimeSlotClick}\n withEventResize={mode === 'static' ? false : withEventResize}\n onEventResize={onEventResize}\n canResizeEvent={canResizeEvent}\n withInteractiveBackgroundEvents={\n mode === 'static' ? false : withInteractiveBackgroundEvents\n }\n {...weekViewProps}\n />\n );\n case 'month':\n return (\n <ResourcesMonthView\n {...commonProps}\n onDayClick={onDayClick}\n withEventResize={mode === 'static' ? false : withEventResize}\n onEventResize={onEventResize}\n canResizeEvent={canResizeEvent}\n {...monthViewProps}\n />\n );\n default:\n return null;\n }\n })();\n\n return (\n <Box {...getStyles('root')} mod={mod} {...others}>\n {content}\n </Box>\n );\n});\n\nResourcesSchedule.displayName = '@mantine/schedule/ResourcesSchedule';\nResourcesSchedule.classes = classes;\n\nexport namespace ResourcesSchedule {\n export type Props = ResourcesScheduleProps;\n export type StylesNames = ResourcesScheduleStylesNames;\n export type Factory = ResourcesScheduleFactory;\n export type ViewLevel = ResourcesScheduleViewLevel;\n}\n"],"mappings":";;;;;;;;;AAkPA,MAAM,eAAgD;CACpD,aAAa;CACb,MAAM;AACR;AAEA,MAAa,qBAAA,GAAoBA,cAAAA,QAAAA,EAAmC,WAAW;CAC7E,MAAM,SAAA,GAAQC,cAAAA,SAAAA,CAAS,qBAAqB,cAAc,MAAM;CAChE,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,WACA,MACA,aACA,cACA,MACA,aACA,cACA,QACA,QACA,QACA,QACA,iBACA,qBACA,uBACA,aACA,cACA,kBACA,gBACA,iBACA,YACA,cACA,oBACA,eACA,qBACA,iBACA,eACA,gBACA,cACA,sBACA,kBACA,qBACA,0BACA,iCACA,0BACA,MACA,cACA,eACA,gBACA,kBACA,KACA,GAAG,WACD;CAEJ,MAAM,aAAA,GAAYC,cAAAA,UAAAA,CAAoC;EACpD,MAAM,oBAAoB;EAC1B,SAAA,iCAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,CAAC,OAAO,aAAA,GAAYC,eAAAA,gBAAAA,CAA4C;EACpE,OAAO;EACP,cAAc;EACd,UAAU;CACZ,CAAC;CAED,MAAM,CAAC,OAAO,aAAA,GAAYA,eAAAA,gBAAAA,CAAwC;EAChE,OAAO;EACP,cAAc,+BAAe,IAAI,KAAK;CACxC,CAAC;CAED,MAAM,oBAAoB,YAA6B;EACrD,SAAS,OAAO;EAChB,eAAe,OAAO;CACxB;CAEA,MAAM,oBAAoB,YAA+B;EACvD,IAAI,YAAY,SAAS,YAAY,UAAU,YAAY,SACzD,SAAS,OAAO;CAEpB;CAEA,MAAM,cAAc;EAClB;EACA,MAAM;EACN,cAAc;EACd,cAAc;EACd;EACA;EACA;EACA;EACA;EACA;EACA,uBAAuB,SAAS,WAAW,QAAQ;EACnD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CAEA,MAAM,iBAAiB;EACrB,QAAQ,OAAR;GACE,KAAK,OACH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,kBAAD;IACE,GAAI;IACa;IACjB,iBAAiB,SAAS,WAAW,QAAQ;IAC9B;IACC;IAChB,iCACE,SAAS,WAAW,QAAQ;IAE9B,GAAI;GACL,CAAA;GAEL,KAAK,QACH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,0BAAAA,mBAAD;IACE,GAAI;IACa;IACjB,iBAAiB,SAAS,WAAW,QAAQ;IAC9B;IACC;IAChB,iCACE,SAAS,WAAW,QAAQ;IAE9B,GAAI;GACL,CAAA;GAEL,KAAK,SACH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,2BAAAA,oBAAD;IACE,GAAI;IACQ;IACZ,iBAAiB,SAAS,WAAW,QAAQ;IAC9B;IACC;IAChB,GAAI;GACL,CAAA;GAEL,SACE,OAAO;EACX;CACF,EAAA,CAAG;CAEH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,KAAD;EAAK,GAAI,UAAU,MAAM;EAAQ;EAAK,GAAI;EACvC,UAAA;CACE,CAAA;AAET,CAAC;AAED,kBAAkB,cAAc;AAChC,kBAAkB,UAAUC,iCAAAA"}
|
|
@@ -14,6 +14,7 @@ const require_get_day_position = require("../../utils/get-day-position/get-day-p
|
|
|
14
14
|
const require_get_time_axis_event_style = require("../../utils/get-time-axis-event-style/get-time-axis-event-style.cjs");
|
|
15
15
|
const require_calculate_drop_time = require("../../utils/calculate-drop-time/calculate-drop-time.cjs");
|
|
16
16
|
const require_get_business_hours_mod = require("../../utils/get-business-hours-mod/get-business-hours-mod.cjs");
|
|
17
|
+
const require_expand_recurring_events = require("../../utils/expand-recurring-events/expand-recurring-events.cjs");
|
|
17
18
|
const require_get_ordered_resources = require("../../utils/get-ordered-resources/get-ordered-resources.cjs");
|
|
18
19
|
const require_handle_resources_grid_key_down = require("../../utils/handle-resources-grid-key-down/handle-resources-grid-key-down.cjs");
|
|
19
20
|
const require_get_group_to_resource_id_map = require("../../utils/get-group-to-resource-id-map/get-group-to-resource-id-map.cjs");
|
|
@@ -69,7 +70,7 @@ const varsResolver = (0, _mantine_core.createVarsResolver)((_theme, { radius, sl
|
|
|
69
70
|
} }));
|
|
70
71
|
const ResourcesWeekView = (0, _mantine_core.factory)((_props) => {
|
|
71
72
|
const props = (0, _mantine_core.useProps)("ResourcesWeekView", defaultProps, _props);
|
|
72
|
-
const { classNames, className, style, styles, unstyled, attributes, vars, startTime, endTime, date, onDateChange, resources, intervalMinutes, minEventSize, slotLabelFormat, radius, startScrollDateTime, scrollAreaProps, locale, withCurrentTimeIndicator: _withCurrentTimeIndicator, withCurrentTimeBubble, getCurrentTime, __staticSelector, withHeader, onViewChange, previousControlProps, nextControlProps, todayControlProps, viewSelectProps, weekLabelFormat, renderWeekLabel, events, slotWidth, rowHeight, labels, highlightBusinessHours, businessHours, renderEventBody, renderEvent, renderResourceLabel, groups, renderGroupLabel, groupLabelWidth, withEventsDragAndDrop, onEventDrop, canDragEvent, eventDragInterval, onEventDragStart, onEventDragEnd, withEventResize, onEventResize, canResizeEvent, eventResizeInterval, onTimeSlotClick, onEventClick, withInteractiveBackgroundEvents, withDragSlotSelect, onSlotDragEnd, mode, onExternalEventDrop, recurrenceExpansionLimit, maxEventsPerTimeSlot: _maxEventsPerTimeSlot, moreEventsProps, firstDayOfWeek, weekendDays, withWeekendDays, weekdayFormat, highlightToday, ...others } = props;
|
|
73
|
+
const { classNames, className, style, styles, unstyled, attributes, vars, startTime, endTime, date, onDateChange, resources, intervalMinutes, minEventSize, slotLabelFormat, radius, startScrollDateTime, scrollAreaProps, locale, withCurrentTimeIndicator: _withCurrentTimeIndicator, withCurrentTimeBubble, getCurrentTime, __staticSelector, withHeader, onViewChange, previousControlProps, nextControlProps, todayControlProps, viewSelectProps, weekLabelFormat, renderWeekLabel, events, slotWidth, rowHeight, labels, highlightBusinessHours, businessHours, renderEventBody, renderEvent, renderResourceLabel, groups, renderGroupLabel, groupLabelWidth, withEventsDragAndDrop, onEventDrop, canDragEvent, eventDragInterval, onEventDragStart, onEventDragEnd, withEventResize, onEventResize, canResizeEvent, canDropEvent, canDropExternalEvent, canResizeEventTo, preventEventOverlap, onEventPlacementRejected, eventResizeInterval, onTimeSlotClick, onEventClick, withInteractiveBackgroundEvents, withDragSlotSelect, onSlotDragEnd, mode, onExternalEventDrop, recurrenceExpansionLimit, maxEventsPerTimeSlot: _maxEventsPerTimeSlot, moreEventsProps, firstDayOfWeek, weekendDays, withWeekendDays, weekdayFormat, highlightToday, ...others } = props;
|
|
73
74
|
const maxEventsPerTimeSlot = _maxEventsPerTimeSlot !== void 0 ? Math.max(1, _maxEventsPerTimeSlot) : void 0;
|
|
74
75
|
const getStyles = (0, _mantine_core.useStyles)({
|
|
75
76
|
name: __staticSelector,
|
|
@@ -150,40 +151,31 @@ const ResourcesWeekView = (0, _mantine_core.factory)((_props) => {
|
|
|
150
151
|
offset: 0,
|
|
151
152
|
size: 0
|
|
152
153
|
});
|
|
153
|
-
const
|
|
154
|
-
if (!onExternalEventDrop) return;
|
|
154
|
+
const getExternalDropDateTime = (0, react.useCallback)((target) => {
|
|
155
155
|
const dayIndex = Math.floor(target.slotIndex / totalSlotsPerDay);
|
|
156
156
|
const slotInDay = target.slotIndex % totalSlotsPerDay;
|
|
157
157
|
const slotDay = weekdays[dayIndex];
|
|
158
|
-
if (slotDay)
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
}
|
|
179
|
-
onExternalEventDrop({
|
|
180
|
-
dataTransfer: e.dataTransfer,
|
|
181
|
-
dropDateTime,
|
|
182
|
-
resourceId: target.resourceId
|
|
183
|
-
});
|
|
184
|
-
}
|
|
158
|
+
if (!slotDay) return null;
|
|
159
|
+
const slotDate = (0, dayjs.default)(slotDay).format("YYYY-MM-DD");
|
|
160
|
+
const slotTime = slots[slotInDay].startTime;
|
|
161
|
+
const dropDateTime = `${slotDate} ${slotTime}`;
|
|
162
|
+
if (eventDragInterval == null) return dropDateTime;
|
|
163
|
+
const { start } = require_calculate_drop_time.calculateDropTime({
|
|
164
|
+
draggedEvent: {
|
|
165
|
+
start: dropDateTime,
|
|
166
|
+
end: dropDateTime
|
|
167
|
+
},
|
|
168
|
+
targetDate: slotDate,
|
|
169
|
+
targetSlotTime: slotTime,
|
|
170
|
+
intervalMinutes,
|
|
171
|
+
dragIntervalMinutes: eventDragInterval,
|
|
172
|
+
slotOffset: dragOffsetRef.current.offset,
|
|
173
|
+
slotSize: dragOffsetRef.current.size,
|
|
174
|
+
startTime,
|
|
175
|
+
endTime
|
|
176
|
+
});
|
|
177
|
+
return (0, dayjs.default)(start).format("YYYY-MM-DD HH:mm:ss");
|
|
185
178
|
}, [
|
|
186
|
-
onExternalEventDrop,
|
|
187
179
|
slots,
|
|
188
180
|
weekdays,
|
|
189
181
|
totalSlotsPerDay,
|
|
@@ -192,6 +184,16 @@ const ResourcesWeekView = (0, _mantine_core.factory)((_props) => {
|
|
|
192
184
|
startTime,
|
|
193
185
|
endTime
|
|
194
186
|
]);
|
|
187
|
+
const handleExternalDrop = (0, react.useCallback)((e, target) => {
|
|
188
|
+
if (!onExternalEventDrop) return;
|
|
189
|
+
const dropDateTime = getExternalDropDateTime(target);
|
|
190
|
+
if (dropDateTime === null) return;
|
|
191
|
+
onExternalEventDrop({
|
|
192
|
+
dataTransfer: e.dataTransfer,
|
|
193
|
+
dropDateTime,
|
|
194
|
+
resourceId: target.resourceId
|
|
195
|
+
});
|
|
196
|
+
}, [onExternalEventDrop, getExternalDropDateTime]);
|
|
195
197
|
const lastDropResourceId = (0, react.useRef)(void 0);
|
|
196
198
|
const getDropTimeForSlot = (target, draggedEvent) => {
|
|
197
199
|
const dayIndex = Math.floor(target.slotIndex / totalSlotsPerDay);
|
|
@@ -216,6 +218,16 @@ const ResourcesWeekView = (0, _mantine_core.factory)((_props) => {
|
|
|
216
218
|
resourceId: lastDropResourceId.current
|
|
217
219
|
});
|
|
218
220
|
}, [onEventDrop]);
|
|
221
|
+
const expandedEvents = (0, react.useMemo)(() => require_expand_recurring_events.expandRecurringEvents({
|
|
222
|
+
events,
|
|
223
|
+
rangeStart: (0, dayjs.default)(weekdays[0]).startOf("day").toDate(),
|
|
224
|
+
rangeEnd: (0, dayjs.default)(weekdays[weekdays.length - 1]).endOf("day").toDate(),
|
|
225
|
+
expansionLimit: recurrenceExpansionLimit
|
|
226
|
+
}), [
|
|
227
|
+
events,
|
|
228
|
+
weekdays,
|
|
229
|
+
recurrenceExpansionLimit
|
|
230
|
+
]);
|
|
219
231
|
const dragDrop = require_use_drag_drop_handlers.useDragDropHandlers({
|
|
220
232
|
enabled: withEventsDragAndDrop,
|
|
221
233
|
mode,
|
|
@@ -227,7 +239,14 @@ const ResourcesWeekView = (0, _mantine_core.factory)((_props) => {
|
|
|
227
239
|
lastDropResourceId.current = target.resourceId;
|
|
228
240
|
return getDropTimeForSlot(target, draggedEvent);
|
|
229
241
|
},
|
|
230
|
-
onExternalDrop: onExternalEventDrop ? handleExternalDrop : void 0
|
|
242
|
+
onExternalDrop: onExternalEventDrop ? handleExternalDrop : void 0,
|
|
243
|
+
events: expandedEvents,
|
|
244
|
+
preventEventOverlap,
|
|
245
|
+
canDropEvent,
|
|
246
|
+
canDropExternalEvent,
|
|
247
|
+
onEventPlacementRejected,
|
|
248
|
+
getExternalDropDateTime,
|
|
249
|
+
getTargetResourceId: (target) => target.resourceId
|
|
231
250
|
});
|
|
232
251
|
const updateDragPreview = (target) => {
|
|
233
252
|
const draggedEvent = dragDrop.dragContextValue.draggedEvent;
|
|
@@ -268,6 +287,10 @@ const ResourcesWeekView = (0, _mantine_core.factory)((_props) => {
|
|
|
268
287
|
resizeIntervalMinutes: eventResizeInterval,
|
|
269
288
|
onEventResize,
|
|
270
289
|
canResizeEvent,
|
|
290
|
+
events: expandedEvents,
|
|
291
|
+
preventEventOverlap,
|
|
292
|
+
canResizeEventTo,
|
|
293
|
+
onEventPlacementRejected,
|
|
271
294
|
withBackgroundEvents: withInteractiveBackgroundEvents
|
|
272
295
|
});
|
|
273
296
|
const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== "static";
|
|
@@ -367,7 +390,7 @@ const ResourcesWeekView = (0, _mantine_core.factory)((_props) => {
|
|
|
367
390
|
const cornerEl = viewportRef.current.querySelector(`.${require_ResourcesWeekView_module.default.resourcesWeekViewCorner}`);
|
|
368
391
|
const labelWidth = cornerEl ? cornerEl.getBoundingClientRect().width : 0;
|
|
369
392
|
viewportRef.current.scrollTo({
|
|
370
|
-
left: slotRect.left - viewportRect.left - labelWidth,
|
|
393
|
+
left: slotRect.left - viewportRect.left + viewportRef.current.scrollLeft - labelWidth,
|
|
371
394
|
top: 0
|
|
372
395
|
});
|
|
373
396
|
}, []);
|
|
@@ -489,6 +512,7 @@ const ResourcesWeekView = (0, _mantine_core.factory)((_props) => {
|
|
|
489
512
|
nowrap: true,
|
|
490
513
|
draggable: isDraggable,
|
|
491
514
|
isResizing: isThisEventResizing,
|
|
515
|
+
mod: { invalid: isThisEventResizing && !eventResize.resizeValid },
|
|
492
516
|
renderEventBody,
|
|
493
517
|
renderEvent,
|
|
494
518
|
radius,
|
|
@@ -661,31 +685,34 @@ const ResourcesWeekView = (0, _mantine_core.factory)((_props) => {
|
|
|
661
685
|
scrolledX,
|
|
662
686
|
groupInfo: hasGroups ? resourceGroupMap[resourceIndex] : void 0,
|
|
663
687
|
allDayCount: maxAllDayCount,
|
|
664
|
-
children: [eventNodes, dragDrop.dragPreview?.target.resourceId === resource.id && dragDrop.dragContextValue.draggedEvent && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.Box, {
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
688
|
+
children: [eventNodes, dragDrop.dragPreview?.target.resourceId === resource.id && dragDrop.dragContextValue.draggedEvent && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.Box, {
|
|
689
|
+
mod: { invalid: !dragDrop.dropValid },
|
|
690
|
+
...getStyles("resourcesWeekViewDragPreview", { style: (() => {
|
|
691
|
+
const previewDayIndex = Math.floor(dragDrop.dragPreview.target.slotIndex / totalSlotsPerDay);
|
|
692
|
+
const { top, height } = require_get_day_position.getDayPosition({
|
|
693
|
+
event: {
|
|
694
|
+
...dragDrop.dragContextValue.draggedEvent,
|
|
695
|
+
start: dragDrop.dragPreview.start,
|
|
696
|
+
end: dragDrop.dragPreview.end
|
|
697
|
+
},
|
|
698
|
+
startTime,
|
|
699
|
+
endTime,
|
|
700
|
+
intervalMinutes
|
|
701
|
+
});
|
|
702
|
+
const eventLeft = previewDayIndex / weekdays.length * 100 + top / 100 * dayWidthPercent;
|
|
703
|
+
const eventWidth = height / 100 * dayWidthPercent;
|
|
704
|
+
return {
|
|
705
|
+
position: "absolute",
|
|
706
|
+
insetBlockStart: 0,
|
|
707
|
+
insetBlockEnd: 0,
|
|
708
|
+
...require_get_time_axis_event_style.getTimeAxisEventStyle({
|
|
709
|
+
start: eventLeft,
|
|
710
|
+
span: eventWidth,
|
|
711
|
+
axis: "horizontal"
|
|
712
|
+
})
|
|
713
|
+
};
|
|
714
|
+
})() })
|
|
715
|
+
})]
|
|
689
716
|
}, resource.id);
|
|
690
717
|
});
|
|
691
718
|
const headerLabel = require_get_week_label.getWeekLabel({
|