UNPKG

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