@fullcalendar/list 7.0.0-beta.1 → 7.0.0-beta.4
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/index.global.js +143 -144
- package/index.global.min.js +2 -2
- package/internal-common.d.ts +19 -16
- package/internal.cjs +144 -145
- package/internal.js +145 -146
- package/package.json +2 -2
package/internal.cjs
CHANGED
|
@@ -5,49 +5,33 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var internal_cjs = require('@fullcalendar/core/internal.cjs');
|
|
6
6
|
var preact_cjs = require('@fullcalendar/core/preact.cjs');
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
internal_cjs.injectStyles(css_248z);
|
|
10
|
-
|
|
11
|
-
class ListViewHeaderRow extends internal_cjs.BaseComponent {
|
|
12
|
-
constructor() {
|
|
13
|
-
super(...arguments);
|
|
14
|
-
this.state = {
|
|
15
|
-
textId: internal_cjs.getUniqueDomId(),
|
|
16
|
-
};
|
|
17
|
-
}
|
|
8
|
+
class ListDayHeader extends internal_cjs.BaseComponent {
|
|
18
9
|
render() {
|
|
19
|
-
let {
|
|
20
|
-
let {
|
|
21
|
-
let { textId } = this.state;
|
|
10
|
+
let { dateEnv, options, viewApi } = this.context;
|
|
11
|
+
let { dayDate, todayRange } = this.props;
|
|
22
12
|
let stickyHeaderDates = !this.props.forPrint && internal_cjs.getStickyHeaderDates(options);
|
|
23
13
|
let dayMeta = internal_cjs.getDateMeta(dayDate, todayRange);
|
|
24
14
|
// will ever be falsy?
|
|
25
15
|
let text = options.listDayFormat ? dateEnv.format(dayDate, options.listDayFormat) : '';
|
|
26
16
|
// will ever be falsy? also, BAD NAME "alt"
|
|
27
17
|
let sideText = options.listDaySideFormat ? dateEnv.format(dayDate, options.listDaySideFormat) : '';
|
|
28
|
-
let
|
|
29
|
-
|
|
30
|
-
sideText, navLinkAttrs:
|
|
18
|
+
let isNavLink = options.navLinks;
|
|
19
|
+
let renderProps = Object.assign({ date: dateEnv.toDate(dayDate), view: viewApi, text,
|
|
20
|
+
sideText, navLinkAttrs: isNavLink
|
|
21
|
+
? internal_cjs.buildNavLinkAttrs(this.context, dayDate, undefined, text)
|
|
22
|
+
: {}, sideNavLinkAttrs: isNavLink
|
|
23
|
+
// duplicate navLink, so does not need to be tabbable
|
|
24
|
+
? internal_cjs.buildNavLinkAttrs(this.context, dayDate, undefined, sideText, /* isTabbable = */ false)
|
|
25
|
+
: {} }, dayMeta);
|
|
31
26
|
// TODO: make a reusable HOC for dayHeader (used in daygrid/timegrid too)
|
|
32
|
-
return (preact_cjs.createElement(
|
|
33
|
-
|
|
34
|
-
...internal_cjs.getDayClassNames(dayMeta, theme),
|
|
35
|
-
], elAttrs: {
|
|
36
|
-
'data-date': internal_cjs.formatDayString(dayDate),
|
|
37
|
-
}, renderProps: renderProps, generatorName: "dayHeaderContent", customGenerator: options.dayHeaderContent, defaultGenerator: renderInnerContent, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContent) => (preact_cjs.createElement(InnerContent, { elTag: "th", elAttrs: {
|
|
38
|
-
id: cellId,
|
|
39
|
-
colSpan: 3,
|
|
40
|
-
'aria-labelledby': textId,
|
|
41
|
-
}, elClasses: [
|
|
42
|
-
'fc-list-day-cell',
|
|
43
|
-
stickyHeaderDates ? 'fc-list-day-cell-sticky' : '',
|
|
44
|
-
] }))));
|
|
27
|
+
return (preact_cjs.createElement("div", { className: internal_cjs.joinClassNames('fc-list-day-outer', stickyHeaderDates && 'fc-list-day-outer-sticky') },
|
|
28
|
+
preact_cjs.createElement(internal_cjs.ContentContainer, { tag: "div", className: internal_cjs.joinClassNames('fc-list-day', internal_cjs.getDayClassName(dayMeta)), attrs: Object.assign({ 'data-date': internal_cjs.formatDayString(dayDate) }, (dayMeta.isToday ? { 'aria-current': 'date' } : {})), renderProps: renderProps, generatorName: "dayHeaderContent", customGenerator: options.dayHeaderContent, defaultGenerator: renderInnerContent, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount })));
|
|
45
29
|
}
|
|
46
30
|
}
|
|
47
31
|
function renderInnerContent(props) {
|
|
48
|
-
return (preact_cjs.createElement(
|
|
49
|
-
props.text && (preact_cjs.createElement("
|
|
50
|
-
props.sideText && (
|
|
32
|
+
return (preact_cjs.createElement(preact_cjs.Fragment, null,
|
|
33
|
+
props.text && (preact_cjs.createElement("div", Object.assign({ className: "fc-list-day-text" }, props.navLinkAttrs), props.text)),
|
|
34
|
+
props.sideText && (preact_cjs.createElement("div", Object.assign({ className: "fc-list-day-side-text" }, props.sideNavLinkAttrs), props.sideText))));
|
|
51
35
|
}
|
|
52
36
|
|
|
53
37
|
const DEFAULT_TIME_FORMAT = internal_cjs.createFormatter({
|
|
@@ -55,92 +39,132 @@ const DEFAULT_TIME_FORMAT = internal_cjs.createFormatter({
|
|
|
55
39
|
minute: '2-digit',
|
|
56
40
|
meridiem: 'short',
|
|
57
41
|
});
|
|
58
|
-
class
|
|
42
|
+
class ListEvent extends internal_cjs.BaseComponent {
|
|
43
|
+
constructor() {
|
|
44
|
+
super(...arguments);
|
|
45
|
+
this.handleTitleEl = (titleEl) => {
|
|
46
|
+
if (this.disconnectTitleWidth) {
|
|
47
|
+
this.disconnectTitleWidth();
|
|
48
|
+
}
|
|
49
|
+
if (titleEl) {
|
|
50
|
+
this.disconnectTitleWidth = internal_cjs.watchWidth(titleEl, (titleWidth) => {
|
|
51
|
+
internal_cjs.setRef(this.props.timeWidthRef, titleWidth);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
59
56
|
render() {
|
|
60
57
|
let { props, context } = this;
|
|
58
|
+
let { eventRange } = props;
|
|
61
59
|
let { options } = context;
|
|
62
|
-
let { eventRange, timeHeaderId, eventHeaderId, dateHeaderId } = props;
|
|
63
60
|
let timeFormat = options.eventTimeFormat || DEFAULT_TIME_FORMAT;
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
buildTimeContent(eventRange, props.isStart, props.isEnd, props.segStart, props.segEnd, timeFormat, context, timeHeaderId, dateHeaderId),
|
|
69
|
-
preact_cjs.createElement("td", { "aria-hidden": true, className: "fc-list-event-dot-cell" },
|
|
61
|
+
let [tag, attrs] = internal_cjs.getEventTagAndAttrs(eventRange, context);
|
|
62
|
+
return (preact_cjs.createElement(internal_cjs.EventContainer, Object.assign({}, props, { tag: tag, attrs: Object.assign({ role: 'listitem' }, attrs), className: 'fc-list-event', defaultGenerator: renderEventTitleOnly, eventRange: eventRange, timeText: "", disableDragging: true, disableResizing: true }), (InnerContent, eventContentArg) => (preact_cjs.createElement(preact_cjs.Fragment, null,
|
|
63
|
+
preact_cjs.createElement("div", { className: 'fc-list-event-time-outer', style: { width: props.timeOuterWidth } }, this.buildTimeContent(eventRange, props.slicedStart, props.slicedEnd, props.isStart, props.isEnd, timeFormat, context)),
|
|
64
|
+
preact_cjs.createElement("div", { className: "fc-list-event-dot-outer" },
|
|
70
65
|
preact_cjs.createElement("span", { className: "fc-list-event-dot", style: {
|
|
71
66
|
borderColor: eventContentArg.borderColor || eventContentArg.backgroundColor,
|
|
72
67
|
} })),
|
|
73
|
-
preact_cjs.createElement(InnerContent, {
|
|
68
|
+
preact_cjs.createElement(InnerContent, { tag: "div", className: 'fc-list-event-title' })))));
|
|
74
69
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if (eventDef.allDay) {
|
|
88
|
-
doAllDay = true;
|
|
89
|
-
}
|
|
90
|
-
else if (internal_cjs.isMultiDayRange(eventRange.range)) { // TODO: use (!isStart || !isEnd) instead?
|
|
91
|
-
if (isStart) {
|
|
92
|
-
timeText = internal_cjs.buildEventRangeTimeText(eventRange, timeFormat, context, null, null, eventInstance.range.start, segEnd);
|
|
93
|
-
}
|
|
94
|
-
else if (isEnd) {
|
|
95
|
-
timeText = internal_cjs.buildEventRangeTimeText(eventRange, timeFormat, context, null, null, segStart, eventInstance.range.end);
|
|
70
|
+
buildTimeContent(eventRange, // whole-day span
|
|
71
|
+
slicedStart, // view-sliced whole-day span
|
|
72
|
+
slicedEnd, // view-sliced whole-day span
|
|
73
|
+
isStart, isEnd, timeFormat, context) {
|
|
74
|
+
let { options } = context;
|
|
75
|
+
if (options.displayEventTime !== false) {
|
|
76
|
+
if (eventRange.def.allDay || (!isStart && !isEnd)) {
|
|
77
|
+
let renderProps = {
|
|
78
|
+
text: context.options.allDayText,
|
|
79
|
+
view: context.viewApi,
|
|
80
|
+
};
|
|
81
|
+
return (preact_cjs.createElement(internal_cjs.ContentContainer, { tag: "div", className: 'fc-list-event-time', renderProps: renderProps, elRef: this.handleTitleEl, generatorName: "allDayContent", customGenerator: options.allDayContent, defaultGenerator: renderAllDayInner, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }));
|
|
96
82
|
}
|
|
97
83
|
else {
|
|
98
|
-
|
|
84
|
+
return (preact_cjs.createElement("div", { className: "fc-list-event-time", ref: this.handleTitleEl }, internal_cjs.buildEventRangeTimeText(timeFormat, eventRange, slicedStart, slicedEnd, isStart, isEnd, context)));
|
|
99
85
|
}
|
|
100
86
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
let renderProps = {
|
|
106
|
-
text: context.options.allDayText,
|
|
107
|
-
view: context.viewApi,
|
|
108
|
-
};
|
|
109
|
-
return (preact_cjs.createElement(internal_cjs.ContentContainer, { elTag: "td", elClasses: ['fc-list-event-time'], elAttrs: {
|
|
110
|
-
headers: `${timeHeaderId} ${dateHeaderId}`,
|
|
111
|
-
}, renderProps: renderProps, generatorName: "allDayContent", customGenerator: options.allDayContent, defaultGenerator: renderAllDayInner, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }));
|
|
112
|
-
}
|
|
113
|
-
return (preact_cjs.createElement("td", { className: "fc-list-event-time" }, timeText));
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
componentWillUnmount() {
|
|
90
|
+
internal_cjs.setRef(this.props.timeWidthRef, null);
|
|
114
91
|
}
|
|
115
|
-
|
|
92
|
+
}
|
|
93
|
+
function renderEventTitleOnly(renderProps) {
|
|
94
|
+
return renderProps.event.title;
|
|
116
95
|
}
|
|
117
96
|
function renderAllDayInner(renderProps) {
|
|
118
97
|
return renderProps.text;
|
|
119
98
|
}
|
|
120
99
|
|
|
100
|
+
class ListDay extends internal_cjs.BaseComponent {
|
|
101
|
+
constructor() {
|
|
102
|
+
super(...arguments);
|
|
103
|
+
// memo
|
|
104
|
+
this.sortEventSegs = internal_cjs.memoize(internal_cjs.sortEventSegs);
|
|
105
|
+
// ref
|
|
106
|
+
this.timeWidthRefMap = new internal_cjs.RefMap(() => {
|
|
107
|
+
internal_cjs.afterSize(this.handleTimeWidths);
|
|
108
|
+
});
|
|
109
|
+
this.handleTimeWidths = () => {
|
|
110
|
+
const timeWidthMap = this.timeWidthRefMap.current;
|
|
111
|
+
let max = 0;
|
|
112
|
+
for (const timeWidth of timeWidthMap.values()) {
|
|
113
|
+
max = Math.max(max, timeWidth);
|
|
114
|
+
}
|
|
115
|
+
internal_cjs.setRef(this.props.timeWidthRef, max);
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
render() {
|
|
119
|
+
const { props, context, timeWidthRefMap } = this;
|
|
120
|
+
const { nowDate, todayRange } = props;
|
|
121
|
+
const { options } = context;
|
|
122
|
+
const segs = this.sortEventSegs(props.segs, options.eventOrder);
|
|
123
|
+
const fullDateStr = internal_cjs.buildDateStr(this.context, props.dayDate);
|
|
124
|
+
return (preact_cjs.createElement("div", { role: 'listitem', "aria-label": fullDateStr, className: 'fc-list-day-and-events' },
|
|
125
|
+
preact_cjs.createElement(ListDayHeader, { dayDate: props.dayDate, todayRange: todayRange, forPrint: props.forPrint }),
|
|
126
|
+
preact_cjs.createElement("div", { role: 'list', "aria-label": options.eventsHint }, segs.map((seg) => {
|
|
127
|
+
const key = internal_cjs.getEventKey(seg);
|
|
128
|
+
return (preact_cjs.createElement(ListEvent, Object.assign({ key: key, eventRange: seg.eventRange, slicedStart: seg.slicedStart, slicedEnd: seg.slicedEnd, isStart: seg.isStart, isEnd: seg.isEnd, timeWidthRef: timeWidthRefMap.createRef(key), timeOuterWidth: props.timeOuterWidth, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false }, internal_cjs.getEventRangeMeta(seg.eventRange, todayRange, nowDate))));
|
|
129
|
+
}))));
|
|
130
|
+
}
|
|
131
|
+
componentWillUnmount() {
|
|
132
|
+
internal_cjs.setRef(this.props.timeWidthRef, null);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
121
136
|
/*
|
|
122
137
|
Responsible for the scroller, and forwarding event-related actions into the "grid".
|
|
123
138
|
*/
|
|
124
139
|
class ListView extends internal_cjs.DateComponent {
|
|
125
140
|
constructor() {
|
|
126
141
|
super(...arguments);
|
|
142
|
+
// memo
|
|
127
143
|
this.computeDateVars = internal_cjs.memoize(computeDateVars);
|
|
128
144
|
this.eventStoreToSegs = internal_cjs.memoize(this._eventStoreToSegs);
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
};
|
|
145
|
+
// ref
|
|
146
|
+
this.timeWidthRefMap = new internal_cjs.RefMap(() => {
|
|
147
|
+
internal_cjs.afterSize(this.handleTimeWidths);
|
|
148
|
+
});
|
|
134
149
|
this.setRootEl = (rootEl) => {
|
|
135
150
|
if (rootEl) {
|
|
136
151
|
this.context.registerInteractiveComponent(this, {
|
|
137
152
|
el: rootEl,
|
|
153
|
+
disableHits: true, // HACK to not do date-clicking/selecting
|
|
138
154
|
});
|
|
139
155
|
}
|
|
140
156
|
else {
|
|
141
157
|
this.context.unregisterInteractiveComponent(this);
|
|
142
158
|
}
|
|
143
159
|
};
|
|
160
|
+
this.handleTimeWidths = () => {
|
|
161
|
+
const timeWidthMap = this.timeWidthRefMap.current;
|
|
162
|
+
let max = 0;
|
|
163
|
+
for (const timeWidth of timeWidthMap.values()) {
|
|
164
|
+
max = Math.max(max, timeWidth);
|
|
165
|
+
}
|
|
166
|
+
this.setState({ timeOuterWidth: max });
|
|
167
|
+
};
|
|
144
168
|
}
|
|
145
169
|
render() {
|
|
146
170
|
let { props, context } = this;
|
|
@@ -148,15 +172,11 @@ class ListView extends internal_cjs.DateComponent {
|
|
|
148
172
|
let { dayDates, dayRanges } = this.computeDateVars(props.dateProfile);
|
|
149
173
|
let eventSegs = this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges);
|
|
150
174
|
let verticalScrolling = !props.forPrint && !internal_cjs.getIsHeightAuto(options);
|
|
151
|
-
return (preact_cjs.createElement(internal_cjs.ViewContainer, { elRef: this.setRootEl,
|
|
152
|
-
'fc-list-view',
|
|
153
|
-
'fc-flex-column',
|
|
154
|
-
'fc-border',
|
|
155
|
-
], viewSpec: context.viewSpec },
|
|
175
|
+
return (preact_cjs.createElement(internal_cjs.ViewContainer, { viewSpec: context.viewSpec, className: 'fc-list fc-flex-col fc-border', elRef: this.setRootEl },
|
|
156
176
|
preact_cjs.createElement(internal_cjs.Scroller // TODO: don't need heavyweight component
|
|
157
|
-
, { vertical: verticalScrolling,
|
|
158
|
-
this.renderSegList(eventSegs, dayDates)
|
|
159
|
-
this.renderEmptyMessage())));
|
|
177
|
+
, { vertical: verticalScrolling, className: verticalScrolling ? 'fc-liquid' : '' },
|
|
178
|
+
this.renderSegList(eventSegs, dayDates),
|
|
179
|
+
!eventSegs.length && this.renderEmptyMessage())));
|
|
160
180
|
}
|
|
161
181
|
renderEmptyMessage() {
|
|
162
182
|
let { options, viewApi } = this.context;
|
|
@@ -164,77 +184,53 @@ class ListView extends internal_cjs.DateComponent {
|
|
|
164
184
|
text: options.noEventsText,
|
|
165
185
|
view: viewApi,
|
|
166
186
|
};
|
|
167
|
-
return (preact_cjs.createElement(internal_cjs.ContentContainer, {
|
|
187
|
+
return (preact_cjs.createElement(internal_cjs.ContentContainer, { tag: "div", attrs: {
|
|
188
|
+
role: 'status', // does a polite announcement
|
|
189
|
+
}, className: 'fc-list-empty', renderProps: renderProps, generatorName: "noEventsContent", customGenerator: options.noEventsContent, defaultGenerator: renderNoEventsInner, classNameGenerator: options.noEventsClassNames, didMount: options.noEventsDidMount, willUnmount: options.noEventsWillUnmount }, (InnerContent) => (preact_cjs.createElement(InnerContent, { tag: "div", className: 'fc-list-empty-inner' }))));
|
|
168
190
|
}
|
|
169
191
|
renderSegList(allSegs, dayDates) {
|
|
170
|
-
let { options } = this.context;
|
|
171
|
-
let { timeHeaderId, eventHeaderId, dateHeaderIdRoot } = this.state;
|
|
172
192
|
let segsByDay = groupSegsByDay(allSegs); // sparse array
|
|
173
|
-
return (preact_cjs.createElement(
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
let
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
daySegs = internal_cjs.sortEventSegs(daySegs, options.eventOrder);
|
|
183
|
-
for (let seg of daySegs) {
|
|
184
|
-
innerNodes.push(preact_cjs.createElement(ListViewEventRow, Object.assign({ key: dayStr + ':' + seg.eventRange.instance.instanceId /* are multiple segs for an instanceId */, eventRange: seg.eventRange, isStart: seg.isStart, isEnd: seg.isEnd, segStart: seg.start, segEnd: seg.end, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, timeHeaderId: timeHeaderId, eventHeaderId: eventHeaderId, dateHeaderId: dateHeaderId }, internal_cjs.getEventRangeMeta(seg.eventRange, todayRange, nowDate))));
|
|
193
|
+
return (preact_cjs.createElement("div", { role: 'list', "aria-labelledby": this.props.labelId, "aria-label": this.props.labelStr },
|
|
194
|
+
preact_cjs.createElement(internal_cjs.NowTimer, { unit: "day" }, (nowDate, todayRange) => {
|
|
195
|
+
const dayNodes = [];
|
|
196
|
+
for (let dayIndex = 0; dayIndex < segsByDay.length; dayIndex += 1) {
|
|
197
|
+
let daySegs = segsByDay[dayIndex];
|
|
198
|
+
if (daySegs) { // sparse array, so might be undefined
|
|
199
|
+
const dayDate = dayDates[dayIndex];
|
|
200
|
+
const key = internal_cjs.formatDayString(dayDate);
|
|
201
|
+
dayNodes.push(preact_cjs.createElement(ListDay, { key: key, dayDate: dayDate, nowDate: nowDate, todayRange: todayRange, segs: daySegs, forPrint: this.props.forPrint, timeWidthRef: this.timeWidthRefMap.createRef(key), timeOuterWidth: this.state.timeOuterWidth }));
|
|
185
202
|
}
|
|
186
203
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
preact_cjs.createElement("thead", { className: 'fc-offscreen' },
|
|
190
|
-
preact_cjs.createElement("tr", null,
|
|
191
|
-
preact_cjs.createElement("th", { scope: "col", id: timeHeaderId }, options.timeHint),
|
|
192
|
-
preact_cjs.createElement("th", { scope: "col", "aria-hidden": true }),
|
|
193
|
-
preact_cjs.createElement("th", { scope: "col", id: eventHeaderId }, options.eventHint))),
|
|
194
|
-
preact_cjs.createElement("tbody", null, innerNodes)));
|
|
195
|
-
}));
|
|
204
|
+
return (preact_cjs.createElement(preact_cjs.Fragment, null, dayNodes));
|
|
205
|
+
})));
|
|
196
206
|
}
|
|
197
207
|
_eventStoreToSegs(eventStore, eventUiBases, dayRanges) {
|
|
198
|
-
return this.eventRangesToSegs(internal_cjs.sliceEventStore(eventStore, eventUiBases,
|
|
208
|
+
return this.eventRangesToSegs(internal_cjs.sliceEventStore(eventStore, eventUiBases,
|
|
209
|
+
// HACKY to reference internal state...
|
|
210
|
+
this.props.dateProfile.activeRange, this.context.options.nextDayThreshold).fg, dayRanges);
|
|
199
211
|
}
|
|
200
|
-
eventRangesToSegs(
|
|
212
|
+
eventRangesToSegs(fullDayEventRanges, dayRanges) {
|
|
201
213
|
let segs = [];
|
|
202
|
-
for (let
|
|
203
|
-
segs.push(...this.eventRangeToSegs(
|
|
214
|
+
for (let fullDayEventRange of fullDayEventRanges) {
|
|
215
|
+
segs.push(...this.eventRangeToSegs(fullDayEventRange, dayRanges));
|
|
204
216
|
}
|
|
205
217
|
return segs;
|
|
206
218
|
}
|
|
207
|
-
eventRangeToSegs(
|
|
208
|
-
let
|
|
209
|
-
let { nextDayThreshold } = this.context.options;
|
|
210
|
-
let range = eventRange.range;
|
|
211
|
-
let allDay = eventRange.def.allDay;
|
|
219
|
+
eventRangeToSegs(fullDayEventRange, dayRanges) {
|
|
220
|
+
let fullDayRange = fullDayEventRange.range;
|
|
212
221
|
let dayIndex;
|
|
213
|
-
let segRange;
|
|
214
|
-
let seg;
|
|
215
222
|
let segs = [];
|
|
216
223
|
for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex += 1) {
|
|
217
|
-
|
|
218
|
-
if (
|
|
219
|
-
|
|
220
|
-
eventRange,
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
isStart:
|
|
224
|
-
isEnd:
|
|
224
|
+
const slicedFullDayRange = internal_cjs.intersectRanges(fullDayRange, dayRanges[dayIndex]);
|
|
225
|
+
if (slicedFullDayRange) {
|
|
226
|
+
segs.push({
|
|
227
|
+
eventRange: fullDayEventRange,
|
|
228
|
+
slicedStart: slicedFullDayRange.start,
|
|
229
|
+
slicedEnd: slicedFullDayRange.end,
|
|
230
|
+
isStart: fullDayEventRange.isStart && fullDayRange.start.valueOf() === slicedFullDayRange.start.valueOf(),
|
|
231
|
+
isEnd: fullDayEventRange.isEnd && fullDayRange.end.valueOf() === slicedFullDayRange.end.valueOf(),
|
|
225
232
|
dayIndex,
|
|
226
|
-
};
|
|
227
|
-
segs.push(seg);
|
|
228
|
-
// detect when range won't go fully into the next day,
|
|
229
|
-
// and mutate the latest seg to the be the end.
|
|
230
|
-
if (!seg.isEnd && !allDay &&
|
|
231
|
-
dayIndex + 1 < dayRanges.length &&
|
|
232
|
-
range.end <
|
|
233
|
-
dateEnv.add(dayRanges[dayIndex + 1].start, nextDayThreshold)) {
|
|
234
|
-
seg.end = range.end;
|
|
235
|
-
seg.isEnd = true;
|
|
236
|
-
break;
|
|
237
|
-
}
|
|
233
|
+
});
|
|
238
234
|
}
|
|
239
235
|
}
|
|
240
236
|
return segs;
|
|
@@ -271,4 +267,7 @@ function groupSegsByDay(segs) {
|
|
|
271
267
|
return segsByDay;
|
|
272
268
|
}
|
|
273
269
|
|
|
270
|
+
var css_248z = ":root{--fc-list-event-dot-width:10px;--fc-list-event-hover-bg-color:#f5f5f5}.fc-list-day,.fc-list-event-dot-outer,.fc-list-event-time,.fc-list-event-title{padding:8px 14px}.fc-direction-ltr .fc-list-event-dot-outer{padding-right:0}.fc-direction-rtl .fc-list-event-dot-outer{padding-left:0}.fc-list-empty{align-items:center;background-color:var(--fc-neutral-bg-color);display:flex;height:100%;justify-content:center}.fc-list-empty-inner{margin:5em 0}.fc-list-day,.fc-list-event:not(.fc-list-day-and-events:last-child .fc-list-event:last-child){border-bottom:1px solid var(--fc-border-color)}.fc-list-day-outer-sticky{background:var(--fc-page-bg-color);position:sticky;top:0}.fc-list-day{background:var(--fc-neutral-bg-color);display:flex;font-weight:700;justify-content:space-between}.fc-list-event{display:flex;flex-direction:row}a.fc-list-event{color:inherit;text-decoration:none}.fc-list-event:hover{background-color:var(--fc-list-event-hover-bg-color)}.fc-list-event-time-outer{display:flex;flex-direction:row}.fc-list-event-dot-outer,.fc-list-event-time{white-space:nowrap}.fc-list-event-dot{border:calc(var(--fc-list-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-list-event-dot-width)/2);box-sizing:content-box;display:inline-block;height:0;width:0}a.fc-list-event:hover .fc-list-event-title{text-decoration:underline}";
|
|
271
|
+
internal_cjs.injectStyles(css_248z);
|
|
272
|
+
|
|
274
273
|
exports.ListView = ListView;
|