Skip to content

Commit be4d5ee

Browse files
author
Matt Lewis
committed
feat(dayView): allow the day view event template to be customised
Closes #178
1 parent 86b8a6d commit be4d5ee

File tree

3 files changed

+59
-20
lines changed

3 files changed

+59
-20
lines changed

src/calendar.module.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { CalendarWeekViewHeaderComponent } from './components/week/calendarWeekV
1414
import { CalendarWeekViewEventComponent } from './components/week/calendarWeekViewEvent.component';
1515
import { CalendarAllDayEventComponent } from './components/day/calendarAllDayEvent.component';
1616
import { CalendarDayViewHourSegmentComponent } from './components/day/calendarDayViewHourSegment.component';
17+
import { CalendarDayViewEventComponent } from './components/day/calendarDayViewEvent.component';
1718
import { CalendarTooltipWindowComponent, CalendarTooltipDirective } from './directives/calendarTooltip.directive';
1819
import { CalendarPreviousViewDirective } from './directives/calendarPreviousView.directive';
1920
import { CalendarNextViewDirective } from './directives/calendarNextView.directive';
@@ -58,7 +59,8 @@ import { CalendarDateFormatter } from './providers/calendarDateFormatter.provide
5859
CalendarTodayDirective,
5960
CalendarDatePipe,
6061
CalendarEventTitlePipe,
61-
CalendarMonthViewHeaderComponent
62+
CalendarMonthViewHeaderComponent,
63+
CalendarDayViewEventComponent
6264
],
6365
imports: [
6466
CommonModule,
@@ -84,7 +86,8 @@ import { CalendarDateFormatter } from './providers/calendarDateFormatter.provide
8486
CalendarTodayDirective,
8587
CalendarDatePipe,
8688
CalendarEventTitlePipe,
87-
CalendarMonthViewHeaderComponent
89+
CalendarMonthViewHeaderComponent,
90+
CalendarDayViewEventComponent
8891
],
8992
entryComponents: [
9093
CalendarTooltipWindowComponent

src/components/day/calendarDayView.component.ts

+11-18
Original file line numberDiff line numberDiff line change
@@ -75,24 +75,12 @@ const SEGMENT_HEIGHT: number = 30;
7575
(dragEnd)="eventDragged(dayEvent, $event.y)"
7676
[style.marginTop.px]="dayEvent.top"
7777
[style.height.px]="dayEvent.height">
78-
<div
79-
class="cal-event"
80-
[style.marginLeft.px]="dayEvent.left + 70"
81-
[style.width.px]="dayEvent.width - 1"
82-
[style.backgroundColor]="dayEvent.event.color.secondary"
83-
[style.borderColor]="dayEvent.event.color.primary"
84-
[class.cal-starts-within-day]="!dayEvent.startsBeforeDay"
85-
[class.cal-ends-within-day]="!dayEvent.endsAfterDay"
86-
[ngClass]="dayEvent.event.cssClass"
87-
[mwlCalendarTooltip]="dayEvent.event.title | calendarEventTitle:'dayTooltip':dayEvent.event"
88-
[tooltipPlacement]="tooltipPlacement">
89-
<mwl-calendar-event-title
90-
[event]="dayEvent.event"
91-
view="day"
92-
(click)="eventClicked.emit({event: dayEvent.event})">
93-
</mwl-calendar-event-title>
94-
<mwl-calendar-event-actions [event]="dayEvent.event"></mwl-calendar-event-actions>
95-
</div>
78+
<mwl-calendar-day-view-event
79+
[dayEvent]="dayEvent"
80+
[tooltipPlacement]="tooltipPlacement"
81+
[customTemplate]="eventTemplate"
82+
(eventClicked)="eventClicked.emit({event: dayEvent.event})">
83+
</mwl-calendar-day-view-event>
9684
</div>
9785
</div>
9886
<div class="cal-hour" *ngFor="let hour of hours" [style.minWidth.px]="view?.width + 70">
@@ -191,6 +179,11 @@ export class CalendarDayViewComponent implements OnChanges, OnInit, OnDestroy {
191179
*/
192180
@Input() allDayEventTemplate: TemplateRef<any>;
193181

182+
/**
183+
* A custom template to use for day view events
184+
*/
185+
@Input() eventTemplate: TemplateRef<any>;
186+
194187
/**
195188
* Called when an event title is clicked
196189
*/
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { Component, Input, Output, EventEmitter, TemplateRef } from '@angular/core';
2+
import { DayViewEvent } from 'calendar-utils';
3+
4+
@Component({
5+
selector: 'mwl-calendar-day-view-event',
6+
template: `
7+
<ng-template #defaultTemplate>
8+
<div
9+
class="cal-event"
10+
[style.marginLeft.px]="dayEvent.left + 70"
11+
[style.width.px]="dayEvent.width - 1"
12+
[style.backgroundColor]="dayEvent.event.color.secondary"
13+
[style.borderColor]="dayEvent.event.color.primary"
14+
[class.cal-starts-within-day]="!dayEvent.startsBeforeDay"
15+
[class.cal-ends-within-day]="!dayEvent.endsAfterDay"
16+
[ngClass]="dayEvent.event.cssClass"
17+
[mwlCalendarTooltip]="dayEvent.event.title | calendarEventTitle:'dayTooltip':dayEvent.event"
18+
[tooltipPlacement]="tooltipPlacement">
19+
<mwl-calendar-event-title
20+
[event]="dayEvent.event"
21+
view="day"
22+
(click)="eventClicked.emit()">
23+
</mwl-calendar-event-title>
24+
<mwl-calendar-event-actions [event]="dayEvent.event"></mwl-calendar-event-actions>
25+
</div>
26+
</ng-template>
27+
<ng-template
28+
[ngTemplateOutlet]="customTemplate || defaultTemplate"
29+
[ngTemplateOutletContext]="{dayEvent: dayEvent, tooltipPlacement: tooltipPlacement, eventClicked: eventClicked}">
30+
</ng-template>
31+
`
32+
})
33+
export class CalendarDayViewEventComponent {
34+
35+
@Input() dayEvent: DayViewEvent;
36+
37+
@Input() tooltipPlacement: string;
38+
39+
@Input() customTemplate: TemplateRef<any>;
40+
41+
@Output() eventClicked: EventEmitter<any> = new EventEmitter();
42+
43+
}

0 commit comments

Comments
 (0)