Skip to content

Commit 9d1c983

Browse files
authored
Scheduler: Provide the SnapToCellsMode option — rerender appointments after option change (#33076)
1 parent 0305ffd commit 9d1c983

2 files changed

Lines changed: 35 additions & 0 deletions

File tree

packages/devextreme/js/__internal/scheduler/__tests__/snap_to_cells_mode.test.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,35 @@ describe('snapToCellsMode', () => {
6262
expect(appH).toEqual(DEFAULT_CELL_HEIGHT);
6363
});
6464

65+
it('changing snapToCellsMode at runtime regenerates appointment view model', async () => {
66+
const { POM, scheduler } = await createScheduler({
67+
width: 800,
68+
height: 600,
69+
views: ['day'],
70+
currentView: 'day',
71+
currentDate: new Date(2026, 2, 15),
72+
cellDuration: 30,
73+
startDayHour: 9,
74+
endDayHour: 18,
75+
dataSource: [{
76+
text: 'short',
77+
startDate: new Date(2026, 2, 15, 10, 0),
78+
endDate: new Date(2026, 2, 15, 10, 10),
79+
}],
80+
});
81+
82+
let appH = POM.getAppointment('short').getGeometry().height;
83+
84+
expect(appH).toBeLessThan(DEFAULT_CELL_HEIGHT / 2);
85+
86+
scheduler.option('snapToCellsMode', 'always');
87+
await new Promise(process.nextTick);
88+
89+
appH = POM.getAppointment('short').getGeometry().height;
90+
91+
expect(appH).toEqual(DEFAULT_CELL_HEIGHT);
92+
});
93+
6594
it('views[].snapToCellsMode always overrides default on day view', async () => {
6695
const { POM } = await createScheduler({
6796
width: 800,

packages/devextreme/js/__internal/scheduler/m_scheduler.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,12 @@ class Scheduler extends SchedulerOptionsBaseWidget {
429429
this._appointments.option('items', this._layoutManager.generateViewModel());
430430
}
431431
break;
432+
case 'snapToCellsMode':
433+
this._appointments.option('items', []);
434+
if (this.readyToRenderAppointments) {
435+
this._appointments.option('items', this._layoutManager.generateViewModel());
436+
}
437+
break;
432438
case 'tabIndex':
433439
case 'focusStateEnabled':
434440
this.updateOption('header', name, value);

0 commit comments

Comments
 (0)