Skip to content

Commit b31e35b

Browse files
committed
fix(week-view): update event title time when dragging and resizing
Fixes #1238
1 parent 1b81353 commit b31e35b

File tree

3 files changed

+56
-7
lines changed

3 files changed

+56
-7
lines changed

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

+5-5
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ import { PlacementArray } from 'positioning';
3838
? (weekEvent.event.title
3939
| calendarEventTitle
4040
: (daysInWeek === 1 ? 'dayTooltip' : 'weekTooltip')
41-
: weekEvent.event)
41+
: weekEvent.tempEvent || weekEvent.event)
4242
: ''
4343
"
4444
[tooltipPlacement]="tooltipPlacement"
45-
[tooltipEvent]="weekEvent.event"
45+
[tooltipEvent]="weekEvent.tempEvent || weekEvent.event"
4646
[tooltipTemplate]="tooltipTemplate"
4747
[tooltipAppendToBody]="tooltipAppendToBody"
4848
[tooltipDelay]="tooltipDelay"
@@ -51,18 +51,18 @@ import { PlacementArray } from 'positioning';
5151
tabindex="0"
5252
role="application"
5353
[attr.aria-label]="
54-
{ event: weekEvent.event, locale: locale }
54+
{ event: weekEvent.tempEvent || weekEvent.event, locale: locale }
5555
| calendarA11y: 'eventDescription'
5656
"
5757
>
5858
<mwl-calendar-event-actions
59-
[event]="weekEvent.event"
59+
[event]="weekEvent.tempEvent || weekEvent.event"
6060
[customTemplate]="eventActionsTemplate"
6161
>
6262
</mwl-calendar-event-actions>
6363
&ngsp;
6464
<mwl-calendar-event-title
65-
[event]="weekEvent.event"
65+
[event]="weekEvent.tempEvent || weekEvent.event"
6666
[customTemplate]="eventTitleTemplate"
6767
[view]="daysInWeek === 1 ? 'day' : 'week'"
6868
>

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

+5-2
Original file line numberDiff line numberDiff line change
@@ -1215,17 +1215,20 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
12151215
if (existingColumnEvent) {
12161216
// restore the original event so trackBy kicks in and the dom isn't changed
12171217
existingColumnEvent.event = originalEvent;
1218+
existingColumnEvent['tempEvent'] = adjustedEvent;
12181219
} else {
12191220
// add a dummy event to the drop so if the event was removed from the original column the drag doesn't end early
1220-
column.events.push({
1221+
const event = {
12211222
event: originalEvent,
12221223
left: 0,
12231224
top: 0,
12241225
height: 0,
12251226
width: 0,
12261227
startsBeforeDay: false,
12271228
endsAfterDay: false,
1228-
});
1229+
tempEvent: adjustedEvent,
1230+
};
1231+
column.events.push(event);
12291232
}
12301233
});
12311234
});

projects/angular-calendar/test/calendar-week-view.component.spec.ts

+46
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import { adapterFactory } from '../src/date-adapters/date-fns';
2929
import { Component } from '@angular/core';
3030
import { By } from '@angular/platform-browser';
3131
import * as fakeTimers from '@sinonjs/fake-timers';
32+
import { formatDate } from '@angular/common';
3233

3334
@Component({
3435
template: `
@@ -2445,6 +2446,51 @@ describe('calendarWeekView component', () => {
24452446
expect(eventDropped).to.have.been.calledOnce;
24462447
});
24472448

2449+
it('should update event times when dragging', () => {
2450+
const fixture: ComponentFixture<CalendarWeekViewComponent> = TestBed.createComponent(
2451+
CalendarWeekViewComponent
2452+
);
2453+
eventTitle.week = ({ start, end }: CalendarEvent) => {
2454+
return (
2455+
formatDate(start, 'H:mm', 'en') + ' - ' + formatDate(end, 'H:mm', 'en')
2456+
);
2457+
};
2458+
fixture.componentInstance.viewDate = new Date('2018-07-29');
2459+
const originalEvent = {
2460+
start: moment(new Date('2018-07-29'))
2461+
.startOf('day')
2462+
.add(3, 'hours')
2463+
.toDate(),
2464+
end: moment(new Date('2018-07-29'))
2465+
.startOf('day')
2466+
.add(5, 'hours')
2467+
.toDate(),
2468+
title: 'foo',
2469+
draggable: true,
2470+
};
2471+
fixture.componentInstance.events = [originalEvent];
2472+
fixture.componentInstance.ngOnChanges({ viewDate: {}, events: {} });
2473+
fixture.detectChanges();
2474+
document.body.appendChild(fixture.nativeElement);
2475+
const event = fixture.nativeElement.querySelector('.cal-event-container');
2476+
const rect: ClientRect = event.getBoundingClientRect();
2477+
triggerDomEvent('mousedown', event, {
2478+
clientX: rect.right,
2479+
clientY: rect.bottom,
2480+
button: 0,
2481+
});
2482+
fixture.detectChanges();
2483+
triggerDomEvent('mousemove', event, {
2484+
clientX: rect.right,
2485+
clientY: rect.bottom + 95,
2486+
});
2487+
fixture.detectChanges();
2488+
const updatedEvent1 = fixture.nativeElement.querySelector(
2489+
'.cal-event-container'
2490+
);
2491+
expect(updatedEvent1.innerText).to.equal('4:30 - 6:30');
2492+
});
2493+
24482494
describe('current time marker', () => {
24492495
let clock: any;
24502496
beforeEach(() => {

0 commit comments

Comments
 (0)