Skip to content

Commit 5fe384d

Browse files
committed
fix(week-view): preserve css classes on segments when dragging events
Fixes #908
1 parent e1c321c commit 5fe384d

File tree

2 files changed

+66
-2
lines changed

2 files changed

+66
-2
lines changed

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

+8-1
Original file line numberDiff line numberDiff line change
@@ -1059,11 +1059,18 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
10591059
tempEvents: CalendarEvent[],
10601060
adjustedEvents: Map<CalendarEvent, CalendarEvent>
10611061
) {
1062+
const previousView = this.view;
10621063
this.view = this.getWeekView(tempEvents);
10631064
const adjustedEventsArray = tempEvents.filter(event =>
10641065
adjustedEvents.has(event)
10651066
);
1066-
this.view.hourColumns.forEach(column => {
1067+
this.view.hourColumns.forEach((column, columnIndex) => {
1068+
previousView.hourColumns[columnIndex].hours.forEach((hour, hourIndex) => {
1069+
hour.segments.forEach((segment, segmentIndex) => {
1070+
column.hours[hourIndex].segments[segmentIndex].cssClass =
1071+
segment.cssClass;
1072+
});
1073+
});
10671074
adjustedEventsArray.forEach(adjustedEvent => {
10681075
const originalEvent = adjustedEvents.get(adjustedEvent);
10691076
const existingColumnEvent = column.events.find(

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

+58-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ import {
1717
CalendarEventTimesChangedEvent,
1818
DAYS_OF_WEEK,
1919
CalendarWeekViewComponent,
20-
DateAdapter
20+
DateAdapter,
21+
CalendarWeekViewBeforeRenderEvent
2122
} from '../src';
2223
import { DragAndDropModule } from 'angular-draggable-droppable';
2324
import { Subject } from 'rxjs';
@@ -2046,4 +2047,60 @@ describe('calendarWeekView component', () => {
20462047
fixture.detectChanges();
20472048
fixture.destroy();
20482049
});
2050+
2051+
it('should preserve css classes on hour segments when dragging an event', () => {
2052+
const fixture: ComponentFixture<
2053+
CalendarWeekViewComponent
2054+
> = TestBed.createComponent(CalendarWeekViewComponent);
2055+
fixture.componentInstance.viewDate = new Date('2018-07-29');
2056+
fixture.componentInstance.events = [
2057+
{
2058+
start: moment(new Date('2018-07-29'))
2059+
.startOf('day')
2060+
.add(3, 'days')
2061+
.toDate(),
2062+
title: 'bar',
2063+
draggable: true
2064+
}
2065+
];
2066+
fixture.componentInstance.beforeViewRender.subscribe(
2067+
(view: CalendarWeekViewBeforeRenderEvent) => {
2068+
view.hourColumns.forEach(column => {
2069+
column.hours.forEach(hour => {
2070+
hour.segments.forEach(segment => {
2071+
segment.cssClass = 'disabled-cell';
2072+
});
2073+
});
2074+
});
2075+
}
2076+
);
2077+
fixture.componentInstance.ngOnChanges({ viewDate: {}, events: {} });
2078+
fixture.detectChanges();
2079+
expect(
2080+
fixture.nativeElement
2081+
.querySelector('.cal-hour-segment')
2082+
.classList.contains('disabled-cell')
2083+
).to.be.true;
2084+
document.body.appendChild(fixture.nativeElement);
2085+
const events = fixture.nativeElement.querySelectorAll(
2086+
'.cal-event-container'
2087+
);
2088+
const dayWidth: number = events[0].parentElement.offsetWidth;
2089+
const rect: ClientRect = events[0].getBoundingClientRect();
2090+
triggerDomEvent('mousedown', events[0], {
2091+
clientX: rect.right,
2092+
clientY: rect.bottom
2093+
});
2094+
fixture.detectChanges();
2095+
triggerDomEvent('mousemove', events[0], {
2096+
clientX: rect.right + dayWidth - 5,
2097+
clientY: rect.bottom + 95
2098+
});
2099+
fixture.detectChanges();
2100+
expect(
2101+
fixture.nativeElement
2102+
.querySelector('.cal-hour-segment')
2103+
.classList.contains('disabled-cell')
2104+
).to.be.true;
2105+
});
20492106
});

0 commit comments

Comments
 (0)