Skip to content

Commit 2c8a6db

Browse files
committed
feat: allow event actions template to be customised
Closes #673
1 parent fb4bbb7 commit 2c8a6db

8 files changed

+76
-15
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,38 @@
1-
import { Component, Input } from '@angular/core';
1+
import { Component, Input, TemplateRef } from '@angular/core';
22
import { CalendarEvent } from 'calendar-utils';
33
import { trackByIndex } from './util';
44

55
@Component({
66
selector: 'mwl-calendar-event-actions',
77
template: `
8-
<span *ngIf="event.actions" class="cal-event-actions">
9-
<a
10-
class="cal-event-action"
11-
href="javascript:;"
12-
*ngFor="let action of event.actions; trackBy:trackByIndex"
13-
(mwlClick)="action.onClick({event: event})"
14-
[ngClass]="action.cssClass"
15-
[innerHtml]="action.label">
16-
</a>
17-
</span>
8+
<ng-template
9+
#defaultTemplate
10+
let-event="event">
11+
<span *ngIf="event.actions" class="cal-event-actions">
12+
<a
13+
class="cal-event-action"
14+
href="javascript:;"
15+
*ngFor="let action of event.actions; trackBy:trackByIndex"
16+
(mwlClick)="action.onClick({event: event})"
17+
[ngClass]="action.cssClass"
18+
[innerHtml]="action.label">
19+
</a>
20+
</span>
21+
</ng-template>
22+
<ng-template
23+
[ngTemplateOutlet]="customTemplate || defaultTemplate"
24+
[ngTemplateOutletContext]="{
25+
event: event
26+
}">
27+
</ng-template>
1828
`
1929
})
2030
export class CalendarEventActionsComponent {
2131
@Input()
2232
event: CalendarEvent;
33+
34+
@Input()
35+
customTemplate: TemplateRef<any>;
36+
2337
trackByIndex = trackByIndex;
2438
}

src/modules/day/calendar-all-day-event.component.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ import { CalendarEvent } from 'calendar-utils';
1919
[style.backgroundColor]="event.color?.secondary"
2020
[style.borderColor]="event.color?.primary"
2121
(mwlClick)="eventClicked.emit()">
22-
<mwl-calendar-event-actions [event]="event"></mwl-calendar-event-actions>
22+
<mwl-calendar-event-actions
23+
[event]="event"
24+
[customTemplate]="eventActionsTemplate">
25+
</mwl-calendar-event-actions>
2326
&ngsp;
2427
<mwl-calendar-event-title
2528
[event]="event"
@@ -47,6 +50,9 @@ export class CalendarAllDayEventComponent {
4750
@Input()
4851
eventTitleTemplate: TemplateRef<any>;
4952

53+
@Input()
54+
eventActionsTemplate: TemplateRef<any>;
55+
5056
@Output()
5157
eventClicked: EventEmitter<any> = new EventEmitter();
5258
}

src/modules/day/calendar-day-view-event.component.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ import { PlacementArray } from 'positioning';
2828
[tooltipTemplate]="tooltipTemplate"
2929
[tooltipAppendToBody]="tooltipAppendToBody"
3030
(mwlClick)="eventClicked.emit()">
31-
<mwl-calendar-event-actions [event]="dayEvent.event"></mwl-calendar-event-actions>
31+
<mwl-calendar-event-actions
32+
[event]="dayEvent.event"
33+
[customTemplate]="eventActionsTemplate">
34+
</mwl-calendar-event-actions>
3235
&ngsp;
3336
<mwl-calendar-event-title
3437
[event]="dayEvent.event"
@@ -65,6 +68,9 @@ export class CalendarDayViewEventComponent {
6568
@Input()
6669
eventTitleTemplate: TemplateRef<any>;
6770

71+
@Input()
72+
eventActionsTemplate: TemplateRef<any>;
73+
6874
@Input()
6975
tooltipTemplate: TemplateRef<any>;
7076

src/modules/day/calendar-day-view.component.ts

+8
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ export interface DayViewEventResize {
8787
[event]="event"
8888
[customTemplate]="allDayEventTemplate"
8989
[eventTitleTemplate]="eventTitleTemplate"
90+
[eventActionsTemplate]="eventActionsTemplate"
9091
(eventClicked)="eventClicked.emit({event: event})"
9192
mwlDraggable
9293
dragActiveClass="cal-drag-active"
@@ -135,6 +136,7 @@ export interface DayViewEventResize {
135136
[tooltipAppendToBody]="tooltipAppendToBody"
136137
[customTemplate]="eventTemplate"
137138
[eventTitleTemplate]="eventTitleTemplate"
139+
[eventActionsTemplate]="eventActionsTemplate"
138140
(eventClicked)="eventClicked.emit({event: dayEvent.event})">
139141
</mwl-calendar-day-view-event>
140142
</div>
@@ -274,6 +276,12 @@ export class CalendarDayViewComponent implements OnChanges, OnInit, OnDestroy {
274276
@Input()
275277
eventTitleTemplate: TemplateRef<any>;
276278

279+
/**
280+
* A custom template to use for event actions
281+
*/
282+
@Input()
283+
eventActionsTemplate: TemplateRef<any>;
284+
277285
/**
278286
* Whether to snap events to a grid when dragging
279287
*/

src/modules/month/calendar-month-view.component.ts

+7
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ export interface CalendarMonthViewEventTimesChangedEvent<
8787
[events]="openDay?.events"
8888
[customTemplate]="openDayEventsTemplate"
8989
[eventTitleTemplate]="eventTitleTemplate"
90+
[eventActionsTemplate]="eventActionsTemplate"
9091
(eventClicked)="eventClicked.emit({event: $event.event})"
9192
mwlDroppable
9293
dragOverClass="cal-drag-over"
@@ -184,6 +185,12 @@ export class CalendarMonthViewComponent
184185
@Input()
185186
eventTitleTemplate: TemplateRef<any>;
186187

188+
/**
189+
* A custom template to use for event actions
190+
*/
191+
@Input()
192+
eventActionsTemplate: TemplateRef<any>;
193+
187194
/**
188195
* An array of day indexes (0 = sunday, 1 = monday etc) that indicate which days are weekends
189196
*/

src/modules/month/calendar-open-day-events.component.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,10 @@ export const collapseAnimation: AnimationTriggerMetadata = trigger('collapse', [
5555
(mwlClick)="eventClicked.emit({event: event})">
5656
</mwl-calendar-event-title>
5757
&ngsp;
58-
<mwl-calendar-event-actions [event]="event"></mwl-calendar-event-actions>
58+
<mwl-calendar-event-actions
59+
[event]="event"
60+
[customTemplate]="eventActionsTemplate">
61+
</mwl-calendar-event-actions>
5962
</div>
6063
</div>
6164
</ng-template>
@@ -83,6 +86,9 @@ export class CalendarOpenDayEventsComponent {
8386
@Input()
8487
eventTitleTemplate: TemplateRef<any>;
8588

89+
@Input()
90+
eventActionsTemplate: TemplateRef<any>;
91+
8692
@Output()
8793
eventClicked: EventEmitter<{ event: CalendarEvent }> = new EventEmitter<{
8894
event: CalendarEvent;

src/modules/week/calendar-week-view-event.component.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ import { PlacementArray } from 'positioning';
2929
[tooltipTemplate]="tooltipTemplate"
3030
[tooltipAppendToBody]="tooltipAppendToBody"
3131
(mwlClick)="eventClicked.emit()">
32-
<mwl-calendar-event-actions [event]="weekEvent.event"></mwl-calendar-event-actions>
32+
<mwl-calendar-event-actions
33+
[event]="weekEvent.event"
34+
[customTemplate]="eventActionsTemplate">
35+
</mwl-calendar-event-actions>
3336
&ngsp;
3437
<mwl-calendar-event-title
3538
[event]="weekEvent.event"
@@ -70,6 +73,9 @@ export class CalendarWeekViewEventComponent {
7073
@Input()
7174
eventTitleTemplate: TemplateRef<any>;
7275

76+
@Input()
77+
eventActionsTemplate: TemplateRef<any>;
78+
7379
@Input()
7480
tooltipTemplate: TemplateRef<any>;
7581

src/modules/week/calendar-week-view.component.ts

+8
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ export interface CalendarWeekViewBeforeRenderEvent extends WeekView {
147147
[tooltipAppendToBody]="tooltipAppendToBody"
148148
[customTemplate]="eventTemplate"
149149
[eventTitleTemplate]="eventTitleTemplate"
150+
[eventActionsTemplate]="eventActionsTemplate"
150151
(eventClicked)="eventClicked.emit({event: allDayEvent.event})">
151152
</mwl-calendar-week-view-event>
152153
</div>
@@ -230,6 +231,7 @@ export interface CalendarWeekViewBeforeRenderEvent extends WeekView {
230231
[tooltipDisabled]="dragActive || timeEventResizes.size > 0"
231232
[customTemplate]="eventTemplate"
232233
[eventTitleTemplate]="eventTitleTemplate"
234+
[eventActionsTemplate]="eventActionsTemplate"
233235
(eventClicked)="eventClicked.emit({event: timeEvent.event})">
234236
</mwl-calendar-week-view-event>
235237
<div
@@ -341,6 +343,12 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
341343
@Input()
342344
eventTitleTemplate: TemplateRef<any>;
343345

346+
/**
347+
* A custom template to use for event actions
348+
*/
349+
@Input()
350+
eventActionsTemplate: TemplateRef<any>;
351+
344352
/**
345353
* The precision to display events.
346354
* `days` will round event start and end dates to the nearest day and `minutes` will not do this rounding

0 commit comments

Comments
 (0)