Skip to content

Commit 4603e6b

Browse files
author
Matt Lewis
committed
feat(monthView): allow the cell templates to be customised
1 parent 53db16b commit 4603e6b

File tree

2 files changed

+42
-20
lines changed

2 files changed

+42
-20
lines changed

src/components/month/calendarMonthCell.component.ts

+36-20
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,43 @@
1-
import { Component, Input, Output, EventEmitter } from '@angular/core';
1+
import { Component, Input, Output, EventEmitter, TemplateRef } from '@angular/core';
22
import { MonthViewDay, CalendarEvent } from 'calendar-utils';
33

44
@Component({
55
selector: 'mwl-calendar-month-cell',
66
template: `
7-
<div class="cal-cell-top">
8-
<span class="cal-day-badge" *ngIf="day.badgeTotal > 0">{{ day.badgeTotal }}</span>
9-
<span class="cal-day-number">{{ day.date | calendarDate:'monthViewDayNumber':locale }}</span>
10-
</div>
11-
<div class="cal-events">
12-
<div
13-
class="cal-event"
14-
*ngFor="let event of day.events"
15-
[style.backgroundColor]="event.color.primary"
16-
[ngClass]="event?.cssClass"
17-
(mouseenter)="highlightDay.emit({event: event})"
18-
(mouseleave)="unhighlightDay.emit({event: event})"
19-
[mwlCalendarTooltip]="event.title | calendarEventTitle:'monthTooltip':event"
20-
[tooltipPlacement]="tooltipPlacement"
21-
mwlDraggable
22-
[dropData]="{event: event}"
23-
[dragAxis]="{x: event.draggable, y: event.draggable}"
24-
(click)="$event.stopPropagation(); eventClicked.emit({event: event})">
7+
<template #defaultTemplate>
8+
<div class="cal-cell-top">
9+
<span class="cal-day-badge" *ngIf="day.badgeTotal > 0">{{ day.badgeTotal }}</span>
10+
<span class="cal-day-number">{{ day.date | calendarDate:'monthViewDayNumber':locale }}</span>
2511
</div>
26-
</div>
12+
<div class="cal-events">
13+
<div
14+
class="cal-event"
15+
*ngFor="let event of day.events"
16+
[style.backgroundColor]="event.color.primary"
17+
[ngClass]="event?.cssClass"
18+
(mouseenter)="highlightDay.emit({event: event})"
19+
(mouseleave)="unhighlightDay.emit({event: event})"
20+
[mwlCalendarTooltip]="event.title | calendarEventTitle:'monthTooltip':event"
21+
[tooltipPlacement]="tooltipPlacement"
22+
mwlDraggable
23+
[dropData]="{event: event}"
24+
[dragAxis]="{x: event.draggable, y: event.draggable}"
25+
(click)="$event.stopPropagation(); eventClicked.emit({event: event})">
26+
</div>
27+
</div>
28+
</template>
29+
<template
30+
[ngTemplateOutlet]="customTemplate || defaultTemplate"
31+
[ngOutletContext]="{
32+
day: day,
33+
openDay: openDay,
34+
locale: locale,
35+
tooltipPlacement: tooltipPlacement,
36+
highlightDay: highlightDay,
37+
unhighlightDay: unhighlightDay,
38+
eventClicked: eventClicked
39+
}">
40+
</template>
2741
`,
2842
host: {
2943
'[class]': '"cal-cell cal-day-cell " + day?.cssClass',
@@ -48,6 +62,8 @@ export class CalendarMonthCellComponent {
4862

4963
@Input() tooltipPlacement: string;
5064

65+
@Input() customTemplate: TemplateRef<any>;
66+
5167
@Output() highlightDay: EventEmitter<any> = new EventEmitter();
5268

5369
@Output() unhighlightDay: EventEmitter<any> = new EventEmitter();

src/components/month/calendarMonthView.component.ts

+6
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ import { CalendarEventTimesChangedEvent } from '../../interfaces/calendarEventTi
6161
[openDay]="openDay"
6262
[locale]="locale"
6363
[tooltipPlacement]="tooltipPlacement"
64+
[customTemplate]="cellTemplate"
6465
(click)="dayClicked.emit({day: day})"
6566
(highlightDay)="toggleDayHighlight($event.event, true)"
6667
(unhighlightDay)="toggleDayHighlight($event.event, false)"
@@ -134,6 +135,11 @@ export class CalendarMonthViewComponent implements OnChanges, OnInit, OnDestroy
134135
*/
135136
@Input() headerTemplate: TemplateRef<any>;
136137

138+
/**
139+
* A custom template to use to replace the day cell
140+
*/
141+
@Input() cellTemplate: TemplateRef<any>;
142+
137143
/**
138144
* Called when the day cell is clicked
139145
*/

0 commit comments

Comments
 (0)