Skip to content

Commit 2cc7929

Browse files
author
Matt Lewis
committed
feat(dayView): add tooltips to events
BREAKING CHANGE: day view events now have tooltips by default Closes #75
1 parent 72a6e41 commit 2cc7929

4 files changed

+67
-0
lines changed

src/components/day/calendarDayView.component.ts

+6
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ const SEGMENT_HEIGHT: number = 30;
3434
*ngFor="let dayEvent of view?.events"
3535
[dayEvent]="dayEvent"
3636
[hourSegments]="hourSegments"
37+
[tooltipPlacement]="tooltipPlacement"
3738
[eventSnapSize]="eventSnapSize"
3839
(eventClicked)="eventClicked.emit({event: dayEvent.event})"
3940
(eventResized)="eventTimesChanged.emit($event)">
@@ -114,6 +115,11 @@ export class CalendarDayViewComponent implements OnChanges, OnInit, OnDestroy {
114115
*/
115116
@Input() eventSnapSize: number = 30;
116117

118+
/**
119+
* The placement of the event tooltip
120+
*/
121+
@Input() tooltipPlacement: string = 'top';
122+
117123
/**
118124
* Called when an event title is clicked
119125
*/

src/components/day/calendarDayViewEvent.component.ts

+4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import addMinutes from 'date-fns/add_minutes';
1818
[class.cal-starts-within-day]="!dayEvent.startsBeforeDay"
1919
[class.cal-ends-within-day]="!dayEvent.endsAfterDay"
2020
[ngClass]="dayEvent.event.cssClass"
21+
[mwlCalendarTooltip]="dayEvent.event | calendarEventTitle:'dayTooltip'"
22+
[tooltipPlacement]="tooltipPlacement"
2123
mwlResizable
2224
[resizeEdges]="{top: dayEvent.event?.resizable?.beforeStart, bottom: dayEvent.event?.resizable?.afterEnd}"
2325
[resizeSnapGrid]="{top: eventSnapSize, bottom: eventSnapSize}"
@@ -41,6 +43,8 @@ export class CalendarDayViewEventComponent {
4143

4244
@Input() eventSnapSize: number;
4345

46+
@Input() tooltipPlacement: string;
47+
4448
@Output() eventClicked: EventEmitter<any> = new EventEmitter();
4549

4650
@Output() eventResized: EventEmitter<any> = new EventEmitter();

src/providers/calendarEventTitle.provider.ts

+4
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,8 @@ export class CalendarEventTitle {
2222
return event.title;
2323
}
2424

25+
dayTooltip(event: CalendarEvent): string {
26+
return event.title;
27+
}
28+
2529
}

test/calendarDayView.component.spec.ts

+53
Original file line numberDiff line numberDiff line change
@@ -323,4 +323,57 @@ describe('CalendarDayViewComponent component', () => {
323323
});
324324
});
325325

326+
it('should show a tooltip on mouseover of the event', () => {
327+
328+
const fixture: ComponentFixture<CalendarDayViewComponent> = TestBed.createComponent(CalendarDayViewComponent);
329+
eventTitle.dayTooltip = (event: CalendarEvent) => {
330+
return `title: ${event.title}`;
331+
};
332+
fixture.componentInstance.viewDate = new Date('2016-06-01');
333+
fixture.componentInstance.events = [{
334+
start: new Date('2016-05-30'),
335+
end: new Date('2016-06-02'),
336+
title: 'foo <b>bar</b>',
337+
color: {
338+
primary: 'blue',
339+
secondary: ''
340+
}
341+
}];
342+
fixture.componentInstance.ngOnChanges({viewDate: {}, events: {}});
343+
fixture.detectChanges();
344+
const event: HTMLElement = fixture.nativeElement.querySelector('.cal-event');
345+
triggerDomEvent('mouseenter', event);
346+
fixture.detectChanges();
347+
const tooltip: Element = document.body.querySelector('.cal-tooltip');
348+
expect(tooltip.querySelector('.cal-tooltip-inner').innerHTML).to.equal('title: foo <b>bar</b>');
349+
expect(tooltip.classList.contains('cal-tooltip-top')).to.be.true;
350+
triggerDomEvent('mouseleave', event);
351+
fixture.detectChanges();
352+
expect(document.body.querySelector('.cal-tooltip')).not.to.be.ok;
353+
354+
});
355+
356+
it('should disable the tooltip', () => {
357+
358+
const fixture: ComponentFixture<CalendarDayViewComponent> = TestBed.createComponent(CalendarDayViewComponent);
359+
eventTitle.dayTooltip = () => '';
360+
fixture.componentInstance.viewDate = new Date('2016-06-01');
361+
fixture.componentInstance.events = [{
362+
start: new Date('2016-05-30'),
363+
end: new Date('2016-06-02'),
364+
title: 'foo <b>bar</b>',
365+
color: {
366+
primary: 'blue',
367+
secondary: ''
368+
}
369+
}];
370+
fixture.componentInstance.ngOnChanges({viewDate: {}, events: {}});
371+
fixture.detectChanges();
372+
const event: HTMLElement = fixture.nativeElement.querySelector('.cal-event');
373+
triggerDomEvent('mouseenter', event);
374+
fixture.detectChanges();
375+
expect(document.body.querySelector('.cal-tooltip')).not.to.be.ok;
376+
377+
});
378+
326379
});

0 commit comments

Comments
 (0)