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.
Files changed (109) hide show
  1. package/README.md +24 -1129
  2. package/dist/calendar/Calendar.d.ts +28 -0
  3. package/dist/calendar/Calendar.js +95 -0
  4. package/dist/calendar/Toolbar.d.ts +18 -0
  5. package/dist/calendar/Toolbar.js +6 -0
  6. package/dist/calendar/recurrence.check.d.ts +1 -0
  7. package/dist/calendar/recurrence.check.js +49 -0
  8. package/dist/calendar/recurrence.d.ts +8 -0
  9. package/dist/calendar/recurrence.js +90 -0
  10. package/dist/calendar/timezone.d.ts +6 -0
  11. package/dist/calendar/timezone.js +14 -0
  12. package/dist/calendar/types.d.ts +187 -0
  13. package/dist/calendar/types.js +1 -0
  14. package/dist/calendar/useEventSources.d.ts +11 -0
  15. package/dist/calendar/useEventSources.js +89 -0
  16. package/dist/calendar/useRecurrence.d.ts +4 -0
  17. package/dist/calendar/useRecurrence.js +15 -0
  18. package/dist/calendar/utils.d.ts +38 -0
  19. package/dist/calendar/utils.js +143 -0
  20. package/dist/calendar/views/DayGridView.d.ts +3 -0
  21. package/dist/calendar/views/DayGridView.js +375 -0
  22. package/dist/calendar/views/ListView.d.ts +4 -0
  23. package/dist/calendar/views/ListView.js +56 -0
  24. package/dist/calendar/views/MultiMonthView.d.ts +4 -0
  25. package/dist/calendar/views/MultiMonthView.js +36 -0
  26. package/dist/calendar/views/TimeGridView.d.ts +3 -0
  27. package/dist/calendar/views/TimeGridView.js +334 -0
  28. package/dist/calendar/views/daygrid/DayCell.d.ts +19 -0
  29. package/dist/calendar/views/daygrid/DayCell.js +17 -0
  30. package/dist/calendar/views/daygrid/EventChip.d.ts +19 -0
  31. package/dist/calendar/views/daygrid/EventChip.js +40 -0
  32. package/dist/calendar/views/daygrid/layout.d.ts +30 -0
  33. package/dist/calendar/views/daygrid/layout.js +63 -0
  34. package/dist/calendar/views/list/bucket.d.ts +8 -0
  35. package/dist/calendar/views/list/bucket.js +37 -0
  36. package/dist/calendar/views/multimonth/Cell.d.ts +12 -0
  37. package/dist/calendar/views/multimonth/Cell.js +44 -0
  38. package/dist/calendar/views/multimonth/Continuous.d.ts +8 -0
  39. package/dist/calendar/views/multimonth/Continuous.js +28 -0
  40. package/dist/calendar/views/multimonth/MonthGrid.d.ts +10 -0
  41. package/dist/calendar/views/multimonth/MonthGrid.js +36 -0
  42. package/dist/calendar/views/multimonth/shared.d.ts +27 -0
  43. package/dist/calendar/views/multimonth/shared.js +40 -0
  44. package/dist/calendar/views/timegrid/DayColumn.d.ts +49 -0
  45. package/dist/calendar/views/timegrid/DayColumn.js +86 -0
  46. package/dist/calendar/views/timegrid/model.d.ts +55 -0
  47. package/dist/calendar/views/timegrid/model.js +102 -0
  48. package/dist/components/AddMore.d.ts +13 -0
  49. package/dist/components/AddMore.js +9 -42
  50. package/dist/components/AddMorePopover.d.ts +13 -0
  51. package/dist/components/AddMorePopover.js +24 -95
  52. package/dist/components/AgendaEventItem.d.ts +10 -0
  53. package/dist/components/AgendaEventItem.js +33 -81
  54. package/dist/components/AgendaResourceEvents.d.ts +10 -0
  55. package/dist/components/AgendaResourceEvents.js +37 -91
  56. package/dist/components/AgendaView.d.ts +9 -0
  57. package/dist/components/AgendaView.js +10 -69
  58. package/dist/components/BodyView.d.ts +11 -0
  59. package/dist/components/BodyView.js +36 -67
  60. package/dist/components/DnDContext.d.ts +48 -0
  61. package/dist/components/DnDContext.js +200 -221
  62. package/dist/components/DnDSource.d.ts +49 -0
  63. package/dist/components/DnDSource.js +125 -120
  64. package/dist/components/EventItem.d.ts +41 -0
  65. package/dist/components/EventItem.js +585 -787
  66. package/dist/components/EventItemPopover.d.ts +12 -0
  67. package/dist/components/EventItemPopover.js +19 -143
  68. package/dist/components/HeaderView.d.ts +14 -0
  69. package/dist/components/HeaderView.js +123 -186
  70. package/dist/components/ResourceEvents.d.ts +54 -0
  71. package/dist/components/ResourceEvents.js +534 -703
  72. package/dist/components/ResourceView.d.ts +26 -0
  73. package/dist/components/ResourceView.js +64 -184
  74. package/dist/components/SchedulerData.d.ts +136 -0
  75. package/dist/components/SchedulerData.js +1296 -1226
  76. package/dist/components/SchedulerHeader.d.ts +25 -0
  77. package/dist/components/SchedulerHeader.js +50 -150
  78. package/dist/components/SelectedArea.d.ts +8 -0
  79. package/dist/components/SelectedArea.js +11 -26
  80. package/dist/components/Summary.d.ts +11 -0
  81. package/dist/components/Summary.js +21 -50
  82. package/dist/components/WrapperFun.d.ts +2 -0
  83. package/dist/components/WrapperFun.js +5 -10
  84. package/dist/components/index.d.ts +44 -0
  85. package/dist/components/index.js +428 -654
  86. package/dist/components/ui/Icons.d.ts +8 -0
  87. package/dist/components/ui/Icons.js +7 -0
  88. package/dist/components/ui/MiniCalendar.d.ts +9 -0
  89. package/dist/components/ui/MiniCalendar.js +17 -0
  90. package/dist/components/ui/Popover.d.ts +13 -0
  91. package/dist/components/ui/Popover.js +80 -0
  92. package/dist/config/default.d.ts +36 -0
  93. package/dist/config/default.js +17 -26
  94. package/dist/config/i18n.d.ts +27 -0
  95. package/dist/config/i18n.js +21 -37
  96. package/dist/config/scheduler.d.ts +12 -0
  97. package/dist/config/scheduler.js +126 -119
  98. package/dist/css/style.css +2 -316
  99. package/dist/helper/behaviors.d.ts +14 -0
  100. package/dist/helper/behaviors.js +75 -75
  101. package/dist/helper/utility.d.ts +26 -0
  102. package/dist/helper/utility.js +23 -30
  103. package/dist/index.d.ts +6 -477
  104. package/dist/index.js +4 -2
  105. package/dist/sample-data/sample1.d.ts +11 -0
  106. package/dist/sample-data/sample1.js +427 -372
  107. package/dist/types.d.ts +267 -0
  108. package/dist/types.js +1 -0
  109. 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
- const {
7
- eventItem,
8
- isStart,
9
- isEnd,
10
- eventItemClick,
11
- schedulerData,
12
- eventItemTemplateResolver
13
- } = props;
14
- const {
15
- config,
16
- behaviors
17
- } = schedulerData;
18
- let roundCls = 'round-none';
19
- if (isStart && isEnd) {
20
- roundCls = 'round-all';
21
- } else if (isStart) {
22
- roundCls = 'round-head';
23
- } else if (isEnd) {
24
- roundCls = 'round-tail';
25
- }
26
- const backgroundColor = eventItem.bgColor || config.defaultEventBgColor;
27
- const titleText = behaviors.getEventTextFunc(schedulerData, eventItem);
28
- const eventItemStyle = {
29
- height: config.eventItemHeight,
30
- maxWidth: config.agendaMaxEventWidth,
31
- backgroundColor
32
- };
33
- let eventItemTemplate = /*#__PURE__*/_jsx("div", {
34
- className: `${roundCls} event-item`,
35
- style: eventItemStyle,
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
- AgendaEventItem.propTypes = {
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 PropTypes from 'prop-types';
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
- const {
8
- schedulerData,
9
- resourceEvents,
10
- slotClickedFunc,
11
- slotItemTemplateResolver
12
- } = props;
13
- const {
14
- startDate,
15
- endDate,
16
- config,
17
- localeDayjs
18
- } = schedulerData;
19
- const width = schedulerData.getResourceTableWidth() - 2;
20
- const events = resourceEvents.headerItems.flatMap(item => {
21
- const start = localeDayjs(new Date(startDate));
22
- const end = localeDayjs(endDate).add(1, 'days');
23
- const headerStart = localeDayjs(new Date(item.start));
24
- const headerEnd = localeDayjs(new Date(item.end));
25
- // compare calendar dates: dayjs objects are never === each other
26
- if (start.format(DATE_FORMAT) === headerStart.format(DATE_FORMAT) && end.format(DATE_FORMAT) === headerEnd.format(DATE_FORMAT)) {
27
- return item.events.map(evt => {
28
- const durationStart = localeDayjs(new Date(startDate));
29
- const durationEnd = localeDayjs(endDate).add(1, 'days');
30
- const eventStart = localeDayjs(evt.eventItem.start);
31
- const eventEnd = localeDayjs(evt.eventItem.end);
32
- const isStart = eventStart >= durationStart;
33
- const isEnd = eventEnd < durationEnd;
34
- return /*#__PURE__*/_createElement(AgendaEventItem, {
35
- ...props,
36
- key: evt.eventItem.id,
37
- eventItem: evt.eventItem,
38
- isStart: isStart,
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
- AgendaResourceEvents.propTypes = {
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
- const {
6
- schedulerData
7
- } = props;
8
- const {
9
- config,
10
- renderData
11
- } = schedulerData;
12
- const agendaResourceTableWidth = schedulerData.getResourceTableWidth();
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
- AgendaView.propTypes = {
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
- function BodyView({
11
- schedulerData
12
- }) {
13
- const {
14
- renderData,
15
- headers,
16
- config,
17
- behaviors
18
- } = schedulerData;
19
- const width = schedulerData.getContentCellWidth();
20
- const tableRows = renderData.filter(o => o.render).map(row => {
21
- const {
22
- slotId,
23
- groupOnly,
24
- rowHeight
25
- } = row;
26
- const rowCells = headers.map(header => {
27
- // vertical view: every header shares one time, the resource id tells the columns apart
28
- const key = `${slotId}_${header.id ?? header.time}`;
29
- const style = {
30
- width,
31
- minWidth: width
32
- };
33
- const isVertical = schedulerData.isVerticalResourceView();
34
- if (isVertical) {
35
- if (row.nonWorkingTime) {
36
- style.backgroundColor = config.nonWorkingTimeBodyBgColor;
37
- }
38
- } else if (header.nonWorkingTime) {
39
- style.backgroundColor = config.nonWorkingTimeBodyBgColor;
40
- }
41
- if (groupOnly) {
42
- style.backgroundColor = config.groupOnlySlotColor;
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 /*#__PURE__*/_jsx("tr", {
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
- BodyView.propTypes = {
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 {};