@mantine/schedule 9.0.0-alpha.3 → 9.0.0-alpha.5
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/CurrentTimeIndicator/CurrentTimeIndicator.cjs +1 -0
- package/cjs/components/CurrentTimeIndicator/CurrentTimeIndicator.cjs.map +1 -1
- package/cjs/components/DayView/DayView.cjs +146 -9
- package/cjs/components/DayView/DayView.cjs.map +1 -1
- package/cjs/components/DayView/DayView.module.css.cjs +1 -1
- package/cjs/components/DayView/get-day-view-events/get-day-positioned-events.cjs +1 -0
- package/cjs/components/DayView/get-day-view-events/get-day-positioned-events.cjs.map +1 -1
- package/cjs/components/DayView/get-day-view-events/get-day-view-events.cjs +62 -5
- package/cjs/components/DayView/get-day-view-events/get-day-view-events.cjs.map +1 -1
- package/cjs/components/MobileMonthView/MobileMonthView.cjs +9 -1
- package/cjs/components/MobileMonthView/MobileMonthView.cjs.map +1 -1
- package/cjs/components/MobileMonthView/get-mobile-month-view-events.cjs +4 -0
- package/cjs/components/MobileMonthView/get-mobile-month-view-events.cjs.map +1 -1
- package/cjs/components/MonthView/MonthView.cjs +76 -13
- package/cjs/components/MonthView/MonthView.cjs.map +1 -1
- package/cjs/components/MonthView/MonthView.module.css.cjs +1 -1
- package/cjs/components/MonthView/get-month-view-events/get-month-positioned-events.cjs +17 -1
- package/cjs/components/MonthView/get-month-view-events/get-month-positioned-events.cjs.map +1 -1
- package/cjs/components/MonthView/get-month-view-events/get-month-view-events.cjs +2 -1
- package/cjs/components/MonthView/get-month-view-events/get-month-view-events.cjs.map +1 -1
- package/cjs/components/MonthView/get-month-view-events/get-weeks-in-range.cjs +1 -0
- package/cjs/components/MonthView/get-month-view-events/get-weeks-in-range.cjs.map +1 -1
- package/cjs/components/Schedule/Schedule.cjs +11 -0
- package/cjs/components/Schedule/Schedule.cjs.map +1 -1
- package/cjs/components/ScheduleEvent/ScheduleEvent.cjs +36 -2
- package/cjs/components/ScheduleEvent/ScheduleEvent.cjs.map +1 -1
- package/cjs/components/ScheduleEvent/ScheduleEvent.module.css.cjs +1 -1
- package/cjs/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.cjs +1 -0
- package/cjs/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.cjs.map +1 -1
- package/cjs/components/ScheduleHeader/ScheduleHeader.cjs +1 -1
- package/cjs/components/ScheduleHeader/ScheduleHeader.cjs.map +1 -1
- package/cjs/components/ScheduleHeader/ScheduleHeaderBase.cjs.map +1 -1
- package/cjs/components/WeekView/WeekView.cjs +187 -18
- package/cjs/components/WeekView/WeekView.cjs.map +1 -1
- package/cjs/components/WeekView/WeekView.module.css.cjs +1 -1
- package/cjs/components/WeekView/WeekViewDay.cjs +4 -1
- package/cjs/components/WeekView/WeekViewDay.cjs.map +1 -1
- package/cjs/components/WeekView/get-week-label/get-week-label.cjs +1 -0
- package/cjs/components/WeekView/get-week-label/get-week-label.cjs.map +1 -1
- package/cjs/components/WeekView/get-week-view-events/assign-event-rows.cjs +1 -0
- package/cjs/components/WeekView/get-week-view-events/assign-event-rows.cjs.map +1 -1
- package/cjs/components/WeekView/get-week-view-events/calculate-regular-event-overlaps.cjs +1 -0
- package/cjs/components/WeekView/get-week-view-events/calculate-regular-event-overlaps.cjs.map +1 -1
- package/cjs/components/WeekView/get-week-view-events/filter-week-view-events.cjs +1 -0
- package/cjs/components/WeekView/get-week-view-events/filter-week-view-events.cjs.map +1 -1
- package/cjs/components/WeekView/get-week-view-events/find-available-column.cjs +1 -0
- package/cjs/components/WeekView/get-week-view-events/find-available-column.cjs.map +1 -1
- package/cjs/components/WeekView/get-week-view-events/get-week-positioned-events.cjs +47 -1
- package/cjs/components/WeekView/get-week-view-events/get-week-positioned-events.cjs.map +1 -1
- package/cjs/components/YearView/YearView.cjs +58 -55
- package/cjs/components/YearView/YearView.cjs.map +1 -1
- package/cjs/components/YearView/YearView.module.css.cjs +1 -1
- package/cjs/components/YearView/YearViewMonth.cjs +2 -0
- package/cjs/components/YearView/YearViewMonth.cjs.map +1 -1
- package/cjs/components/YearView/get-year-view-events/get-year-view-events.cjs +1 -0
- package/cjs/components/YearView/get-year-view-events/get-year-view-events.cjs.map +1 -1
- package/cjs/hooks/use-auto-scroll-on-drag.cjs +75 -0
- package/cjs/hooks/use-auto-scroll-on-drag.cjs.map +1 -0
- package/cjs/hooks/use-drag-drop-handlers.cjs +42 -19
- package/cjs/hooks/use-drag-drop-handlers.cjs.map +1 -1
- package/cjs/hooks/use-event-resize.cjs +165 -0
- package/cjs/hooks/use-event-resize.cjs.map +1 -0
- package/cjs/index.cjs +2 -0
- package/cjs/index.cjs.map +1 -1
- package/cjs/utils/expand-recurring-events/expand-recurring-events.cjs +158 -0
- package/cjs/utils/expand-recurring-events/expand-recurring-events.cjs.map +1 -0
- package/esm/components/CurrentTimeIndicator/CurrentTimeIndicator.mjs +1 -0
- package/esm/components/CurrentTimeIndicator/CurrentTimeIndicator.mjs.map +1 -1
- package/esm/components/DayView/DayView.mjs +147 -10
- package/esm/components/DayView/DayView.mjs.map +1 -1
- package/esm/components/DayView/DayView.module.css.mjs +1 -1
- package/esm/components/DayView/get-day-view-events/get-day-positioned-events.mjs +1 -0
- package/esm/components/DayView/get-day-view-events/get-day-positioned-events.mjs.map +1 -1
- package/esm/components/DayView/get-day-view-events/get-day-view-events.mjs +62 -5
- package/esm/components/DayView/get-day-view-events/get-day-view-events.mjs.map +1 -1
- package/esm/components/MobileMonthView/MobileMonthView.mjs +9 -1
- package/esm/components/MobileMonthView/MobileMonthView.mjs.map +1 -1
- package/esm/components/MobileMonthView/get-mobile-month-view-events.mjs +4 -0
- package/esm/components/MobileMonthView/get-mobile-month-view-events.mjs.map +1 -1
- package/esm/components/MonthView/MonthView.mjs +78 -15
- package/esm/components/MonthView/MonthView.mjs.map +1 -1
- package/esm/components/MonthView/MonthView.module.css.mjs +1 -1
- package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs +17 -1
- package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs.map +1 -1
- package/esm/components/MonthView/get-month-view-events/get-month-view-events.mjs +2 -1
- package/esm/components/MonthView/get-month-view-events/get-month-view-events.mjs.map +1 -1
- package/esm/components/MonthView/get-month-view-events/get-weeks-in-range.mjs +1 -0
- package/esm/components/MonthView/get-month-view-events/get-weeks-in-range.mjs.map +1 -1
- package/esm/components/Schedule/Schedule.mjs +11 -0
- package/esm/components/Schedule/Schedule.mjs.map +1 -1
- package/esm/components/ScheduleEvent/ScheduleEvent.mjs +38 -4
- package/esm/components/ScheduleEvent/ScheduleEvent.mjs.map +1 -1
- package/esm/components/ScheduleEvent/ScheduleEvent.module.css.mjs +1 -1
- package/esm/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.mjs +1 -0
- package/esm/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.mjs.map +1 -1
- package/esm/components/ScheduleHeader/ScheduleHeader.mjs +1 -1
- package/esm/components/ScheduleHeader/ScheduleHeader.mjs.map +1 -1
- package/esm/components/ScheduleHeader/ScheduleHeaderBase.mjs.map +1 -1
- package/esm/components/WeekView/WeekView.mjs +189 -20
- package/esm/components/WeekView/WeekView.mjs.map +1 -1
- package/esm/components/WeekView/WeekView.module.css.mjs +1 -1
- package/esm/components/WeekView/WeekViewDay.mjs +4 -1
- package/esm/components/WeekView/WeekViewDay.mjs.map +1 -1
- package/esm/components/WeekView/get-week-label/get-week-label.mjs +1 -0
- package/esm/components/WeekView/get-week-label/get-week-label.mjs.map +1 -1
- package/esm/components/WeekView/get-week-view-events/assign-event-rows.mjs +1 -0
- package/esm/components/WeekView/get-week-view-events/assign-event-rows.mjs.map +1 -1
- package/esm/components/WeekView/get-week-view-events/calculate-regular-event-overlaps.mjs +1 -0
- package/esm/components/WeekView/get-week-view-events/calculate-regular-event-overlaps.mjs.map +1 -1
- package/esm/components/WeekView/get-week-view-events/filter-week-view-events.mjs +1 -0
- package/esm/components/WeekView/get-week-view-events/filter-week-view-events.mjs.map +1 -1
- package/esm/components/WeekView/get-week-view-events/find-available-column.mjs +1 -0
- package/esm/components/WeekView/get-week-view-events/find-available-column.mjs.map +1 -1
- package/esm/components/WeekView/get-week-view-events/get-week-positioned-events.mjs +47 -1
- package/esm/components/WeekView/get-week-view-events/get-week-positioned-events.mjs.map +1 -1
- package/esm/components/YearView/YearView.mjs +58 -55
- package/esm/components/YearView/YearView.mjs.map +1 -1
- package/esm/components/YearView/YearView.module.css.mjs +1 -1
- package/esm/components/YearView/YearViewMonth.mjs +2 -0
- package/esm/components/YearView/YearViewMonth.mjs.map +1 -1
- package/esm/components/YearView/get-year-view-events/get-year-view-events.mjs +1 -0
- package/esm/components/YearView/get-year-view-events/get-year-view-events.mjs.map +1 -1
- package/esm/hooks/use-auto-scroll-on-drag.mjs +73 -0
- package/esm/hooks/use-auto-scroll-on-drag.mjs.map +1 -0
- package/esm/hooks/use-drag-drop-handlers.mjs +42 -19
- package/esm/hooks/use-drag-drop-handlers.mjs.map +1 -1
- package/esm/hooks/use-event-resize.mjs +159 -0
- package/esm/hooks/use-event-resize.mjs.map +1 -0
- package/esm/index.mjs +1 -0
- package/esm/index.mjs.map +1 -1
- package/esm/utils/expand-recurring-events/expand-recurring-events.mjs +151 -0
- package/esm/utils/expand-recurring-events/expand-recurring-events.mjs.map +1 -0
- package/lib/components/DayView/DayView.d.ts +14 -2
- package/lib/components/DayView/get-day-view-events/get-day-positioned-events.d.ts +1 -1
- package/lib/components/DayView/get-day-view-events/get-day-view-events.d.ts +4 -2
- package/lib/components/MobileMonthView/MobileMonthView.d.ts +2 -0
- package/lib/components/MonthView/MonthView.d.ts +9 -3
- package/lib/components/MonthView/get-month-view-events/get-month-positioned-events.d.ts +4 -0
- package/lib/components/Schedule/Schedule.d.ts +12 -2
- package/lib/components/ScheduleEvent/ScheduleEvent.d.ts +7 -1
- package/lib/components/WeekView/WeekView.d.ts +14 -2
- package/lib/components/WeekView/WeekViewDay.d.ts +3 -1
- package/lib/components/WeekView/get-week-view-events/get-week-positioned-events.d.ts +1 -0
- package/lib/components/YearView/YearView.d.ts +3 -1
- package/lib/hooks/use-auto-scroll-on-drag.d.ts +6 -0
- package/lib/hooks/use-drag-drop-handlers.d.ts +3 -1
- package/lib/hooks/use-event-resize.d.ts +22 -0
- package/lib/test-utils.d.ts +1 -1
- package/lib/types.d.ts +58 -8
- package/lib/utils/expand-recurring-events/expand-recurring-events.d.ts +10 -0
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/validate-event/validate-event.d.ts +1 -1
- package/package.json +9 -6
- package/styles.css +193 -82
- package/styles.layer.css +193 -82
|
@@ -6,7 +6,10 @@ var React = require('react');
|
|
|
6
6
|
var dayjs = require('dayjs');
|
|
7
7
|
var core = require('@mantine/core');
|
|
8
8
|
var dates = require('@mantine/dates');
|
|
9
|
+
var hooks = require('@mantine/hooks');
|
|
10
|
+
var useAutoScrollOnDrag = require('../../hooks/use-auto-scroll-on-drag.cjs');
|
|
9
11
|
var useDragDropHandlers = require('../../hooks/use-drag-drop-handlers.cjs');
|
|
12
|
+
var useEventResize = require('../../hooks/use-event-resize.cjs');
|
|
10
13
|
var useSlotDragSelect = require('../../hooks/use-slot-drag-select.cjs');
|
|
11
14
|
var labels = require('../../labels.cjs');
|
|
12
15
|
var formatDate = require('../../utils/format-date/format-date.cjs');
|
|
@@ -19,6 +22,7 @@ var previousWeek = require('../../utils/previous-week/previous-week.cjs');
|
|
|
19
22
|
var isAllDayEvent = require('../../utils/is-all-day-event/is-all-day-event.cjs');
|
|
20
23
|
var calculateDropTime = require('../../utils/calculate-drop-time/calculate-drop-time.cjs');
|
|
21
24
|
var getBusinessHoursMod = require('../../utils/get-business-hours-mod/get-business-hours-mod.cjs');
|
|
25
|
+
var expandRecurringEvents = require('../../utils/expand-recurring-events/expand-recurring-events.cjs');
|
|
22
26
|
var CurrentTimeIndicator = require('../CurrentTimeIndicator/CurrentTimeIndicator.cjs');
|
|
23
27
|
var DragContext = require('../DragContext/DragContext.cjs');
|
|
24
28
|
var ScheduleEvent = require('../ScheduleEvent/ScheduleEvent.cjs');
|
|
@@ -26,8 +30,8 @@ var ScheduleHeaderBase = require('../ScheduleHeader/ScheduleHeaderBase.cjs');
|
|
|
26
30
|
var getWeekLabel = require('./get-week-label/get-week-label.cjs');
|
|
27
31
|
var getWeekViewEvents = require('./get-week-view-events/get-week-view-events.cjs');
|
|
28
32
|
var handleWeekViewKeyDown = require('./handle-week-view-key-down.cjs');
|
|
29
|
-
var WeekView_module = require('./WeekView.module.css.cjs');
|
|
30
33
|
var WeekViewDay = require('./WeekViewDay.cjs');
|
|
34
|
+
var WeekView_module = require('./WeekView.module.css.cjs');
|
|
31
35
|
|
|
32
36
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
33
37
|
|
|
@@ -51,6 +55,7 @@ const defaultProps = {
|
|
|
51
55
|
businessHours: ["09:00:00", "17:00:00"],
|
|
52
56
|
withEventsDragAndDrop: false,
|
|
53
57
|
withDragSlotSelect: false,
|
|
58
|
+
withEventResize: false,
|
|
54
59
|
mode: "default"
|
|
55
60
|
};
|
|
56
61
|
const varsResolver = core.createVarsResolver(
|
|
@@ -117,7 +122,13 @@ const WeekView = core.factory((_props) => {
|
|
|
117
122
|
withDragSlotSelect,
|
|
118
123
|
onSlotDragEnd,
|
|
119
124
|
mode,
|
|
125
|
+
startScrollTime,
|
|
120
126
|
renderWeekLabel,
|
|
127
|
+
onExternalEventDrop,
|
|
128
|
+
withEventResize,
|
|
129
|
+
onEventResize,
|
|
130
|
+
canResizeEvent,
|
|
131
|
+
recurrenceExpansionLimit,
|
|
121
132
|
...others
|
|
122
133
|
} = props;
|
|
123
134
|
const getStyles = core.useStyles({
|
|
@@ -146,9 +157,34 @@ const WeekView = core.factory((_props) => {
|
|
|
146
157
|
__staticSelector,
|
|
147
158
|
radius
|
|
148
159
|
};
|
|
160
|
+
const theme = core.useMantineTheme();
|
|
149
161
|
const [scrolled, setScrolled] = React.useState(false);
|
|
150
162
|
const ctx = dates.useDatesContext();
|
|
151
163
|
const slots = getDayTimeIntervals.getDayTimeIntervals({ startTime, endTime, intervalMinutes });
|
|
164
|
+
const viewportRef = React.useRef(null);
|
|
165
|
+
useAutoScrollOnDrag.useAutoScrollOnDrag({
|
|
166
|
+
viewportRef,
|
|
167
|
+
enabled: (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== "static"
|
|
168
|
+
});
|
|
169
|
+
const handleExternalDrop = React.useCallback(
|
|
170
|
+
(e, target) => {
|
|
171
|
+
if (!onExternalEventDrop) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
const slotDate = dayjs__default.default(target.day).format("YYYY-MM-DD");
|
|
175
|
+
onExternalEventDrop(e.dataTransfer, `${slotDate} ${slots[target.slotIndex].startTime}`);
|
|
176
|
+
},
|
|
177
|
+
[onExternalEventDrop, slots]
|
|
178
|
+
);
|
|
179
|
+
const handleExternalAllDayDrop = React.useCallback(
|
|
180
|
+
(e, day) => {
|
|
181
|
+
if (!onExternalEventDrop) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
onExternalEventDrop(e.dataTransfer, `${dayjs__default.default(day).format("YYYY-MM-DD")} 00:00:00`);
|
|
185
|
+
},
|
|
186
|
+
[onExternalEventDrop]
|
|
187
|
+
);
|
|
152
188
|
const dragDrop = useDragDropHandlers.useDragDropHandlers({
|
|
153
189
|
enabled: withEventsDragAndDrop,
|
|
154
190
|
mode,
|
|
@@ -164,7 +200,8 @@ const WeekView = core.factory((_props) => {
|
|
|
164
200
|
targetSlotTime: slotTime,
|
|
165
201
|
intervalMinutes
|
|
166
202
|
});
|
|
167
|
-
}
|
|
203
|
+
},
|
|
204
|
+
onExternalDrop: onExternalEventDrop ? handleExternalDrop : void 0
|
|
168
205
|
});
|
|
169
206
|
const allDayDragDrop = useDragDropHandlers.useDragDropHandlers({
|
|
170
207
|
enabled: withEventsDragAndDrop,
|
|
@@ -177,7 +214,8 @@ const WeekView = core.factory((_props) => {
|
|
|
177
214
|
const eventDuration = dayjs__default.default(draggedEvent.end).diff(dayjs__default.default(draggedEvent.start), "millisecond");
|
|
178
215
|
const newStart = dayjs__default.default(targetDay).startOf("day");
|
|
179
216
|
return { start: newStart.toDate(), end: newStart.add(eventDuration, "millisecond").toDate() };
|
|
180
|
-
}
|
|
217
|
+
},
|
|
218
|
+
onExternalDrop: onExternalEventDrop ? handleExternalAllDayDrop : void 0
|
|
181
219
|
});
|
|
182
220
|
const slotDragSelect = useSlotDragSelect.useSlotDragSelect({
|
|
183
221
|
enabled: withDragSlotSelect && mode !== "static",
|
|
@@ -192,6 +230,16 @@ const WeekView = core.factory((_props) => {
|
|
|
192
230
|
);
|
|
193
231
|
}
|
|
194
232
|
});
|
|
233
|
+
const eventResize = useEventResize.useEventResize({
|
|
234
|
+
enabled: withEventResize,
|
|
235
|
+
mode,
|
|
236
|
+
startTime,
|
|
237
|
+
endTime,
|
|
238
|
+
intervalMinutes,
|
|
239
|
+
onEventResize,
|
|
240
|
+
canResizeEvent
|
|
241
|
+
});
|
|
242
|
+
const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== "static";
|
|
195
243
|
const handleTimeSlotClick = (day, slotTime, e) => {
|
|
196
244
|
if (!onTimeSlotClick) {
|
|
197
245
|
return;
|
|
@@ -204,9 +252,21 @@ const WeekView = core.factory((_props) => {
|
|
|
204
252
|
const slot = slots[slotIndex];
|
|
205
253
|
onTimeSlotClick(`${slotDate} ${slot.startTime}`, `${slotDate} ${slot.endTime}`, e);
|
|
206
254
|
};
|
|
255
|
+
const weekdays = getWeekDays.getWeekDays({
|
|
256
|
+
week: date,
|
|
257
|
+
withWeekendDays,
|
|
258
|
+
weekendDays: ctx.getWeekendDays(weekendDays),
|
|
259
|
+
firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek)
|
|
260
|
+
});
|
|
261
|
+
const expandedEvents = expandRecurringEvents.expandRecurringEvents({
|
|
262
|
+
events,
|
|
263
|
+
rangeStart: dayjs__default.default(weekdays[0]).startOf("day").toDate(),
|
|
264
|
+
rangeEnd: dayjs__default.default(weekdays[weekdays.length - 1]).endOf("day").toDate(),
|
|
265
|
+
expansionLimit: recurrenceExpansionLimit
|
|
266
|
+
});
|
|
207
267
|
const weekEvents = getWeekViewEvents.getWeekViewEvents({
|
|
208
268
|
date,
|
|
209
|
-
events,
|
|
269
|
+
events: expandedEvents,
|
|
210
270
|
startTime,
|
|
211
271
|
endTime,
|
|
212
272
|
firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),
|
|
@@ -237,16 +297,32 @@ const WeekView = core.factory((_props) => {
|
|
|
237
297
|
label
|
|
238
298
|
);
|
|
239
299
|
});
|
|
240
|
-
const weekdays = getWeekDays.getWeekDays({
|
|
241
|
-
week: date,
|
|
242
|
-
withWeekendDays,
|
|
243
|
-
weekendDays: ctx.getWeekendDays(weekendDays),
|
|
244
|
-
firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek)
|
|
245
|
-
});
|
|
246
300
|
const slotsRef = React.useRef([]);
|
|
247
301
|
const allDaySlotsRef = React.useRef([]);
|
|
248
302
|
const weekdaysRef = React.useRef([]);
|
|
303
|
+
const daySlotsContainersRef = React.useRef([]);
|
|
304
|
+
const mergedViewportRef = hooks.useMergedRef(viewportRef, scrollAreaProps?.viewportRef);
|
|
249
305
|
const firstSlotIndex = { dayIndex: 0, slotIndex: 0 };
|
|
306
|
+
hooks.useIsomorphicEffect(() => {
|
|
307
|
+
if (!startScrollTime || !viewportRef.current) {
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
const firstDaySlots = slotsRef.current[0];
|
|
311
|
+
if (!firstDaySlots || firstDaySlots.length === 0) {
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
const targetIndex = slots.findIndex((s) => s.startTime >= startScrollTime);
|
|
315
|
+
if (targetIndex < 0) {
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
const targetSlot = firstDaySlots[targetIndex];
|
|
319
|
+
if (!targetSlot) {
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
const slotRect = targetSlot.getBoundingClientRect();
|
|
323
|
+
const viewportRect = viewportRef.current.getBoundingClientRect();
|
|
324
|
+
viewportRef.current.scrollTo({ left: 0, top: slotRect.top - viewportRect.top });
|
|
325
|
+
}, []);
|
|
250
326
|
const getSlotIndexFromDragPoint = React.useCallback((event, dayIndex) => {
|
|
251
327
|
const daySlots = slotsRef.current[dayIndex] ?? [];
|
|
252
328
|
const slotIndex = daySlots.findIndex((slotNode) => {
|
|
@@ -331,9 +407,42 @@ const WeekView = core.factory((_props) => {
|
|
|
331
407
|
/* @__PURE__ */ React.createElement("div", { ...getStyles("weekViewDayNumber"), key: "date" }, dayjs__default.default(day).date())
|
|
332
408
|
));
|
|
333
409
|
const days = weekdays.map((day, dayIndex) => {
|
|
410
|
+
const allBgEvents = weekEvents.backgroundEvents[day] || [];
|
|
411
|
+
const backgroundEventNodes = allBgEvents.filter((event) => !event.position.allDay).map((event) => {
|
|
412
|
+
const colors = theme.variantColorResolver({
|
|
413
|
+
color: event.color || theme.primaryColor,
|
|
414
|
+
theme,
|
|
415
|
+
variant: "light",
|
|
416
|
+
autoContrast: true
|
|
417
|
+
});
|
|
418
|
+
const bgEventBody = typeof renderEventBody === "function" ? renderEventBody(event) : event.title;
|
|
419
|
+
const bgEventProps = {
|
|
420
|
+
key: `bg-${event.id}`,
|
|
421
|
+
...getStyles("weekViewBackgroundEvent", {
|
|
422
|
+
style: {
|
|
423
|
+
top: `${event.position.top}%`,
|
|
424
|
+
height: `${event.position.height}%`,
|
|
425
|
+
width: "100%"
|
|
426
|
+
}
|
|
427
|
+
}),
|
|
428
|
+
__vars: {
|
|
429
|
+
"--bg-event-bg": colors.background,
|
|
430
|
+
"--bg-event-color": colors.color
|
|
431
|
+
},
|
|
432
|
+
children: bgEventBody
|
|
433
|
+
};
|
|
434
|
+
if (typeof renderEvent === "function") {
|
|
435
|
+
return renderEvent(event, bgEventProps);
|
|
436
|
+
}
|
|
437
|
+
return /* @__PURE__ */ jsxRuntime.jsx(core.Box, { ...bgEventProps });
|
|
438
|
+
});
|
|
334
439
|
const dayEvents = (weekEvents.regularEvents[day] || []).map((event) => {
|
|
335
440
|
const eventIsAllDay = isAllDayEvent.isAllDayEvent({ event, date: day });
|
|
336
441
|
const isDraggable = !eventIsAllDay && dragDrop.isDraggableEvent(event);
|
|
442
|
+
const isResizable = !eventIsAllDay && eventResize.isResizableEvent(event);
|
|
443
|
+
const resizePosition = eventResize.getResizePosition(event.id);
|
|
444
|
+
const eventTop = resizePosition ? resizePosition.top : event.position.top;
|
|
445
|
+
const eventHeight = resizePosition ? resizePosition.height : event.position.height;
|
|
337
446
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
338
447
|
ScheduleEvent.ScheduleEvent,
|
|
339
448
|
{
|
|
@@ -341,6 +450,22 @@ const WeekView = core.factory((_props) => {
|
|
|
341
450
|
autoSize: true,
|
|
342
451
|
hanging: event.position.hanging,
|
|
343
452
|
draggable: isDraggable,
|
|
453
|
+
withResize: isResizable,
|
|
454
|
+
isResizing: resizePosition !== null,
|
|
455
|
+
onResizeStart: isResizable ? (edge, e) => {
|
|
456
|
+
const container = daySlotsContainersRef.current[dayIndex];
|
|
457
|
+
if (container) {
|
|
458
|
+
eventResize.handleResizeStart(
|
|
459
|
+
event,
|
|
460
|
+
edge,
|
|
461
|
+
container,
|
|
462
|
+
event.position.top,
|
|
463
|
+
event.position.height,
|
|
464
|
+
dayjs__default.default(day).format("YYYY-MM-DD"),
|
|
465
|
+
e
|
|
466
|
+
);
|
|
467
|
+
}
|
|
468
|
+
} : void 0,
|
|
344
469
|
renderEventBody,
|
|
345
470
|
renderEvent,
|
|
346
471
|
radius,
|
|
@@ -348,16 +473,16 @@ const WeekView = core.factory((_props) => {
|
|
|
348
473
|
onClick: onEventClick ? (e) => onEventClick(event, e) : void 0,
|
|
349
474
|
style: {
|
|
350
475
|
position: "absolute",
|
|
351
|
-
top: `calc(${
|
|
476
|
+
top: `calc(${eventTop}% + 1px)`,
|
|
352
477
|
left: `${event.position.offset}%`,
|
|
353
478
|
width: `${event.position.width}%`,
|
|
354
|
-
height: `calc(${
|
|
479
|
+
height: `calc(${eventHeight}% - 1px)`
|
|
355
480
|
}
|
|
356
481
|
},
|
|
357
482
|
event.id
|
|
358
483
|
);
|
|
359
484
|
});
|
|
360
|
-
return /* @__PURE__ */ jsxRuntime.
|
|
485
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
361
486
|
WeekViewDay.WeekViewDay,
|
|
362
487
|
{
|
|
363
488
|
day,
|
|
@@ -368,7 +493,7 @@ const WeekView = core.factory((_props) => {
|
|
|
368
493
|
highlightBusinessHours,
|
|
369
494
|
businessHours,
|
|
370
495
|
labels: labels$1,
|
|
371
|
-
withEventsDragAndDrop,
|
|
496
|
+
withEventsDragAndDrop: withDragHandlers,
|
|
372
497
|
mode,
|
|
373
498
|
slotsRef,
|
|
374
499
|
firstSlotIndex,
|
|
@@ -394,7 +519,13 @@ const WeekView = core.factory((_props) => {
|
|
|
394
519
|
withDragSlotSelect,
|
|
395
520
|
onSlotPointerDown: slotDragSelect.handleSlotPointerDown,
|
|
396
521
|
isSlotDragSelected: slotDragSelect.isSlotSelected,
|
|
397
|
-
|
|
522
|
+
daySlotsContainerRef: (node) => {
|
|
523
|
+
daySlotsContainersRef.current[dayIndex] = node;
|
|
524
|
+
},
|
|
525
|
+
children: [
|
|
526
|
+
backgroundEventNodes,
|
|
527
|
+
dayEvents
|
|
528
|
+
]
|
|
398
529
|
},
|
|
399
530
|
day
|
|
400
531
|
);
|
|
@@ -409,9 +540,9 @@ const WeekView = core.factory((_props) => {
|
|
|
409
540
|
tabIndex: dayIndex === 0 ? 0 : -1,
|
|
410
541
|
onKeyDown: (event) => handleAllDaySlotKeyDown(event, dayIndex),
|
|
411
542
|
onClick: mode === "static" || !onAllDaySlotClick ? void 0 : (e) => onAllDaySlotClick(dayjs__default.default(day).format("YYYY-MM-DD"), e),
|
|
412
|
-
onDragOver:
|
|
413
|
-
onDragLeave:
|
|
414
|
-
onDrop:
|
|
543
|
+
onDragOver: withDragHandlers ? (e) => allDayDragDrop.handleDragOver(e, day) : void 0,
|
|
544
|
+
onDragLeave: withDragHandlers ? allDayDragDrop.handleDragLeave : void 0,
|
|
545
|
+
onDrop: withDragHandlers ? (e) => allDayDragDrop.handleDrop(e, day) : void 0,
|
|
415
546
|
...getStyles("weekViewDaySlot"),
|
|
416
547
|
mod: { "drop-target": allDayDragDrop.isDropTarget(day) }
|
|
417
548
|
},
|
|
@@ -444,6 +575,42 @@ const WeekView = core.factory((_props) => {
|
|
|
444
575
|
},
|
|
445
576
|
event.id
|
|
446
577
|
));
|
|
578
|
+
const allDayBackgroundEventNodes = weekdays.flatMap((day, dayIndex) => {
|
|
579
|
+
const allDayBgEvents = (weekEvents.backgroundEvents[day] || []).filter(
|
|
580
|
+
(event) => event.position.allDay
|
|
581
|
+
);
|
|
582
|
+
const dayWidth = 100 / weekdays.length;
|
|
583
|
+
const dayOffset = dayIndex * dayWidth;
|
|
584
|
+
return allDayBgEvents.map((event) => {
|
|
585
|
+
const colors = theme.variantColorResolver({
|
|
586
|
+
color: event.color || theme.primaryColor,
|
|
587
|
+
theme,
|
|
588
|
+
variant: "light",
|
|
589
|
+
autoContrast: true
|
|
590
|
+
});
|
|
591
|
+
const bgEventBody = typeof renderEventBody === "function" ? renderEventBody(event) : event.title;
|
|
592
|
+
const bgEventProps = {
|
|
593
|
+
key: `bg-allday-${event.id}-${day}`,
|
|
594
|
+
...getStyles("weekViewBackgroundEvent", {
|
|
595
|
+
style: {
|
|
596
|
+
top: 0,
|
|
597
|
+
height: "100%",
|
|
598
|
+
left: `${dayOffset}%`,
|
|
599
|
+
width: `${dayWidth}%`
|
|
600
|
+
}
|
|
601
|
+
}),
|
|
602
|
+
__vars: {
|
|
603
|
+
"--bg-event-bg": colors.background,
|
|
604
|
+
"--bg-event-color": colors.color
|
|
605
|
+
},
|
|
606
|
+
children: bgEventBody
|
|
607
|
+
};
|
|
608
|
+
if (typeof renderEvent === "function") {
|
|
609
|
+
return renderEvent(event, bgEventProps);
|
|
610
|
+
}
|
|
611
|
+
return /* @__PURE__ */ jsxRuntime.jsx(core.Box, { ...bgEventProps });
|
|
612
|
+
});
|
|
613
|
+
});
|
|
447
614
|
const extraRows = Math.max(...weekEvents.allDayEvents.map((event) => event.position.row), 1) - 1;
|
|
448
615
|
const content = /* @__PURE__ */ jsxRuntime.jsxs(
|
|
449
616
|
core.Box,
|
|
@@ -502,6 +669,7 @@ const WeekView = core.factory((_props) => {
|
|
|
502
669
|
scrollAreaProps?.onScrollPositionChange?.(position);
|
|
503
670
|
setScrolled(position.y !== 0);
|
|
504
671
|
},
|
|
672
|
+
viewportRef: mergedViewportRef,
|
|
505
673
|
children: [
|
|
506
674
|
/* @__PURE__ */ jsxRuntime.jsxs(core.Box, { ...getStyles("weekViewHeader"), mod: { scrolled }, children: [
|
|
507
675
|
/* @__PURE__ */ React.createElement("div", { ...getStyles("weekViewCorner"), key: "corner" }, withWeekNumber && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
@@ -513,6 +681,7 @@ const WeekView = core.factory((_props) => {
|
|
|
513
681
|
withAllDaySlots && /* @__PURE__ */ jsxRuntime.jsxs("div", { ...getStyles("weekViewAllDaySlots"), children: [
|
|
514
682
|
/* @__PURE__ */ jsxRuntime.jsx("div", { ...getStyles("weekViewAllDaySlotsLabel"), children: labels.getLabel("allDay", labels$1) }),
|
|
515
683
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { ...getStyles("weekViewAllDaySlotsList"), children: [
|
|
684
|
+
allDayBackgroundEventNodes,
|
|
516
685
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
517
686
|
core.Box,
|
|
518
687
|
{
|