diff --git a/apps/demos/testing/etalons/Scheduler-CustomTemplates (fluent.blue.light).png b/apps/demos/testing/etalons/Scheduler-CustomTemplates (fluent.blue.light).png index e92cee44f00a..44b3f116a608 100644 Binary files a/apps/demos/testing/etalons/Scheduler-CustomTemplates (fluent.blue.light).png and b/apps/demos/testing/etalons/Scheduler-CustomTemplates (fluent.blue.light).png differ diff --git a/apps/demos/testing/etalons/Scheduler-CustomTemplates (material.blue.light).png b/apps/demos/testing/etalons/Scheduler-CustomTemplates (material.blue.light).png index 2cf389fd675b..aea9049442bb 100644 Binary files a/apps/demos/testing/etalons/Scheduler-CustomTemplates (material.blue.light).png and b/apps/demos/testing/etalons/Scheduler-CustomTemplates (material.blue.light).png differ diff --git a/apps/demos/testing/etalons/Scheduler-CustomTemplates.png b/apps/demos/testing/etalons/Scheduler-CustomTemplates.png index 9df7306e3896..e7297cf79399 100644 Binary files a/apps/demos/testing/etalons/Scheduler-CustomTemplates.png and b/apps/demos/testing/etalons/Scheduler-CustomTemplates.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/fluent-view=day-crossScrolling=true-horizontal-rtl.png b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/fluent-view=day-crossScrolling=true-horizontal-rtl.png index cddfb342e573..422a2bd03b2d 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/fluent-view=day-crossScrolling=true-horizontal-rtl.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/fluent-view=day-crossScrolling=true-horizontal-rtl.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/fluent-view=day-crossScrolling=true-horizontal.png b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/fluent-view=day-crossScrolling=true-horizontal.png index 67ceeea0ccde..44b95199ad77 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/fluent-view=day-crossScrolling=true-horizontal.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/fluent-view=day-crossScrolling=true-horizontal.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/fluent-view=day-crossScrolling=true-rtl.png b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/fluent-view=day-crossScrolling=true-rtl.png index 7aeab79ff439..bd04b82fad9f 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/fluent-view=day-crossScrolling=true-rtl.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/fluent-view=day-crossScrolling=true-rtl.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/fluent-view=day-crossScrolling=true.png b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/fluent-view=day-crossScrolling=true.png index 8049ba680031..adb0e628ba83 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/fluent-view=day-crossScrolling=true.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/fluent-view=day-crossScrolling=true.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/generic-view=day-crossScrolling=true-horizontal-rtl.png b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/generic-view=day-crossScrolling=true-horizontal-rtl.png index eec0d8ce4cf4..ccac351350aa 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/generic-view=day-crossScrolling=true-horizontal-rtl.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/generic-view=day-crossScrolling=true-horizontal-rtl.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/generic-view=day-crossScrolling=true-horizontal.png b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/generic-view=day-crossScrolling=true-horizontal.png index 8db9c985b017..aec9b0aacc65 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/generic-view=day-crossScrolling=true-horizontal.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/generic-view=day-crossScrolling=true-horizontal.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/generic-view=day-crossScrolling=true-rtl.png b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/generic-view=day-crossScrolling=true-rtl.png index 53d1ada141a5..e9e312d393a7 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/generic-view=day-crossScrolling=true-rtl.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/generic-view=day-crossScrolling=true-rtl.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/generic-view=day-crossScrolling=true.png b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/generic-view=day-crossScrolling=true.png index fef2eeaca791..ec5bb01f0219 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/generic-view=day-crossScrolling=true.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/generic-view=day-crossScrolling=true.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/material-view=day-crossScrolling=true-horizontal-rtl.png b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/material-view=day-crossScrolling=true-horizontal-rtl.png index ef89989a8a5e..26c944596cfe 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/material-view=day-crossScrolling=true-horizontal-rtl.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/material-view=day-crossScrolling=true-horizontal-rtl.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/material-view=day-crossScrolling=true-horizontal.png b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/material-view=day-crossScrolling=true-horizontal.png index dfe4adfb710d..cfb400d64c56 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/material-view=day-crossScrolling=true-horizontal.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/material-view=day-crossScrolling=true-horizontal.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/material-view=day-crossScrolling=true-rtl.png b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/material-view=day-crossScrolling=true-rtl.png index 32e87fe36aec..218ec36e26ec 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/material-view=day-crossScrolling=true-rtl.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/material-view=day-crossScrolling=true-rtl.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/material-view=day-crossScrolling=true.png b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/material-view=day-crossScrolling=true.png index 98412b9b83be..4d8da4831395 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/material-view=day-crossScrolling=true.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/adaptive/etalons/material-view=day-crossScrolling=true.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/customization/etalons/custom-time-panel-in-week-cross-scrolling=true.png b/e2e/testcafe-devextreme/tests/scheduler/layout/customization/etalons/custom-time-panel-in-week-cross-scrolling=true.png index 253c50153e0f..a8bd3ff62630 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/customization/etalons/custom-time-panel-in-week-cross-scrolling=true.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/customization/etalons/custom-time-panel-in-week-cross-scrolling=true.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/fluent-groups(view=day-orientation=horizontal).png b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/fluent-groups(view=day-orientation=horizontal).png index f830b7b654b6..d9d5f71b8f9f 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/fluent-groups(view=day-orientation=horizontal).png and b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/fluent-groups(view=day-orientation=horizontal).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/fluent-groups(view=month-orientation=horizontal).png b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/fluent-groups(view=month-orientation=horizontal).png index 0fc818e95225..daee0bc40dac 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/fluent-groups(view=month-orientation=horizontal).png and b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/fluent-groups(view=month-orientation=horizontal).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/fluent-groups(view=week-orientation=horizontal).png b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/fluent-groups(view=week-orientation=horizontal).png index 1f8c711384f0..d557c57481cd 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/fluent-groups(view=week-orientation=horizontal).png and b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/fluent-groups(view=week-orientation=horizontal).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/fluent-groups(view=workWeek-orientation=horizontal).png b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/fluent-groups(view=workWeek-orientation=horizontal).png index 42480d2e7d82..4463a832268a 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/fluent-groups(view=workWeek-orientation=horizontal).png and b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/fluent-groups(view=workWeek-orientation=horizontal).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/generic-groups(view=day-orientation=horizontal).png b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/generic-groups(view=day-orientation=horizontal).png index c52ee4702de0..01f974601f11 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/generic-groups(view=day-orientation=horizontal).png and b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/generic-groups(view=day-orientation=horizontal).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/generic-groups(view=month-orientation=horizontal).png b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/generic-groups(view=month-orientation=horizontal).png index 8b42c5100a47..7f4ce3faa6ef 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/generic-groups(view=month-orientation=horizontal).png and b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/generic-groups(view=month-orientation=horizontal).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/generic-groups(view=week-orientation=horizontal).png b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/generic-groups(view=week-orientation=horizontal).png index 88c0d42ab2e0..17ae4d1e944e 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/generic-groups(view=week-orientation=horizontal).png and b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/generic-groups(view=week-orientation=horizontal).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/generic-groups(view=workWeek-orientation=horizontal).png b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/generic-groups(view=workWeek-orientation=horizontal).png index 3de3f967f6ac..954f7b89322b 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/generic-groups(view=workWeek-orientation=horizontal).png and b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/generic-groups(view=workWeek-orientation=horizontal).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/material-groups(view=day-orientation=horizontal).png b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/material-groups(view=day-orientation=horizontal).png index 22db0c7ed669..9e7a39147dec 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/material-groups(view=day-orientation=horizontal).png and b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/material-groups(view=day-orientation=horizontal).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/material-groups(view=month-orientation=horizontal).png b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/material-groups(view=month-orientation=horizontal).png index 641b3eb3c37d..71e2bc9be2b4 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/material-groups(view=month-orientation=horizontal).png and b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/material-groups(view=month-orientation=horizontal).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/material-groups(view=week-orientation=horizontal).png b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/material-groups(view=week-orientation=horizontal).png index d33114794ce1..067ea615c537 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/material-groups(view=week-orientation=horizontal).png and b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/material-groups(view=week-orientation=horizontal).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/material-groups(view=workWeek-orientation=horizontal).png b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/material-groups(view=workWeek-orientation=horizontal).png index 43b256bf91a0..b5335f3367d8 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/material-groups(view=workWeek-orientation=horizontal).png and b/e2e/testcafe-devextreme/tests/scheduler/layout/resources/groups/etalons/material-groups(view=workWeek-orientation=horizontal).png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/timeIndication/etalons/shader-in-day-crossScrolling=true-horizontal-grouping.png b/e2e/testcafe-devextreme/tests/scheduler/layout/timeIndication/etalons/shader-in-day-crossScrolling=true-horizontal-grouping.png index b83baf5585f2..3595bcf9dab9 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/timeIndication/etalons/shader-in-day-crossScrolling=true-horizontal-grouping.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/timeIndication/etalons/shader-in-day-crossScrolling=true-horizontal-grouping.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/timeIndication/etalons/shader-in-week-crossScrolling=true.png b/e2e/testcafe-devextreme/tests/scheduler/layout/timeIndication/etalons/shader-in-week-crossScrolling=true.png index 595191766834..87da8ad57723 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/timeIndication/etalons/shader-in-week-crossScrolling=true.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/timeIndication/etalons/shader-in-week-crossScrolling=true.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/views/day/etalons/day-orientation=horizontal-allDay=false-interval=1.png b/e2e/testcafe-devextreme/tests/scheduler/layout/views/day/etalons/day-orientation=horizontal-allDay=false-interval=1.png index 60ef4b5639cf..2505ba1c2f0d 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/views/day/etalons/day-orientation=horizontal-allDay=false-interval=1.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/views/day/etalons/day-orientation=horizontal-allDay=false-interval=1.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/views/day/etalons/day-orientation=horizontal-allDay=false-interval=2.png b/e2e/testcafe-devextreme/tests/scheduler/layout/views/day/etalons/day-orientation=horizontal-allDay=false-interval=2.png index 9ad30ae33bb4..73c9b35f178e 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/views/day/etalons/day-orientation=horizontal-allDay=false-interval=2.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/views/day/etalons/day-orientation=horizontal-allDay=false-interval=2.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/views/day/etalons/day-orientation=horizontal-allDay=true-interval=1.png b/e2e/testcafe-devextreme/tests/scheduler/layout/views/day/etalons/day-orientation=horizontal-allDay=true-interval=1.png index c02a9860c0ab..bdf43f7b71c9 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/views/day/etalons/day-orientation=horizontal-allDay=true-interval=1.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/views/day/etalons/day-orientation=horizontal-allDay=true-interval=1.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/views/day/etalons/day-orientation=horizontal-allDay=true-interval=2.png b/e2e/testcafe-devextreme/tests/scheduler/layout/views/day/etalons/day-orientation=horizontal-allDay=true-interval=2.png index d5d55007bb44..99af8b3bc6a8 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/views/day/etalons/day-orientation=horizontal-allDay=true-interval=2.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/views/day/etalons/day-orientation=horizontal-allDay=true-interval=2.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/views/intervalCount/etalons/start-date-in-month-with-form.png b/e2e/testcafe-devextreme/tests/scheduler/layout/views/intervalCount/etalons/start-date-in-month-with-form.png index cb26d7a2c224..645de9aff2ee 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/views/intervalCount/etalons/start-date-in-month-with-form.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/views/intervalCount/etalons/start-date-in-month-with-form.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/layout/views/intervalCount/etalons/start-date-in-month.png b/e2e/testcafe-devextreme/tests/scheduler/layout/views/intervalCount/etalons/start-date-in-month.png index 2ff590f2f553..2083f04b1624 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/layout/views/intervalCount/etalons/start-date-in-month.png and b/e2e/testcafe-devextreme/tests/scheduler/layout/views/intervalCount/etalons/start-date-in-month.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-after-scroll.png b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-after-scroll.png index f589b08b526d..04c4915badd3 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-after-scroll.png and b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-after-scroll.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-before-scroll.png b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-before-scroll.png index 14286805c8c3..04c4915badd3 100644 Binary files a/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-before-scroll.png and b/e2e/testcafe-devextreme/tests/scheduler/virtualScrolling/etalons/virtual-scrolling-month-before-scroll.png differ diff --git a/e2e/testcafe-devextreme/tests/scheduler/workSpace.ts b/e2e/testcafe-devextreme/tests/scheduler/workSpace.ts index 0e068aca3d2f..714e32a2cb12 100644 --- a/e2e/testcafe-devextreme/tests/scheduler/workSpace.ts +++ b/e2e/testcafe-devextreme/tests/scheduler/workSpace.ts @@ -6,10 +6,22 @@ import { createWidget } from '../../helpers/createWidget'; import url from '../../helpers/getPageUrl'; import { changeTheme } from '../../helpers/changeTheme'; import { Themes } from '../../helpers/themes'; +import { insertStylesheetRulesToPage, removeStylesheetRulesFromPage } from '../../helpers/domUtils'; fixture.disablePageReloads`Scheduler: Workspace` .page(url(__dirname, '../container.html')); +const FIXED_PARENT_CONTAINER_SIZE = ` +#parentContainer { + width: 400px; + height: 500px; +} + +#container { + height: 100%; +} +`; + const createScheduler = async (options = {}): Promise => { await createWidget('dxScheduler', extend(options, { dataSource: [], @@ -18,6 +30,13 @@ const createScheduler = async (options = {}): Promise => { })); }; +const getResourcesDataSource = (count: number) => new Array(count) + .fill(null) + .map((_, idx) => ({ + id: idx, + name: idx.toString(), + })); + test('Vertical selection between two workspace cells should focus cells between them (T804954)', async (t) => { const scheduler = new Scheduler('#container'); @@ -275,3 +294,69 @@ test('All day panel should be hidden when allDayPanelMode=hidden by initializing await changeTheme(Themes.genericLight); }); }); + +[ + Themes.genericLight, + Themes.materialBlue, + Themes.fluentBlue, +].forEach((theme) => { + [ + 'day', + 'week', + 'workWeek', + 'month', + ].forEach((viewName) => { + test(`[T1225772]: should not have the horizontal scroll in horizontal views when the crossScrollingEnabled: true (theme:${theme}, view:${viewName})`, async (t) => { + const scheduler = new Scheduler('#container'); + + const scrollableContainer = scheduler.dateTableScrollableContainer; + const scrollWidth = await scrollableContainer.scrollWidth; + const clientWidth = await scrollableContainer.clientWidth; + const hasHorizontalScroll = scrollWidth > clientWidth; + + await t.expect(hasHorizontalScroll).notOk('workspace has the horizontal scrollbar'); + }).before(async () => { + await changeTheme(theme); + await createWidget('dxScheduler', { + dataSource: [], + currentView: viewName, + currentDate: '2024-01-01T00:00:00', + crossScrollingEnabled: true, + height: 300, + }); + }) + .after(async () => { + await changeTheme(theme); + }); + }); +}); + +// NOTE: Moved "as is" from the QUnit integration.resources.tests (see history) +test('[T716993]: should has horizontal scrollbar with multiple resources and fixed height container', async (t) => { + const scheduler = new Scheduler('#container'); + + const scrollableContainer = scheduler.dateTableScrollableContainer; + const scrollWidth = await scrollableContainer.scrollWidth; + const clientWidth = await scrollableContainer.clientWidth; + const hasHorizontalScroll = scrollWidth > clientWidth; + + await t.expect(hasHorizontalScroll).ok('workspace hasn\'t the horizontal scrollbar'); +}).before(async () => { + const resourcesDataSource = getResourcesDataSource(10); + + await insertStylesheetRulesToPage(FIXED_PARENT_CONTAINER_SIZE); + return createWidget('dxScheduler', { + dataSource: [], + groups: ['id'], + resources: [{ + dataSource: resourcesDataSource, + displayExpr: 'name', + valueExpr: 'id', + fieldExpr: 'id', + allowMultiple: false, + }], + crossScrollingEnabled: true, + }); +}).after(async () => { + await removeStylesheetRulesFromPage(); +}); diff --git a/packages/devextreme/js/__internal/scheduler/workspaces/const.ts b/packages/devextreme/js/__internal/scheduler/workspaces/const.ts new file mode 100644 index 000000000000..6c3dd71d9722 --- /dev/null +++ b/packages/devextreme/js/__internal/scheduler/workspaces/const.ts @@ -0,0 +1 @@ +export const WORK_SPACE_BORDER_PX = 1; diff --git a/packages/devextreme/js/__internal/scheduler/workspaces/m_work_space_grouped_strategy_horizontal.ts b/packages/devextreme/js/__internal/scheduler/workspaces/m_work_space_grouped_strategy_horizontal.ts index 0751cb6497c0..b5cea019dcc2 100644 --- a/packages/devextreme/js/__internal/scheduler/workspaces/m_work_space_grouped_strategy_horizontal.ts +++ b/packages/devextreme/js/__internal/scheduler/workspaces/m_work_space_grouped_strategy_horizontal.ts @@ -1,4 +1,5 @@ import { getBoundingRect } from '@js/core/utils/position'; +import { WORK_SPACE_BORDER_PX } from '@ts/scheduler/workspaces/const'; import { FIRST_GROUP_CELL_CLASS, LAST_GROUP_CELL_CLASS } from '../m_classes'; @@ -55,7 +56,10 @@ class HorizontalGroupedStrategy { } getWorkSpaceMinWidth() { - return getBoundingRect(this._workSpace.$element().get(0)).width - this._workSpace.getTimePanelWidth(); + const workSpaceElementWidth = getBoundingRect(this._workSpace.$element().get(0)).width; + return workSpaceElementWidth + - this._workSpace.getTimePanelWidth() + - 2 * WORK_SPACE_BORDER_PX; } getAllDayOffset() { diff --git a/packages/devextreme/js/__internal/scheduler/workspaces/m_work_space_grouped_strategy_vertical.ts b/packages/devextreme/js/__internal/scheduler/workspaces/m_work_space_grouped_strategy_vertical.ts index fbe4e77489d8..82d63fb83f76 100644 --- a/packages/devextreme/js/__internal/scheduler/workspaces/m_work_space_grouped_strategy_vertical.ts +++ b/packages/devextreme/js/__internal/scheduler/workspaces/m_work_space_grouped_strategy_vertical.ts @@ -1,11 +1,10 @@ import { getBoundingRect } from '@js/core/utils/position'; import { calculateDayDuration, getVerticalGroupCountClass } from '@ts/scheduler/r1/utils/index'; +import { WORK_SPACE_BORDER_PX } from '@ts/scheduler/workspaces/const'; import { FIRST_GROUP_CELL_CLASS, LAST_GROUP_CELL_CLASS } from '../m_classes'; import { Cache } from './m_cache'; -const WORK_SPACE_BORDER = 1; - class VerticalGroupedStrategy { cache = new Cache(); @@ -59,7 +58,11 @@ class VerticalGroupedStrategy { getWorkSpaceMinWidth() { let minWidth = this._workSpace._getWorkSpaceWidth(); - const workspaceContainerWidth = getBoundingRect(this._workSpace.$element().get(0)).width - this._workSpace.getTimePanelWidth() - this._workSpace.getGroupTableWidth() - 2 * WORK_SPACE_BORDER; + const workSpaceElementWidth = getBoundingRect(this._workSpace.$element().get(0)).width; + const workspaceContainerWidth = workSpaceElementWidth + - this._workSpace.getTimePanelWidth() + - this._workSpace.getGroupTableWidth() + - 2 * WORK_SPACE_BORDER_PX; if (minWidth < workspaceContainerWidth) { minWidth = workspaceContainerWidth; diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.appointments.crossScrollingEnabled.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.appointments.crossScrollingEnabled.tests.js index be811ad25c7d..27b230b0d9c0 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.appointments.crossScrollingEnabled.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.appointments.crossScrollingEnabled.tests.js @@ -130,11 +130,14 @@ module('crossScrollingEnabled = true', config, () => { crossScrollingEnabled: true }); - const appointmentsInstance = scheduler.instance.getAppointmentsInstance(); - const items = appointmentsInstance.option('items'); + const $apptBeforeRepaint = scheduler.appointments.getAppointment(); + $apptBeforeRepaint.attr('test', 'true'); scheduler.option('crossScrollingEnabled', false); - assert.notDeepEqual(appointmentsInstance.option('items'), items, 'Appointments are repainted'); + + const $apptAfterRepaint = scheduler.appointments.getAppointment(); + const customTestAttr = $apptAfterRepaint.attr('test'); + assert.equal(customTestAttr, undefined, 'Appointments are repainted'); }); if(!isMobile) { diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.resources.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.resources.tests.js index b336fc7ba04c..c8a2bb366309 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.resources.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.resources.tests.js @@ -609,43 +609,4 @@ if(devices.real().deviceType === 'desktop') { $('#qunit-fixture').css({ top: '-10000px', left: '-10000px' }); } }; - - QUnit.module('Integration: Multiple resources', desktopModuleConfig, () => { - const SCHEDULER_HORIZONTAL_SCROLLBAR = '.dx-scheduler-date-table-scrollable .dx-scrollbar-horizontal'; - - QUnit.test('Scheduler with multiple resources and fixed height container has visible horizontal scrollbar (T716993)', function(assert) { - const getData = function(count) { - const result = []; - for(let i = 0; i < count; i++) { - result.push({ - facilityId: i, - facilityName: i.toString(), - }); - } - return result; - }; - - const scheduler = createWrapper({ - groups: ['facilityId'], - crossScrollingEnabled: true, - dataSource: [], - resources: [{ - dataSource: getData(10), - displayExpr: 'facilityName', - valueExpr: 'facilityId', - fieldExpr: 'facilityId', - allowMultiple: false, - }] - }); - - const scrollbar = $(scheduler.instance.$element()).find(SCHEDULER_HORIZONTAL_SCROLLBAR); - - assert.roughEqual( - scrollbar.offset().top + scrollbar.outerHeight(), - getOuterHeight(scheduler.instance.$element()) - 1, - 1, - 'Horizontal scrollbar has visible top coordinate', - ); - }); - }); } diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/virtual_scrolling.integration.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/virtual_scrolling.integration.tests.js index e486749b88d0..9227eaf30754 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/virtual_scrolling.integration.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/virtual_scrolling.integration.tests.js @@ -1499,7 +1499,7 @@ module('Virtual scrolling integration', () => { height: 450 }, { groupIndex: 1, - left: 525, + left: 523, top: 100, height: 450 }], @@ -1526,7 +1526,7 @@ module('Virtual scrolling integration', () => { height: 300 }, { groupIndex: 1, - left: 525, + left: 523, top: 250, height: 300 }], @@ -1547,7 +1547,7 @@ module('Virtual scrolling integration', () => { height: 400 }, { groupIndex: 1, - left: 525, + left: 523, top: 900, height: 400 }] @@ -1574,7 +1574,7 @@ module('Virtual scrolling integration', () => { height: 650 }, { groupIndex: 1, - left: 525, + left: 523, top: 900, height: 650 }]] @@ -1599,7 +1599,7 @@ module('Virtual scrolling integration', () => { height: 300 }, { groupIndex: 1, - left: 525, + left: 523, top: 250, height: 300 }], @@ -1620,7 +1620,7 @@ module('Virtual scrolling integration', () => { height: 400 }, { groupIndex: 1, - left: 525, + left: 523, top: 900, height: 400 }] diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/workSpace.base.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/workSpace.base.tests.js index 6323a3a4abb7..ab03e67c0fcd 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/workSpace.base.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/workSpace.base.tests.js @@ -92,10 +92,10 @@ module('Work Space Base', { this.instance.option('crossScrollingEnabled', true); this.instance.option('width', 400); - assert.equal(this.instance.getWorkSpaceMinWidth(), 300, 'minWidth is ok'); + assert.equal(this.instance.getWorkSpaceMinWidth(), 298, 'minWidth is ok'); this.instance.option('width', 900); - assert.equal(this.instance.getWorkSpaceMinWidth(), 800, 'minWidth is ok'); + assert.equal(this.instance.getWorkSpaceMinWidth(), 798, 'minWidth is ok'); }); } diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/workSpaceWithHorizontalScroll.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/workSpaceWithHorizontalScroll.tests.js index 7c3eed8ba1b1..f6a2260f7caa 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/workSpaceWithHorizontalScroll.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/workSpaceWithHorizontalScroll.tests.js @@ -168,7 +168,8 @@ QUnit.module('Vertical Workspace with horizontal scrollbar', { const headerPanelWidth = getOuterWidth($element.find('.dx-scheduler-header-panel')); const allDayTableWidth = getOuterWidth($element.find('.dx-scheduler-all-day-table')); const dateTableWidth = getOuterWidth($element.find('.dx-scheduler-date-table')); - const expectedWidth = 1000 - this.instance.getTimePanelWidth(); + const workspaceBordersWidth = 2; + const expectedWidth = 1000 - this.instance.getTimePanelWidth() - workspaceBordersWidth; assert.equal(headerPanelWidth, expectedWidth, 'Width is OK'); assert.equal(allDayTableWidth, expectedWidth, 'Width is OK'); diff --git a/packages/testcafe-models/scheduler/index.ts b/packages/testcafe-models/scheduler/index.ts index acdf2394b84d..40c17a6e858b 100644 --- a/packages/testcafe-models/scheduler/index.ts +++ b/packages/testcafe-models/scheduler/index.ts @@ -27,6 +27,7 @@ export const CLASS = { droppableCell: 'dx-scheduler-date-table-droppable-cell', dateTableRow: 'dx-scheduler-date-table-row', dateTableScrollable: 'dx-scheduler-date-table-scrollable', + dateTableScrollableContainer: 'dx-scrollable-container', headerScrollable: 'dx-scheduler-header-scrollable', scrollableContainer: 'dx-scrollable-container', workspaceBothScrollbar: 'dx-scheduler-work-space-both-scrollbar', @@ -62,6 +63,8 @@ export default class Scheduler extends Widget { readonly dateTableScrollable: Selector; + readonly dateTableScrollableContainer: Selector; + readonly headerPanel: HeaderPanel; readonly groupRow: GroupRow; @@ -97,6 +100,7 @@ export default class Scheduler extends Widget { this.dateTable = this.element.find(`.${CLASS.dateTable}`); this.dateTableRows = this.element.find(`.${CLASS.dateTableRow}`); this.dateTableScrollable = this.element.find(`.${CLASS.dateTableScrollable}`); + this.dateTableScrollableContainer = this.dateTableScrollable.find(`.${CLASS.dateTableScrollableContainer}`); this.workspaceScrollable = this.dateTableScrollable.find(`.${CLASS.scrollableContainer}`); const headerSpaceScroll = this.element.find(`.${CLASS.headerScrollable} .${CLASS.scrollableContainer}`);