react-big-schedule 8.1.0 → 9.0.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/README.md +24 -1129
- package/dist/calendar/Calendar.d.ts +28 -0
- package/dist/calendar/Calendar.js +95 -0
- package/dist/calendar/Toolbar.d.ts +18 -0
- package/dist/calendar/Toolbar.js +6 -0
- package/dist/calendar/recurrence.check.d.ts +1 -0
- package/dist/calendar/recurrence.check.js +49 -0
- package/dist/calendar/recurrence.d.ts +8 -0
- package/dist/calendar/recurrence.js +90 -0
- package/dist/calendar/timezone.d.ts +6 -0
- package/dist/calendar/timezone.js +14 -0
- package/dist/calendar/types.d.ts +187 -0
- package/dist/calendar/types.js +1 -0
- package/dist/calendar/useEventSources.d.ts +11 -0
- package/dist/calendar/useEventSources.js +89 -0
- package/dist/calendar/useRecurrence.d.ts +4 -0
- package/dist/calendar/useRecurrence.js +15 -0
- package/dist/calendar/utils.d.ts +38 -0
- package/dist/calendar/utils.js +143 -0
- package/dist/calendar/views/DayGridView.d.ts +3 -0
- package/dist/calendar/views/DayGridView.js +375 -0
- package/dist/calendar/views/ListView.d.ts +4 -0
- package/dist/calendar/views/ListView.js +56 -0
- package/dist/calendar/views/MultiMonthView.d.ts +4 -0
- package/dist/calendar/views/MultiMonthView.js +36 -0
- package/dist/calendar/views/TimeGridView.d.ts +3 -0
- package/dist/calendar/views/TimeGridView.js +334 -0
- package/dist/calendar/views/daygrid/DayCell.d.ts +19 -0
- package/dist/calendar/views/daygrid/DayCell.js +17 -0
- package/dist/calendar/views/daygrid/EventChip.d.ts +19 -0
- package/dist/calendar/views/daygrid/EventChip.js +40 -0
- package/dist/calendar/views/daygrid/layout.d.ts +30 -0
- package/dist/calendar/views/daygrid/layout.js +63 -0
- package/dist/calendar/views/list/bucket.d.ts +8 -0
- package/dist/calendar/views/list/bucket.js +37 -0
- package/dist/calendar/views/multimonth/Cell.d.ts +12 -0
- package/dist/calendar/views/multimonth/Cell.js +44 -0
- package/dist/calendar/views/multimonth/Continuous.d.ts +8 -0
- package/dist/calendar/views/multimonth/Continuous.js +28 -0
- package/dist/calendar/views/multimonth/MonthGrid.d.ts +10 -0
- package/dist/calendar/views/multimonth/MonthGrid.js +36 -0
- package/dist/calendar/views/multimonth/shared.d.ts +27 -0
- package/dist/calendar/views/multimonth/shared.js +40 -0
- package/dist/calendar/views/timegrid/DayColumn.d.ts +49 -0
- package/dist/calendar/views/timegrid/DayColumn.js +86 -0
- package/dist/calendar/views/timegrid/model.d.ts +55 -0
- package/dist/calendar/views/timegrid/model.js +102 -0
- package/dist/components/AddMore.d.ts +13 -0
- package/dist/components/AddMore.js +9 -42
- package/dist/components/AddMorePopover.d.ts +13 -0
- package/dist/components/AddMorePopover.js +24 -95
- package/dist/components/AgendaEventItem.d.ts +10 -0
- package/dist/components/AgendaEventItem.js +33 -81
- package/dist/components/AgendaResourceEvents.d.ts +10 -0
- package/dist/components/AgendaResourceEvents.js +37 -91
- package/dist/components/AgendaView.d.ts +9 -0
- package/dist/components/AgendaView.js +10 -69
- package/dist/components/BodyView.d.ts +11 -0
- package/dist/components/BodyView.js +36 -67
- package/dist/components/DnDContext.d.ts +48 -0
- package/dist/components/DnDContext.js +200 -221
- package/dist/components/DnDSource.d.ts +49 -0
- package/dist/components/DnDSource.js +125 -120
- package/dist/components/EventItem.d.ts +41 -0
- package/dist/components/EventItem.js +585 -787
- package/dist/components/EventItemPopover.d.ts +12 -0
- package/dist/components/EventItemPopover.js +19 -143
- package/dist/components/HeaderView.d.ts +14 -0
- package/dist/components/HeaderView.js +123 -186
- package/dist/components/ResourceEvents.d.ts +54 -0
- package/dist/components/ResourceEvents.js +534 -703
- package/dist/components/ResourceView.d.ts +26 -0
- package/dist/components/ResourceView.js +64 -184
- package/dist/components/SchedulerData.d.ts +136 -0
- package/dist/components/SchedulerData.js +1296 -1226
- package/dist/components/SchedulerHeader.d.ts +25 -0
- package/dist/components/SchedulerHeader.js +50 -150
- package/dist/components/SelectedArea.d.ts +8 -0
- package/dist/components/SelectedArea.js +11 -26
- package/dist/components/Summary.d.ts +11 -0
- package/dist/components/Summary.js +21 -50
- package/dist/components/WrapperFun.d.ts +2 -0
- package/dist/components/WrapperFun.js +5 -10
- package/dist/components/index.d.ts +44 -0
- package/dist/components/index.js +428 -654
- package/dist/components/ui/Icons.d.ts +8 -0
- package/dist/components/ui/Icons.js +7 -0
- package/dist/components/ui/MiniCalendar.d.ts +9 -0
- package/dist/components/ui/MiniCalendar.js +17 -0
- package/dist/components/ui/Popover.d.ts +13 -0
- package/dist/components/ui/Popover.js +80 -0
- package/dist/config/default.d.ts +36 -0
- package/dist/config/default.js +17 -26
- package/dist/config/i18n.d.ts +27 -0
- package/dist/config/i18n.js +21 -37
- package/dist/config/scheduler.d.ts +12 -0
- package/dist/config/scheduler.js +126 -119
- package/dist/css/style.css +2 -316
- package/dist/helper/behaviors.d.ts +14 -0
- package/dist/helper/behaviors.js +75 -75
- package/dist/helper/utility.d.ts +26 -0
- package/dist/helper/utility.js +23 -30
- package/dist/index.d.ts +6 -477
- package/dist/index.js +4 -2
- package/dist/sample-data/sample1.d.ts +11 -0
- package/dist/sample-data/sample1.js +427 -372
- package/dist/types.d.ts +267 -0
- package/dist/types.js +1 -0
- package/package.json +30 -27
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { EventPopoverCallbacks, SchedulerEvent } from '../types';
|
|
2
|
+
import type SchedulerData from './SchedulerData';
|
|
3
|
+
export interface AgendaEventItemProps extends EventPopoverCallbacks {
|
|
4
|
+
schedulerData: SchedulerData;
|
|
5
|
+
eventItem: SchedulerEvent;
|
|
6
|
+
isStart: boolean;
|
|
7
|
+
isEnd: boolean;
|
|
8
|
+
}
|
|
9
|
+
declare function AgendaEventItem(props: AgendaEventItemProps): import("react").JSX.Element;
|
|
10
|
+
export default AgendaEventItem;
|
|
@@ -1,84 +1,36 @@
|
|
|
1
|
-
import { Popover } from 'antd';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
|
-
import EventItemPopover from './EventItemPopover';
|
|
4
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import EventItemPopover from './EventItemPopover';
|
|
3
|
+
import Popover from './ui/Popover';
|
|
5
4
|
function AgendaEventItem(props) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
isEnd
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
children: /*#__PURE__*/_jsx("span", {
|
|
37
|
-
style: {
|
|
38
|
-
marginLeft: '10px',
|
|
39
|
-
lineHeight: `${config.eventItemHeight}px`
|
|
40
|
-
},
|
|
41
|
-
children: titleText
|
|
42
|
-
})
|
|
43
|
-
}, eventItem.id);
|
|
44
|
-
if (eventItemTemplateResolver) {
|
|
45
|
-
eventItemTemplate = eventItemTemplateResolver(schedulerData, eventItem, backgroundColor, isStart, isEnd, 'event-item', config.eventItemHeight, config.agendaMaxEventWidth);
|
|
46
|
-
}
|
|
47
|
-
const handleClick = () => eventItemClick?.(schedulerData, eventItem);
|
|
48
|
-
const eventLink = /*#__PURE__*/_jsx("button", {
|
|
49
|
-
type: "button",
|
|
50
|
-
className: "day-event rbs-txt-btn-dis",
|
|
51
|
-
onClick: handleClick,
|
|
52
|
-
children: eventItemTemplate
|
|
53
|
-
});
|
|
54
|
-
const content = /*#__PURE__*/_jsx(EventItemPopover, {
|
|
55
|
-
...props,
|
|
56
|
-
title: eventItem.title,
|
|
57
|
-
startTime: eventItem.start,
|
|
58
|
-
endTime: eventItem.end,
|
|
59
|
-
statusColor: backgroundColor
|
|
60
|
-
});
|
|
61
|
-
return config.eventItemPopoverEnabled ? /*#__PURE__*/_jsx(Popover, {
|
|
62
|
-
placement: "bottomLeft",
|
|
63
|
-
content: content,
|
|
64
|
-
trigger: "hover",
|
|
65
|
-
overlayClassName: "scheduler-agenda-event-popover",
|
|
66
|
-
children: eventLink
|
|
67
|
-
}) : /*#__PURE__*/_jsx("span", {
|
|
68
|
-
children: eventLink
|
|
69
|
-
});
|
|
5
|
+
const { eventItem, isStart, isEnd, eventItemClick, schedulerData, eventItemTemplateResolver } = props;
|
|
6
|
+
const { config, behaviors } = schedulerData;
|
|
7
|
+
let roundCls = 'round-none';
|
|
8
|
+
if (isStart && isEnd) {
|
|
9
|
+
roundCls = 'round-all';
|
|
10
|
+
}
|
|
11
|
+
else if (isStart) {
|
|
12
|
+
roundCls = 'round-head';
|
|
13
|
+
}
|
|
14
|
+
else if (isEnd) {
|
|
15
|
+
roundCls = 'round-tail';
|
|
16
|
+
}
|
|
17
|
+
const backgroundColor = eventItem.bgColor || config.defaultEventBgColor;
|
|
18
|
+
const titleText = behaviors.getEventTextFunc(schedulerData, eventItem);
|
|
19
|
+
const eventItemStyle = {
|
|
20
|
+
height: config.eventItemHeight,
|
|
21
|
+
maxWidth: config.agendaMaxEventWidth,
|
|
22
|
+
backgroundColor,
|
|
23
|
+
};
|
|
24
|
+
let eventItemTemplate = (_jsx("div", { className: `${roundCls} event-item`, style: eventItemStyle, children: _jsx("span", { style: {
|
|
25
|
+
marginLeft: '10px',
|
|
26
|
+
lineHeight: `${config.eventItemHeight}px`,
|
|
27
|
+
}, children: titleText }) }, eventItem.id));
|
|
28
|
+
if (eventItemTemplateResolver) {
|
|
29
|
+
eventItemTemplate = eventItemTemplateResolver(schedulerData, eventItem, backgroundColor, isStart, isEnd, 'event-item', config.eventItemHeight, config.agendaMaxEventWidth);
|
|
30
|
+
}
|
|
31
|
+
const handleClick = () => eventItemClick?.(schedulerData, eventItem);
|
|
32
|
+
const eventLink = (_jsx("button", { type: "button", className: "day-event rbs-txt-btn-dis", onClick: handleClick, children: eventItemTemplate }));
|
|
33
|
+
const content = (_jsx(EventItemPopover, { ...props, title: eventItem.title, startTime: eventItem.start, endTime: eventItem.end, statusColor: backgroundColor }));
|
|
34
|
+
return config.eventItemPopoverEnabled ? (_jsx(Popover, { placement: "bottomLeft", content: content, trigger: "hover", className: "scheduler-agenda-event-popover", children: eventLink })) : (_jsx("span", { children: eventLink }));
|
|
70
35
|
}
|
|
71
|
-
|
|
72
|
-
schedulerData: PropTypes.object.isRequired,
|
|
73
|
-
eventItem: PropTypes.object.isRequired,
|
|
74
|
-
isStart: PropTypes.bool.isRequired,
|
|
75
|
-
isEnd: PropTypes.bool.isRequired,
|
|
76
|
-
subtitleGetter: PropTypes.func,
|
|
77
|
-
eventItemClick: PropTypes.func,
|
|
78
|
-
viewEventClick: PropTypes.func,
|
|
79
|
-
viewEventText: PropTypes.string,
|
|
80
|
-
viewEvent2Click: PropTypes.func,
|
|
81
|
-
viewEvent2Text: PropTypes.string,
|
|
82
|
-
eventItemTemplateResolver: PropTypes.func
|
|
83
|
-
};
|
|
84
|
-
export default AgendaEventItem;
|
|
36
|
+
export default AgendaEventItem;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { EventPopoverCallbacks, RenderItem, SlotClickedFunc, SlotItemTemplateResolver } from '../types';
|
|
2
|
+
import type SchedulerData from './SchedulerData';
|
|
3
|
+
export interface AgendaResourceEventsProps extends EventPopoverCallbacks {
|
|
4
|
+
schedulerData: SchedulerData;
|
|
5
|
+
resourceEvents: RenderItem;
|
|
6
|
+
slotClickedFunc?: SlotClickedFunc;
|
|
7
|
+
slotItemTemplateResolver?: SlotItemTemplateResolver;
|
|
8
|
+
}
|
|
9
|
+
declare function AgendaResourceEvents(props: AgendaResourceEventsProps): import("react").JSX.Element;
|
|
10
|
+
export default AgendaResourceEvents;
|
|
@@ -1,96 +1,42 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { createElement as _createElement } from "react";
|
|
2
3
|
import { DATE_FORMAT } from '../config/default';
|
|
4
|
+
import { toDate } from '../helper/behaviors';
|
|
3
5
|
import AgendaEventItem from './AgendaEventItem';
|
|
4
|
-
import { createElement as _createElement } from "react";
|
|
5
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
6
|
function AgendaResourceEvents(props) {
|
|
7
|
-
|
|
8
|
-
schedulerData
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
isEnd: isEnd
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
return [];
|
|
44
|
-
});
|
|
45
|
-
const slotItemContent = slotClickedFunc ? /*#__PURE__*/_jsx("button", {
|
|
46
|
-
className: "rbs-txt-btn-dis",
|
|
47
|
-
type: "button",
|
|
48
|
-
onClick: () => slotClickedFunc(schedulerData, resourceEvents),
|
|
49
|
-
children: resourceEvents.slotName
|
|
50
|
-
}) : /*#__PURE__*/_jsx("span", {
|
|
51
|
-
children: resourceEvents.slotName
|
|
52
|
-
});
|
|
53
|
-
let slotItem = /*#__PURE__*/_jsx("div", {
|
|
54
|
-
style: {
|
|
55
|
-
width
|
|
56
|
-
},
|
|
57
|
-
title: resourceEvents.slotTitle || resourceEvents.slotName,
|
|
58
|
-
className: "overflow-text header2-text",
|
|
59
|
-
children: slotItemContent
|
|
60
|
-
});
|
|
61
|
-
if (slotItemTemplateResolver) {
|
|
62
|
-
const temp = slotItemTemplateResolver(schedulerData, resourceEvents, slotClickedFunc, width, 'overflow-text header2-text');
|
|
63
|
-
if (temp) {
|
|
64
|
-
slotItem = temp;
|
|
7
|
+
const { schedulerData, resourceEvents, slotClickedFunc, slotItemTemplateResolver } = props;
|
|
8
|
+
const { startDate, endDate, config, localeDayjs } = schedulerData;
|
|
9
|
+
const width = schedulerData.getResourceTableWidth() - 2;
|
|
10
|
+
const events = resourceEvents.headerItems.flatMap(item => {
|
|
11
|
+
const start = localeDayjs(toDate(startDate));
|
|
12
|
+
const end = localeDayjs(endDate).add(1, 'days');
|
|
13
|
+
const headerStart = localeDayjs(toDate(item.start));
|
|
14
|
+
const headerEnd = localeDayjs(toDate(item.end));
|
|
15
|
+
// compare calendar dates: dayjs objects are never === each other
|
|
16
|
+
if (start.format(DATE_FORMAT) === headerStart.format(DATE_FORMAT) &&
|
|
17
|
+
end.format(DATE_FORMAT) === headerEnd.format(DATE_FORMAT)) {
|
|
18
|
+
return item.events
|
|
19
|
+
.filter((evt) => evt !== undefined)
|
|
20
|
+
.map(evt => {
|
|
21
|
+
const durationStart = localeDayjs(toDate(startDate));
|
|
22
|
+
const durationEnd = localeDayjs(endDate).add(1, 'days');
|
|
23
|
+
const eventStart = localeDayjs(evt.eventItem.start);
|
|
24
|
+
const eventEnd = localeDayjs(evt.eventItem.end);
|
|
25
|
+
const isStart = eventStart >= durationStart;
|
|
26
|
+
const isEnd = eventEnd < durationEnd;
|
|
27
|
+
return (_createElement(AgendaEventItem, { ...props, key: evt.eventItem.id, eventItem: evt.eventItem, isStart: isStart, isEnd: isEnd }));
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return [];
|
|
31
|
+
});
|
|
32
|
+
const slotItemContent = slotClickedFunc ? (_jsx("button", { className: "rbs-txt-btn-dis", type: "button", onClick: () => slotClickedFunc(schedulerData, resourceEvents), children: resourceEvents.slotName })) : (_jsx("span", { children: resourceEvents.slotName }));
|
|
33
|
+
let slotItem = (_jsx("div", { style: { width }, title: resourceEvents.slotTitle || resourceEvents.slotName, className: "overflow-text header2-text", children: slotItemContent }));
|
|
34
|
+
if (slotItemTemplateResolver) {
|
|
35
|
+
const temp = slotItemTemplateResolver(schedulerData, resourceEvents, slotClickedFunc, width, 'overflow-text header2-text');
|
|
36
|
+
if (temp) {
|
|
37
|
+
slotItem = temp;
|
|
38
|
+
}
|
|
65
39
|
}
|
|
66
|
-
|
|
67
|
-
return /*#__PURE__*/_jsxs("tr", {
|
|
68
|
-
style: {
|
|
69
|
-
minHeight: config.eventItemLineHeight + 2
|
|
70
|
-
},
|
|
71
|
-
children: [/*#__PURE__*/_jsx("td", {
|
|
72
|
-
"data-resource-id": resourceEvents.slotId,
|
|
73
|
-
children: slotItem
|
|
74
|
-
}), /*#__PURE__*/_jsx("td", {
|
|
75
|
-
children: /*#__PURE__*/_jsx("div", {
|
|
76
|
-
className: "day-event-container",
|
|
77
|
-
children: events
|
|
78
|
-
})
|
|
79
|
-
})]
|
|
80
|
-
});
|
|
40
|
+
return (_jsxs("tr", { style: { minHeight: config.eventItemLineHeight + 2 }, children: [_jsx("td", { "data-resource-id": resourceEvents.slotId, children: slotItem }), _jsx("td", { children: _jsx("div", { className: "day-event-container", children: events }) })] }));
|
|
81
41
|
}
|
|
82
|
-
|
|
83
|
-
schedulerData: PropTypes.object.isRequired,
|
|
84
|
-
resourceEvents: PropTypes.object.isRequired,
|
|
85
|
-
subtitleGetter: PropTypes.func,
|
|
86
|
-
eventItemClick: PropTypes.func,
|
|
87
|
-
viewEventClick: PropTypes.func,
|
|
88
|
-
viewEventText: PropTypes.string,
|
|
89
|
-
viewEvent2Click: PropTypes.func,
|
|
90
|
-
viewEvent2Text: PropTypes.string,
|
|
91
|
-
slotClickedFunc: PropTypes.func,
|
|
92
|
-
slotItemTemplateResolver: PropTypes.func,
|
|
93
|
-
eventItemTemplateResolver: PropTypes.func,
|
|
94
|
-
eventItemPopoverTemplateResolver: PropTypes.func
|
|
95
|
-
};
|
|
96
|
-
export default AgendaResourceEvents;
|
|
42
|
+
export default AgendaResourceEvents;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { EventPopoverCallbacks, SlotClickedFunc, SlotItemTemplateResolver } from '../types';
|
|
2
|
+
import type SchedulerData from './SchedulerData';
|
|
3
|
+
export interface AgendaViewProps extends EventPopoverCallbacks {
|
|
4
|
+
schedulerData: SchedulerData;
|
|
5
|
+
slotClickedFunc?: SlotClickedFunc;
|
|
6
|
+
slotItemTemplateResolver?: SlotItemTemplateResolver;
|
|
7
|
+
}
|
|
8
|
+
declare function AgendaView(props: AgendaViewProps): import("react").JSX.Element;
|
|
9
|
+
export default AgendaView;
|
|
@@ -1,72 +1,13 @@
|
|
|
1
|
-
import PropTypes from 'prop-types';
|
|
2
|
-
import AgendaResourceEvents from './AgendaResourceEvents';
|
|
3
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import AgendaResourceEvents from './AgendaResourceEvents';
|
|
4
3
|
function AgendaView(props) {
|
|
5
|
-
|
|
6
|
-
schedulerData
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
config
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const tableHeaderHeight = schedulerData.getTableHeaderHeight();
|
|
14
|
-
const resourceName = schedulerData.isEventPerspective ? config.taskName : config.resourceName;
|
|
15
|
-
const {
|
|
16
|
-
agendaViewHeader
|
|
17
|
-
} = config;
|
|
18
|
-
const resourceEventsList = renderData.map(item => /*#__PURE__*/_jsx(AgendaResourceEvents, {
|
|
19
|
-
resourceEvents: item,
|
|
20
|
-
schedulerData: schedulerData,
|
|
21
|
-
subtitleGetter: props.subtitleGetter,
|
|
22
|
-
eventItemClick: props.eventItemClick,
|
|
23
|
-
viewEventClick: props.viewEventClick,
|
|
24
|
-
viewEventText: props.viewEventText,
|
|
25
|
-
viewEvent2Click: props.viewEvent2Click,
|
|
26
|
-
viewEvent2Text: props.viewEvent2Text,
|
|
27
|
-
slotClickedFunc: props.slotClickedFunc,
|
|
28
|
-
slotItemTemplateResolver: props.slotItemTemplateResolver,
|
|
29
|
-
eventItemTemplateResolver: props.eventItemTemplateResolver,
|
|
30
|
-
eventItemPopoverTemplateResolver: props.eventItemPopoverTemplateResolver
|
|
31
|
-
}, item.slotId));
|
|
32
|
-
return /*#__PURE__*/_jsx("tr", {
|
|
33
|
-
children: /*#__PURE__*/_jsx("td", {
|
|
34
|
-
children: /*#__PURE__*/_jsxs("table", {
|
|
35
|
-
className: "scheduler-table",
|
|
36
|
-
children: [/*#__PURE__*/_jsx("thead", {
|
|
37
|
-
children: /*#__PURE__*/_jsxs("tr", {
|
|
38
|
-
style: {
|
|
39
|
-
height: tableHeaderHeight
|
|
40
|
-
},
|
|
41
|
-
children: [/*#__PURE__*/_jsx("th", {
|
|
42
|
-
style: {
|
|
43
|
-
width: agendaResourceTableWidth
|
|
44
|
-
},
|
|
45
|
-
className: "header3-text",
|
|
46
|
-
children: resourceName
|
|
47
|
-
}), /*#__PURE__*/_jsx("th", {
|
|
48
|
-
className: "header3-text",
|
|
49
|
-
children: agendaViewHeader
|
|
50
|
-
})]
|
|
51
|
-
})
|
|
52
|
-
}), /*#__PURE__*/_jsx("tbody", {
|
|
53
|
-
children: resourceEventsList
|
|
54
|
-
})]
|
|
55
|
-
})
|
|
56
|
-
})
|
|
57
|
-
});
|
|
4
|
+
const { schedulerData } = props;
|
|
5
|
+
const { config, renderData } = schedulerData;
|
|
6
|
+
const agendaResourceTableWidth = schedulerData.getResourceTableWidth();
|
|
7
|
+
const tableHeaderHeight = schedulerData.getTableHeaderHeight();
|
|
8
|
+
const resourceName = schedulerData.isEventPerspective ? config.taskName : config.resourceName;
|
|
9
|
+
const { agendaViewHeader } = config;
|
|
10
|
+
const resourceEventsList = renderData.map(item => (_jsx(AgendaResourceEvents, { resourceEvents: item, schedulerData: schedulerData, subtitleGetter: props.subtitleGetter, eventItemClick: props.eventItemClick, viewEventClick: props.viewEventClick, viewEventText: props.viewEventText, viewEvent2Click: props.viewEvent2Click, viewEvent2Text: props.viewEvent2Text, slotClickedFunc: props.slotClickedFunc, slotItemTemplateResolver: props.slotItemTemplateResolver, eventItemTemplateResolver: props.eventItemTemplateResolver, eventItemPopoverTemplateResolver: props.eventItemPopoverTemplateResolver }, item.slotId)));
|
|
11
|
+
return (_jsx("tr", { children: _jsx("td", { children: _jsxs("table", { className: "scheduler-table", children: [_jsx("thead", { children: _jsxs("tr", { style: { height: tableHeaderHeight }, children: [_jsx("th", { style: { width: agendaResourceTableWidth }, className: "header3-text", children: resourceName }), _jsx("th", { className: "header3-text", children: agendaViewHeader })] }) }), _jsx("tbody", { children: resourceEventsList })] }) }) }));
|
|
58
12
|
}
|
|
59
|
-
|
|
60
|
-
schedulerData: PropTypes.object.isRequired,
|
|
61
|
-
subtitleGetter: PropTypes.func,
|
|
62
|
-
eventItemClick: PropTypes.func,
|
|
63
|
-
viewEventClick: PropTypes.func,
|
|
64
|
-
viewEventText: PropTypes.string,
|
|
65
|
-
viewEvent2Click: PropTypes.func,
|
|
66
|
-
viewEvent2Text: PropTypes.string,
|
|
67
|
-
slotClickedFunc: PropTypes.func,
|
|
68
|
-
slotItemTemplateResolver: PropTypes.func,
|
|
69
|
-
eventItemTemplateResolver: PropTypes.func,
|
|
70
|
-
eventItemPopoverTemplateResolver: PropTypes.func
|
|
71
|
-
};
|
|
72
|
-
export default AgendaView;
|
|
13
|
+
export default AgendaView;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type SchedulerData from './SchedulerData';
|
|
3
|
+
export interface BodyViewProps {
|
|
4
|
+
schedulerData: SchedulerData;
|
|
5
|
+
/** Changes whenever schedulerData mutates, so the memoised view re-renders. */
|
|
6
|
+
schedulerDataVersion?: number;
|
|
7
|
+
}
|
|
8
|
+
/** Render the table body (<tbody>) with one row per visible slot and one cell per header. */
|
|
9
|
+
declare function BodyView({ schedulerData }: BodyViewProps): React.JSX.Element;
|
|
10
|
+
declare const _default: React.MemoExoticComponent<typeof BodyView>;
|
|
11
|
+
export default _default;
|
|
@@ -1,70 +1,39 @@
|
|
|
1
|
-
import PropTypes from 'prop-types';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Render the table body (<tbody>) containing resource rows and cells based on schedulerData.
|
|
6
|
-
* @param {object} schedulerData - Scheduler state and helpers. Expected properties used: `renderData` (array of row descriptors with `slotId`, `render`, `rowHeight`, `groupOnly`, `nonWorkingTime`), `headers` (array of header descriptors with `time` and `nonWorkingTime`), `config` (including `nonWorkingTimeBodyBgColor` and `groupOnlySlotColor`), `behaviors` (optional `getNonAgendaViewBodyCellBgColorFunc`), `getContentCellWidth()` and `isVerticalResourceView()`.
|
|
7
|
-
* @returns {JSX.Element} The rendered `<tbody>` element containing a `<tr>` per rendered row and `<td>` cells for each header with computed inline styles.
|
|
8
|
-
*/
|
|
9
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
if (behaviors.getNonAgendaViewBodyCellBgColorFunc) {
|
|
45
|
-
const cellBgColor = behaviors.getNonAgendaViewBodyCellBgColorFunc(schedulerData, slotId, header);
|
|
46
|
-
if (cellBgColor) {
|
|
47
|
-
style.backgroundColor = cellBgColor;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return /*#__PURE__*/_jsx("td", {
|
|
51
|
-
style: style,
|
|
52
|
-
children: /*#__PURE__*/_jsx("div", {})
|
|
53
|
-
}, key);
|
|
2
|
+
import React from 'react';
|
|
3
|
+
/** Render the table body (<tbody>) with one row per visible slot and one cell per header. */
|
|
4
|
+
function BodyView({ schedulerData }) {
|
|
5
|
+
const { renderData, headers, config, behaviors } = schedulerData;
|
|
6
|
+
const width = schedulerData.getContentCellWidth();
|
|
7
|
+
const tableRows = renderData
|
|
8
|
+
.filter(o => o.render)
|
|
9
|
+
.map(row => {
|
|
10
|
+
const { slotId, groupOnly, rowHeight } = row;
|
|
11
|
+
const rowCells = headers.map(header => {
|
|
12
|
+
// vertical view: every header shares one time, the resource id tells the columns apart
|
|
13
|
+
const key = `${slotId}_${header.id ?? header.time}`;
|
|
14
|
+
const style = { width, minWidth: width };
|
|
15
|
+
const isVertical = schedulerData.isVerticalResourceView();
|
|
16
|
+
if (isVertical) {
|
|
17
|
+
if (row.nonWorkingTime) {
|
|
18
|
+
style.backgroundColor = config.nonWorkingTimeBodyBgColor;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
else if (header.nonWorkingTime) {
|
|
22
|
+
style.backgroundColor = config.nonWorkingTimeBodyBgColor;
|
|
23
|
+
}
|
|
24
|
+
if (groupOnly) {
|
|
25
|
+
style.backgroundColor = config.groupOnlySlotColor;
|
|
26
|
+
}
|
|
27
|
+
if (behaviors.getNonAgendaViewBodyCellBgColorFunc) {
|
|
28
|
+
const cellBgColor = behaviors.getNonAgendaViewBodyCellBgColorFunc(schedulerData, slotId, header);
|
|
29
|
+
if (cellBgColor) {
|
|
30
|
+
style.backgroundColor = cellBgColor;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return (_jsx("td", { style: style, children: _jsx("div", {}) }, key));
|
|
34
|
+
});
|
|
35
|
+
return (_jsx("tr", { style: { height: rowHeight }, children: rowCells }, slotId));
|
|
54
36
|
});
|
|
55
|
-
return
|
|
56
|
-
style: {
|
|
57
|
-
height: rowHeight
|
|
58
|
-
},
|
|
59
|
-
children: rowCells
|
|
60
|
-
}, slotId);
|
|
61
|
-
});
|
|
62
|
-
return /*#__PURE__*/_jsx("tbody", {
|
|
63
|
-
children: tableRows
|
|
64
|
-
});
|
|
37
|
+
return _jsx("tbody", { children: tableRows });
|
|
65
38
|
}
|
|
66
|
-
|
|
67
|
-
schedulerData: PropTypes.object.isRequired,
|
|
68
|
-
schedulerDataVersion: PropTypes.number
|
|
69
|
-
};
|
|
70
|
-
export default /*#__PURE__*/React.memo(BodyView);
|
|
39
|
+
export default React.memo(BodyView);
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { DropTargetHookSpec, DropTargetMonitor } from 'react-dnd';
|
|
2
|
+
import { CellUnit } from '../config/default';
|
|
3
|
+
import type { Id, RenderItem, SchedulerConfig } from '../types';
|
|
4
|
+
import type DnDSource from './DnDSource';
|
|
5
|
+
import type { DnDAction, DragItem, DropResult, Identifier } from './DnDSource';
|
|
6
|
+
import type SchedulerData from './SchedulerData';
|
|
7
|
+
/** The drop-target component: exposes the row element and (optionally) a drop preview setter. */
|
|
8
|
+
export interface DropTargetComponent {
|
|
9
|
+
eventContainer: HTMLElement | null;
|
|
10
|
+
setDropPreview?: (preview: DropPreview) => void;
|
|
11
|
+
}
|
|
12
|
+
/** Box shown while dragging, in px relative to the row. */
|
|
13
|
+
export interface DropPreview {
|
|
14
|
+
left: number;
|
|
15
|
+
width: number;
|
|
16
|
+
}
|
|
17
|
+
/** Props the component owning the drop target passes to getDropOptions. */
|
|
18
|
+
export interface DnDContextProps {
|
|
19
|
+
schedulerData: SchedulerData;
|
|
20
|
+
resourceEvents: RenderItem;
|
|
21
|
+
movingEvent?(schedulerData: SchedulerData, slotId: Id, slotName: string | undefined, start: string, end: string, action: DnDAction, type: Identifier, item: DragItem): void;
|
|
22
|
+
}
|
|
23
|
+
type DropMonitor = DropTargetMonitor<DragItem, DropResult>;
|
|
24
|
+
export default class DnDContext {
|
|
25
|
+
sourceMap: Map<Identifier, DnDSource>;
|
|
26
|
+
config?: SchedulerConfig;
|
|
27
|
+
constructor(sources: DnDSource[]);
|
|
28
|
+
extractInitialTimes: (monitor: DropMonitor, pos: {
|
|
29
|
+
x: number;
|
|
30
|
+
y: number;
|
|
31
|
+
}, cellWidth: number, resourceEvents: RenderItem, cellUnit: CellUnit, localeDayjs: SchedulerData['localeDayjs']) => {
|
|
32
|
+
initialStart: string;
|
|
33
|
+
initialEnd: string;
|
|
34
|
+
};
|
|
35
|
+
getVerticalMove: (props: DnDContextProps, monitor: DropMonitor, component: DropTargetComponent) => DropResult | null;
|
|
36
|
+
getDropPreview: (resourceEvents: RenderItem, cellWidth: number, firstIndex: number, start?: string, end?: string) => DropPreview;
|
|
37
|
+
getDropSpec: () => {
|
|
38
|
+
drop: (props: DnDContextProps, monitor: DropMonitor, component: DropTargetComponent) => DropResult | undefined;
|
|
39
|
+
hover: (props: DnDContextProps, monitor: DropMonitor, component: DropTargetComponent) => void;
|
|
40
|
+
canDrop: (props: DnDContextProps, monitor: DropMonitor) => boolean;
|
|
41
|
+
};
|
|
42
|
+
getDropOptions: (props: DnDContextProps, component: DropTargetComponent) => DropTargetHookSpec<DragItem, DropResult, {
|
|
43
|
+
isOver: boolean;
|
|
44
|
+
canDrop: boolean;
|
|
45
|
+
}>;
|
|
46
|
+
getDndSource: (dndType?: string) => DnDSource | undefined;
|
|
47
|
+
}
|
|
48
|
+
export {};
|