Skip to content

Commit 2f484c4

Browse files
Merge branch '26_1' into 26_1_demos_deploy_ghp
2 parents 55754ae + 9a291f0 commit 2f484c4

26 files changed

Lines changed: 135 additions & 216 deletions

packages/devextreme/js/__internal/scheduler/__tests__/workspace.base.test.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@ import { getResourceManagerMock } from '../__mock__/resource_manager.mock';
77
import SchedulerTimelineDay from '../workspaces/m_timeline_day';
88
import SchedulerTimelineMonth from '../workspaces/m_timeline_month';
99
import SchedulerTimelineWeek from '../workspaces/m_timeline_week';
10-
import SchedulerTimelineWorkWeek from '../workspaces/m_timeline_work_week';
1110
import type SchedulerWorkSpace from '../workspaces/m_work_space';
1211
import SchedulerWorkSpaceDay from '../workspaces/m_work_space_day';
1312
import SchedulerWorkSpaceMonth from '../workspaces/m_work_space_month';
1413
import SchedulerWorkSpaceWeek from '../workspaces/m_work_space_week';
15-
import SchedulerWorkSpaceWorkWeek from '../workspaces/m_work_space_work_week';
1614
import { setupSchedulerTestEnvironment } from './__mock__/m_mock_scheduler';
1715

1816
jest.mock('@ts/core/m_devices', () => {
@@ -67,11 +65,11 @@ const workSpaces: {
6765
}[] = [
6866
{ currentView: 'day', WorkSpace: SchedulerWorkSpaceDay },
6967
{ currentView: 'week', WorkSpace: SchedulerWorkSpaceWeek },
70-
{ currentView: 'workWeek', WorkSpace: SchedulerWorkSpaceWorkWeek },
68+
{ currentView: 'workWeek', WorkSpace: SchedulerWorkSpaceWeek },
7169
{ currentView: 'month', WorkSpace: SchedulerWorkSpaceMonth },
7270
{ currentView: 'timelineDay', WorkSpace: SchedulerTimelineDay },
7371
{ currentView: 'timelineWeek', WorkSpace: SchedulerTimelineWeek },
74-
{ currentView: 'timelineWorkWeek', WorkSpace: SchedulerTimelineWorkWeek },
72+
{ currentView: 'timelineWorkWeek', WorkSpace: SchedulerTimelineWeek },
7573
{ currentView: 'timelineMonth', WorkSpace: SchedulerTimelineMonth },
7674
];
7775

@@ -210,7 +208,7 @@ describe('scheduler workspace skipped days support', () => {
210208
});
211209

212210
it('should use full week layout for work week when skippedDays override is empty', () => {
213-
const { workspace } = createWorkspace(SchedulerWorkSpaceWorkWeek, 'workWeek', {
211+
const { workspace } = createWorkspace(SchedulerWorkSpaceWeek, 'workWeek', {
214212
currentDate: new Date(2026, 3, 1), // Wednesday
215213
firstDayOfWeek: 0, // Sunday
216214
skippedDays: [],
@@ -221,7 +219,7 @@ describe('scheduler workspace skipped days support', () => {
221219
});
222220

223221
it('should use custom skippedDays in work week runtime layout', () => {
224-
const { workspace } = createWorkspace(SchedulerWorkSpaceWorkWeek, 'workWeek', {
222+
const { workspace } = createWorkspace(SchedulerWorkSpaceWeek, 'workWeek', {
225223
currentDate: new Date(2026, 3, 1), // Wednesday
226224
firstDayOfWeek: 0, // Sunday
227225
skippedDays: [3], // Wednesday

packages/devextreme/js/__internal/scheduler/header/m_utils.test.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,11 @@ describe('day hiddenWeekDays support in header utils', () => {
6060
});
6161
});
6262

63-
describe('workWeek hiddenWeekDays support in header utils', () => {
64-
it('should keep Mon-Fri caption for default skippedDays', () => {
63+
describe('week hiddenWeekDays support in header utils', () => {
64+
it('should keep Mon-Fri caption for weekend skippedDays', () => {
6565
expect(getCaptionInterval({
6666
date: new Date(2026, 3, 8), // Wednesday
67-
step: 'workWeek',
67+
step: 'week',
6868
intervalCount: 1,
6969
skippedDays: [0, 6],
7070
firstDayOfWeek: 0,
@@ -77,7 +77,7 @@ describe('workWeek hiddenWeekDays support in header utils', () => {
7777
it('should use full week caption when skippedDays override is empty', () => {
7878
expect(getCaptionInterval({
7979
date: new Date(2026, 3, 8), // Wednesday
80-
step: 'workWeek',
80+
step: 'week',
8181
intervalCount: 1,
8282
skippedDays: [],
8383
firstDayOfWeek: 0,
@@ -90,7 +90,7 @@ describe('workWeek hiddenWeekDays support in header utils', () => {
9090
it('should use first and last visible days for custom skippedDays', () => {
9191
expect(getCaptionInterval({
9292
date: new Date(2026, 3, 8), // Wednesday
93-
step: 'workWeek',
93+
step: 'week',
9494
intervalCount: 1,
9595
skippedDays: [1, 2],
9696
firstDayOfWeek: 0,
@@ -99,9 +99,6 @@ describe('workWeek hiddenWeekDays support in header utils', () => {
9999
endDate: new Date(2026, 3, 11, 23, 59, 59, 999),
100100
});
101101
});
102-
});
103-
104-
describe('week hiddenWeekDays support in header utils', () => {
105102
it('should use first and last visible day for week caption', () => {
106103
expect(getCaptionInterval({
107104
date: new Date(2026, 3, 8), // Wednesday

packages/devextreme/js/__internal/scheduler/header/m_utils.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,7 @@ const getIntervalStartDate = (options: IntervalOptions): Date => {
9797
);
9898
case 'month':
9999
return getPeriodStart(date, step, false, firstDayOfWeek) as Date;
100-
case 'week':
101-
case 'workWeek': {
100+
case 'week': {
102101
const weekStart = getPeriodStart(date, 'week', false, firstDayOfWeek) as Date;
103102
return getFirstVisibleDate(weekStart, skippedDays, nextDay);
104103
}
@@ -120,7 +119,6 @@ const getPeriodEndDate = (
120119
day: () => nextDay(currentPeriodStartDate),
121120
week: () => getDateAfterWeek(currentPeriodStartDate, firstDayOfWeek, skippedDays),
122121
month: () => nextMonth(currentPeriodStartDate),
123-
workWeek: () => getDateAfterWeek(currentPeriodStartDate, firstDayOfWeek, skippedDays),
124122
agenda: () => nextAgendaStart(currentPeriodStartDate, agendaDuration),
125123
};
126124

@@ -134,7 +132,7 @@ const getNextPeriodStartDate = (
134132
): Date => {
135133
let date = addMS(currentPeriodEndDate);
136134

137-
if (step === 'day' || step === 'week' || step === 'workWeek') {
135+
if (step === 'day' || step === 'week') {
138136
date = getFirstVisibleDate(date, skippedDays, nextDay);
139137
}
140138

@@ -204,7 +202,6 @@ export const getNextIntervalDate = (options: IntervalOptions, direction: Directi
204202
direction,
205203
);
206204
case 'week':
207-
case 'workWeek':
208205
dayDuration = 7 * intervalCount;
209206
break;
210207
case 'agenda':
@@ -342,11 +339,11 @@ export const getCaption = (options: IntervalOptions, isShort: boolean, customiza
342339
const STEP_MAP: Record<ViewType, Step> = {
343340
day: 'day',
344341
week: 'week',
345-
workWeek: 'workWeek',
342+
workWeek: 'week',
346343
month: 'month',
347344
timelineDay: 'day',
348345
timelineWeek: 'week',
349-
timelineWorkWeek: 'workWeek',
346+
timelineWorkWeek: 'week',
350347
timelineMonth: 'month',
351348
agenda: 'agenda',
352349
} as const;

packages/devextreme/js/__internal/scheduler/header/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export interface HeaderOptions {
2323
_useShortDateFormat?: boolean;
2424
}
2525

26-
export type Step = 'day' | 'week' | 'workWeek' | 'month' | 'agenda';
26+
export type Step = 'day' | 'week' | 'month' | 'agenda';
2727

2828
export interface IntervalOptions {
2929
date: Date;

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,9 @@ import SchedulerAgenda from './workspaces/m_agenda';
8787
import SchedulerTimelineDay from './workspaces/m_timeline_day';
8888
import SchedulerTimelineMonth from './workspaces/m_timeline_month';
8989
import SchedulerTimelineWeek from './workspaces/m_timeline_week';
90-
import SchedulerTimelineWorkWeek from './workspaces/m_timeline_work_week';
9190
import SchedulerWorkSpaceDay from './workspaces/m_work_space_day';
9291
import SchedulerWorkSpaceMonth from './workspaces/m_work_space_month';
9392
import SchedulerWorkSpaceWeek from './workspaces/m_work_space_week';
94-
import SchedulerWorkSpaceWorkWeek from './workspaces/m_work_space_work_week';
9593

9694
const toMs = dateUtils.dateToMilliseconds;
9795

@@ -115,7 +113,7 @@ const VIEWS_CONFIG = {
115113
renderingStrategy: 'vertical',
116114
},
117115
workWeek: {
118-
workSpace: SchedulerWorkSpaceWorkWeek,
116+
workSpace: SchedulerWorkSpaceWeek,
119117
renderingStrategy: 'vertical',
120118
},
121119
month: {
@@ -131,7 +129,7 @@ const VIEWS_CONFIG = {
131129
renderingStrategy: 'horizontal',
132130
},
133131
timelineWorkWeek: {
134-
workSpace: SchedulerTimelineWorkWeek,
132+
workSpace: SchedulerTimelineWeek,
135133
renderingStrategy: 'horizontal',
136134
},
137135
timelineMonth: {

packages/devextreme/js/__internal/scheduler/r1/utils/index.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,6 @@ import {
3535
getIntervalDuration,
3636
getTimePanelCellText,
3737
} from './week';
38-
import {
39-
calculateStartViewDate as workWeekCalculateStartViewDate,
40-
} from './work_week';
4138

4239
export {
4340
calculateCellIndex,
@@ -104,10 +101,6 @@ export const weekUtils = {
104101
calculateViewStartDate: weekCalculateViewStartDate,
105102
};
106103

107-
export const workWeekUtils = {
108-
calculateStartViewDate: workWeekCalculateStartViewDate,
109-
};
110-
111104
export const monthUtils = {
112105
getViewStartByOptions,
113106
getCellText,

packages/devextreme/js/__internal/scheduler/r1/utils/week.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import dateUtils from '@js/core/utils/date';
33

44
import type { CalculateStartViewDate } from '../../types';
55
import { formatImplicitSchedulerTime } from '../../utils/global_formats';
6+
import { getFirstVisibleDate } from '../../utils/skipped_days';
67
import {
78
getCalculatedFirstDayOfWeek,
89
getValidCellDateForLocalTimeFormat,
@@ -50,6 +51,7 @@ export const calculateStartViewDate: CalculateStartViewDate = (
5051
startDate,
5152
intervalDuration,
5253
firstDayOfWeekOption,
54+
skippedDays = [],
5355
) => {
5456
const firstDayOfWeek = getCalculatedFirstDayOfWeek(firstDayOfWeekOption);
5557
const viewStart = getViewStartByOptions(
@@ -59,7 +61,12 @@ export const calculateStartViewDate: CalculateStartViewDate = (
5961
getValidStartDate(startDate, firstDayOfWeek),
6062
);
6163

62-
const firstViewDate = dateUtils.getFirstWeekDate(viewStart, firstDayOfWeek);
64+
const weekStartDate = dateUtils.getFirstWeekDate(viewStart, firstDayOfWeek);
65+
const firstViewDate = getFirstVisibleDate(
66+
weekStartDate,
67+
skippedDays,
68+
(date) => new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1),
69+
);
6370

6471
return setOptionHour(firstViewDate, startDayHour);
6572
};

packages/devextreme/js/__internal/scheduler/r1/utils/work_week.ts

Lines changed: 0 additions & 29 deletions
This file was deleted.

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ export type CalculateStartViewDate = (
7575
startDate: Date,
7676
intervalCount: number,
7777
firstDayOfWeekOption?: number,
78+
skippedDays?: number[],
7879
) => Date;
7980

8081
export interface ViewCellData {

packages/devextreme/js/__internal/scheduler/workspaces/m_timeline_week.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@ import { VIEWS } from '../utils/options/constants_view';
44
import SchedulerTimeline from './m_timeline';
55

66
const TIMELINE_CLASS = 'dx-scheduler-timeline-week';
7+
const TIMELINE_WORK_WEEK_CLASS = 'dx-scheduler-timeline-work-week';
78

89
export default class SchedulerTimelineWeek extends SchedulerTimeline {
9-
get type() { return VIEWS.TIMELINE_WEEK; }
10+
get type(): string {
11+
return this.option('type') ?? VIEWS.TIMELINE_WEEK;
12+
}
1013

1114
protected override getElementClass() {
12-
return TIMELINE_CLASS;
15+
return this.type === VIEWS.TIMELINE_WORK_WEEK ? TIMELINE_WORK_WEEK_CLASS : TIMELINE_CLASS;
1316
}
1417

1518
protected override needRenderWeekHeader() {

0 commit comments

Comments
 (0)