diff --git a/packages/devextreme/js/__internal/scheduler/appointments/resizing/get_delta_time.test.ts b/packages/devextreme/js/__internal/scheduler/appointments/resizing/get_delta_time.test.ts index e07a51c9abf0..105231ccc356 100644 --- a/packages/devextreme/js/__internal/scheduler/appointments/resizing/get_delta_time.test.ts +++ b/packages/devextreme/js/__internal/scheduler/appointments/resizing/get_delta_time.test.ts @@ -70,7 +70,7 @@ describe('getDeltaTime', () => { }); ['timelineDay', 'timelineWeek', 'timelineWorkWeek'].forEach((view) => { - it(`should return zero for not resized appointment in horizontal ${view} view`, () => { + it(`should return cell duration delta for resized appointment in horizontal ${view} view`, () => { expect(getDeltaTime( { width: 50, height: 100 }, { width: 100, height: 100 }, diff --git a/packages/devextreme/js/__internal/scheduler/appointments/resizing/m_core.ts b/packages/devextreme/js/__internal/scheduler/appointments/resizing/m_core.ts index a235bc0515b4..973229e1601c 100644 --- a/packages/devextreme/js/__internal/scheduler/appointments/resizing/m_core.ts +++ b/packages/devextreme/js/__internal/scheduler/appointments/resizing/m_core.ts @@ -31,7 +31,7 @@ const getCellData = ( // NOTE: All day appointments occupy day if they start at the beginning of the day, // but long appointments are not. So for all day appointments endDate === startDate, // for long appointments endDate = startDate + 1 day. - if (!isAllDay) { + if (!isAllDay && isOccupiedAllDay) { cellData.endDate = dateUtilsTs.addOffsets(cellData.startDate, toMs('day')); } diff --git a/packages/devextreme/js/__internal/scheduler/m_subscribes.ts b/packages/devextreme/js/__internal/scheduler/m_subscribes.ts index 93f5f76ba0ea..408a9b717549 100644 --- a/packages/devextreme/js/__internal/scheduler/m_subscribes.ts +++ b/packages/devextreme/js/__internal/scheduler/m_subscribes.ts @@ -25,11 +25,14 @@ const isAllDay = ( ): boolean => { const adapter = new AppointmentAdapter(appointmentData, scheduler._dataAccessors); - if (VERTICAL_VIEW_TYPES.includes(scheduler.currentView.type)) { - return isAppointmentTakesAllDay(adapter, scheduler.option('allDayPanelMode')); + if (!VERTICAL_VIEW_TYPES.includes(scheduler.currentView.type)) { + return adapter.allDay; } - return adapter.allDay; + return isAppointmentTakesAllDay( + adapter, + scheduler.getViewOption('allDayPanelMode'), + ); }; const subscribes = { diff --git a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/generate_grid_view_model.ts b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/generate_grid_view_model.ts index b3d23b419944..eebe41bb1b93 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/generate_grid_view_model.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/generate_grid_view_model.ts @@ -22,6 +22,7 @@ export const sortAppointments = ( ): SortedEntity[] => { const { isMonthView, + isTimelineView, hasAllDayPanel, snapToCellsMode, viewOffset, @@ -35,7 +36,7 @@ export const sortAppointments = ( sortByStartDate(group); const innerStep0 = isMonthView || panelName === 'allDayPanel' ? expandAllDayAllDayPanel(group, endDayHour, viewOffset) - : expandAllDayRegularPanel(group); + : expandAllDayRegularPanel(group, isTimelineView); const innerStep1 = splitByParts(innerStep0, optionManager.getSplitIntervals(panelName)); sortByDuration(innerStep1); sortByStartDate(innerStep1); diff --git a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/steps/expand_all_day.test.ts b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/steps/expand_all_day.test.ts index 789c5eec5e6a..9efa53d55964 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/steps/expand_all_day.test.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/steps/expand_all_day.test.ts @@ -98,13 +98,19 @@ describe('expandAllDay', () => { ]); }); - it('should set +1 day from end date to all day appointment', () => { + it('should keep dates of all day appointment with duration', () => { expect(expandAllDayRegularPanel([ { allDay: true, - startDateUTC: Date.UTC(2020, 0, 10), - endDateUTC: Date.UTC(2020, 0, 10), + startDateUTC: Date.UTC(2020, 0, 10, 4), + endDateUTC: Date.UTC(2020, 0, 11, 5), }, { + allDay: true, + startDateUTC: Date.UTC(2020, 0, 11, 23), + endDateUTC: Date.UTC(2020, 0, 12), + }, + ])).toEqual([ + { allDay: true, startDateUTC: Date.UTC(2020, 0, 10, 4), endDateUTC: Date.UTC(2020, 0, 11, 5), @@ -113,12 +119,22 @@ describe('expandAllDay', () => { startDateUTC: Date.UTC(2020, 0, 11, 23), endDateUTC: Date.UTC(2020, 0, 12), }, - ])).toEqual([ + ]); + }); + + it('should expand all day appointment with duration on timeline view', () => { + expect(expandAllDayRegularPanel([ { allDay: true, - startDateUTC: Date.UTC(2020, 0, 10), - endDateUTC: Date.UTC(2020, 0, 11), + startDateUTC: Date.UTC(2020, 0, 10, 4), + endDateUTC: Date.UTC(2020, 0, 11, 5), }, { + allDay: true, + startDateUTC: Date.UTC(2020, 0, 11, 23), + endDateUTC: Date.UTC(2020, 0, 12), + }, + ], true)).toEqual([ + { allDay: true, startDateUTC: Date.UTC(2020, 0, 10, 4), endDateUTC: Date.UTC(2020, 0, 12, 4), @@ -129,5 +145,21 @@ describe('expandAllDay', () => { }, ]); }); + + it('should set +1 day from end date to zero-duration all day appointment', () => { + expect(expandAllDayRegularPanel([ + { + allDay: true, + startDateUTC: Date.UTC(2020, 0, 10), + endDateUTC: Date.UTC(2020, 0, 10), + }, + ])).toEqual([ + { + allDay: true, + startDateUTC: Date.UTC(2020, 0, 10), + endDateUTC: Date.UTC(2020, 0, 11), + }, + ]); + }); }); }); diff --git a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/steps/expand_all_day.ts b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/steps/expand_all_day.ts index 99c414167557..e8b1b39bfda9 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/steps/expand_all_day.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/steps/expand_all_day.ts @@ -74,11 +74,16 @@ export const expandAllDayAllDayPanel = >( entities: T[], + isTimelineView = false, ): T[] => entities.map((entity) => { if (!entity.allDay) { return entity; } + if (!isTimelineView && entity.endDateUTC > entity.startDateUTC) { + return entity; + } + const startDate = new Date(entity.startDateUTC); const endDate = new Date(entity.endDateUTC); endDate.setDate(endDate.getDate() + 1);