UNPKG

11.1 kBTypeScriptView Raw
1import { EventEmitter, ChangeDetectorRef, OnChanges, OnInit, OnDestroy, TemplateRef } from '@angular/core';
2import { Subject, Subscription } from 'rxjs';
3import { WeekDay, CalendarEvent, WeekViewAllDayEvent, WeekView, WeekViewHourColumn, WeekViewTimeEvent, WeekViewHourSegment, WeekViewHour, WeekViewAllDayEventRow } from 'calendar-utils';
4import { ResizeEvent } from 'angular-resizable-element';
5import { CalendarEventTimesChangedEvent } from '../common/calendar-event-times-changed-event.interface';
6import { CalendarUtils } from '../common/calendar-utils.provider';
7import { DateAdapter } from '../../date-adapters/date-adapter';
8import { DragEndEvent, DropEvent, DragMoveEvent, ValidateDrag } from 'angular-draggable-droppable';
9import { PlacementArray } from 'positioning';
10export interface WeekViewAllDayEventResize {
11 originalOffset: number;
12 originalSpan: number;
13 edge: string;
14}
15export interface CalendarWeekViewBeforeRenderEvent extends WeekView {
16 header: WeekDay[];
17}
18/**
19 * Shows all events on a given week. Example usage:
20 *
21 * ```typescript
22 * <mwl-calendar-week-view
23 * [viewDate]="viewDate"
24 * [events]="events">
25 * </mwl-calendar-week-view>
26 * ```
27 */
28export declare class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
29 protected cdr: ChangeDetectorRef;
30 protected utils: CalendarUtils;
31 protected dateAdapter: DateAdapter;
32 /**
33 * The current view date
34 */
35 viewDate: Date;
36 /**
37 * An array of events to display on view
38 * The schema is available here: https://github.com/mattlewis92/calendar-utils/blob/c51689985f59a271940e30bc4e2c4e1fee3fcb5c/src/calendarUtils.ts#L49-L63
39 */
40 events: CalendarEvent[];
41 /**
42 * An array of day indexes (0 = sunday, 1 = monday etc) that will be hidden on the view
43 */
44 excludeDays: number[];
45 /**
46 * An observable that when emitted on will re-render the current view
47 */
48 refresh: Subject<any>;
49 /**
50 * The locale used to format dates
51 */
52 locale: string;
53 /**
54 * The placement of the event tooltip
55 */
56 tooltipPlacement: PlacementArray;
57 /**
58 * A custom template to use for the event tooltips
59 */
60 tooltipTemplate: TemplateRef<any>;
61 /**
62 * Whether to append tooltips to the body or next to the trigger element
63 */
64 tooltipAppendToBody: boolean;
65 /**
66 * The delay in milliseconds before the tooltip should be displayed. If not provided the tooltip
67 * will be displayed immediately.
68 */
69 tooltipDelay: number | null;
70 /**
71 * The start number of the week.
72 * This is ignored when the `daysInWeek` input is also set as the `viewDate` will be used as the start of the week instead.
73 * Note, you should also pass this to the calendar title pipe so it shows the same days: {{ viewDate | calendarDate:(view + 'ViewTitle'):locale:weekStartsOn }}
74 * If using the moment date adapter this option won't do anything and you'll need to set it globally like so:
75 * ```
76 * moment.updateLocale('en', {
77 * week: {
78 * dow: 1, // set start of week to monday instead
79 * doy: 0,
80 * },
81 * });
82 * ```
83 */
84 weekStartsOn: number;
85 /**
86 * A custom template to use to replace the header
87 */
88 headerTemplate: TemplateRef<any>;
89 /**
90 * A custom template to use for week view events
91 */
92 eventTemplate: TemplateRef<any>;
93 /**
94 * A custom template to use for event titles
95 */
96 eventTitleTemplate: TemplateRef<any>;
97 /**
98 * A custom template to use for event actions
99 */
100 eventActionsTemplate: TemplateRef<any>;
101 /**
102 * The precision to display events.
103 * `days` will round event start and end dates to the nearest day and `minutes` will not do this rounding
104 */
105 precision: 'days' | 'minutes';
106 /**
107 * An array of day indexes (0 = sunday, 1 = monday etc) that indicate which days are weekends
108 */
109 weekendDays: number[];
110 /**
111 * Whether to snap events to a grid when dragging
112 */
113 snapDraggedEvents: boolean;
114 /**
115 * The number of segments in an hour. Must divide equally into 60.
116 */
117 hourSegments: number;
118 /**
119 * The height in pixels of each hour segment
120 */
121 hourSegmentHeight: number;
122 /**
123 * The day start hours in 24 hour time. Must be 0-23
124 */
125 dayStartHour: number;
126 /**
127 * The day start minutes. Must be 0-59
128 */
129 dayStartMinute: number;
130 /**
131 * The day end hours in 24 hour time. Must be 0-23
132 */
133 dayEndHour: number;
134 /**
135 * The day end minutes. Must be 0-59
136 */
137 dayEndMinute: number;
138 /**
139 * A custom template to use to replace the hour segment
140 */
141 hourSegmentTemplate: TemplateRef<any>;
142 /**
143 * The grid size to snap resizing and dragging of hourly events to
144 */
145 eventSnapSize: number;
146 /**
147 * A custom template to use for the all day events label text
148 */
149 allDayEventsLabelTemplate: TemplateRef<any>;
150 /**
151 * The number of days in a week. Can be used to create a shorter or longer week view.
152 * The first day of the week will always be the `viewDate` and `weekStartsOn` if set will be ignored
153 */
154 daysInWeek: number;
155 /**
156 * A custom template to use for the current time marker
157 */
158 currentTimeMarkerTemplate: TemplateRef<any>;
159 /**
160 * Called when a header week day is clicked. Adding a `cssClass` property on `$event.day` will add that class to the header element
161 */
162 dayHeaderClicked: EventEmitter<{
163 day: WeekDay;
164 sourceEvent: MouseEvent;
165 }>;
166 /**
167 * Called when the event title is clicked
168 */
169 eventClicked: EventEmitter<{
170 event: CalendarEvent<any>;
171 sourceEvent: any;
172 }>;
173 /**
174 * Called when an event is resized or dragged and dropped
175 */
176 eventTimesChanged: EventEmitter<CalendarEventTimesChangedEvent<any>>;
177 /**
178 * An output that will be called before the view is rendered for the current week.
179 * If you add the `cssClass` property to a day in the header it will add that class to the cell element in the template
180 */
181 beforeViewRender: EventEmitter<CalendarWeekViewBeforeRenderEvent>;
182 /**
183 * Called when an hour segment is clicked
184 */
185 hourSegmentClicked: EventEmitter<{
186 date: Date;
187 sourceEvent: MouseEvent;
188 }>;
189 /**
190 * @hidden
191 */
192 days: WeekDay[];
193 /**
194 * @hidden
195 */
196 view: WeekView;
197 /**
198 * @hidden
199 */
200 refreshSubscription: Subscription;
201 /**
202 * @hidden
203 */
204 allDayEventResizes: Map<WeekViewAllDayEvent, WeekViewAllDayEventResize>;
205 /**
206 * @hidden
207 */
208 timeEventResizes: Map<CalendarEvent, ResizeEvent>;
209 /**
210 * @hidden
211 */
212 eventDragEnterByType: {
213 allDay: number;
214 time: number;
215 };
216 /**
217 * @hidden
218 */
219 dragActive: boolean;
220 /**
221 * @hidden
222 */
223 dragAlreadyMoved: boolean;
224 /**
225 * @hidden
226 */
227 validateDrag: ValidateDrag;
228 /**
229 * @hidden
230 */
231 validateResize: (args: any) => boolean;
232 /**
233 * @hidden
234 */
235 dayColumnWidth: number;
236 /**
237 * @hidden
238 */
239 calendarId: symbol;
240 /**
241 * @hidden
242 */
243 lastDraggedEvent: CalendarEvent;
244 /**
245 * @hidden
246 */
247 trackByWeekDayHeaderDate: (index: number, day: WeekDay) => string;
248 /**
249 * @hidden
250 */
251 trackByHourSegment: (index: number, segment: WeekViewHourSegment) => string;
252 /**
253 * @hidden
254 */
255 trackByHour: (index: number, hour: WeekViewHour) => string;
256 /**
257 * @hidden
258 */
259 trackByWeekAllDayEvent: (index: number, weekEvent: WeekViewAllDayEvent) => string | number | CalendarEvent<any>;
260 /**
261 * @hidden
262 */
263 trackByWeekTimeEvent: (index: number, weekEvent: WeekViewTimeEvent) => string | number | CalendarEvent<any>;
264 /**
265 * @hidden
266 */
267 private lastDragEnterDate;
268 /**
269 * @hidden
270 */
271 constructor(cdr: ChangeDetectorRef, utils: CalendarUtils, locale: string, dateAdapter: DateAdapter);
272 /**
273 * @hidden
274 */
275 trackByHourColumn: (index: number, column: WeekViewHourColumn) => string | WeekViewHourColumn;
276 /**
277 * @hidden
278 */
279 trackById: (index: number, row: WeekViewAllDayEventRow) => string;
280 /**
281 * @hidden
282 */
283 ngOnInit(): void;
284 /**
285 * @hidden
286 */
287 ngOnChanges(changes: any): void;
288 /**
289 * @hidden
290 */
291 ngOnDestroy(): void;
292 /**
293 * @hidden
294 */
295 timeEventResizeStarted(eventsContainer: HTMLElement, timeEvent: WeekViewTimeEvent, resizeEvent: ResizeEvent): void;
296 /**
297 * @hidden
298 */
299 timeEventResizing(timeEvent: WeekViewTimeEvent, resizeEvent: ResizeEvent): void;
300 /**
301 * @hidden
302 */
303 timeEventResizeEnded(timeEvent: WeekViewTimeEvent): void;
304 /**
305 * @hidden
306 */
307 allDayEventResizeStarted(allDayEventsContainer: HTMLElement, allDayEvent: WeekViewAllDayEvent, resizeEvent: ResizeEvent): void;
308 /**
309 * @hidden
310 */
311 allDayEventResizing(allDayEvent: WeekViewAllDayEvent, resizeEvent: ResizeEvent, dayWidth: number): void;
312 /**
313 * @hidden
314 */
315 allDayEventResizeEnded(allDayEvent: WeekViewAllDayEvent): void;
316 /**
317 * @hidden
318 */
319 getDayColumnWidth(eventRowContainer: HTMLElement): number;
320 /**
321 * @hidden
322 */
323 dateDragEnter(date: Date): void;
324 /**
325 * @hidden
326 */
327 eventDropped(dropEvent: DropEvent<{
328 event?: CalendarEvent;
329 calendarId?: symbol;
330 }>, date: Date, allDay: boolean): void;
331 /**
332 * @hidden
333 */
334 dragEnter(type: 'allDay' | 'time'): void;
335 /**
336 * @hidden
337 */
338 dragLeave(type: 'allDay' | 'time'): void;
339 /**
340 * @hidden
341 */
342 dragStarted(eventsContainer: HTMLElement, event: HTMLElement, dayEvent?: WeekViewTimeEvent): void;
343 /**
344 * @hidden
345 */
346 dragMove(dayEvent: WeekViewTimeEvent, dragEvent: DragMoveEvent): void;
347 /**
348 * @hidden
349 */
350 allDayEventDragMove(): void;
351 /**
352 * @hidden
353 */
354 dragEnded(weekEvent: WeekViewAllDayEvent | WeekViewTimeEvent, dragEndEvent: DragEndEvent, dayWidth: number, useY?: boolean): void;
355 protected refreshHeader(): void;
356 protected refreshBody(): void;
357 protected refreshAll(): void;
358 protected emitBeforeViewRender(): void;
359 protected getWeekView(events: CalendarEvent[]): WeekView;
360 protected getDragMovedEventTimes(weekEvent: WeekViewAllDayEvent | WeekViewTimeEvent, dragEndEvent: DragEndEvent | DragMoveEvent, dayWidth: number, useY: boolean): {
361 start: Date;
362 end: Date;
363 };
364 protected restoreOriginalEvents(tempEvents: CalendarEvent[], adjustedEvents: Map<CalendarEvent, CalendarEvent>, snapDraggedEvents?: boolean): void;
365 protected getTimeEventResizedDates(calendarEvent: CalendarEvent, resizeEvent: ResizeEvent): {
366 start: Date;
367 end: Date;
368 };
369 protected resizeStarted(eventsContainer: HTMLElement, minWidth?: number): void;
370}