From 8a60ad69ba957a9f01d10a226669f28b5ed77f92 Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Tue, 31 Mar 2026 11:58:02 -0300 Subject: [PATCH 01/32] Scheduler - Remove legacy AppointmentPopup and AppointmentForm --- .../accessibility/scheduler/legacyPopup.ts | 88 - .../common/appointments/legacyEditing.ts | 123 - .../layout/legacyAppointmentForm/allDay.ts | 130 -- .../layout/legacyAppointmentForm/common.ts | 41 - ...ointment-on-tables (fluent.blue.light).png | Bin 42615 -> 0 bytes ...nd-reccurence-form (fluent.blue.light).png | Bin 27959 -> 0 bytes ...fter-click-all-day (fluent.blue.light).png | Bin 67966 -> 0 bytes ...er-render-on-table (fluent.blue.light).png | Bin 66625 -> 0 bytes ...switch-off-all-day (fluent.blue.light).png | Bin 68603 -> 0 bytes ...fore-click-all-day (fluent.blue.light).png | Bin 69767 -> 0 bytes ...mobile-environment (fluent.blue.light).png | Bin 19911 -> 0 bytes ...-not-integer-chars (fluent.blue.light).png | Bin 41904 -> 0 bytes ...reccurence-options (fluent.blue.light).png | Bin 27959 -> 0 bytes ...reccurence-options (fluent.blue.light).png | Bin 19072 -> 0 bytes .../initial-form (fluent.blue.light).png | Bin 19072 -> 0 bytes ...ointment-on-tables (fluent.blue.light).png | Bin 42268 -> 0 bytes ...fter-click-all-day (fluent.blue.light).png | Bin 67224 -> 0 bytes ...er-render-on-table (fluent.blue.light).png | Bin 65709 -> 0 bytes ...switch-off-all-day (fluent.blue.light).png | Bin 67694 -> 0 bytes ...fore-click-all-day (fluent.blue.light).png | Bin 69412 -> 0 bytes .../integerFormatNumberBox.ts | 43 - .../mobileEnvironment.ts | 34 - .../scheduler/common/legacyAppointmentForm.ts | 204 -- .../appointmentPopupErrors.ts | 35 - .../legacyAppointmentForm/dataEditors.ts | 171 -- ...pening_nested-expr (fluent.blue.light).png | Bin 31808 -> 0 bytes ...-editor_after-hide (fluent.blue.light).png | Bin 39139 -> 0 bytes ...after-popup-reopen (fluent.blue.light).png | Bin 31411 -> 0 bytes .../legacyAppointmentForm/expressions.ts | 612 ----- .../legacyAppointmentForm/recurrenceEditor.ts | 148 -- .../showAppointmentPopup.ts | 68 - .../legacyAppointmentForm/timezoneEditors.ts | 79 - .../__mock__/create_appointment_popup.ts | 1 - .../scheduler/__tests__/legacy_form.test.ts | 35 - .../appointment_popup/m_legacy_form.ts | 477 ---- .../appointment_popup/m_legacy_popup.ts | 379 ---- .../js/__internal/scheduler/m_scheduler.ts | 25 +- .../scheduler/utils/options/constants.ts | 1 - .../scheduler/utils/options/types.ts | 4 +- .../resource_manager/popup_utils.test.ts | 73 - .../utils/resource_manager/popup_utils.ts | 24 - .../appointment.editing.tests.js | 6 +- .../appointment.monthView.tests.js | 5 +- .../appointment.week.based.views.tests.js | 6 +- .../common.events.tests.js | 1 - .../common.options.tests.js | 1 - .../editing.tests.js | 5 - .../integration.adaptivity.tests.js | 36 +- .../integration.agenda.tests.js | 2 +- .../integration.appointmentCollector.tests.js | 1 - .../integration.base.tests.js | 2 +- ...integration.recurringAppointments.tests.js | 12 +- .../integration.resources.tests.js | 10 +- .../legacyAppointmentPopup.tests.js | 1995 ----------------- .../timezones.tests.js | 12 +- .../scheduler/appointment/legacyPopup.ts | 114 - packages/testcafe-models/scheduler/index.ts | 4 - 57 files changed, 50 insertions(+), 4957 deletions(-) delete mode 100644 e2e/testcafe-devextreme/tests/accessibility/scheduler/legacyPopup.ts delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/appointments/legacyEditing.ts delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/allDay.ts delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/common.ts delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/all-day-appointment-on-tables (fluent.blue.light).png delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/allday-and-reccurence-form (fluent.blue.light).png delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/appointment-form-after-click-all-day (fluent.blue.light).png delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/appointment-form-after-render-on-table (fluent.blue.light).png delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/appointment-form-after-switch-off-all-day (fluent.blue.light).png delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/appointment-form-before-click-all-day (fluent.blue.light).png delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/appointment-form-in-mobile-environment (fluent.blue.light).png delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/dx-number-boxes-not-integer-chars (fluent.blue.light).png delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/form-after-change-allday-and-reccurence-options (fluent.blue.light).png delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/form-before-change-allday-and-reccurence-options (fluent.blue.light).png delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/initial-form (fluent.blue.light).png delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/new-all-day-appointment-on-tables (fluent.blue.light).png delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/new-appointment-form-after-click-all-day (fluent.blue.light).png delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/new-appointment-form-after-render-on-table (fluent.blue.light).png delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/new-appointment-form-after-switch-off-all-day (fluent.blue.light).png delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/new-appointment-form-before-click-all-day (fluent.blue.light).png delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/integerFormatNumberBox.ts delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/mobileEnvironment.ts delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm.ts delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/appointmentPopupErrors.ts delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/dataEditors.ts delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/etalons/form_recurrence-editor-first-opening_nested-expr (fluent.blue.light).png delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/etalons/recurrence-editor_after-hide (fluent.blue.light).png delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/etalons/recurrence-editor_after-popup-reopen (fluent.blue.light).png delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/expressions.ts delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/recurrenceEditor.ts delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/showAppointmentPopup.ts delete mode 100644 e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/timezoneEditors.ts delete mode 100644 packages/devextreme/js/__internal/scheduler/__tests__/legacy_form.test.ts delete mode 100644 packages/devextreme/js/__internal/scheduler/appointment_popup/m_legacy_form.ts delete mode 100644 packages/devextreme/js/__internal/scheduler/appointment_popup/m_legacy_popup.ts delete mode 100644 packages/devextreme/js/__internal/scheduler/utils/resource_manager/popup_utils.test.ts delete mode 100644 packages/devextreme/js/__internal/scheduler/utils/resource_manager/popup_utils.ts delete mode 100644 packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/legacyAppointmentPopup.tests.js delete mode 100644 packages/testcafe-models/scheduler/appointment/legacyPopup.ts diff --git a/e2e/testcafe-devextreme/tests/accessibility/scheduler/legacyPopup.ts b/e2e/testcafe-devextreme/tests/accessibility/scheduler/legacyPopup.ts deleted file mode 100644 index eab6c756557a..000000000000 --- a/e2e/testcafe-devextreme/tests/accessibility/scheduler/legacyPopup.ts +++ /dev/null @@ -1,88 +0,0 @@ -import Scheduler from 'devextreme-testcafe-models/scheduler'; -import { createWidget } from '../../../helpers/createWidget'; -import url from '../../../helpers/getPageUrl'; -import { a11yCheck } from '../../../helpers/accessibility/utils'; - -fixture.disablePageReloads`Scheduler - Popup` - .page(url(__dirname, '../../container.html')); - -const a11yCheckConfig = {}; - -test('Scheduler edit appointment is accessible', async (t) => { - const scheduler = new Scheduler('#container'); - - await t.doubleClick(scheduler.getAppointmentByIndex(0).element()); - await t.expect(scheduler.legacyAppointmentPopup.isVisible()).ok(); - - await a11yCheck(t, a11yCheckConfig, '#container'); -}).before(async () => { - await createWidget('dxScheduler', { - timeZone: 'America/Los_Angeles', - dataSource: [{ - text: 'Install New Router in Dev Room', - startDate: new Date('2021-03-29T21:30:00.000Z'), - endDate: new Date('2021-03-29T22:30:00.000Z'), - recurrenceRule: 'FREQ=DAILY', - }], - editing: { legacyForm: true }, - recurrenceEditMode: 'series', - currentView: 'week', - currentDate: new Date(2021, 2, 28), - }); -}); - -test('Scheduler recurrence editor repeat end accessible', async (t) => { - const scheduler = new Scheduler('#container'); - const getItem = (index: number) => scheduler - .legacyAppointmentPopup - .getEndRepeatRadioButton(index); - const getAriaLabel = (index: number) => getItem(index) - .getAttribute('aria-label'); - - await t.doubleClick(scheduler.getAppointmentByIndex(0).element()); - await t.expect(scheduler.legacyAppointmentPopup.isVisible()).ok(); - - await t - .expect(getAriaLabel(1)) - .eql('On 22 May 2025') - .expect(getAriaLabel(2)) - .eql('After') - .typeText(scheduler.legacyAppointmentPopup.repeatUntilElement, '2026') - .click(getItem(1)) // unfocus input - .expect(getAriaLabel(1)) - .eql('On 22 May 2026') - .expect(getAriaLabel(2)) - .eql('After'); - await t - .click(getItem(0)) - .expect(getAriaLabel(1)) - .eql('On') - .expect(getAriaLabel(2)) - .eql('After'); - await t - .click(getItem(2)) - .expect(getAriaLabel(1)) - .eql('On') - .expect(getAriaLabel(2)) - .eql('After 1 occurrence(s)') - .typeText(scheduler.legacyAppointmentPopup.repeatCountElement, '3') - .click(getItem(2)) // unfocus input - .expect(getAriaLabel(1)) - .eql('On') - .expect(getAriaLabel(2)) - .eql('After 13 occurrence(s)'); -}).before(async () => { - await createWidget('dxScheduler', { - timeZone: 'America/Los_Angeles', - editing: { legacyForm: true }, - dataSource: [{ - text: 'Install New Router in Dev Room', - startDate: new Date('2021-03-29T21:30:00.000Z'), - endDate: new Date('2021-03-29T22:30:00.000Z'), - recurrenceRule: 'FREQ=DAILY;UNTIL=20250522T215959Z', - }], - recurrenceEditMode: 'series', - currentView: 'week', - currentDate: new Date('2021-03-29T21:30:00.000Z'), - }); -}); diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/appointments/legacyEditing.ts b/e2e/testcafe-devextreme/tests/scheduler/common/appointments/legacyEditing.ts deleted file mode 100644 index 2a52261f5118..000000000000 --- a/e2e/testcafe-devextreme/tests/scheduler/common/appointments/legacyEditing.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { ClientFunction } from 'testcafe'; -import { createScreenshotsComparer } from 'devextreme-screenshot-comparer'; -import Scheduler from 'devextreme-testcafe-models/scheduler'; -import { createWidget } from '../../../../helpers/createWidget'; -import url from '../../../../helpers/getPageUrl'; -import { testScreenshot } from '../../../../helpers/themeUtils'; - -const CLICK_OPTIONS = { speed: 0.5 }; -const SCHEDULER_SELECTOR = '#container'; -const INITIAL_APPOINTMENT_TITLE = 'appointment'; -const ADDITIONAL_TITLE_TEXT = '-updated'; -const UPDATED_APPOINTMENT_TITLE = `${INITIAL_APPOINTMENT_TITLE}${ADDITIONAL_TITLE_TEXT}`; - -fixture.disablePageReloads`Appointment Editing` - .page(url(__dirname, '../../../container.html')); - -test('Should correctly update appointment if dataSource is a simple array', async (t) => { - const scheduler = new Scheduler(SCHEDULER_SELECTOR); - const appointment = scheduler.getAppointment(INITIAL_APPOINTMENT_TITLE); - const updatedAppointment = scheduler.getAppointment(UPDATED_APPOINTMENT_TITLE); - const { legacyAppointmentPopup: appointmentPopup } = scheduler; - - await t - .doubleClick(appointment.element, CLICK_OPTIONS) - .click(appointmentPopup.subjectElement) - .typeText(appointmentPopup.subjectElement, ADDITIONAL_TITLE_TEXT) - .expect(appointmentPopup.subjectElement.value) - .eql(UPDATED_APPOINTMENT_TITLE) - .click(appointmentPopup.doneButton) - .expect(updatedAppointment.element.exists) - .ok(); -}).before(async () => createWidget('dxScheduler', { - dataSource: [{ - id: 1, - text: INITIAL_APPOINTMENT_TITLE, - startDate: new Date(2021, 2, 29, 9, 30), - endDate: new Date(2021, 2, 29, 11, 30), - }], - views: ['day'], - currentView: 'day', - currentDate: new Date(2021, 2, 29), - startDayHour: 9, - endDayHour: 14, - height: 600, - editing: { legacyForm: true }, -})); - -test('Should correctly update appointment if dataSource is a Store with key array', async (t) => { - const scheduler = new Scheduler(SCHEDULER_SELECTOR); - const appointment = scheduler.getAppointment(INITIAL_APPOINTMENT_TITLE); - const updatedAppointment = scheduler.getAppointment(UPDATED_APPOINTMENT_TITLE); - const { legacyAppointmentPopup: appointmentPopup } = scheduler; - - await t - .doubleClick(appointment.element, CLICK_OPTIONS) - .click(appointmentPopup.subjectElement) - .typeText(appointmentPopup.subjectElement, ADDITIONAL_TITLE_TEXT) - .expect(appointmentPopup.subjectElement.value) - .eql(UPDATED_APPOINTMENT_TITLE) - .click(appointmentPopup.doneButton) - .expect(updatedAppointment.element.exists) - .ok(); -}).before(async () => { - const initScheduler = ClientFunction(() => { - const $scheduler = $(SCHEDULER_SELECTOR) as any; - const devExpress = (window as any).DevExpress; - - $scheduler.dxScheduler({ - dataSource: new devExpress.data.DataSource({ - store: { - type: 'array', - key: 'id', - data: [{ - id: 1, - text: INITIAL_APPOINTMENT_TITLE, - startDate: new Date(2021, 2, 29, 9, 30), - endDate: new Date(2021, 2, 29, 11, 30), - }], - }, - }), - views: ['day'], - currentView: 'day', - currentDate: new Date(2021, 2, 29), - startDayHour: 9, - endDayHour: 14, - height: 600, - editing: { legacyForm: true }, - }).dxScheduler('instance'); - devExpress.fx.off = true; - }, { dependencies: { SCHEDULER_SELECTOR, INITIAL_APPOINTMENT_TITLE } }); - - await initScheduler(); -}); - -test('Appointment EditForm screenshot', async (t) => { - const { takeScreenshot, compareResults } = createScreenshotsComparer(t); - const scheduler = new Scheduler(SCHEDULER_SELECTOR); - const appointment = scheduler.getAppointment(INITIAL_APPOINTMENT_TITLE); - - await t.doubleClick(appointment.element); - - await testScreenshot(t, takeScreenshot, 'appointment-popup-screenshot.png', { element: appointment.element }); - - await t - .expect(scheduler.legacyAppointmentPopup.element.exists) - .ok() - .expect(compareResults.isValid()) - .ok(compareResults.errorMessages()); -}).before(async () => createWidget('dxScheduler', { - dataSource: [{ - id: 1, - text: INITIAL_APPOINTMENT_TITLE, - startDate: new Date(2021, 2, 29, 9, 30), - endDate: new Date(2021, 2, 29, 11, 30), - }], - editing: { legacyForm: true }, - views: ['day'], - currentView: 'day', - currentDate: new Date(2021, 2, 29), - startDayHour: 9, - endDayHour: 14, - height: 600, -})); diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/allDay.ts b/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/allDay.ts deleted file mode 100644 index 9971d28230f5..000000000000 --- a/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/allDay.ts +++ /dev/null @@ -1,130 +0,0 @@ -import { createScreenshotsComparer } from 'devextreme-screenshot-comparer'; -import Scheduler from 'devextreme-testcafe-models/scheduler'; -import { createWidget } from '../../../../../helpers/createWidget'; -import url from '../../../../../helpers/getPageUrl'; -import { testScreenshot } from '../../../../../helpers/themeUtils'; - -fixture.disablePageReloads`Layout:AppointmentForm:AllDay` - .page(url(__dirname, '../../../../container.html')); - -test('Start and end dates should be reflect the current day(appointment is already available case)', async (t) => { - const scheduler = new Scheduler('#container'); - const { takeScreenshot, compareResults } = createScreenshotsComparer(t); - const { legacyAppointmentPopup: appointmentPopup } = scheduler; - - await t - .click(scheduler.getAppointment('Text').element) - .click(scheduler.appointmentTooltip.getListItem('Text').element); - - await testScreenshot(t, takeScreenshot, 'appointment-form-before-click-all-day.png'); - - await t.click(appointmentPopup.allDayElement); - - await testScreenshot(t, takeScreenshot, 'appointment-form-after-click-all-day.png'); - - await t.click(appointmentPopup.doneButton); - - await testScreenshot(t, takeScreenshot, 'all-day-appointment-on-tables.png'); - - await t - .click(scheduler.getAppointment('Text').element) - .click(scheduler.appointmentTooltip.getListItem('Text').element); - - await testScreenshot(t, takeScreenshot, 'appointment-form-after-render-on-table.png'); - - await t.click(appointmentPopup.allDayElement); - - await testScreenshot(t, takeScreenshot, 'appointment-form-after-switch-off-all-day.png'); - - await t.expect(compareResults.isValid()) - .ok(compareResults.errorMessages()); -}).before(async () => { - await createWidget('dxScheduler', { - dataSource: [{ - text: 'Text', - startDate: new Date(2021, 3, 28, 10), - endDate: new Date(2021, 3, 28, 12), - }], - editing: { legacyForm: true }, - views: ['week'], - currentView: 'week', - currentDate: new Date(2021, 3, 29), - startDayHour: 9, - height: 600, - }); -}); - -test('Start and end dates should be reflect the current day(create new appointment case)', async (t) => { - const scheduler = new Scheduler('#container'); - const { takeScreenshot, compareResults } = createScreenshotsComparer(t); - const { legacyAppointmentPopup: appointmentPopup } = scheduler; - - await t.doubleClick(scheduler.getDateTableCell(2, 3)); - - await testScreenshot(t, takeScreenshot, 'new-appointment-form-before-click-all-day.png'); - - await t.click(appointmentPopup.allDayElement); - - await testScreenshot(t, takeScreenshot, 'new-appointment-form-after-click-all-day.png'); - - await t.click(appointmentPopup.doneButton); - - await testScreenshot(t, takeScreenshot, 'new-all-day-appointment-on-tables.png'); - - await t - .click(scheduler.getAppointment('').element) - .click(scheduler.appointmentTooltip.getListItem('').element); - - await testScreenshot(t, takeScreenshot, 'new-appointment-form-after-render-on-table.png'); - - await t.click(appointmentPopup.allDayElement); - - await testScreenshot(t, takeScreenshot, 'new-appointment-form-after-switch-off-all-day.png'); - - await t.expect(compareResults.isValid()) - .ok(compareResults.errorMessages()); -}).before(async () => { - await createWidget('dxScheduler', { - dataSource: [], - views: ['week'], - editing: { legacyForm: true }, - currentView: 'week', - currentDate: new Date(2021, 3, 29), - startDayHour: 9, - height: 600, - }); -}); - -test('StartDate and endDate should have correct type after "allDay" and "repeat" option are changed (T1002864)', async (t) => { - const scheduler = new Scheduler('#container'); - const { legacyAppointmentPopup: appointmentPopup } = scheduler; - - const { takeScreenshot, compareResults } = createScreenshotsComparer(t); - - await t.doubleClick(scheduler.getDateTableCell(0, 0)); - - await testScreenshot( - t, - takeScreenshot, - 'form-before-change-allday-and-reccurence-options.png', - { element: appointmentPopup.content }, - ); - - await t - .click(appointmentPopup.allDayElement) - .click(appointmentPopup.recurrenceElement); - - await testScreenshot( - t, - takeScreenshot, - 'form-after-change-allday-and-reccurence-options.png', - { element: appointmentPopup.content }, - ); - - await t - .expect(compareResults.isValid()) - .ok(compareResults.errorMessages()); -}).before(async () => createWidget('dxScheduler', { - currentDate: new Date(2021, 1, 1), - editing: { legacyForm: true }, -})); diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/common.ts b/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/common.ts deleted file mode 100644 index 516ad47cc483..000000000000 --- a/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/common.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { createScreenshotsComparer } from 'devextreme-screenshot-comparer'; -import Scheduler from 'devextreme-testcafe-models/scheduler'; -import { createWidget } from '../../../../../helpers/createWidget'; -import url from '../../../../../helpers/getPageUrl'; -import { testScreenshot } from '../../../../../helpers/themeUtils'; - -fixture.disablePageReloads`AppointmentForm screenshot tests` - .page(url(__dirname, '../../../../container.html')); - -// visual: generic.light -// visual: fluent.blue.light -// visual: material.blue.light -test('Appointemt form tests', async (t) => { - const scheduler = new Scheduler('#container'); - const { legacyAppointmentPopup: appointmentPopup } = scheduler; - - const { takeScreenshot, compareResults } = createScreenshotsComparer(t); - - await t.doubleClick(scheduler.getDateTableCell(0, 0)); - - await testScreenshot(t, takeScreenshot, 'initial-form.png', { - element: appointmentPopup.content, - }); - - await t - .click(appointmentPopup.allDayElement) - .click(appointmentPopup.recurrenceElement); - - await testScreenshot(t, takeScreenshot, 'allday-and-reccurence-form.png', { - element: appointmentPopup.content, - }); - - await t - .expect(compareResults.isValid()) - .ok(compareResults.errorMessages()); -}).before(async () => { - await createWidget('dxScheduler', { - currentDate: new Date(2021, 1, 1), - editing: { legacyForm: true }, - }); -}); diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/all-day-appointment-on-tables (fluent.blue.light).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/all-day-appointment-on-tables (fluent.blue.light).png deleted file mode 100644 index f245956cb5da8db1112faf25d9ea447bd7733da8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42615 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 diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/appointment-form-after-click-all-day (fluent.blue.light).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/appointment-form-after-click-all-day (fluent.blue.light).png deleted file mode 100644 index bdaaacd5097010edd38ef48f45dd2071f1641cd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67966 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 ZK(T&a{UrV34`1PjYiw?GY0;W}{|iU!G}{0G diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/appointment-form-after-render-on-table (fluent.blue.light).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/appointment-form-after-render-on-table (fluent.blue.light).png deleted file mode 100644 index b25074e05f4221fbb8e2956c0761178e59aa74d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66625 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 diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/appointment-form-after-switch-off-all-day (fluent.blue.light).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/appointment-form-after-switch-off-all-day (fluent.blue.light).png deleted file mode 100644 index 07a8e42ff1210399454f2b27fb37270d893282c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68603 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
'); - - this.scheduler.createComponent(element, Form, { - items, - showValidationSummary: true, - scrollingEnabled: true, - colCount: 'auto', - colCountByScreen: { - lg: 2, - xs: 1, - }, - formData, - showColonAfterLabel: false, - labelLocation: 'top', - onInitialized: (e) => { - this.form = e.component; - }, - screenByWidth: (width) => (width < SCREEN_SIZE_OF_SINGLE_COLUMN || devices.current().deviceType !== 'desktop' ? 'xs' : 'lg'), - elementAttr: { - class: E2E_TEST_CLASSES.form, - }, - }); - } - - private dateBoxValueChanged(args, dateExpr, isNeedCorrect) { - validateAppointmentFormDate(args.component, args.value, args.previousValue); - - const value = dateSerialization.deserializeDate(args.value); - const previousValue = dateSerialization.deserializeDate(args.previousValue); - const dateEditor = this.form.getEditor(dateExpr); - const dateValue = dateSerialization.deserializeDate(dateEditor.option('value')); - - if (!this.isFormUpdating && dateValue && value && isNeedCorrect(dateValue, value)) { - const duration = previousValue ? dateValue.getTime() - previousValue.getTime() : 0; - dateEditor.option('value', new Date(value.getTime() + duration)); - } - } - - private createTimezoneEditor(timeZoneExpr, secondTimeZoneExpr, visibleIndex, colSpan, isMainTimeZone, cssClass, visible = false) { - const noTzTitle = messageLocalization.format('dxScheduler-noTimezoneTitle'); - - return { - name: this.normalizeEditorName(timeZoneExpr), - dataField: timeZoneExpr, - editorType: 'dxSelectBox', - visibleIndex, - colSpan, - cssClass, - label: { - text: ' ', - }, - editorOptions: { - displayExpr: 'title', - valueExpr: 'id', - placeholder: noTzTitle, - searchEnabled: true, - dataSource: createTimeZoneDataSource(), - onValueChanged: (args) => { - const { form } = this; - const secondTimezoneEditor = form.getEditor(secondTimeZoneExpr); - if (isMainTimeZone) { - secondTimezoneEditor.option('value', args.value); - } - }, - }, - visible, - }; - } - - private createDateBoxItems(dataExprs, allowTimeZoneEditing) { - const colSpan = allowTimeZoneEditing ? 2 : 1; - const firstDayOfWeek = this.scheduler.getFirstDayOfWeek(); - - return [ - this.createDateBoxEditor( - dataExprs.startDateExpr, - colSpan, - firstDayOfWeek, - 'dxScheduler-editorLabelStartDate', - E2E_TEST_CLASSES.startDateEditor, - (args) => { - this.dateBoxValueChanged(args, dataExprs.endDateExpr, (endValue, startValue) => endValue < startValue); - }, - ), - - this.createTimezoneEditor( - dataExprs.startDateTimeZoneExpr, - dataExprs.endDateTimeZoneExpr, - 1, - colSpan, - true, - E2E_TEST_CLASSES.startDateTimeZoneEditor, - allowTimeZoneEditing, - ), - - this.createDateBoxEditor( - dataExprs.endDateExpr, - colSpan, - firstDayOfWeek, - 'dxScheduler-editorLabelEndDate', - E2E_TEST_CLASSES.endDateEditor, - (args) => { - this.dateBoxValueChanged(args, dataExprs.startDateExpr, (startValue, endValue) => endValue < startValue); - }, - ), - - this.createTimezoneEditor( - dataExprs.endDateTimeZoneExpr, - dataExprs.startDateTimeZoneExpr, - 3, - colSpan, - false, - E2E_TEST_CLASSES.endDateTimeZoneEditor, - allowTimeZoneEditing, - ), - ]; - } - - private changeFormItemDateType(name: string, groupName: string, isAllDay: boolean): void { - const editorPath = this.getEditorPath(name, groupName); - const itemEditorOptions = this.form.itemOption(editorPath).editorOptions; - - const type = isAllDay ? 'date' : 'datetime'; - - const newEditorOption = { ...itemEditorOptions, type }; - - this.form.itemOption(editorPath, 'editorOptions', newEditorOption); - } - - private createMainItems(dataExprs, triggerResize, changeSize, allowTimeZoneEditing) { - return [ - { - name: this.normalizeEditorName(dataExprs.textExpr), - dataField: dataExprs.textExpr, - cssClass: E2E_TEST_CLASSES.textEditor, - editorType: 'dxTextBox', - colSpan: 2, - label: { - text: messageLocalization.format('dxScheduler-editorLabelTitle'), - }, - editorOptions: { - stylingMode: getStylingModeFunc(), - }, - }, - { - itemType: 'group', - colSpan: 2, - colCountByScreen: { - lg: 2, - xs: 1, - }, - items: this.createDateBoxItems(dataExprs, allowTimeZoneEditing), - }, - { - itemType: 'group', - colSpan: 2, - colCountByScreen: { - lg: 2, - xs: 2, - }, - items: [{ - name: this.normalizeEditorName(dataExprs.allDayExpr), - dataField: dataExprs.allDayExpr, - cssClass: `dx-appointment-form-switch ${E2E_TEST_CLASSES.allDaySwitch}`, - editorType: 'dxSwitch', - label: { - text: messageLocalization.format('dxScheduler-allDay'), - location: 'right', - }, - editorOptions: { - onValueChanged: (args) => { - const { value } = args; - const startDateEditor = this.form.getEditor(dataExprs.startDateExpr); - const endDateEditor = this.form.getEditor(dataExprs.endDateExpr); - const startDate = dateSerialization.deserializeDate(startDateEditor.option('value')); - - if (!this.isFormUpdating && startDate) { - if (value) { - const allDayStartDate = dateUtils.trimTime(startDate); - startDateEditor.option('value', new Date(allDayStartDate)); - endDateEditor.option('value', new Date(allDayStartDate)); - } else { - const startDateWithStartHour = getStartDateWithStartHour(startDate, this.scheduler.getStartDayHour()); - const endDate = this.scheduler.getCalculatedEndDate(startDateWithStartHour); - startDateEditor.option('value', startDateWithStartHour); - endDateEditor.option('value', endDate); - } - } - - this.changeFormItemDateType(dataExprs.startDateExpr, 'Main', value); - this.changeFormItemDateType(dataExprs.endDateExpr, 'Main', value); - }, - }, - }, { - editorType: 'dxSwitch', - dataField: 'repeat', - cssClass: `dx-appointment-form-switch ${E2E_TEST_CLASSES.recurrenceSwitch}`, - name: 'visibilityChanged', - label: { - text: messageLocalization.format('dxScheduler-editorLabelRecurrence'), - location: 'right', - }, - editorOptions: { - onValueChanged: (args) => { - const { form } = this; - const colSpan = args.value ? 1 : 2; - - form.itemOption(APPOINTMENT_FORM_GROUP_NAMES.Main, 'colSpan', colSpan); - form.itemOption(APPOINTMENT_FORM_GROUP_NAMES.Recurrence, 'colSpan', colSpan); - - updateRecurrenceItemVisibility(dataExprs.recurrenceRuleExpr, args.value, form); - - changeSize(args.value); - triggerResize(); - }, - }, - }], - }, - { - itemType: 'empty', - colSpan: 2, - }, - { - name: this.normalizeEditorName(dataExprs.descriptionExpr), - dataField: dataExprs.descriptionExpr, - cssClass: E2E_TEST_CLASSES.descriptionEditor, - editorType: 'dxTextArea', - colSpan: 2, - label: { - text: messageLocalization.format('dxScheduler-editorLabelDescription'), - }, - editorOptions: { - stylingMode: getStylingModeFunc(), - }, - }, - { - itemType: 'empty', - colSpan: 2, - }, - ]; - } - - private createRecurrenceEditor(dataExprs) { - return [{ - name: this.normalizeEditorName(dataExprs.recurrenceRuleExpr), - dataField: dataExprs.recurrenceRuleExpr, - editorType: 'dxRecurrenceEditor', - editorOptions: { - firstDayOfWeek: this.scheduler.getFirstDayOfWeek(), - timeZoneCalculator: this.scheduler.getTimeZoneCalculator(), - getStartDateTimeZone: () => this.scheduler.getDataAccessors().get('startDateTimeZone', this.formData), - }, - label: { - text: ' ', - visible: false, - }, - }]; - } - - private setEditorsType(allDay) { - const { startDateExpr, endDateExpr } = this.scheduler.getDataAccessors().expr; - - const startDateItemPath = this.getEditorPath(startDateExpr, 'Main'); - const endDateItemPath = this.getEditorPath(endDateExpr, 'Main'); - - const startDateFormItem = this.form.itemOption(startDateItemPath); - const endDateFormItem = this.form.itemOption(endDateItemPath); - - if (startDateFormItem && endDateFormItem) { - const startDateEditorOptions = startDateFormItem.editorOptions; - const endDateEditorOptions = endDateFormItem.editorOptions; - - startDateEditorOptions.type = endDateEditorOptions.type = allDay ? 'date' : 'datetime'; - - this.form.itemOption(startDateItemPath, 'editorOptions', startDateEditorOptions); - this.form.itemOption(endDateItemPath, 'editorOptions', endDateEditorOptions); - } - } - - private updateRecurrenceEditorStartDate(date, expression) { - const options = { startDate: date }; - - this.setEditorOptions(expression, 'Recurrence', options); - } - - private setEditorOptions(name, groupName: 'Main' | 'Recurrence', options) { - const editorPath = this.getEditorPath(name, groupName); - const editor = this.form.itemOption(editorPath); - - editor && this.form.itemOption(editorPath, 'editorOptions', extend({}, editor.editorOptions, options)); - } - - updateFormData(formData: Record): void { - this.isFormUpdating = true; - this.form.option('formData', formData); - - const dataAccessors = this.scheduler.getDataAccessors(); - const { expr } = dataAccessors; - - const rawStartDate = dataAccessors.get('startDate', formData); - - const allDay = dataAccessors.get('allDay', formData); - const startDate = new Date(rawStartDate); - - this.updateRecurrenceEditorStartDate(startDate, expr.recurrenceRuleExpr); - - this.setEditorsType(allDay); - this.isFormUpdating = false; - } - - private createDateBoxEditor(dataField, colSpan, firstDayOfWeek, label, cssClass, onValueChanged) { - return { - editorType: 'dxDateBox', - name: this.normalizeEditorName(dataField), - dataField, - colSpan, - cssClass, - label: { - text: messageLocalization.format(label), - }, - validationRules: [{ - type: 'required', - }], - editorOptions: { - stylingMode: getStylingModeFunc(), - width: '100%', - calendarOptions: { - firstDayOfWeek, - }, - onValueChanged, - useMaskBehavior: true, - }, - }; - } - - private getEditorPath(name: string, groupName: string): string { - const normalizedName = this.normalizeEditorName(name); - return `${APPOINTMENT_FORM_GROUP_NAMES[groupName]}.${normalizedName}`; - } - - private normalizeEditorName(name: string): string { - // NOTE: This ternary operator covers the "recurrenceRuleExpr: null/''" scenarios. - return name - ? name.replace(/\./g, '_') - : name; - } -} diff --git a/packages/devextreme/js/__internal/scheduler/appointment_popup/m_legacy_popup.ts b/packages/devextreme/js/__internal/scheduler/appointment_popup/m_legacy_popup.ts deleted file mode 100644 index b9864131c2c7..000000000000 --- a/packages/devextreme/js/__internal/scheduler/appointment_popup/m_legacy_popup.ts +++ /dev/null @@ -1,379 +0,0 @@ -import { triggerResizeEvent } from '@js/common/core/events/visibility_change'; -import messageLocalization from '@js/common/core/localization/message'; -import devices from '@js/core/devices'; -import $ from '@js/core/renderer'; -import dateUtils from '@js/core/utils/date'; -import { Deferred, when } from '@js/core/utils/deferred'; -import Popup from '@js/ui/popup/ui.popup'; -import { - getMaxWidth, - getPopupToolbarItems, - isPopupFullScreenNeeded, -} from '@ts/scheduler/r1/appointment_popup/index'; - -import { hide as hideLoading, show as showLoading } from '../m_loading'; -import { AppointmentAdapter } from '../utils/appointment_adapter/appointment_adapter'; -import { getAppointmentGroupValues, getRawAppointmentGroupValues } from '../utils/resource_manager/appointment_groups_utils'; - -const toMs = dateUtils.dateToMilliseconds; - -export const APPOINTMENT_POPUP_CLASS = 'dx-scheduler-legacy-appointment-popup'; - -const DAY_IN_MS = toMs('day'); - -const POPUP_CONFIG = { - height: 'auto', - maxHeight: '100%', - showCloseButton: false, - showTitle: false, - preventScrollEvents: false, - enableBodyScroll: false, - defaultOptionsRules: [ - { - device: () => devices.current().android, - options: { - showTitle: false, - }, - }, - ], - _ignorePreventScrollEventsDeprecation: true, -}; - -export const ACTION_TO_APPOINTMENT = { - CREATE: 0, - UPDATE: 1, - EXCLUDE_FROM_SERIES: 2, -}; - -export class AppointmentPopup { - scheduler: any; - - form: any; - - popup: any; - - state: any; - - constructor(scheduler, form) { - this.scheduler = scheduler; - this.form = form; - this.popup = null; - - this.state = { - action: null, - lastEditData: null, - saveChangesLocker: false, - appointment: { - data: null, - }, - }; - } - - get visible() { - return this.popup ? this.popup.option('visible') : false; - } - - show(appointment, config) { - this.state.appointment.data = appointment; - this.state.action = config.action; - this.state.excludeInfo = config.excludeInfo; - - if (!this.popup) { - const popupConfig = this.createPopupConfig(); - this.popup = this.createPopup(popupConfig); - } - - this.popup.option( - 'toolbarItems', - getPopupToolbarItems( - config.isToolbarVisible, - (e) => this.doneButtonClickHandler(e), - ), - ); - - this.popup.show(); - } - - hide() { - this.popup.hide(); - } - - dispose() { - this.popup?.$element().remove(); - } - - private createPopup(options) { - const popupElement = $('
') - .addClass(APPOINTMENT_POPUP_CLASS) - .appendTo(this.scheduler.getElement()); - - return this.scheduler.createComponent(popupElement, Popup, options); - } - - private createPopupConfig() { - return { - ...POPUP_CONFIG, - onHiding: () => this.scheduler.focus(), - contentTemplate: () => this.createPopupContent(), - onShowing: (e) => this.onShowing(e), - wrapperAttr: { class: APPOINTMENT_POPUP_CLASS }, - }; - } - - private onShowing(e) { - this.updateForm(); - - e.component.$overlayContent().attr( - 'aria-label', - messageLocalization.format('dxScheduler-ariaEditForm'), - ); - - const arg = { - form: this.form.dxForm, - popup: this.popup, - appointmentData: this.state.appointment.data, - cancel: false, - }; - - this.scheduler.getAppointmentFormOpening()(arg); - this.scheduler.processActionResult(arg, (canceled) => { - if (canceled) { - e.cancel = true; - } else { - this.updatePopupFullScreenMode(); - } - }); - } - - private createPopupContent() { - this.createForm(); - return this.form.dxForm.$element(); // TODO - } - - private createFormData(rawAppointment) { - const appointment = this.createAppointmentAdapter(rawAppointment); - const resourceManager = this.scheduler.getResourceManager(); - const rawAppointmentGroupValues = getRawAppointmentGroupValues( - rawAppointment, - resourceManager.resources, - ); - - return { - ...rawAppointment, - ...rawAppointmentGroupValues, - repeat: Boolean(appointment.recurrenceRule), - }; - } - - private createForm() { - const rawAppointment = this.state.appointment.data; - const formData = this.createFormData(rawAppointment); - - this.form.create(this.triggerResize.bind(this), this.changeSize.bind(this), formData); // TODO - } - - private isReadOnly(rawAppointment) { - const appointment = this.createAppointmentAdapter(rawAppointment); - - if (rawAppointment && appointment.disabled) { - return true; - } - - if (this.state.action === ACTION_TO_APPOINTMENT.CREATE) { - return false; - } - - return !this.scheduler.getEditingConfig().allowUpdating; - } - - private createAppointmentAdapter(rawAppointment) { - return new AppointmentAdapter( - rawAppointment, - this.scheduler.getDataAccessors(), - ); - } - - private updateForm() { - const { data } = this.state.appointment; - const appointment = this.createFormData(data); - const formData = this.createAppointmentAdapter(appointment) - .clone() - .calculateDates(this.scheduler.getTimeZoneCalculator(), 'toAppointment') - .source; - - this.form.readOnly = this.isReadOnly(formData); - this.form.updateFormData(formData); - } - - triggerResize() { - if (this.popup) { - triggerResizeEvent(this.popup.$element()); - } - } - - changeSize(isRecurrence) { - if (this.popup) { - const isFullScreen = isPopupFullScreenNeeded(); - const maxWidth = isFullScreen - ? '100%' - : getMaxWidth(isRecurrence); - this.popup.option('fullScreen', isFullScreen); - this.popup.option('maxWidth', maxWidth); - } - } - - updatePopupFullScreenMode() { - if (this.form.dxForm && this.visible) { // TODO - const { formData } = this.form; - const dataAccessors = this.scheduler.getDataAccessors(); - const isRecurrence = dataAccessors.get('recurrenceRule', formData); - - this.changeSize(isRecurrence); - } - } - - saveChangesAsync(isShowLoadPanel) { - // @ts-expect-error - const deferred = new Deferred(); - const validation = this.form.dxForm.validate(); - - isShowLoadPanel && this.showLoadPanel(); - - when(validation?.complete || validation).done((validation) => { - if (validation && !validation.isValid) { - hideLoading(); - deferred.resolve(false); - return; - } - - const { repeat } = this.form.formData; - const adapter = this.createAppointmentAdapter(this.form.formData); - const clonedAdapter = adapter - .clone() - .calculateDates(this.scheduler.getTimeZoneCalculator(), 'fromAppointment'); - const shouldClearRecurrenceRule = !repeat && Boolean(clonedAdapter.recurrenceRule); - - this.addMissingDSTTime(adapter, clonedAdapter); - - if (shouldClearRecurrenceRule) { - clonedAdapter.recurrenceRule = ''; - } - - const appointment = clonedAdapter.source; - delete appointment.repeat; // TODO - - switch (this.state.action) { - case ACTION_TO_APPOINTMENT.CREATE: - this.scheduler.addAppointment(appointment).done(deferred.resolve); - break; - case ACTION_TO_APPOINTMENT.UPDATE: - this.scheduler.updateAppointment(this.state.appointment.data, appointment).done(deferred.resolve); - break; - case ACTION_TO_APPOINTMENT.EXCLUDE_FROM_SERIES: - this.scheduler.updateAppointment(this.state.excludeInfo.sourceAppointment, this.state.excludeInfo.updatedAppointment); - this.scheduler.addAppointment(appointment).done(deferred.resolve); - break; - default: - break; - } - - deferred.done(() => { - hideLoading(); - this.state.lastEditData = appointment; - }); - }); - - return deferred.promise(); - } - - private doneButtonClickHandler(e) { - e.cancel = true; - this.saveEditDataAsync(); - } - - saveEditDataAsync() { - // @ts-expect-error - const deferred = new Deferred(); - - if (this.tryLockSaveChanges()) { - when(this.saveChangesAsync(true)).done(() => { - if (this.state.lastEditData) { // TODO - const adapter = this.createAppointmentAdapter(this.state.lastEditData); - - const { startDate, endDate, allDay } = adapter; - - const startTime = startDate.getTime(); - const endTime = endDate.getTime(); - - const inAllDayRow = allDay || (endTime - startTime) >= DAY_IN_MS; - const resourceManager = this.scheduler.getResourceManager(); - const appointmentGroupValues = getAppointmentGroupValues( - this.state.lastEditData, - resourceManager.resources, - ); - - this.scheduler.updateScrollPosition(startDate, appointmentGroupValues, inAllDayRow); - this.state.lastEditData = null; - } - - this.unlockSaveChanges(); - - deferred.resolve(); - }); - } - - return deferred.promise(); - } - - private showLoadPanel() { - const container = this.popup.$overlayContent(); - - showLoading({ - container, - position: { - of: container, - }, - }); - } - - private tryLockSaveChanges() { - if (this.state.saveChangesLocker === false) { - this.state.saveChangesLocker = true; - return true; - } - return false; - } - - private unlockSaveChanges() { - this.state.saveChangesLocker = false; - } - - // NOTE: Fix ticket T1102713 - private addMissingDSTTime(formAppointmentAdapter, clonedAppointmentAdapter) { - const timeZoneCalculator = this.scheduler.getTimeZoneCalculator(); - - clonedAppointmentAdapter.startDate = this.addMissingDSTShiftToDate( - timeZoneCalculator, - formAppointmentAdapter.startDate, - clonedAppointmentAdapter.startDate, - ); - - if (clonedAppointmentAdapter.endDate) { - clonedAppointmentAdapter.endDate = this.addMissingDSTShiftToDate( - timeZoneCalculator, - formAppointmentAdapter.endDate, - clonedAppointmentAdapter.endDate, - ); - } - } - - private addMissingDSTShiftToDate(timeZoneCalculator, originFormDate, clonedDate) { - const originTimezoneShift = timeZoneCalculator.getOffsets(originFormDate)?.common; - const clonedTimezoneShift = timeZoneCalculator.getOffsets(clonedDate)?.common; - const shiftDifference = originTimezoneShift - clonedTimezoneShift; - - return shiftDifference - ? new Date(clonedDate.getTime() + shiftDifference * toMs('hour')) - : clonedDate; - } -} diff --git a/packages/devextreme/js/__internal/scheduler/m_scheduler.ts b/packages/devextreme/js/__internal/scheduler/m_scheduler.ts index 7b446445240b..2a701eceffdf 100644 --- a/packages/devextreme/js/__internal/scheduler/m_scheduler.ts +++ b/packages/devextreme/js/__internal/scheduler/m_scheduler.ts @@ -38,9 +38,7 @@ import { dateUtilsTs } from '@ts/core/utils/date'; import { createA11yStatusContainer } from './a11y_status/a11y_status_render'; import { getA11yStatusText } from './a11y_status/a11y_status_text'; import { AppointmentForm } from './appointment_popup/m_form'; -import { AppointmentForm as AppointmentLegacyForm } from './appointment_popup/m_legacy_form'; -import { ACTION_TO_APPOINTMENT, AppointmentPopup as AppointmentLegacyPopup } from './appointment_popup/m_legacy_popup'; -import { AppointmentPopup } from './appointment_popup/m_popup'; +import { ACTION_TO_APPOINTMENT, AppointmentPopup } from './appointment_popup/m_popup'; import AppointmentCollection from './appointments/m_appointment_collection'; import type { AppointmentsProperties } from './appointments_new/appointments'; import { Appointments } from './appointments_new/appointments'; @@ -81,7 +79,6 @@ import { isAgendaWorkspaceComponent } from './utils/is_agenda_workpace_component import { VIEWS } from './utils/options/constants_view'; import type { NormalizedView } from './utils/options/types'; import { setAppointmentGroupValues } from './utils/resource_manager/appointment_groups_utils'; -import { createResourceEditorModel } from './utils/resource_manager/popup_utils'; import { ResourceManager } from './utils/resource_manager/resource_manager'; import AppointmentLayoutManager from './view_model/appointments_layout_manager'; import { AppointmentDataSource } from './view_model/m_appointment_data_source'; @@ -943,7 +940,6 @@ class Scheduler extends SchedulerOptionsBaseWidget { allowDeleting: Boolean(editing), allowResizing: Boolean(editing), allowDragging: Boolean(editing), - legacyForm: false, }; if (isObject(editing)) { @@ -1130,12 +1126,6 @@ class Scheduler extends SchedulerOptionsBaseWidget { getTimeZoneCalculator: () => this.timeZoneCalculator, }; - if (this.editing.legacyForm) { - (scheduler as any).createResourceEditorModel = () => createResourceEditorModel(this.resourceManager.resourceById); - - return new AppointmentLegacyForm(scheduler); - } - return new AppointmentForm(scheduler); } @@ -1162,9 +1152,7 @@ class Scheduler extends SchedulerOptionsBaseWidget { this._workSpace.updateScrollPosition(startDate, appointmentGroupValues, inAllDayRow); }, }; - return this.editing.legacyForm - ? new AppointmentLegacyPopup(scheduler, form) - : new AppointmentPopup(scheduler, form); + return new AppointmentPopup(scheduler, form); } private getAppointmentTooltipOptions() { @@ -1624,7 +1612,7 @@ class Scheduler extends SchedulerOptionsBaseWidget { if (isPopupEditing) { this.appointmentPopup.show(singleRawAppointment, { - isToolbarVisible: true, // TODO: remove when legacyForm is deleted + isToolbarVisible: true, action: ACTION_TO_APPOINTMENT.EXCLUDE_FROM_SERIES, excludeInfo: { sourceAppointment: rawAppointment, @@ -1908,8 +1896,7 @@ class Scheduler extends SchedulerOptionsBaseWidget { } /// #DEBUG - // TODO: remove when legacyForm is deleted - getAppointmentDetailsForm() { // for tests + getAppointmentDetailsForm() { return this.appointmentForm.form; } /// #ENDDEBUG @@ -2006,7 +1993,7 @@ class Scheduler extends SchedulerOptionsBaseWidget { if (isCreateAppointment) { delete this.editAppointmentData; // TODO this.editing.allowAdding && this.appointmentPopup.show(rawAppointment, { - isToolbarVisible: true, // TODO: remove when legacyForm is deleted + isToolbarVisible: true, action: ACTION_TO_APPOINTMENT.CREATE, }); } else { @@ -2016,7 +2003,7 @@ class Scheduler extends SchedulerOptionsBaseWidget { this.editAppointmentData = rawAppointment; // TODO this.appointmentPopup.show(rawAppointment, { - isToolbarVisible: this.editing.allowUpdating, // TODO: remove when legacyForm is deleted + isToolbarVisible: this.editing.allowUpdating, action: ACTION_TO_APPOINTMENT.UPDATE, }); }, false, true); diff --git a/packages/devextreme/js/__internal/scheduler/utils/options/constants.ts b/packages/devextreme/js/__internal/scheduler/utils/options/constants.ts index 8bbab436d6c8..f90336158407 100644 --- a/packages/devextreme/js/__internal/scheduler/utils/options/constants.ts +++ b/packages/devextreme/js/__internal/scheduler/utils/options/constants.ts @@ -103,7 +103,6 @@ export const DEFAULT_SCHEDULER_INTERNAL_OPTIONS: SchedulerInternalOptions = { indicatorTime: undefined, renovateRender: true, editing: { - legacyForm: false, // @ts-expect-error copy from default so that you can rewrite it ...DEFAULT_SCHEDULER_OPTIONS.editing, popup: {}, diff --git a/packages/devextreme/js/__internal/scheduler/utils/options/types.ts b/packages/devextreme/js/__internal/scheduler/utils/options/types.ts index b3e17098bce7..507cb2090c06 100644 --- a/packages/devextreme/js/__internal/scheduler/utils/options/types.ts +++ b/packages/devextreme/js/__internal/scheduler/utils/options/types.ts @@ -23,9 +23,7 @@ export type NormalizedView = View | AgendaView; export interface SchedulerInternalOptions { indicatorTime?: Date; renovateRender: boolean; - editing: Properties['editing'] | { - legacyForm: boolean; - }; + editing: Properties['editing']; _draggingMode: 'outlook' | 'default'; _appointmentTooltipOffset: { x: number; y: number }; appointmentPopupTemplate: template; diff --git a/packages/devextreme/js/__internal/scheduler/utils/resource_manager/popup_utils.test.ts b/packages/devextreme/js/__internal/scheduler/utils/resource_manager/popup_utils.test.ts deleted file mode 100644 index 5875f5bbd601..000000000000 --- a/packages/devextreme/js/__internal/scheduler/utils/resource_manager/popup_utils.test.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { - describe, expect, it, -} from '@jest/globals'; -import { - getResourceManagerMock, -} from '@ts/scheduler/__mock__/resource_manager.mock'; - -import { createResourceEditorModel } from './popup_utils'; - -describe('popup utils', () => { - describe('createResourceEditorModel', () => { - it('should return resource editor model', () => { - const manager = getResourceManagerMock(); - - expect( - createResourceEditorModel(manager.resourceById), - ).toEqual([ - { - dataField: 'nested.priorityId', - editorOptions: { - dataSource: expect.anything(), - displayExpr: 'text', - stylingMode: 'outlined', - valueExpr: 'id', - }, - editorType: 'dxSelectBox', - label: { text: 'Priority' }, - }, - { - dataField: 'assigneeId', - editorOptions: { - dataSource: expect.anything(), - displayExpr: 'name', - stylingMode: 'outlined', - valueExpr: 'guid', - }, - editorType: 'dxTagBox', - label: { text: 'Assignee' }, - }, - { - dataField: 'roomId', - editorOptions: { - dataSource: expect.anything(), - displayExpr: 'text', - stylingMode: 'outlined', - valueExpr: 'id', - }, - editorType: 'dxSelectBox', - label: { text: 'Room' }, - }, - ]); - }); - - it('Resource editor should always have label', () => { - expect( - createResourceEditorModel({ - roomId: { resourceIndex: 'roomId', dataAccessor: {} }, - } as any), - ).toEqual([ - { - dataField: 'roomId', - editorOptions: { - stylingMode: 'outlined', - }, - editorType: 'dxSelectBox', - label: { - text: 'roomId', - }, - }, - ]); - }); - }); -}); diff --git a/packages/devextreme/js/__internal/scheduler/utils/resource_manager/popup_utils.ts b/packages/devextreme/js/__internal/scheduler/utils/resource_manager/popup_utils.ts deleted file mode 100644 index c044bc8a4ac4..000000000000 --- a/packages/devextreme/js/__internal/scheduler/utils/resource_manager/popup_utils.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { SimpleItem } from '@js/ui/form'; -import { current, isFluent } from '@js/ui/themes'; - -import type { ResourceLoader } from '../loader/resource_loader'; - -export const createResourceEditorModel = ( - resourceById: Record, -): SimpleItem[] => Object - .values(resourceById) - .map((resourceLoader) => { - const dataField = resourceLoader.resourceIndex; - - return { - editorOptions: { - dataSource: resourceLoader.dataSource, - displayExpr: resourceLoader.dataAccessor.textExpr, - valueExpr: resourceLoader.dataAccessor.idExpr, - stylingMode: isFluent(current()) ? 'filled' : 'outlined', - }, - dataField, - editorType: resourceLoader.allowMultiple ? 'dxTagBox' : 'dxSelectBox', - label: { text: resourceLoader.resourceName ?? dataField }, - }; - }); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js index 4ec7e23ebe92..071b47c6b6af 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js @@ -102,7 +102,7 @@ module('Integration: Appointment editing', { views: ['month'], startDateExpr: 'start', endDateExpr: 'end', - editing: { legacyForm: true }, + }); scheduler.appointments.dblclick(0); @@ -214,7 +214,7 @@ module('Integration: Appointment editing', { const scheduler = await this.createInstance({ currentDate: new Date(2015, 1, 9), dataSource: data, - editing: { legacyForm: true } + }); const addAppointment = scheduler.instance.addAppointment; const spy = sinon.spy(() => new Deferred()); @@ -315,7 +315,7 @@ module('Integration: Appointment editing', { const scheduler = await this.createInstance({ currentDate: new Date(2015, 1, 9), dataSource: data, - editing: { legacyForm: true } + }); const updateAppointment = scheduler.instance.updateAppointment; diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.monthView.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.monthView.tests.js index 77b4b65e3c2c..d9852fbd5590 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.monthView.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.monthView.tests.js @@ -7,7 +7,6 @@ import Color from 'color'; import { DataSource } from 'common/data/data_source/data_source'; import { CustomStore } from 'common/data/custom_store'; import browser from 'core/utils/browser'; -import { APPOINTMENT_FORM_GROUP_NAMES } from '__internal/scheduler/appointment_popup/m_legacy_form'; import { initTestMarkup, createWrapper, @@ -401,7 +400,6 @@ module('Integration: Appointments in Month view', { startDateExpr: 'start', endDateExpr: 'end', editing: { - legacyForm: true, } }); @@ -443,7 +441,6 @@ module('Integration: Appointments in Month view', { startDateExpr: 'start', endDateExpr: 'end', editing: { - legacyForm: true, } }); @@ -469,7 +466,7 @@ module('Integration: Appointments in Month view', { form = scheduler.instance.getAppointmentDetailsForm(); - assert.equal(form.itemOption(APPOINTMENT_FORM_GROUP_NAMES.Recurrence).visible, false, 'Recurrence editor is hidden. Popup is correct'); + assert.equal(form.itemOption('recurrenceGroup').visible, false, 'Recurrence editor is hidden. Popup is correct'); }); test('Long term appoinment inflict index shift in other appointments (T737780)', async function(assert) { diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.week.based.views.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.week.based.views.tests.js index 0ac27d900990..6e2b8daa2b5a 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.week.based.views.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.week.based.views.tests.js @@ -260,7 +260,7 @@ module('Integration: Appointment Day, Week views', { store: [task] }), currentDate: new Date(2015, 3, 23), - editing: { legacyForm: true } + }); scheduler.instance.showAppointmentPopup(task); @@ -829,7 +829,7 @@ module('Integration: Appointment Day, Week views', { startDateExpr: 'start', endDateExpr: 'end', allDayExpr: 'AllDay', - editing: { legacyForm: true } + }); scheduler.instance.showAppointmentPopup(tasks[0]); scheduler.instance.hideAppointmentPopup(); @@ -903,7 +903,7 @@ module('Integration: Appointment Day, Week views', { views: ['week'], startDateExpr: 'StartDate', endDateExpr: 'EndDate', - editing: { legacyForm: true }, + onAppointmentFormOpening: function(data) { const form = data.form; let startDate = data.appointmentData.StartDate; diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/common.events.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/common.events.tests.js index 1cc60e62406e..672cd727ac5b 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/common.events.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/common.events.tests.js @@ -625,7 +625,6 @@ QUnit.module('Events', { currentView: 'month', onAppointmentFormOpening: stub, editing: { - legacyForm: true }, }); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/common.options.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/common.options.tests.js index b472ed64da73..575f8438f9cd 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/common.options.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/common.options.tests.js @@ -585,7 +585,6 @@ QUnit.module('Options', () => { allowResizing: true, allowDragging: true, allowTimeZoneEditing: false, - legacyForm: false, form: { iconsShowMode: 'main' }, diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/editing.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/editing.tests.js index 01d374a2d30e..6b4e95fc64ab 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/editing.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/editing.tests.js @@ -81,7 +81,6 @@ QUnit.test('ReadOnly option should be passed to the details appointment view', a await this.createInstance({ editing: { allowUpdating: false, - legacyForm: true } }); @@ -110,7 +109,6 @@ QUnit.test('Details appointment view should be readOnly if editing.allowUpdating await this.createInstance({ editing: { allowUpdating: false, - legacyForm: true } }); @@ -143,7 +141,6 @@ QUnit.test('Details appointment view shouldn\'t be readOnly when adding new appo editing: { allowUpdating: false, allowAdding: true, - legacyForm: true } }); @@ -163,7 +160,6 @@ QUnit.test('Details appointment form should be readOnly after adding new appoint currentDate: new Date(2015, 5, 14), editing: { allowUpdating: false, - legacyForm: true }, dataSource: [] }); @@ -189,7 +185,6 @@ QUnit.test('Details form of new appointment shouldn\'t be readOnly after try to currentDate: new Date(2015, 5, 14), editing: { allowUpdating: false, - legacyForm: true }, dataSource: [first] }); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.adaptivity.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.adaptivity.tests.js index c565791c2555..7af17d0de071 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.adaptivity.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.adaptivity.tests.js @@ -158,7 +158,7 @@ if(isDesktopEnvironment()) { } }, () => { test('Items has layout with one column when the form\'s width < 600px', async function(assert) { - const scheduler = await createInstance({ editing: { legacyForm: true } }); + const scheduler = await createInstance({ }); setWindowWidth(500); scheduler.appointments.compact.click(); scheduler.tooltip.clickOnItem(); @@ -167,7 +167,7 @@ if(isDesktopEnvironment()) { }); test('Items with recurrence editor has layout with one column when the form\'s width < 600px', async function(assert) { - const scheduler = await createInstance({ editing: { legacyForm: true } }); + const scheduler = await createInstance({ }); setWindowWidth(500); scheduler.option('dataSource', [{ startDate: new Date(2015, 1, 1), @@ -182,7 +182,7 @@ if(isDesktopEnvironment()) { }); test('Items has layout with non-one column when the form\'s width > 600px', async function(assert) { - const scheduler = await createInstance({ editing: { legacyForm: true } }); + const scheduler = await createInstance({ }); setWindowWidth(700); scheduler.appointments.compact.click(); scheduler.tooltip.clickOnItem(); @@ -191,7 +191,7 @@ if(isDesktopEnvironment()) { }); test('Items with recurrence editor has layout with non-one column when the form\'s width > 600px', async function(assert) { - const scheduler = await createInstance({ editing: { legacyForm: true } }); + const scheduler = await createInstance({ }); setWindowWidth(700); scheduler.option('dataSource', [{ startDate: new Date(2015, 1, 1), @@ -206,7 +206,7 @@ if(isDesktopEnvironment()) { }); test('Items has layout with one column when the form\'s width < 600px on window resizing', async function(assert) { - const scheduler = await createInstance({ editing: { legacyForm: true } }); + const scheduler = await createInstance({ }); setWindowWidth(700); scheduler.appointments.compact.click(); scheduler.tooltip.clickOnItem(); @@ -218,7 +218,7 @@ if(isDesktopEnvironment()) { }); test('Items has layout with non-one column when the form\'s width > 600px on window resizing', async function(assert) { - const scheduler = await createInstance({ editing: { legacyForm: true } }); + const scheduler = await createInstance({ }); setWindowWidth(500); scheduler.appointments.compact.click(); scheduler.tooltip.clickOnItem(); @@ -244,7 +244,7 @@ if(!isDesktopEnvironment()) { } }, () => { test('Items has layout with one column', async function(assert) { - const scheduler = await createInstance({ editing: { legacyForm: true } }); + const scheduler = await createInstance({ }); scheduler.appointments.compact.click(); scheduler.tooltip.clickOnItem(); @@ -267,7 +267,7 @@ if(isDesktopEnvironment()) { test('The fullscreen mode is enabled of popup when window\'s width < 1000px', async function(assert) { setWindowWidth(900); - const scheduler = await createInstance({ editing: { legacyForm: true } }); + const scheduler = await createInstance({ }); scheduler.appointments.compact.click(); scheduler.tooltip.clickOnItem(); const popup = scheduler.appointmentPopup.getPopupInstance(); @@ -279,7 +279,7 @@ if(isDesktopEnvironment()) { test('The fullscreen mode is disabled of popup when window\'s width > 1000px', async function(assert) { setWindowWidth(1001); - const scheduler = await createInstance({ editing: { legacyForm: true } }); + const scheduler = await createInstance({ }); scheduler.appointments.compact.click(); scheduler.tooltip.clickOnItem(); const popup = scheduler.appointmentPopup.getPopupInstance(); @@ -291,7 +291,7 @@ if(isDesktopEnvironment()) { test('The fullscreen mode is disabled of popup when window\'s width > 1000px, with recurrence editor', async function(assert) { setWindowWidth(1001); - const scheduler = await createInstance({ editing: { legacyForm: true } }); + const scheduler = await createInstance({ }); scheduler.option('dataSource', [{ startDate: new Date(2015, 1, 1), endDate: new Date(2015, 1, 2), @@ -310,7 +310,7 @@ if(isDesktopEnvironment()) { test('The fullscreen mode is enabled of popup when the window\'s width < 1000px by resizing the window', async function(assert) { setWindowWidth(1001); - const scheduler = await createInstance({ editing: { legacyForm: true } }); + const scheduler = await createInstance({ }); scheduler.appointments.compact.click(); scheduler.tooltip.clickOnItem(); const popup = scheduler.appointmentPopup.getPopupInstance(); @@ -325,7 +325,7 @@ if(isDesktopEnvironment()) { test('The fullscreen mode is disabled of popup when the window\'s width > 1000px by resizing the window', async function(assert) { setWindowWidth(799); - const scheduler = await createInstance({ editing: { legacyForm: true } }); + const scheduler = await createInstance({ }); scheduler.appointments.compact.click(); scheduler.tooltip.clickOnItem(); const popup = scheduler.appointmentPopup.getPopupInstance(); @@ -353,7 +353,7 @@ if(!isDesktopEnvironment()) { test('The fullscreen mode is enabled of popup when window\'s width < 500px', async function(assert) { setWindowWidth(499); - const scheduler = await createInstance({ editing: { legacyForm: true } }); + const scheduler = await createInstance({ }); scheduler.appointments.compact.click(); scheduler.tooltip.clickOnItem(); const popup = scheduler.appointmentPopup.getPopupInstance(); @@ -365,7 +365,7 @@ if(!isDesktopEnvironment()) { test('The fullscreen mode is disabled of popup when window\'s width > 500px', async function(assert) { setWindowWidth(501); - const scheduler = await createInstance({ editing: { legacyForm: true } }); + const scheduler = await createInstance({ }); scheduler.appointments.compact.click(); scheduler.tooltip.clickOnItem(); const popup = scheduler.appointmentPopup.getPopupInstance(); @@ -377,7 +377,7 @@ if(!isDesktopEnvironment()) { test('The fullscreen mode is disabled of popup when window\'s width > 500px, with recurrence editor', async function(assert) { setWindowWidth(501); - const scheduler = await createInstance({ editing: { legacyForm: true } }); + const scheduler = await createInstance({ }); scheduler.option('dataSource', [{ startDate: new Date(2015, 1, 1), endDate: new Date(2015, 1, 2), @@ -403,7 +403,7 @@ module('Appointment popup buttons', moduleConfig, () => { test('Buttons location of the top toolbar for the iOs device', async function(assert) { this.realDeviceMock = sinon.stub(devices, 'current').returns({ platform: 'ios' }); try { - const scheduler = await createInstance({ editing: { legacyForm: true } }); + const scheduler = await createInstance({ }); scheduler.appointments.compact.click(); scheduler.tooltip.clickOnItem(); @@ -418,7 +418,7 @@ module('Appointment popup buttons', moduleConfig, () => { test('Buttons location of the top toolbar for the desktop', async function(assert) { this.realDeviceMock = sinon.stub(devices, 'current').returns({ platform: 'generic' }); try { - const scheduler = await createInstance({ editing: { legacyForm: true } }); + const scheduler = await createInstance({ }); scheduler.appointments.compact.click(); scheduler.tooltip.clickOnItem(); @@ -432,7 +432,7 @@ module('Appointment popup buttons', moduleConfig, () => { test('Buttons location of the top toolbar for the android device', async function(assert) { this.realDeviceMock = sinon.stub(devices, 'current').returns({ platform: 'android' }); try { - const scheduler = await createInstance({ editing: { legacyForm: true } }); + const scheduler = await createInstance({ }); scheduler.appointments.compact.click(); scheduler.tooltip.clickOnItem(); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.agenda.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.agenda.tests.js index bf9e6e10f6f9..f2b037898378 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.agenda.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.agenda.tests.js @@ -1223,7 +1223,7 @@ module('Integration: Agenda', moduleConfig, () => { dataSource: [ { Start: new Date(2016, 1, 24, 1), endDate: new Date(2016, 1, 27, 1, 30), text: 'a' } ], - editing: { legacyForm: true } + }); const $appointment = $(instance.$element()).find('.dx-scheduler-appointment').eq(1); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.appointmentCollector.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.appointmentCollector.tests.js index 3c580c6865dd..5ddd8f299f5a 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.appointmentCollector.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.appointmentCollector.tests.js @@ -64,7 +64,6 @@ module('Integration: collector', baseConfig, () => { assert.equal(startDate.getDate(), 16, 'Recurrence appointment date should be display equal targetedAppointmentData date in form'); }, editing: { - legacyForm: true }, maxAppointmentsPerCell: 2 }); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.base.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.base.tests.js index a4fbeed8c982..6f92746e6480 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.base.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.base.tests.js @@ -258,7 +258,7 @@ QUnit.test('Scheduler should not throw an error when the details form is opened }); QUnit.test('The \'scrollingEnabled\' option of an appointment form should be \'true\'', async function(assert) { - await this.createInstance({ editing: { legacyForm: true } }); + await this.createInstance({ }); this.instance.showAppointmentPopup({ startDate: new Date() }); assert.strictEqual(this.instance.getAppointmentDetailsForm().option('scrollingEnabled'), true, 'the scrollingEnabled option is OK'); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js index 0ac102184caf..70fa05585fab 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js @@ -683,7 +683,7 @@ supportedScrollingModes.forEach(scrollingMode => { dataSource: data, currentView: 'week', firstDayOfWeek: 1, - editing: { legacyForm: true } + }); const clock = sinon.useFakeTimers(); @@ -732,7 +732,7 @@ supportedScrollingModes.forEach(scrollingMode => { onAppointmentAdding: (e) => { e.appointmentData.customData.texts.push('456'); }, - editing: { legacyForm: true }, + firstDayOfWeek: 1 }); @@ -882,7 +882,7 @@ supportedScrollingModes.forEach(scrollingMode => { dataSource: data, currentView: 'week', firstDayOfWeek: 1, - editing: { legacyForm: true } + }); const clock = sinon.useFakeTimers(); $(scheduler.instance.$element()).find('.dx-scheduler-appointment').eq(2).trigger(dblclickEvent.name); @@ -1330,7 +1330,7 @@ supportedScrollingModes.forEach(scrollingMode => { endDate: '2018-05-23T10:30:00Z', recurrenceRule: 'FREQ=DAILY' }], - editing: { legacyForm: true }, + views: ['week'], currentView: 'week', currentDate: new Date(2018, 4, 23), @@ -1678,7 +1678,7 @@ supportedScrollingModes.forEach(scrollingMode => { endDate: apptEndDate, recurrenceRule: 'FREQ=MINUTELY;COUNT=3' }], - editing: { legacyForm: true }, + currentDate: apptStartDate, }); @@ -1706,7 +1706,7 @@ supportedScrollingModes.forEach(scrollingMode => { endDate: apptEndDate, recurrenceRule: 'FREQ=HOURLY;COUNT=3' }], - editing: { legacyForm: true }, + currentDate: apptStartDate, }); 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 e4e80637fedd..2f6c1bc3c0d3 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 @@ -177,7 +177,7 @@ QUnit.module('Integration: Resources', moduleConfig, () => { onAppointmentFormOpeningRaised = true; }, - editing: { legacyForm: true }, + resources: resources, dataSource: dataSource, currentDate: new Date(2015, 1, 9) @@ -241,7 +241,7 @@ QUnit.module('Integration: Resources', moduleConfig, () => { store: [task1, task2] }), currentDate: new Date(2015, 1, 9), - editing: { legacyForm: true } + }); scheduler.instance.showAppointmentPopup(task1); @@ -296,7 +296,7 @@ QUnit.module('Integration: Resources', moduleConfig, () => { store: [task] }), currentDate: new Date(2015, 1, 9), - editing: { legacyForm: true } + }); scheduler.instance.showAppointmentPopup(task); @@ -347,7 +347,7 @@ QUnit.module('Integration: Resources', moduleConfig, () => { resources: resources, dataSource: [appointment], currentDate: new Date(2015, 4, 24), - editing: { legacyForm: true } + }); scheduler.instance.showAppointmentPopup(appointment); @@ -506,7 +506,7 @@ QUnit.module('Integration: Resources', moduleConfig, () => { byKey: byKeyStub }) }], - editing: { legacyForm: true } + }); assert.equal(loadStub.callCount, 1, 'Resources are loaded only once'); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/legacyAppointmentPopup.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/legacyAppointmentPopup.tests.js deleted file mode 100644 index fd570f89c2d2..000000000000 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/legacyAppointmentPopup.tests.js +++ /dev/null @@ -1,1995 +0,0 @@ -import 'fluent_blue_light.css!'; - -import { initTestMarkup, createWrapper, isDesktopEnvironment } from '../../helpers/scheduler/helpers.js'; -import { waitAsync } from '../../helpers/scheduler/waitForAsync.js'; - -import $ from 'jquery'; -import devices from '__internal/core/m_devices'; -import SelectBox from 'ui/select_box'; -import fx from 'common/core/animation/fx'; -import { DataSource } from 'common/data/data_source/data_source'; -import resizeCallbacks from 'core/utils/resize_callbacks'; -import messageLocalization from 'common/core/localization/message'; -import { APPOINTMENT_FORM_GROUP_NAMES } from '__internal/scheduler/appointment_popup/m_legacy_form'; -import { dateToMilliseconds as toMs } from 'core/utils/date'; -import '__internal/scheduler/m_scheduler'; -import 'ui/switch'; -import viewPort from 'core/utils/view_port'; -import browser from 'core/utils/browser'; -import timezoneUtils from '__internal/scheduler/m_utils_time_zone'; - - -const { module, test, testStart } = QUnit; - -const APPOINTMENT_POPUP_WIDTH = 485; -const APPOINTMENT_POPUP_WIDTH_WITH_RECURRENCE = 970; -const checkFormWithRecurrenceEditor = (assert, instance, visibility) => { - const width = visibility === true ? APPOINTMENT_POPUP_WIDTH_WITH_RECURRENCE : APPOINTMENT_POPUP_WIDTH; - const colSpan = visibility === true ? 1 : 2; - const form = instance.getAppointmentDetailsForm(); - - assert.equal(form.itemOption(APPOINTMENT_FORM_GROUP_NAMES.Recurrence).visible, - visibility, `Recurrence Editor is ${visibility === true ? 'visible' : 'not visible'}`); - - assert.equal(form.itemOption(APPOINTMENT_FORM_GROUP_NAMES.Main).colSpan, colSpan, 'colSpan of main group is correct'); - assert.equal(form.itemOption(APPOINTMENT_FORM_GROUP_NAMES.Recurrence).colSpan, colSpan, 'colSpan of recurrence group is correct'); - - assert.equal(instance.appointmentPopup.popup.option('maxWidth'), width, 'maxWidth of popup is correct'); -}; - -const createInstance = (options) => { - const defaultOption = { - dataSource: [], - maxAppointmentsPerCell: 2, - editing: { - legacyForm: true, - } - }; - - return createWrapper($.extend(true, defaultOption, options)); -}; - -const moduleOptions = { - beforeEach: function() { - fx.off = true; - this.tasks = [ - { - text: 'Task 1', - startDate: new Date(2015, 1, 9, 1, 0), - endDate: new Date(2015, 1, 9, 2, 0) - }, - { - text: 'Task 2', - startDate: new Date(2015, 1, 9, 11, 0), - endDate: new Date(2015, 1, 9, 12, 0) - } - ]; - }, - afterEach: function() { - fx.off = false; - } -}; - -const defaultData = [ - { - text: 'recurrent-app', - startDate: new Date(2017, 4, 1, 9, 30), - endDate: new Date(2017, 4, 1, 11), - recurrenceRule: 'FREQ=DAILY;COUNT=5' - }, { - text: 'common-app', - startDate: new Date(2017, 4, 9, 9, 30), - endDate: new Date(2017, 4, 9, 11), - } -]; - -const createScheduler = (options = {}) => { - const defaultOption = { - dataSource: defaultData, - views: ['month'], - currentView: 'month', - currentDate: new Date(2017, 4, 25), - firstDayOfWeek: 1, - startDayHour: 9, - height: 600, - width: 600, - editing: { - legacyForm: true, - } - }; - - return createWrapper($.extend(defaultOption, options)); -}; - -const setWindowWidth = width => { - Object.defineProperty(document.documentElement, 'clientWidth', { - get: () => width, - configurable: true - }); -}; - -const resetWindowWidth = () => delete document.documentElement.clientWidth; - -testStart(() => { - initTestMarkup(); - viewPort.value($('.shadow-container').get(0)); -}); - -const moduleConfig = { - beforeEach() { - fx.off = true; - }, - - afterEach() { - fx.off = false; - } -}; - -QUnit.module('Appointment popup form', moduleConfig, () => { - test('Original appointment\'s fields shouldn\'t fill if used fieldExpr', async function(assert) { - const data = []; - const textExpValue = 'Subject'; - - const scheduler = await createScheduler({ - dataSource: data, - views: ['week'], - currentView: 'week', - currentDate: new Date(2021, 4, 27), - textExpr: textExpValue, - onAppointmentAdded: ({ appointmentData }) => { - assert.strictEqual(appointmentData[textExpValue], 'qwerty', 'Mapped text property should be fill on onAppointmentAdded event'); - assert.strictEqual(appointmentData.text, undefined, 'Original text property should be undefined on onAppointmentAdded event'); - }, - height: 600 - }); - scheduler.instance.showAppointmentPopup(); - scheduler.appointmentForm.setSubject('qwerty', textExpValue); - scheduler.appointmentPopup.clickDoneButton(); - - assert.strictEqual(data[0].Subject, 'qwerty', 'Mapped text property should be fill'); - assert.strictEqual(data[0].text, undefined, 'Original text property should be undefined'); - }); - - QUnit.test('Recurrence form should work properly if recurrenceRule property mapped recurrenceRuleExpr', async function(assert) { - const scheduler = await createScheduler({ - dataSource: [{ - text: 'Watercolor Landscape', - startDate: new Date(2017, 4, 1, 9, 30), - endDate: new Date(2017, 4, 1, 11), - customRecurrenceRule: 'FREQ=WEEKLY;BYDAY=TU,FR;COUNT=10' - }], - views: ['month'], - currentView: 'month', - currentDate: new Date(2017, 4, 25), - recurrenceRuleExpr: 'customRecurrenceRule', - height: 600 - }); - - scheduler.appointments.dblclick(0); - scheduler.appointmentPopup.dialog.clickEditSeries(); - - const form = scheduler.instance.appointmentPopup.form.form; - - assert.ok(form.getEditor('repeat').option('value'), 'repeat checkbox should be checked'); - assert.ok(form.option('items')[1].visible, 'recurrence form should be visible'); - - scheduler.instance.appointmentPopup.popup.hide(); - scheduler.instance.showAppointmentPopup(); - - assert.notOk(form.getEditor('repeat').option('value'), 'repeat checkbox should be unchecked if empty form'); - assert.notOk(form.option('items')[1].visible, 'recurrence form should be invisible if empty form'); - }); - - QUnit.test('showAppointmentPopup method should be work properly with no argument', async function(assert) { - const cases = [ - () => { - const appointmentText = 'app'; - - const textEditor = scheduler.appointmentForm.getEditor('text'); - const startDateEditor = scheduler.appointmentForm.getEditor('startDate'); - const endDateEditor = scheduler.appointmentForm.getEditor('endDate'); - - textEditor.option('value', appointmentText); - startDateEditor.option('value', new Date(2017, 4, 22, 9, 30)); - endDateEditor.option('value', new Date(2017, 4, 22, 9, 45)); - - scheduler.appointmentPopup.clickDoneButton(); - - assert.equal(scheduler.appointments.find(appointmentText).length, 1, 'new appointment should be created with base options'); - }, - () => { - const appointmentText = 'app'; - - const textEditor = scheduler.appointmentForm.getEditor('text'); - const startDateEditor = scheduler.appointmentForm.getEditor('startDate'); - const endDateEditor = scheduler.appointmentForm.getEditor('endDate'); - - - textEditor.option('value', appointmentText); - startDateEditor.option('value', new Date(2017, 4, 22, 9, 30)); - endDateEditor.option('value', new Date(2017, 4, 22, 9, 45)); - - scheduler.appointmentPopup.clickCancelButton(); - - assert.equal(scheduler.appointments.getAppointmentCount(), 0, 'new appointment shouldn\'t created'); - }, - () => { - const appointmentText = 'all day app'; - - const textEditor = scheduler.appointmentForm.getEditor('text'); - const startDateEditor = scheduler.appointmentForm.getEditor('startDate'); - const endDateEditor = scheduler.appointmentForm.getEditor('endDate'); - const visibilityChangedEditor = scheduler.appointmentForm.getEditor('visibilityChanged'); - - textEditor.option('value', appointmentText); - startDateEditor.option('value', new Date(2017, 4, 22, 10, 30)); - endDateEditor.option('value', new Date(2017, 4, 22, 10, 45)); - visibilityChangedEditor.option('value', true); - - scheduler.appointmentPopup.clickDoneButton(); - - assert.equal(scheduler.appointments.find(appointmentText).length, 21, 'recurrence appointments should be created'); - } - ]; - - const scheduler = await createScheduler(); - - scheduler.option('dataSource', []); - await waitAsync(10); - scheduler.instance.showAppointmentPopup(); - cases[0](); - - scheduler.option('dataSource', []); - await waitAsync(10); - scheduler.instance.showAppointmentPopup(); - cases[1](); - - scheduler.option('dataSource', []); - await waitAsync(10); - scheduler.instance.showAppointmentPopup(); - cases[2](); - }); - - QUnit.test('Appointment popup form should have two named groups', async function(assert) { - const scheduler = await createScheduler({ dataSource: [] }); - const data = { - text: 'appointment', - startDate: new Date(2017, 4, 1, 9, 30), - endDate: new Date(2017, 4, 1, 11), - }; - - scheduler.instance.showAppointmentPopup(data); - const form = scheduler.instance.getAppointmentDetailsForm(); - - assert.equal(form.option('items')[0].name, APPOINTMENT_FORM_GROUP_NAMES.Main, 'first group name is correct'); - assert.equal(form.option('items')[1].name, APPOINTMENT_FORM_GROUP_NAMES.Recurrence, 'second group name is correct'); - }); - - QUnit.test('Appointment popup should be with correct dates after change allDay switch and w/o saving (T832711)', async function(assert) { - const scheduler = await createScheduler({ dataSource: [] }); - const data = { - text: 'all day apo', - startDate: new Date(2017, 4, 1, 9, 30), - endDate: new Date(2017, 4, 1, 11), - allDay: true - }; - - scheduler.instance.showAppointmentPopup(data); - const allDayEditor = scheduler.appointmentForm.getEditor('allDay'); - allDayEditor.option('value', false); - scheduler.appointmentPopup.clickCancelButton(); - - scheduler.instance.showAppointmentPopup(data); - - assert.deepEqual(scheduler.appointmentForm.getEditor('startDate').option('value'), data.startDate); - assert.deepEqual(scheduler.appointmentForm.getEditor('endDate').option('value'), data.endDate); - }); - - QUnit.test('onAppointmentFormOpening event should pass e.popup argument', async function(assert) { - const data = [{ - text: 'Website Re-Design Plan', - startDate: new Date(2017, 4, 22, 9, 30), - endDate: new Date(2017, 4, 22, 11, 30) - }]; - - const scheduler = await createScheduler({ - dataSource: data, - onAppointmentFormOpening: (e) => { - assert.equal(e.popup.NAME, 'dxPopup', 'e.popup should be instance of dxPopup'); - - e.popup.option('showTitle', true); - e.popup.option('title', 'Information'); - } - }); - - scheduler.appointments.dblclick(); - assert.equal(scheduler.appointmentPopup.getPopupTitleElement().length, 1, 'title should be visible, after set dxPopup property on onAppointmentFormOpening'); - }); - - QUnit.test('onAppointmentFormOpening event should handle e.cancel value', async function(assert) { - const data = [{ - text: 'Website Re-Design Plan', - startDate: new Date(2017, 4, 22, 9, 30), - endDate: new Date(2017, 4, 22, 11, 30) - }]; - - const scheduler = await createScheduler({ dataSource: data }); - - const testCases = [ - { - expected: true, - handler: undefined, - text: 'appointment popup should visible in default setting case' - }, { - expected: false, - handler: e => e.cancel = true, - text: 'appointment popup should prevent visible in \'e.cancel = true\' case' - }, { - expected: true, - handler: e => e.cancel = false, - text: 'appointment popup should visible in \'e.cancel = false\' case' - } - ]; - - testCases.forEach(({ handler, expected, text }) => { - scheduler.option('onAppointmentFormOpening', handler); - - scheduler.appointments.dblclick(); - assert.equal(scheduler.appointmentPopup.isVisible(), expected, text + ' if call from UI'); - scheduler.instance.appointmentPopup.popup.option('visible', false); - - scheduler.instance.showAppointmentPopup(data[0]); - assert.equal(scheduler.appointmentPopup.isVisible(), expected, text + ' if call showAppointmentPopup method'); - scheduler.instance.appointmentPopup.popup.option('visible', false); - }); - }); - - QUnit.test('Appointment popup shouldn\'t render recurrence editor, if previous was with recurrence', async function(assert) { - const scheduler = await createScheduler(); - - scheduler.appointments.dblclick(); - scheduler.appointmentPopup.dialog.clickEditSeries(); - - assert.ok(scheduler.appointmentPopup.form.isRecurrenceEditorVisible(), 'Recurrence editor should visible'); - assert.equal(scheduler.appointmentPopup.form.getSubject(), 'recurrent-app', 'Subject should equal selected recurrence appointment'); - - scheduler.appointmentPopup.clickCancelButton(); - - scheduler.appointments.dblclick(5); - - assert.notOk(scheduler.appointmentPopup.form.isRecurrenceEditorVisible(), 'Recurrence editor shouldn\'t visible'); - assert.equal(scheduler.appointmentPopup.form.getSubject(), 'common-app', 'Subject in form should equal selected common appointment'); - }); - - QUnit.test('Appointment popup should work properly', async function(assert) { - const NEW_EXPECTED_SUBJECT = 'NEW SUBJECT'; - const scheduler = await createScheduler({}); - const appointmentPopup = scheduler.appointmentPopup; - - assert.notOk(appointmentPopup.isVisible(), 'Appointment popup should be invisible in on init'); - - await scheduler.appointments.click(scheduler.appointments.getAppointmentCount() - 1); - scheduler.tooltip.clickOnItem(); - appointmentPopup.form.setSubject(NEW_EXPECTED_SUBJECT); - - assert.ok(appointmentPopup.isVisible(), 'Appointment popup should be visible after showAppointmentPopup method'); - appointmentPopup.clickDoneButton(); - - const dataItem = scheduler.instance.option('dataSource')[1]; - assert.equal(Object.keys(dataItem).length, 3, 'In appointment properties shouldn\'t added excess properties'); - assert.equal(dataItem.text, NEW_EXPECTED_SUBJECT, `Text property of appointment should be changed on ${NEW_EXPECTED_SUBJECT}`); - - await scheduler.appointments.click(0); - scheduler.tooltip.clickOnItem(); - appointmentPopup.dialog.clickEditSeries(); - - assert.ok(appointmentPopup.form.isRecurrenceEditorVisible(), 'Recurrence editor should be visible after click on recurrence appointment'); - assert.equal(appointmentPopup.form.getSubject(), defaultData[0].text, 'Subject in form should equal selected appointment'); - }); - - QUnit.test('Recurrence repeat-end editor should have default \'never\' value after reopening appointment popup', async function(assert) { - const firstAppointment = { startDate: new Date(2015, 1, 9), endDate: new Date(2015, 1, 9, 1), text: 'caption 1' }; - const secondAppointment = { startDate: new Date(2015, 1, 9), endDate: new Date(2015, 1, 9, 1), text: 'caption 2' }; - const scheduler = await createScheduler(); - - scheduler.instance.showAppointmentPopup(firstAppointment); - - let form = scheduler.instance.getAppointmentDetailsForm(); - let visibilityChanged = form.getEditor('visibilityChanged'); - visibilityChanged.option('value', true); - - const repeatEndEditor = form.getEditor('recurrenceRule').getEditorByField('repeatEnd'); - repeatEndEditor.option('value', 'count'); - scheduler.appointmentPopup.clickDoneButton(); - - scheduler.instance.showAppointmentPopup(secondAppointment); - form = scheduler.instance.getAppointmentDetailsForm(); - visibilityChanged = form.getEditor('visibilityChanged'); - visibilityChanged.option('value', true); - - assert.strictEqual(repeatEndEditor.option('value'), 'never', 'Repeat-type editor value is ok'); - }); - - QUnit.test('Update appointment if CustomStore', async function(assert) { - const data = [{ - startDate: new Date(2015, 4, 24, 9), - endDate: new Date(2015, 4, 24, 11) - }]; - const scheduler = await createScheduler({ - views: ['day'], - dataSource: { - key: 'id', - load: () => data, - update: (key, values) => { - return new Promise(resolve => { - setTimeout(() => { - const appointmentData = data.filter(item => item.id === key)[0]; - $.extend(appointmentData, values); - scheduler.instance.repaint(); - resolve(); - }, 200); - }); - }, - }, - currentDate: new Date(2015, 4, 24), - startDayHour: 8, - endDayHour: 18 - }); - - scheduler.instance.showAppointmentPopup({ - startDate: new Date(2015, 4, 24, 9), - endDate: new Date(2015, 4, 24, 11), - text: 'Subject' - }); - - scheduler.appointmentForm.setSubject('New Subject'); - - const deferred = scheduler.appointmentPopup.saveAppointmentData(); - - assert.notOk(scheduler.appointmentPopup.getInstance().tryLockSaveChanges(), 'Save changes already locked'); - - assert.ok(scheduler.appointmentPopup.hasLoadPanel(), 'has load panel'); - - await waitAsync(250); - - deferred.done(() => { - assert.notOk(scheduler.appointmentPopup.hasLoadPanel(), 'has no load panel'); - assert.equal(scheduler.appointments.getTitleText(0), 'New Subject', 'Subject is correct'); - }); - }); - - QUnit.test('Insert appointment if CustomStore', async function(assert) { - const done = assert.async(); - const data = []; - const scheduler = await createScheduler({ - views: ['day'], - dataSource: { - key: 'id', - load: () => data, - insert: appointmentData => new Promise(resolve => { - setTimeout(() => { - appointmentData.id = data.length; - data.push(appointmentData); - resolve(); - done(); - }, 200); - }) - }, - currentDate: new Date(2015, 4, 24), - startDayHour: 8, - endDayHour: 18 - }); - - scheduler.instance.showAppointmentPopup(); - - scheduler.appointmentForm.setSubject('New Subject'); - scheduler.appointmentForm.setStartDate(new Date(2015, 4, 24, 9)); - scheduler.appointmentForm.setEndDate(new Date(2015, 4, 24, 11)); - - const deferred = scheduler.appointmentPopup.saveAppointmentData(); - - assert.ok(scheduler.appointmentPopup.hasLoadPanel(), 'has load panel'); - - await waitAsync(250); - - deferred.done(() => { - assert.notOk(scheduler.appointmentPopup.hasLoadPanel(), 'has no load panel'); - assert.equal(scheduler.appointments.getTitleText(0), 'New Subject', 'Subject is correct'); - }); - }); - - [true, false].forEach(cancel => { - QUnit.test(`onAppointmentUpdating and e.cancel=${cancel} (T907281)`, async function(assert) { - const data = [{ - startDate: new Date(2015, 4, 24, 9), - endDate: new Date(2015, 4, 24, 11), - text: 'Subject' - }]; - const scheduler = await createScheduler({ - views: ['day'], - dataSource: data, - currentDate: new Date(2015, 4, 24), - startDayHour: 8, - endDayHour: 18, - onAppointmentUpdating: e => e.cancel = cancel - }); - - scheduler.instance.showAppointmentPopup(data[0]); - - scheduler.appointmentForm.setSubject('New Subject'); - - scheduler.appointmentPopup.saveAppointmentData(); - - assert.notOk(scheduler.appointmentPopup.hasLoadPanel(), 'Has no load panel'); - - const subject = cancel ? 'Subject' : 'New Subject'; - assert.equal(scheduler.appointments.getTitleText(0), subject, 'Subject is correct'); - }); - - QUnit.test(`onAppointmentAdding and e.cancel=${cancel}`, async function(assert) { - const scheduler = await createScheduler({ - views: ['day'], - dataSource: [], - currentDate: new Date(2015, 4, 24), - startDayHour: 8, - endDayHour: 18, - onAppointmentAdding: e => e.cancel = cancel - }); - - scheduler.instance.showAppointmentPopup(); - - scheduler.appointmentForm.setStartDate(new Date(2015, 4, 24, 9)); - scheduler.appointmentForm.setEndDate(new Date(2015, 4, 24, 11)); - scheduler.appointmentForm.setSubject('New Subject'); - - scheduler.appointmentPopup.saveAppointmentData(); - - assert.notOk(scheduler.appointmentPopup.hasLoadPanel(), 'Has no load panel'); - - const subject = cancel ? '' : 'New Subject'; - assert.equal(scheduler.appointments.getTitleText(0), subject, 'Subject is correct'); - }); - - QUnit.test(`onAppointmentDeleting and e.cancel=${cancel}`, async function(assert) { - const data = [{ - text: 'Some Text', - startDate: new Date(2015, 4, 24, 9), - endDate: new Date(2015, 4, 24, 11) - }]; - const scheduler = await createScheduler({ - views: ['day'], - dataSource: data, - currentDate: new Date(2015, 4, 24), - startDayHour: 8, - endDayHour: 18, - onAppointmentDeleting: e => e.cancel = cancel - }); - - scheduler.instance.deleteAppointment(data[0]); - await waitAsync(10); - - assert.notOk(scheduler.appointmentPopup.hasLoadPanel(), 'Has no load panel'); - - const subject = cancel ? 'Some Text' : ''; - assert.equal(scheduler.appointments.getTitleText(0), subject, 'Subject is correct'); - }); - }); - - QUnit.module('toolbar', () => { - [true, false].forEach(allowUpdatingValue => { - const data = [{ - text: 'Website Re-Design Plan', - startDate: new Date(2017, 4, 22, 9, 30), - endDate: new Date(2017, 4, 22, 11, 30), - disabled: true - }, { - text: 'Book Flights to San Fran for Sales Trip', - startDate: new Date(2017, 4, 22, 12, 0), - endDate: new Date(2017, 4, 22, 13, 0), - }]; - - QUnit.test(`done button visibility in case allowUpdatingValue = ${allowUpdatingValue}`, async function(assert) { - const scheduler = await createWrapper({ - dataSource: data, - views: ['week'], - currentView: 'week', - currentDate: new Date(2017, 4, 25), - editing: { - allowUpdating: allowUpdatingValue, - legacyForm: true - } - }); - - const assertText = `done button visibility should be equal to = ${allowUpdatingValue}`; - for(let i = 0; i < scheduler.appointments.getAppointmentCount(); i++) { - scheduler.appointments.dblclick(i); - assert.equal(scheduler.appointmentPopup.getDoneButton().length > 0, allowUpdatingValue, assertText); - scheduler.appointmentPopup.clickCancelButton(); - } - }); - }); - - QUnit.test('toolbar should be re-rendered after change editing option', async function(assert) { - const scheduler = await createWrapper({ - dataSource: [], - views: ['week'], - currentView: 'week', - currentDate: new Date(2017, 4, 25), - editing: { - allowUpdating: true, - legacyForm: true - } - }); - - const dataObj = { - text: 'a', - startDate: new Date(2015, 5, 15, 10), - endDate: new Date(2015, 5, 15, 11) - }; - - scheduler.instance.showAppointmentPopup(dataObj); - assert.ok(scheduler.appointmentPopup.getDoneButton().length > 0, '"done" button should be visible'); - - scheduler.option('editing', { - allowUpdating: false - }); - - scheduler.instance.showAppointmentPopup(dataObj); - assert.notOk(scheduler.appointmentPopup.getDoneButton().length > 0, '"done" button shouldn\'t be visible after set allowUpdating option to false'); - - scheduler.instance.showAppointmentPopup(); - assert.ok(scheduler.appointmentPopup.getDoneButton().length > 0, '"done" button should be visible in case \'create new appointment\''); - }); - }); -}); - -if(isDesktopEnvironment()) { - QUnit.module('Appointment Popup and Recurrence Editor visibility', { - beforeEach() { - fx.off = true; - setWindowWidth(1000); - }, - - afterEach() { - fx.off = false; - resetWindowWidth(); - } - }); - - QUnit.test('Recurrence editor container should be visible if recurrence rule was set', async function(assert) { - const scheduler = await createScheduler(); - scheduler.instance.showAppointmentPopup({ startDate: new Date(2018, 5, 18), endDate: Date(2018, 5, 18), text: 'a', recurrenceRule: 'FREQ=WEEKLY' }); - $('.dx-dialog-buttons .dx-button').eq(0).trigger('dxclick'); - - checkFormWithRecurrenceEditor(assert, scheduler.instance, true); - }); - - QUnit.test('Recurrence editor container should be visible after changing its visibility value', async function(assert) { - const scheduler = await createScheduler(); - scheduler.instance.showAppointmentPopup({ startDate: new Date(2018, 5, 18), endDate: Date(2018, 5, 18), text: 'a' }); - - const form = scheduler.instance.getAppointmentDetailsForm(); - checkFormWithRecurrenceEditor(assert, scheduler.instance, false); - - form.getEditor('visibilityChanged').option('value', true); - checkFormWithRecurrenceEditor(assert, scheduler.instance, true); - - form.getEditor('visibilityChanged').option('value', false); - checkFormWithRecurrenceEditor(assert, scheduler.instance, false); - }); - - QUnit.test('Popup should show or not show reccurence editor after many opening with different data', async function(assert) { - const scheduler = await createScheduler(); - scheduler.instance.showAppointmentPopup({ startDate: new Date(2018, 5, 18), endDate: Date(2018, 5, 18), text: 'a' }); - checkFormWithRecurrenceEditor(assert, scheduler.instance, false); - scheduler.instance.appointmentPopup.popup.hide(); - scheduler.instance.showAppointmentPopup({ startDate: new Date(2018, 5, 18), endDate: Date(2018, 5, 18), text: 'b', recurrenceRule: 'FREQ=WEEKLY' }); - $('.dx-dialog-buttons .dx-button').eq(0).trigger('dxclick'); - checkFormWithRecurrenceEditor(assert, scheduler.instance, true); - scheduler.instance.appointmentPopup.popup.hide(); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2018, 5, 18), endDate: Date(2018, 5, 18), text: 'c' }); - checkFormWithRecurrenceEditor(assert, scheduler.instance, false); - }); - - QUnit.test('Popup should show or not to show reccurence editor after many opening with and change visibility', async function(assert) { - const scheduler = await createScheduler(); - scheduler.instance.showAppointmentPopup({ startDate: new Date(2018, 5, 18), endDate: Date(2018, 5, 18), text: 'a' }); - - const form = scheduler.instance.getAppointmentDetailsForm(); - form.getEditor('visibilityChanged').option('value', true); - scheduler.instance.appointmentPopup.popup.hide(); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2018, 5, 18), endDate: Date(2018, 5, 18), text: 'b', recurrenceRule: 'FREQ=WEEKLY' }); - $('.dx-dialog-buttons .dx-button').eq(0).trigger('dxclick'); - checkFormWithRecurrenceEditor(assert, scheduler.instance, true); - }); - - QUnit.test('Popup should not contain recurrence editor, if recurrenceRuleExpr is null', async function(assert) { - const scheduler = await createScheduler(); - const appointment = { - startDate: new Date(2015, 1, 1, 1), - endDate: new Date(2015, 1, 1, 2), - text: 'caption', - recurrenceRule: 'FREQ=YEARLY' - }; - - scheduler.instance.option('recurrenceRuleExpr', null); - scheduler.instance.showAppointmentPopup(appointment); - - const form = scheduler.instance.getAppointmentDetailsForm(); - - assert.ok(!form.getEditor(null), 'Editor is not rendered'); - assert.equal(scheduler.instance.appointmentPopup.popup.option('maxWidth'), APPOINTMENT_POPUP_WIDTH); - assert.equal(form.option('items')[0].colSpan, 2, 'colSpan of main group'); - - scheduler.instance.option('recurrenceRuleExpr', 'recurrenceRule'); - - scheduler.instance.showAppointmentPopup(appointment); - $('.dx-dialog-buttons .dx-button').eq(0).trigger('dxclick'); - - checkFormWithRecurrenceEditor(assert, scheduler.instance, true, APPOINTMENT_POPUP_WIDTH_WITH_RECURRENCE, 1); - }); - - QUnit.test('Popup should not contain recurrence editor, if recurrenceRuleExpr is \'\'', async function(assert) { - const scheduler = await createScheduler(); - const appointment = { - startDate: new Date(2015, 1, 1, 1), - endDate: new Date(2015, 1, 1, 2), - text: 'caption', - recurrenceRule: 'FREQ=YEARLY' - }; - - scheduler.instance.option('recurrenceRuleExpr', ''); - scheduler.instance.showAppointmentPopup(appointment); - const form = scheduler.instance.getAppointmentDetailsForm(); - - assert.ok(!form.getEditor(null), 'Editor is not rendered'); - assert.equal(scheduler.instance.appointmentPopup.popup.option('maxWidth'), APPOINTMENT_POPUP_WIDTH); - assert.equal(form.option('items')[0].colSpan, 2, 'colSpan of main group'); - }); - - QUnit.test('Multiple showing appointment popup for recurrence appointments and after update options should work correct', async function(assert) { - const scheduler = await createScheduler(); - scheduler.instance.showAppointmentPopup({ - text: 'Appointment 1', - startDate: new Date(2017, 4, 1, 9, 30), - endDate: new Date(2017, 4, 1, 11) - }); - - scheduler.instance.hideAppointmentPopup(true); - scheduler.instance.option('recurrenceEditMode', 'series'); - - scheduler.instance.showAppointmentPopup({ - text: 'Appointment 2', - startDate: new Date(2017, 4, 1, 9, 30), - endDate: new Date(2017, 4, 1, 11), - recurrenceRule: 'FREQ=WEEKLY;BYDAY=MO,TH' - }); - - checkFormWithRecurrenceEditor(assert, scheduler.instance, true); - }); -} - -QUnit.module('Appointment Popup Content', moduleOptions, () => { - QUnit.test('appointmentPopup should not prevent mouse/touch events by default (T968188)', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1), endDate: new Date(2015, 1, 2) }); - - const appointmentPopupOptions = scheduler.instance.appointmentPopup.popup.option(); - - assert.strictEqual(appointmentPopupOptions.enableBodyScroll, false, 'enable body scroll'); - assert.strictEqual(appointmentPopupOptions.preventScrollEvents, false, 'prevent scroll events'); - }); - - QUnit.test('showAppointmentPopup method with passed a recurrence appointment should render popup(T698732)', async function(assert) { - const appointments = [ - { - text: 'TEST_TEXT', - startDate: new Date(2017, 4, 1, 9, 30), - endDate: new Date(2017, 4, 1, 11), - recurrenceRule: 'FREQ=WEEKLY;BYDAY=MO,TH;COUNT=10' - } - ]; - - const scheduler = await createInstance({ - dataSource: appointments, - currentDate: new Date(2017, 4, 25), - startDayHour: 9, - }); - - scheduler.instance.showAppointmentPopup(appointments[0], false); - - const popupChoiceAppointmentEdit = $('.dx-popup-normal.dx-resizable').not('.dx-state-invisible'); - assert.equal(popupChoiceAppointmentEdit.length, 1, 'Popup with choice edit mode is rendered'); - - popupChoiceAppointmentEdit.find('.dx-popup-bottom .dx-button:eq(1)').trigger('dxclick'); - assert.equal($('.dx-scheduler-legacy-appointment-popup').length, 2, 'Appointment popup is rendered'); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const startDateBox = form.getEditor('startDate'); - const endDateBox = form.getEditor('endDate'); - - assert.equal(startDateBox.option('value').valueOf(), appointments[0].startDate.valueOf(), 'Value in start dateBox valid'); - assert.equal(endDateBox.option('value').valueOf(), appointments[0].endDate.valueOf(), 'Value in end dateBox valid'); - }); - - QUnit.test('showAppointmentPopup should render a popup only once', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1), endDate: new Date(2015, 1, 2) }); - - assert.equal($('.dx-scheduler-legacy-appointment-popup').length, 2, 'Popup is rendered'); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1), endDate: new Date(2015, 1, 2) }); - assert.equal($('.dx-scheduler-legacy-appointment-popup').length, 2, 'Popup is rendered'); - }); - - QUnit.test('showAppointmentPopup should work correctly after scheduler repainting', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1), endDate: new Date(2015, 1, 2) }); - - assert.equal($('.dx-scheduler-legacy-appointment-popup').length, 2, 'Popup is rendered'); - scheduler.instance.repaint(); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1), endDate: new Date(2015, 1, 2) }); - assert.equal($('.dx-scheduler-legacy-appointment-popup').length, 2, 'Popup is rendered'); - }); - - QUnit.test('changing editing should work correctly after showing popup', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1), endDate: new Date(2015, 1, 2) }); - scheduler.instance.hideAppointmentPopup(true); - - scheduler.instance.option('editing.allowUpdating', false); - scheduler.instance.option('editing.allowUpdating', true); - - assert.ok(true, 'OK'); - }); - - QUnit.test('hideAppointmentPopup should hide a popup', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1), endDate: new Date(2015, 1, 2) }); - - assert.equal($('.dx-scheduler-legacy-appointment-popup').length, 2, 'Popup is rendered'); - scheduler.instance.hideAppointmentPopup(); - assert.equal($('.dx-scheduler-legacy-appointment-popup').length, 1, 'Popup is hidden'); - }); - - QUnit.test('hideAppointmentPopup should hide a popup and save changes', async function(assert) { - const scheduler = await createInstance({ - currentDate: new Date(2016, 9, 10), - currentView: 'month', - }); - - scheduler.instance.showAppointmentPopup({ text: '1', startDate: new Date(2016, 9, 10), endDate: new Date(2016, 9, 11) }, true); - - assert.equal($('.dx-scheduler-legacy-appointment-popup').length, 2, 'Popup is rendered'); - scheduler.instance.hideAppointmentPopup(true); - assert.equal($('.dx-scheduler-legacy-appointment-popup').length, 1, 'Popup is hidden'); - assert.equal($('.dx-scheduler-appointment').length, 1, 'appointment is created'); - }); - - QUnit.test('showAppointmentPopup should render a popup form only once', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1), endDate: new Date(2015, 1, 2), text: 'appointment 1' }); - - const $form = $('.dx-scheduler-legacy-appointment-popup').find('.dx-form').not('.dx-recurrence-editor-container'); - assert.equal($form.length, 1, 'Form was rendered'); - - scheduler.instance.hideAppointmentPopup(); - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1), endDate: new Date(2015, 1, 2), text: 'appointment 2' }); - - assert.equal($form.find('.dx-textbox').eq(0).dxTextBox('instance').option('text'), 'appointment 2', 'Form data is correct'); - }); - - QUnit.test('popup should have right height', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1), endDate: new Date(2015, 1, 2), text: 'appointment 1' }); - - const popup = scheduler.instance.appointmentPopup.popup; - - assert.equal(popup.option('height'), 'auto', 'popup has correct height'); - assert.equal(popup.option('maxHeight'), '100%', 'popup has correct max-height'); - }); - - QUnit.test('showAppointmentPopup should render a popup content only once', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1), endDate: new Date(2015, 1, 2), text: 'appointment 1' }); - - const popup = scheduler.instance.appointmentPopup.popup; - let contentReadyCalled = 0; - - popup.option('onContentReady', function() { - contentReadyCalled++; - }); - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1), endDate: new Date(2015, 1, 2), text: 'appointment 2' }); - - assert.equal(contentReadyCalled, 0, 'Content wasn\'t rerendered'); - }); - - QUnit.test('Popup should contain editors and components with right dx-rtl classes and rtlEnabled option value', async function(assert) { - const scheduler = await createWrapper({ rtlEnabled: true, editing: { legacyForm: true } }); - - scheduler.instance.showAppointmentPopup({}); - - const $innerSwitch = $('.dx-scheduler-legacy-appointment-popup .dx-switch').eq(0); - - assert.ok($innerSwitch.hasClass('dx-rtl'), 'Inner editor has dx-rtl class'); - assert.equal($innerSwitch.dxSwitch('instance').option('rtlEnabled'), true, 'rtlEnabled option value is right'); - }); - - QUnit.test('Popup should contains start datebox with right value', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption' }); - - const $popupContent = $('.dx-scheduler-legacy-appointment-popup .dx-popup-content'); - const $dateBox = $popupContent.find('.dx-datebox').eq(0); - - assert.equal($dateBox.length, 1, 'Start date box is rendered'); - assert.deepEqual($dateBox.dxDateBox('instance').option('value'), new Date(2015, 1, 1, 1), 'value is right'); - }); - - QUnit.test('Calendar of the start datebox should have right firstDayOfWeek value', async function(assert) { - if(devices.current().deviceType === 'desktop') { - const scheduler = await createInstance({ - firstDayOfWeek: 4, - }); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption' }); - - const $popupContent = $('.dx-scheduler-legacy-appointment-popup .dx-popup-content'); - const startDateBox = $popupContent.find('.dx-datebox').eq(0).dxDateBox('instance'); - - startDateBox.open(); - const calendar = startDateBox._popup.$content().find('.dx-calendar').dxCalendar('instance'); - - assert.equal(calendar.option('firstDayOfWeek'), 4, 'firstDayOfWeek is right'); - } else { - assert.ok(true, 'It doesn\'t make sense on mobile devices'); - } - }); - - QUnit.test('Popup should contains end datebox with right value', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption' }); - - const $popupContent = $('.dx-scheduler-legacy-appointment-popup .dx-popup-content'); - const $dateBox = $popupContent.find('.dx-datebox').eq(1); - - assert.equal($dateBox.length, 1, 'End datebox is rendered'); - assert.deepEqual($dateBox.dxDateBox('instance').option('value'), new Date(2015, 1, 1, 2), 'value is right'); - }); - - QUnit.test('Calendar of the end datebox should have right firstDayOfWeek value', async function(assert) { - if(devices.current().deviceType === 'desktop') { - const scheduler = await createInstance({ - firstDayOfWeek: 4, - }); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption' }); - - const $popupContent = $('.dx-scheduler-legacy-appointment-popup .dx-popup-content'); - const endDateBox = $popupContent.find('.dx-datebox').eq(1).dxDateBox('instance'); - - endDateBox.open(); - const calendar = endDateBox._popup.$content().find('.dx-calendar').dxCalendar('instance'); - - assert.equal(calendar.option('firstDayOfWeek'), 4, 'firstDayOfWeek is right'); - } else { - assert.ok(true, 'It doesn\'t make sense on mobile devices'); - } - }); - - QUnit.test('Changing startDateBox value should change endDateBox value if needed', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1), endDate: new Date(2015, 1, 3), text: 'caption' }); - const form = scheduler.instance.getAppointmentDetailsForm(); - const startDateBox = form.getEditor('startDate'); - const endDateBox = form.getEditor('endDate'); - - startDateBox.option('value', new Date(2015, 1, 4)); - - assert.deepEqual(endDateBox.option('value'), new Date(2015, 1, 6), 'endDate value is right'); - - startDateBox.option('value', new Date(2015, 1, 3)); - - assert.deepEqual(endDateBox.option('value'), new Date(2015, 1, 6), 'endDate value is right'); - }); - - QUnit.test('Changing startDateBox value should change endDateBox value if needed(when startDate and endDate are strings)', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: '1/1/2015', endDate: '1/3/2015', text: 'caption' }); - const form = scheduler.instance.getAppointmentDetailsForm(); - const startDateBox = form.getEditor('startDate'); - const endDateBox = form.getEditor('endDate'); - - startDateBox.option('value', new Date(2015, 1, 4)); - - assert.deepEqual(endDateBox.option('value'), new Date(2015, 1, 6), 'endDate value is right'); - - startDateBox.option('value', new Date(2015, 1, 3)); - - assert.deepEqual(endDateBox.option('value'), new Date(2015, 1, 6), 'endDate value is right'); - }); - - QUnit.test('startDateBox value should be valid', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1), endDate: new Date(2015, 1, 3), text: 'caption' }); - const form = scheduler.instance.getAppointmentDetailsForm(); - const startDateBox = form.getEditor('startDate'); - - startDateBox.option('value', undefined); - - assert.deepEqual(startDateBox.option('value'), new Date(2015, 1, 1), 'startDate value is initial value'); - }); - - QUnit.test('Changing endDateBox value should change startDateBox value if needed', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 10), endDate: new Date(2015, 1, 13), text: 'caption' }); - - const $popupContent = $('.dx-scheduler-legacy-appointment-popup .dx-popup-content'); - const startDateBox = $popupContent.find('.dx-datebox').eq(0).dxDateBox('instance'); - const endDateBox = $popupContent.find('.dx-datebox').eq(1).dxDateBox('instance'); - - endDateBox.option('value', new Date(2015, 1, 9)); - - assert.deepEqual(startDateBox.option('value'), new Date(2015, 1, 6), 'startDate value is right'); - - endDateBox.option('value', new Date(2015, 1, 10)); - - assert.deepEqual(startDateBox.option('value'), new Date(2015, 1, 6), 'startDate value is right'); - }); - - QUnit.test('Changing endDateBox value should change startDateBox value if needed(when startDate and endDate are strings)', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: '1/10/2015', endDate: '1/13/2015', text: 'caption' }); - - const $popupContent = $('.dx-scheduler-legacy-appointment-popup .dx-popup-content'); - const startDateBox = $popupContent.find('.dx-datebox').eq(0).dxDateBox('instance'); - const endDateBox = $popupContent.find('.dx-datebox').eq(1).dxDateBox('instance'); - - endDateBox.option('value', new Date(2015, 0, 9)); - - assert.deepEqual(startDateBox.option('value'), new Date(2015, 0, 6), 'startDate value is right'); - - endDateBox.option('value', new Date(2015, 0, 10)); - - assert.deepEqual(startDateBox.option('value'), new Date(2015, 0, 6), 'startDate value is right'); - }); - - QUnit.test('endDateBox value should be valid', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1), endDate: new Date(2015, 1, 3), text: 'caption' }); - const form = scheduler.instance.getAppointmentDetailsForm(); - const endDateBox = form.getEditor('endDate'); - - endDateBox.option('value', undefined); - - assert.deepEqual(endDateBox.option('value'), new Date(2015, 1, 3), 'endDate value is initial value'); - }); - - QUnit.test('Popup should contains caption textbox with right value', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption' }); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const textBox = form.getEditor('text'); - - assert.equal(textBox.$element().length, 1, 'Caption text is rendered'); - assert.equal(textBox.option('value'), 'caption', 'value is right'); - }); - - QUnit.test('Confirm dialog should be shown when showAppointmentPopup for recurrence appointment was called', async function(assert) { - const scheduler = await createInstance({}); - - const startDate = new Date(2015, 1, 1, 1); - - scheduler.instance.showAppointmentPopup({ - startDate: startDate, - endDate: new Date(2015, 1, 1, 2), - text: 'caption', - recurrenceRule: 'FREQ=YEARLY' - }); - - assert.ok($('.dx-dialog').length, 'Dialog was shown'); - $('.dx-dialog-buttons .dx-button').eq(0).trigger('dxclick'); - }); - - QUnit.test('Recurrence Editor should have right freq editor value if recurrence rule was set on init', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2018, 5, 18), endDate: Date(2018, 5, 18), text: 'a', recurrenceRule: 'FREQ=WEEKLY' }); - $('.dx-dialog-buttons .dx-button').eq(0).trigger('dxclick'); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const recurrenceEditor = form.getEditor('recurrenceRule'); - const freqEditor = recurrenceEditor.getEditorByField('freq'); - - assert.equal(freqEditor.option('value'), 'weekly', 'value is right'); - }); - - QUnit.test('Popup should contain recurrence editor with right config', async function(assert) { - const scheduler = await createInstance({ - recurrenceEditMode: 'series', - firstDayOfWeek: 5, - }); - - const startDate = new Date(2015, 1, 1, 1); - - scheduler.instance.showAppointmentPopup({ - startDate: startDate, - endDate: new Date(2015, 1, 1, 2), - text: 'caption', - recurrenceRule: 'FREQ=YEARLY' - }); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const recurrenceEditor = form.getEditor('recurrenceRule'); - - assert.equal(recurrenceEditor.option('value'), 'FREQ=YEARLY', 'value is right'); - assert.deepEqual(recurrenceEditor.option('startDate'), startDate, 'startDate value is right'); - assert.equal(recurrenceEditor.option('firstDayOfWeek'), 5, 'firstDayOfWeek value is right'); - }); - - QUnit.test('Recurrence editor should change value if freq editor value changed', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2018, 5, 18), endDate: Date(2018, 5, 18), text: 'a', recurrenceRule: 'FREQ=WEEKLY' }); - $('.dx-dialog-buttons .dx-button').eq(0).trigger('dxclick'); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const recurrenceEditor = form.getEditor('recurrenceRule'); - const freqEditor = recurrenceEditor.getEditorByField('freq'); - - freqEditor.option('value', 'daily'); - - assert.equal(recurrenceEditor.option('value'), 'FREQ=DAILY', 'recEditor has right value'); - }); - - QUnit.test('Recurrence editor should has right startDate after form items change', async function(assert) { - const scheduler = await createInstance({ - onAppointmentFormOpening: function(e) { - const items = e.form.option('items'); - - items.push({ - dataField: 'location', - editorType: 'dxTextBox', - label: { - text: 'Location' - } - }); - - e.form.option('items', items); - }, - }); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2016, 5, 4), endDate: new Date(2016, 5, 5), recurrenceRule: 'FREQ=WEEKLY' }); - $('.dx-dialog-buttons .dx-button').eq(0).trigger('dxclick'); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const recEditor = form.getEditor('recurrenceRule'); - - assert.deepEqual(recEditor.option('startDate'), new Date(2016, 5, 4), 'startDate is ok'); - }); - - QUnit.test('Popup should contains description editor', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption', description: 'First task of this day' }); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const descriptionEditor = form.getEditor('description'); - - assert.equal(descriptionEditor.$element().length, 1, 'Description editor is rendered'); - assert.equal(descriptionEditor.option('value'), 'First task of this day', 'value is right'); - }); - - QUnit.test('Popup should contains allDay editor', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption', description: 'First task of this day', allDay: true }); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const allDayEditor = form.getEditor('allDay'); - - assert.equal(allDayEditor.option('value'), true, 'value is right'); - }); - - QUnit.test('allDay changing should switch date & type in editors', async function(assert) { - const scheduler = await createInstance({ - startDayHour: 5, - }); - - scheduler.instance.showAppointmentPopup({ - startDate: new Date(2015, 1, 1, 6), - endDate: new Date(2015, 1, 2, 7), text: 'caption', description: 'First task of this day' - }); - - const $popupContent = $('.dx-scheduler-legacy-appointment-popup .dx-popup-content'); - const $allDayEditor = $popupContent.find('.dx-switch').eq(0); - const allDayEditor = $allDayEditor.dxSwitch('instance'); - - allDayEditor.option('value', true); - - const startDate = $popupContent.find('.dx-datebox').eq(0).dxDateBox('instance'); - const endDate = $popupContent.find('.dx-datebox').eq(1).dxDateBox('instance'); - - assert.deepEqual(startDate.option('value'), new Date(2015, 1, 1), 'value is right'); - assert.equal(startDate.option('type'), 'date', 'type is right'); - - assert.deepEqual(endDate.option('value'), new Date(2015, 1, 1), 'value is right'); - assert.equal(endDate.option('type'), 'date', 'type is right'); - - allDayEditor.option('value', false); - - assert.equal(startDate.option('type'), 'datetime', 'type is right after turning off allDay'); - assert.equal(endDate.option('type'), 'datetime', 'type is right after turning off allDay'); - assert.deepEqual(startDate.option('value'), new Date(2015, 1, 1, 5), 'startdate is OK'); - assert.deepEqual(endDate.option('value'), new Date(2015, 1, 1, 5, 30), 'enddate is OK'); - }); - - QUnit.test('allDay changing should switch only type in editors, if startDate is undefined', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ - text: 'test appointment', - allDay: true - }, true, null); - - const $popupContent = $('.dx-scheduler-legacy-appointment-popup .dx-popup-content'); - const $allDayEditor = $popupContent.find('.dx-switch').eq(0); - const allDayEditor = $allDayEditor.dxSwitch('instance'); - - allDayEditor.option('value', false); - - const startDate = $popupContent.find('.dx-datebox').eq(0).dxDateBox('instance'); - const endDate = $popupContent.find('.dx-datebox').eq(1).dxDateBox('instance'); - - assert.equal(startDate.option('type'), 'datetime', 'type is right'); - assert.equal(endDate.option('type'), 'datetime', 'type is right'); - assert.deepEqual(startDate.option('value'), null, 'value is right'); - assert.deepEqual(endDate.option('value'), null, 'value is right'); - - allDayEditor.option('value', true); - - assert.equal(startDate.option('type'), 'date', 'type is right after turning off allDay'); - assert.equal(endDate.option('type'), 'date', 'type is right after turning off allDay'); - assert.deepEqual(startDate.option('value'), null, 'startdate is OK'); - assert.deepEqual(endDate.option('value'), null, 'enddate is OK'); - }); - - QUnit.test('There are no exceptions when select date on the appointment popup, startDate > endDate', async function(assert) { - const scheduler = await createInstance({}); - - const date = new Date(); - - scheduler.instance.showAppointmentPopup({ - allDay: true, - text: '', - startDate: date, - endDate: date, - recurrence: null, - recurrenceException: null - }); - - const $popupContent = $('.dx-scheduler-legacy-appointment-popup .dx-popup-content'); - const startDate = $popupContent.find('.dx-datebox').eq(0).dxDateBox('instance'); - const dateToTest = new Date(); - - dateToTest.setDate(date.getDate() + 5); - - startDate.option('value', dateToTest); - - assert.ok(true, 'There are no exceptions'); - }); - - QUnit.test('There are no exceptions when select date on the appointment popup,startDate < endDate', async function(assert) { - const scheduler = await createInstance({}); - - const date = new Date(); - - scheduler.instance.showAppointmentPopup({ - allDay: true, - text: '', - startDate: date, - endDate: date, - recurrence: null, - recurrenceException: null - }); - - const $popupContent = $('.dx-scheduler-legacy-appointment-popup .dx-popup-content'); - const endDate = $popupContent.find('.dx-datebox').eq(1).dxDateBox('instance'); - const dateToTest = new Date(); - - dateToTest.setDate(date.getDate() - 5); - - endDate.option('value', dateToTest); - - assert.ok(true, 'There are no exceptions'); - }); - - QUnit.test('There are no exceptions when select date on the appointment popup,if dates are undefined', async function(assert) { - const scheduler = await createInstance({}); - - const date = new Date(); - - scheduler.instance.showAppointmentPopup({ - allDay: true, - text: '', - recurrence: null, - recurrenceException: null - }, true, null); - - const $popupContent = $('.dx-scheduler-legacy-appointment-popup .dx-popup-content'); - const startDate = $popupContent.find('.dx-datebox').eq(0).dxDateBox('instance'); - const endDate = $popupContent.find('.dx-datebox').eq(1).dxDateBox('instance'); - const dateToTest = new Date(); - - dateToTest.setDate(date.getDate() - 5); - - startDate.option('value', date); - endDate.option('value', dateToTest); - - assert.ok(true, 'There are no exceptions'); - }); - - QUnit.test('Validate works always before done click', async function(assert) { - const data = new DataSource({ - store: this.tasks - }); - - const scheduler = await createInstance({ - dataSource: data, - }); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption' }); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const validation = sinon.stub(form, 'validate'); - - $('.dx-scheduler-legacy-appointment-popup .dx-popup-done').trigger('dxclick'); - - assert.ok(validation.calledOnce); - }); - - QUnit.test('Load panel should not be shown if validation is fail', async function(assert) { - const scheduler = await createInstance({ - dataSource: { - store: this.tasks - }, - maxAppointmentsPerCell: 2, - onAppointmentFormOpening: function(data) { - const form = data.form; - - form.option('items', [{ - name: 'description', - dataField: 'description', - editorType: 'dxTextArea', - validationRules: [{ - type: 'required', - message: 'Login is required' - }] - }]); - } - }); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption' }); - - scheduler.appointmentPopup.clickDoneButton(); - - assert.notOk(scheduler.appointmentPopup.hasLoadPanel()); - }); - - QUnit.test('Done button default configuration should be correct', async function(assert) { - const scheduler = await createInstance({ - onAppointmentFormOpening: function(e) { - const popup = e.component.appointmentPopup.popup; - const buttons = popup.option('toolbarItems'); - const doneButton = buttons[0]; - - assert.equal(doneButton.options.text, messageLocalization.format('Done'), 'done button text is ok'); - }, - onAppointmentAdding: function(e) { - e.cancel = true; - } - }); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption' }); - - scheduler.appointmentPopup.clickDoneButton(); - }); - - QUnit.test('Done button custom configuration should be correct', async function(assert) { - const scheduler = await createInstance({ - dataSource: new DataSource({ - store: this.tasks - }), - onAppointmentFormOpening: function(e) { - const popup = e.component.appointmentPopup.popup; - const buttons = popup.option('toolbarItems'); - buttons[0].options = { text: 'Text 1' }; - popup.option('toolbarItems', buttons); - }, - onAppointmentAdding: function(e) { - e.cancel = true; - } - }); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption' }); - - assert.notOk(scheduler.appointmentPopup.hasLoadPanel(), 'has no load panel'); - - const doneButtonInstance = scheduler.appointmentPopup.getDoneButton().dxButton('instance'); - assert.equal(doneButtonInstance.option('text'), 'Text 1', 'done button text is ok'); - - scheduler.appointmentPopup.clickDoneButton(); - - assert.notOk(scheduler.appointmentPopup.isVisible()); - }); - - QUnit.test('Load panel should be hidden if event validation fail', async function(assert) { - const scheduler = await createInstance({ - dataSource: new DataSource({ - store: this.tasks - }), - onAppointmentFormAdding: function(e) { - e.cancel = true; - } - }); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption' }); - - assert.notOk(scheduler.appointmentPopup.hasLoadPanel(), 'has no load panel'); - - scheduler.appointmentPopup.clickDoneButton(); - - assert.notOk(scheduler.appointmentPopup.isVisible()); - }); - - QUnit.test('Load panel should be hidden at the second appointment form opening', async function(assert) { - const task = { startDate: new Date(2017, 1, 1), endDate: new Date(2017, 1, 1, 0, 10), text: 'caption' }; - const scheduler = await createInstance({ - dataSource: [task] - }); - - scheduler.instance.showAppointmentPopup(task); - scheduler.appointmentPopup.clickDoneButton(); - - scheduler.instance.showAppointmentPopup(task); - - assert.notOk(scheduler.appointmentPopup.hasLoadPanel(), 'has no load panel'); - }); - - QUnit.test('startDateBox & endDateBox should have required validation rules', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption' }); - - const form = scheduler.instance.getAppointmentDetailsForm(); - - assert.deepEqual(form.itemOption(`${APPOINTMENT_FORM_GROUP_NAMES.Main}.startDate`).validationRules, [{ type: 'required' }]); - assert.deepEqual(form.itemOption(`${APPOINTMENT_FORM_GROUP_NAMES.Main}.endDate`).validationRules, [{ type: 'required' }]); - }); - - QUnit.test('Changes shouldn\'t be saved if form is invalid', async function(assert) { - const data = new DataSource({ - store: this.tasks - }); - - const scheduler = await createInstance({ - dataSource: data, - }); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption' }, true); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const addingAppointment = sinon.stub(scheduler.instance, 'addAppointment'); - - sinon.stub(form, 'validate').returns({ isValid: false }); - - $('.dx-scheduler-legacy-appointment-popup .dx-popup-done').trigger('dxclick'); - - assert.notOk(addingAppointment.calledOnce); - }); - - QUnit.test('Appointment popup should contain resources and recurrence editor', async function(assert) { - const rooms = [ - { - text: 'Room Test', - id: 4, - }]; - - const scheduler = await createInstance({ - resources: [{ label: 'Room', fieldExpr: 'roomId', dataSource: rooms }], - }); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1), endDate: new Date(2015, 1, 2), roomId: 4, recurrenceRule: 'FREQ=WEEKLY' }); - $('.dx-dialog-buttons .dx-button').eq(0).trigger('dxclick'); - const form = scheduler.instance.getAppointmentDetailsForm(); - const items = form.option('items'); - - assert.equal(items.length, 2, 'Main group and recurrence editor added'); - assert.equal(items[0].items.length, 7, 'Count of editors with resources is correct'); - assert.equal(items[0].items[6].label.text, 'Room', 'Recources is the last element in the main group of editors'); - }); -}); - -QUnit.module('Appointment Popup', moduleOptions, () => { - QUnit.test('focus is called on popup hiding', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1), endDate: new Date(2015, 1, 2) }); - - const spy = sinon.spy(scheduler.instance, 'focus'); - - $('.dx-scheduler-legacy-appointment-popup .dx-overlay-content .dx-popup-cancel').trigger('dxclick'); - - assert.ok(spy.calledOnce, 'focus is called'); - }); - - QUnit.test('Multiple showing appointment popup for recurrence appointments should work correctly', async function(assert) { - const scheduler = await createInstance({}); - - scheduler.instance.showAppointmentPopup({ - text: 'Appointment 1', - startDate: new Date(2017, 4, 1, 9, 30), - endDate: new Date(2017, 4, 1, 11) - }); - - scheduler.instance.hideAppointmentPopup(true); - scheduler.instance.option('recurrenceEditMode', 'series'); - - scheduler.instance.showAppointmentPopup({ - text: 'Appointment 2', - startDate: new Date(2017, 4, 1, 9, 30), - endDate: new Date(2017, 4, 1, 11), - recurrenceRule: 'FREQ=WEEKLY;BYDAY=MO,TH;COUNT=10' - }); - - const popup = scheduler.instance.appointmentPopup.popup; - const $buttonGroup = $(popup.$content()).find('.dx-buttongroup'); - - assert.deepEqual($buttonGroup.eq(0).dxButtonGroup('instance').option('selectedItemKeys'), ['MO', 'TH'], 'Right buttons was checked'); - }); - - QUnit.test('Appointment popup will render even if no appointmentData is provided (T734413)', async function(assert) { - const currentDate = new Date(2020, 2, 4); - const cellDuration = 60; - - const scheduler = await createInstance({ - currentDate, - cellDuration, - }); - - scheduler.instance.showAppointmentPopup({}, true); - scheduler.instance.hideAppointmentPopup(true); - scheduler.instance.showAppointmentPopup({}, true); - const { startDate, endDate } = scheduler.appointmentForm.getFormInstance().option('formData'); - const appointmentPopup = scheduler.appointmentPopup; - - assert.equal(startDate.getTime(), currentDate.getTime(), 'startDate is currentDate in Appointment Form'); - assert.equal(endDate.getTime(), new Date(currentDate.getTime() + cellDuration * toMs('minute')).getTime(), 'endDate is currentDate + cellDuration in Appointment Form'); - assert.ok(appointmentPopup.isVisible(), 'Popup is rendered'); - - const $popup = appointmentPopup.getPopup(); - const $startDate = $popup.find('input[name=\'startDate\']')[0]; - const $endDate = $popup.find('input[name=\'endDate\']')[0]; - - assert.equal($startDate.value, '2020-03-04T00:00:00', 'startDate is specified'); - assert.equal($endDate.value, '2020-03-04T01:00:00', 'endDate is specified'); - }); - - QUnit.test('Appointment popup will render with currentDate on showAppointmentPopup with no arguments', async function(assert) { - const currentDate = new Date(2020, 2, 4); - const cellDuration = 60; - - const scheduler = await createInstance({ - currentDate, - cellDuration, - }); - - scheduler.instance.showAppointmentPopup(); - - const { startDate, endDate } = scheduler.appointmentForm.getFormInstance().option('formData'); - const appointmentPopup = scheduler.appointmentPopup; - - assert.equal(startDate.getTime(), currentDate.getTime(), 'startDate is currentDate in Appointment Form'); - assert.equal(endDate.getTime(), new Date(currentDate.getTime() + cellDuration * toMs('minute')).getTime(), 'endDate is currentDate + cellDuration in Appointment Form'); - assert.ok(appointmentPopup.isVisible(), 'Popup is rendered'); - - const $popup = appointmentPopup.getPopup(); - const $startDate = $popup.find('input[name=\'startDate\']')[0]; - const $endDate = $popup.find('input[name=\'endDate\']')[0]; - - assert.equal($startDate.value, '2020-03-04T00:00:00', 'startDate is specified'); - assert.equal($endDate.value, '2020-03-04T01:00:00', 'endDate is specified'); - }); - - QUnit.test('Appointment form will have right dates on multiple openings (T727713)', async function(assert) { - const appointments = [ - { - text: 'Appointment1', - startDate: new Date(2017, 4, 2, 8, 30), - endDate: new Date(2017, 4, 2, 11), - }, { - text: 'Appointment2', - startDate: new Date(2017, 4, 1, 10), - endDate: new Date(2017, 4, 1, 11), - } - ]; - - const scheduler = await createInstance({ - dataSource: appointments, - currentView: 'week', - views: ['week'], - currentDate: new Date(2017, 4, 1), - }); - - scheduler.instance.option(); - scheduler.instance.showAppointmentPopup(appointments[1], false); - let formData = scheduler.appointmentForm.getFormInstance().option('formData'); - - assert.deepEqual(formData.startDate, appointments[1].startDate, 'First opening appointment form has right startDate'); - assert.deepEqual(formData.endDate, appointments[1].endDate, 'First opening appointment form has right endDate'); - - scheduler.instance.hideAppointmentPopup(); - - const form = scheduler.instance.getAppointmentDetailsForm(); - let formDataChangedCount = 0; - form.option('onOptionChanged', (args) => { - if(args.name === 'formData') formDataChangedCount++; - }); - - scheduler.appointments.dblclick(1); - formData = scheduler.appointmentForm.getFormInstance().option('formData'); - - assert.deepEqual(formData.startDate, appointments[0].startDate, 'Second opening appointment form has right startDate'); - assert.deepEqual(formData.endDate, appointments[0].endDate, 'Second opening appointment form has right endDate'); - assert.equal(formDataChangedCount, 1, 'Form data changed one time'); - }); - - QUnit.test('The vertical scroll bar is shown when an appointment popup fill to a small window\'s height', async function(assert) { - const scheduler = await createInstance({ - currentDate: new Date(2015, 1, 1), - currentView: 'day', - dataSource: [] - }); - - scheduler.instance.showAddAppointmentPopup({ - startDate: new Date(2015, 1, 1), - endDate: new Date(2015, 1, 1, 1), - allDay: true - }); - - const popup = scheduler.appointmentPopup; - popup.setPopupHeight(300); - - assert.ok(popup.hasVerticalScroll(), 'The popup has the vertical scrolling'); - }); - - QUnit.test('The resize event of appointment popup is triggered the the window is resize', async function(assert) { - const scheduler = await createInstance({ - currentDate: new Date(2015, 1, 1), - currentView: 'day', - dataSource: [] - }); - - scheduler.instance.showAddAppointmentPopup({ - startDate: new Date(2015, 1, 1), - endDate: new Date(2015, 1, 1, 1), - allDay: true - }); - - const $popup = scheduler.appointmentPopup.getPopupInstance().$element(); - let isResizeEventTriggered; - $($popup).on('dxresize', () => { - isResizeEventTriggered = true; - }); - resizeCallbacks.fire(); - assert.ok(isResizeEventTriggered, 'The resize event of popup is triggered'); - }); - - QUnit.test('Popup should not be closed until the valid value is typed', async function(assert) { - const startDate = new Date(2015, 1, 1, 1); - const validValue = 'Test'; - const done = assert.async(); - const scheduler = await createInstance({ - onAppointmentFormOpening: function(data) { - const items = data.form.option('items'); - items[0].items[0].validationRules = [ - { - type: 'async', - validationCallback: function(params) { - const d = $.Deferred(); - setTimeout(function() { - d.resolve(params.value === validValue); - }, 10); - return d.promise(); - } - } - ]; - - data.form.option('items', items); - } - }); - - scheduler.instance.showAppointmentPopup({ - startDate: startDate, - endDate: new Date(2015, 1, 1, 2), - text: 'caption' - }); - - scheduler.appointmentForm.setSubject('caption1'); - const firstSavePromise = scheduler.appointmentPopup.saveAppointmentData(); - - firstSavePromise.done(async() => { - assert.equal(scheduler.appointmentForm.getInvalidEditorsCount.call(scheduler), 1, 'the only invalid editor is displayed in the form'); - - scheduler.appointmentForm.setSubject(validValue); - await waitAsync(20); - const secondSavePromise = scheduler.appointmentPopup.saveAppointmentData(); - await waitAsync(20); - - secondSavePromise.done(() => { - assert.notOk(scheduler.appointmentPopup.getPopupInstance().option('visible'), 'the form is closed'); - - done(); - }); - }); - - assert.equal(scheduler.appointmentForm.getPendingEditorsCount.call(scheduler), 1, 'the only pending editor is displayed in the form'); - }); - - const performanceTest = QUnit.isInShadowDomMode() || browser.mozilla - ? QUnit.test.skip - : QUnit.test; - - performanceTest('Appointment popup opening performance should be ok', async function(assert) { - const maxOpeningTime = 250; - let resolvePopupShown = null; - const popupShownPromise = new Promise((resolve) => { resolvePopupShown = resolve; }); - - const scheduler = await createInstance({ - currentDate: new Date(2015, 1, 1, 1), - onAppointmentFormOpening: function(e) { - e.popup.option('onShown', () => { - resolvePopupShown(performance.now()); - }); - } - }); - await timezoneUtils.cacheTimeZones(); - - const startTime = performance.now(); - - scheduler.instance.showAppointmentPopup({ - startDate: new Date(2025, 1, 1, 1), - endDate: new Date(2025, 1, 1, 2), - text: 'caption' - }); - - const endTime = await popupShownPromise; - const openingTime = endTime - startTime; - - assert.ok(openingTime <= maxOpeningTime, `popup opening time greater than ${maxOpeningTime} ms`); - }); -}); - -module('Timezone Editors', moduleOptions, () => { - test('Popup should not contain startDateTimeZone editor by default', async function(assert) { - const scheduler = await createInstance(); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption', description: 'First task of this day', allDay: true }); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const startDateTimezoneEditor = form.getEditor('startDateTimeZone'); - - assert.notOk(startDateTimezoneEditor, 'StartDateTZ editor isn\'t visible by default'); - }); - - test('Popup should not contain endDateTimeZone editor by default', async function(assert) { - const scheduler = await createInstance(); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption', description: 'First task of this day', allDay: true }); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const endDateTimeZoneEditor = form.getEditor('endDateTimeZone'); - - assert.notOk(endDateTimeZoneEditor, 'EndDateTZ editor isn\'t visible by default'); - }); - - test('It should be possible to render startDateTimeZone editor on appt form', async function(assert) { - const scheduler = await createInstance({ - onAppointmentFormOpening: function(e) { - e.form.itemOption(`${APPOINTMENT_FORM_GROUP_NAMES.Main}.startDateTimeZone`, { visible: true }); - }, - }); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption', description: 'First task of this day', allDay: true }); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const startDateTimezoneEditor = form.getEditor('startDateTimeZone'); - - assert.ok(startDateTimezoneEditor instanceof SelectBox, 'Editor is SelectBox'); - assert.equal(startDateTimezoneEditor.option('value'), null, 'Value is correct'); - }); - - test('It should be possible to render endDateTimeZone editor on appt form', async function(assert) { - const scheduler = await createInstance({ - onAppointmentFormOpening: function(e) { - e.form.itemOption(`${APPOINTMENT_FORM_GROUP_NAMES.Main}.endDateTimeZone`, { visible: true }); - }, - }); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption', description: 'First task of this day', allDay: true }); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const endDateTimezoneEditor = form.getEditor('endDateTimeZone'); - - assert.ok(endDateTimezoneEditor instanceof SelectBox, 'Editor is SelectBox'); - assert.equal(endDateTimezoneEditor.option('value'), null, 'Value is correct'); - }); - - test('timeZone editors should have correct options', async function(assert) { - const scheduler = await createInstance({ - onAppointmentFormOpening: function(e) { - e.form.itemOption(`${APPOINTMENT_FORM_GROUP_NAMES.Main}.startDateTimeZone`, { visible: true }); - e.form.itemOption(`${APPOINTMENT_FORM_GROUP_NAMES.Main}.endDateTimeZone`, { visible: true }); - }, - }); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption', description: 'First task of this day', allDay: true }); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const startDateTimezoneEditor = form.getEditor('startDateTimeZone'); - const endDateTimezoneEditor = form.getEditor('startDateTimeZone'); - - [startDateTimezoneEditor, endDateTimezoneEditor].forEach(editor => { - assert.equal(editor.option('displayExpr'), 'title', 'displayExpr is correct'); - assert.equal(editor.option('valueExpr'), 'id', 'valueExpr is correct'); - assert.strictEqual(editor.option('searchEnabled'), true, 'searchEnabled is correct'); - assert.equal(editor.option('placeholder'), 'No timezone', 'placeholder is correct'); - - assert.ok(editor.option('dataSource') instanceof DataSource, 'editor has dataSource'); - assert.equal(editor.option('dataSource')._paginate, true, 'paging is enabled'); - assert.equal(editor.option('dataSource')._pageSize, 10, 'pageSize is correct'); - }); - }); - - QUnit.test('timeZone editors should have correct value & display value on init', async function(assert) { - const scheduler = await createInstance({ - editing: { - allowTimeZoneEditing: true, - }, - }); - await timezoneUtils.cacheTimeZones(); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2020, 1, 1, 1), startDateTimeZone: 'Europe/Paris', endDate: new Date(2020, 1, 1, 2), text: 'test_text' }); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const startDateTimezoneEditor = form.getEditor('startDateTimeZone'); - const endDateTimezoneEditor = form.getEditor('startDateTimeZone'); - - [startDateTimezoneEditor, endDateTimezoneEditor].forEach(editor => { - assert.equal(editor.option('value'), 'Europe/Paris', 'value is ok'); - assert.ok(editor.option('displayValue').endsWith('Europe - Paris'), 'displayValue is ok'); - }); - }); - - QUnit.test('timeZone editor should have correct display value for timezones with different offsets ', async function(assert) { - const scheduler = await createInstance({ - editing: { - allowTimeZoneEditing: true, - }, - }); - await timezoneUtils.cacheTimeZones(); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2020, 1, 1, 1), endDate: new Date(2020, 1, 1, 2), text: 'test_text' }); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const startDateTimezoneEditor = form.getEditor('startDateTimeZone'); - - startDateTimezoneEditor.option('value', 'Etc/UTC'); - assert.ok(startDateTimezoneEditor.option('displayValue').endsWith('Etc - UTC'), 'displayValue is ok'); - startDateTimezoneEditor.option('value', 'America/Los_Angeles'); - assert.ok(startDateTimezoneEditor.option('displayValue').endsWith('America - Los Angeles'), 'displayValue is ok'); - }); - - QUnit.test('dataSource of timezoneEditor should be filtered', async function(assert) { - const scheduler = await createInstance({ - editing: { - allowTimeZoneEditing: true, - }, - onAppointmentFormOpening: function(e) { - const startDateTimezoneEditor = e.form.getEditor('startDateTimeZone'); - const dataSource = startDateTimezoneEditor.option('dataSource'); - dataSource.paginate(false); - dataSource.filter(['id', 'contains', 'Pacific']); - startDateTimezoneEditor.option('opened', true); - } - }); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2020, 1, 1, 1), endDate: new Date(2020, 1, 1, 2), text: 'test_text' }); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const startDateTimezoneEditor = form.getEditor('startDateTimeZone'); - const expectedItemCount = 45; // US/Pacific-New is excluded - assert.equal(startDateTimezoneEditor.option('items').length, expectedItemCount, 'Items are filtered'); - - }); - - test('startDateTimeZone and endDateTimeZone editor should be rendered with allowTimeZoneEditing option', async function(assert) { - const scheduler = await createInstance({ - editing: { - allowTimeZoneEditing: true, - }, - }); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2020, 1, 1, 1), endDate: new Date(2020, 1, 1, 2), text: 'test_text' }); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const startDateTimezoneEditor = form.getEditor('startDateTimeZone'); - const endDateTimezoneEditor = form.getEditor('endDateTimeZone'); - - assert.ok(startDateTimezoneEditor.option('visible'), 'startDateTimeZone editor is visible'); - assert.ok(endDateTimezoneEditor.option('visible'), 'endDateTimeZone editor is visible'); - - assert.equal(startDateTimezoneEditor.option('value'), null, 'startDateTimeZone editor value should be null'); - assert.equal(endDateTimezoneEditor.option('value'), null, 'endDateTimeZone editor value should be null'); - }); - - test('Change value in startDateTimeZone editor should trigger change value in endDateTimeZone editor if allowTimeZoneEditing: true', async function(assert) { - const scheduler = await createInstance({ - editing: { - allowTimeZoneEditing: true, - }, - }); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2020, 1, 1, 1), endDate: new Date(2020, 1, 1, 2), text: 'test_text' }); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const startDateTimezoneEditor = form.getEditor('startDateTimeZone'); - const endDateTimezoneEditor = form.getEditor('endDateTimeZone'); - - startDateTimezoneEditor.option('value', 'Africa/Cairo'); - - assert.equal(startDateTimezoneEditor.option('value'), 'Africa/Cairo', 'startDateTimeZone editor value should be "Africa/Cairo"'); - assert.equal(endDateTimezoneEditor.option('value'), 'Africa/Cairo', 'endDateTimeZone editor value should be "Africa/Cairo"'); - }); - - test('Change value in endDateTimeZone editor shouldn\'t trigger change value in startDateTimeZone editor if allowTimeZoneEditing: true', async function(assert) { - const scheduler = await createInstance({ - editing: { - allowTimeZoneEditing: true, - }, - }); - - scheduler.instance.showAppointmentPopup({ startDate: new Date(2020, 1, 1, 1), endDate: new Date(2020, 1, 1, 2), text: 'test_text' }); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const startDateTimezoneEditor = form.getEditor('startDateTimeZone'); - const endDateTimezoneEditor = form.getEditor('endDateTimeZone'); - - startDateTimezoneEditor.option('value', 'Asia/Pyongyang'); - endDateTimezoneEditor.option('value', 'Africa/Cairo'); - - assert.equal(startDateTimezoneEditor.option('value'), 'Asia/Pyongyang', 'startDateTimeZone editor value should be "Africa/Cairo"'); - assert.equal(endDateTimezoneEditor.option('value'), 'Africa/Cairo', 'endDateTimeZone editor value should be "Africa/Cairo"'); - }); -}); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/timezones.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/timezones.tests.js index 34f423f315b1..f8e868665784 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/timezones.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/timezones.tests.js @@ -203,7 +203,7 @@ module('Common', moduleConfig, () => { cases.forEach(config => { test(`Appointment should have correct size, position and popup content if ${config.caseName}`, async function(assert) { - const schedulerOptions = { ...config, editing: { legacyForm: true } }; + const schedulerOptions = { ...config, }; if(config.stubClientTimeZone) { const tzOffsetStub = sinon.stub(timeZoneUtils, 'getClientTimezoneOffset').returns(-10800000); @@ -311,7 +311,6 @@ module('Common', moduleConfig, () => { allowTimeZoneEditing: true, allowAdding: true, allowUpdating: true, - legacyForm: true, }, height: 600, appointmentDragging: { @@ -1782,7 +1781,7 @@ module('Appointment popup', moduleConfig, () => { cases.forEach((testCase, index) => { test('StartDate and endDate should be valid', async function(assert) { - const scheduler = await createScheduler({ timeZone: timeZones.NewYork, editing: { legacyForm: true } }); // -4 offset + const scheduler = await createScheduler({ timeZone: timeZones.NewYork, }); // -4 offset scheduler.appointments.dblclick(index); @@ -1810,7 +1809,7 @@ module('Appointment popup', moduleConfig, () => { cases.forEach((testCase, index) => { test('StartDate and endDate should be valid', async function(assert) { - const scheduler = await createScheduler({ editing: { legacyForm: true } }); + const scheduler = await createScheduler({ }); scheduler.appointments.dblclick(index); @@ -1842,7 +1841,6 @@ module('Appointment popup', moduleConfig, () => { store: [appointment] }), editing: { - legacyForm: true, }, currentDate: new Date(2015, 3, 23), startDateExpr: 'Start', @@ -1861,7 +1859,7 @@ module('Appointment popup', moduleConfig, () => { }); }); - test('Appointment startDate and endDate should be correct in the details view for new appointment, if custom timeZone was set, legacyForm', + test('Appointment startDate and endDate should be correct in the details view for new appointment, if custom timeZone was set', async function(assert) { const scheduler = await createWrapper({ dataSource: new DataSource({ @@ -1871,7 +1869,7 @@ module('Appointment popup', moduleConfig, () => { startDateExpr: 'Start', endDateExpr: 'End', timeZone: 'Asia/Calcutta', - editing: { legacyForm: true } + }); pointerMock(scheduler.getElement().find(CLASSES.dateTableCell).eq(22)).start().click().click(); diff --git a/packages/testcafe-models/scheduler/appointment/legacyPopup.ts b/packages/testcafe-models/scheduler/appointment/legacyPopup.ts deleted file mode 100644 index af2bf9baa31e..000000000000 --- a/packages/testcafe-models/scheduler/appointment/legacyPopup.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { Selector, ClientFunction } from 'testcafe'; - -export const CLASS = { - appointmentPopup: 'dx-scheduler-legacy-appointment-popup', - popup: 'dx-popup', - popupWrapper: 'dx-popup-wrapper', - popupContent: 'dx-overlay-content', - cancelButton: 'dx-popup-cancel.dx-button', - stateInvisible: 'dx-state-invisible', - recurrenceEditor: 'dx-recurrence-editor', - textEditorInput: 'dx-texteditor-input', - overlayWrapper: 'dx-overlay-wrapper', - fullScreen: 'dx-popup-fullscreen', - switch: 'dx-switch', - // e2e - form: 'e2e-dx-scheduler-form', - textEditor: 'e2e-dx-scheduler-form-text', - descriptionEditor: 'e2e-dx-scheduler-form-description', - startDateEditor: 'e2e-dx-scheduler-form-start-date', - endDateEditor: 'e2e-dx-scheduler-form-end-date', - startDateTimeZoneEditor: 'e2e-dx-scheduler-form-start-date-timezone', - endDateTimeZoneEditor: 'e2e-dx-scheduler-form-end-date-timezone', - allDaySwitch: 'e2e-dx-scheduler-form-all-day-switch', - recurrenceSwitch: 'e2e-dx-scheduler-form-recurrence-switch', - selectItem: 'dx-list-item', - radioButton: 'dx-radiobutton', -}; -export const SELECTORS = { - textInput: `.${CLASS.textEditor} .${CLASS.textEditorInput}`, - descriptionTextArea: `.${CLASS.descriptionEditor} .${CLASS.textEditorInput}`, - startDateInput: `.${CLASS.startDateEditor} .${CLASS.textEditorInput}`, - endDateInput: `.${CLASS.endDateEditor} .${CLASS.textEditorInput}`, - startDateTimeZoneInput: `.${CLASS.startDateTimeZoneEditor} .${CLASS.textEditorInput}`, - endDateTimeZoneInput: `.${CLASS.endDateTimeZoneEditor} .${CLASS.textEditorInput}`, - allDaySwitch: `.${CLASS.allDaySwitch} .${CLASS.switch}`, - recurrenceSwitch: `.${CLASS.recurrenceSwitch} .${CLASS.switch}`, - repeatUntilInput: '.dx-recurrence-datebox-until-date input[type="text"]', - repeatCountInput: '.dx-recurrence-numberbox-repeat-count input[type="text"]', -}; - -export default class LegacyAppointmentPopup { - element = this.scheduler.find(`.${CLASS.popup}.${CLASS.appointmentPopup}`); - - form = Selector(`.${CLASS.form}`); - - wrapper = Selector(`.${CLASS.popupWrapper}.${CLASS.appointmentPopup}`); - - content = Selector(`.${CLASS.popupWrapper}.${CLASS.appointmentPopup} .${CLASS.popupContent}`); - - subjectElement = this.wrapper.find(SELECTORS.textInput); - - descriptionElement = this.wrapper.find(SELECTORS.descriptionTextArea); - - startDateElement = this.wrapper.find(SELECTORS.startDateInput); - - endDateElement = this.wrapper.find(SELECTORS.endDateInput); - - startDateTimeZoneElement = this.wrapper.find(SELECTORS.startDateTimeZoneInput); - - endDateTimeZoneElement = this.wrapper.find(SELECTORS.endDateTimeZoneInput); - - doneButton = this.wrapper.find('.dx-popup-done.dx-button'); - - cancelButton = this.wrapper.find(`.${CLASS.cancelButton}`); - - allDayElement = this.wrapper.find(SELECTORS.allDaySwitch); - - recurrenceElement = this.wrapper.find(SELECTORS.recurrenceSwitch); - - freqElement = this.wrapper.find('.dx-recurrence-selectbox-freq .dx-selectbox'); - - recurrenceTypeElement = this.wrapper.find(`.${CLASS.recurrenceEditor} .${CLASS.textEditorInput}`).nth(0); - - endRepeatDateElement = this.wrapper.find(`.${CLASS.recurrenceEditor} .${CLASS.textEditorInput}`).nth(2); - - repeatEveryElement = this.wrapper.find(`.${CLASS.recurrenceEditor} .${CLASS.textEditorInput}`).nth(1); - - fullScreen = this.wrapper.find(`.${CLASS.overlayWrapper} .${CLASS.fullScreen}`).exists; - - repeatUntilElement = this.wrapper.find(SELECTORS.repeatUntilInput); - - repeatCountElement = this.wrapper.find(SELECTORS.repeatCountInput); - - constructor(private readonly scheduler: Selector) { - } - - isVisible(): Promise { - const { element } = this; - const invisibleStateClass = CLASS.stateInvisible; - - return ClientFunction(() => !(element() as any).classList.contains(invisibleStateClass), { - dependencies: { element, invisibleStateClass }, - })(); - } - - getAllDaySwitchValue(): Promise { - return this.allDayElement.find('input[type="hidden"]').value; - } - - getRecurrenceRuleSwitchValue(): Promise { - return this.recurrenceElement.find('input[type="hidden"]').value; - } - - getRecurrenceTypeSelectItem(nth = 0): Selector { - return Selector(`.${CLASS.overlayWrapper}`) - .nth(1) - .find(`.${CLASS.selectItem}`) - .nth(nth); - } - - getEndRepeatRadioButton(nth = 0): Selector { - return this.wrapper.find(`.${CLASS.radioButton}`).nth(nth); - } -} diff --git a/packages/testcafe-models/scheduler/index.ts b/packages/testcafe-models/scheduler/index.ts index a9bfb96effb4..3431f59ff607 100644 --- a/packages/testcafe-models/scheduler/index.ts +++ b/packages/testcafe-models/scheduler/index.ts @@ -1,6 +1,5 @@ import { ClientFunction } from 'testcafe'; import Widget from '../internal/widget'; -import LegacyAppointmentPopup from './appointment/legacyPopup'; import AppointmentPopup from './appointment/popup'; import AppointmentTooltip from './appointment/tooltip'; import AppointmentDialog from './appointment/dialog'; @@ -77,8 +76,6 @@ export default class Scheduler extends Widget { readonly workSpaceScroll: { left: Promise; top: Promise }; - readonly legacyAppointmentPopup: LegacyAppointmentPopup; - readonly appointmentPopup: AppointmentPopup; readonly appointmentTooltip: AppointmentTooltip; @@ -124,7 +121,6 @@ export default class Scheduler extends Widget { top: this.workspaceScrollable.scrollTop, }; - this.legacyAppointmentPopup = new LegacyAppointmentPopup(this.element); this.appointmentPopup = new AppointmentPopup(this.element); this.appointmentTooltip = new AppointmentTooltip(this.element); this.reducedIconTooltip = new ReducedIconTooltip(); From ff92ea7a938e4c8702e49172f7283f2960fd4e9a Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Wed, 1 Apr 2026 05:39:01 -0300 Subject: [PATCH 02/32] Scheduler - Remove QUnit tests that depended on legacy popup form --- .../appointment.editing.tests.js | 35 ---- .../appointment.monthView.tests.js | 85 -------- .../appointment.week.based.views.tests.js | 117 ----------- .../common.events.tests.js | 22 --- .../editing.tests.js | 121 ------------ .../integration.agenda.tests.js | 25 --- .../integration.base.tests.js | 7 - .../integration.resources.tests.js | 169 ---------------- .../timezones.tests.js | 181 ------------------ 9 files changed, 762 deletions(-) diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js index 071b47c6b6af..61b6f964ed83 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js @@ -86,41 +86,6 @@ module('Integration: Appointment editing', { }; } }, () => { - test('Scheduler appointment popup should correctly update recurrence appointment', async function(assert) { - const tasks = [{ - text: 'Recurrence task', - start: new Date(2017, 2, 13), - end: new Date(2017, 2, 13, 0, 30), - recurrenceRule: 'FREQ=WEEKLY;BYDAY=MO,TH;COUNT=10' - }]; - - const scheduler = await this.createInstance({ - dataSource: tasks, - currentDate: new Date(2017, 2, 13), - currentView: 'month', - recurrenceEditMode: 'series', - views: ['month'], - startDateExpr: 'start', - endDateExpr: 'end', - - }); - - scheduler.appointments.dblclick(0); - - const form = scheduler.instance.getAppointmentDetailsForm(); - const repeatSwitch = form.getEditor('repeat'); - repeatSwitch.option('value', false); - - scheduler.appointmentPopup.clickDoneButton(); - - assert.deepEqual(scheduler.instance.option('dataSource')[0], { - text: 'Recurrence task', - start: new Date(2017, 2, 13), - end: new Date(2017, 2, 13, 0, 30), - recurrenceRule: '' - }, 'Appointment was updated correctly'); - }); - test('updateAppointment method should be called with right args when task was resized, timelineMonth view', async function(assert) { const data = [{ text: 'Task 1', diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.monthView.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.monthView.tests.js index d9852fbd5590..08035e6edd61 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.monthView.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.monthView.tests.js @@ -384,91 +384,6 @@ module('Integration: Appointments in Month view', { assert.equal($appointment.length, 2, 'appointment is rendered'); }); - test('Scheduler appointment popup should be opened correctly for recurrence appointments after multiple opening(T710140)', async function(assert) { - const tasks = [{ - text: 'Recurrence task', - start: new Date(2017, 2, 13), - end: new Date(2017, 2, 13, 0, 30), - recurrenceRule: 'FREQ=WEEKLY;BYDAY=MO,TH;COUNT=10' - }]; - - const scheduler = await createInstance({ - dataSource: tasks, - currentDate: new Date(2017, 2, 13), - currentView: 'month', - views: ['month'], - startDateExpr: 'start', - endDateExpr: 'end', - editing: { - } - }); - - scheduler.instance.showAppointmentPopup(tasks[0]); - $('.dx-dialog-buttons .dx-button').eq(0).trigger('dxclick'); - const form = scheduler.instance.getAppointmentDetailsForm(); - const descriptionEditor = form.getEditor('description'); - - descriptionEditor.option('value', 'Recurrence task 1'); - - scheduler.instance.hideAppointmentPopup(); - scheduler.instance.showAppointmentPopup(tasks[0]); - - $('.dx-dialog-buttons .dx-button').eq(0).trigger('dxclick'); - - const popup = scheduler.instance.appointmentPopup.popup; - const $buttonGroup = $(popup.$content()).find('.dx-buttongroup'); - - assert.deepEqual($buttonGroup.eq(0).dxButtonGroup('instance').option('selectedItemKeys'), ['MO', 'TH'], 'Right button group select item keys'); - }); - - test('Scheduler appointment popup should be opened correctly for recurrence appointments after opening for ordinary appointments(T710140)', async function(assert) { - const tasks = [{ - text: 'Task', - start: new Date(2017, 2, 13), - end: new Date(2017, 2, 13, 0, 30) - }, { - text: 'Recurrence task', - start: new Date(2017, 2, 13), - end: new Date(2017, 2, 13, 0, 30), - recurrenceRule: 'FREQ=WEEKLY;BYDAY=MO,TH;COUNT=10' - }]; - - const scheduler = await createInstance({ - dataSource: tasks, - currentDate: new Date(2017, 2, 13), - currentView: 'month', - views: ['month'], - startDateExpr: 'start', - endDateExpr: 'end', - editing: { - } - }); - - scheduler.instance.showAppointmentPopup(tasks[0]); - - let form = scheduler.instance.getAppointmentDetailsForm(); - const descriptionEditor = form.getEditor('description'); - - descriptionEditor.option('value', 'Task 1'); - - scheduler.instance.hideAppointmentPopup(); - scheduler.instance.showAppointmentPopup(tasks[1]); - - $('.dx-dialog-buttons .dx-button').eq(0).trigger('dxclick'); - - const popup = scheduler.instance.appointmentPopup.popup; - const $buttonGroup = $(popup.$content()).find('.dx-buttongroup'); - - $buttonGroup.eq(0).dxButtonGroup('instance').option('selectedItemKeys'), ['MO', 'TH'], 'Right button group select item keys'; - - scheduler.instance.hideAppointmentPopup(); - scheduler.instance.showAppointmentPopup(tasks[0]); - - form = scheduler.instance.getAppointmentDetailsForm(); - - assert.equal(form.itemOption('recurrenceGroup').visible, false, 'Recurrence editor is hidden. Popup is correct'); - }); - test('Long term appoinment inflict index shift in other appointments (T737780)', async function(assert) { const data = [ { diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.week.based.views.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.week.based.views.tests.js index 6e2b8daa2b5a..05e0d4a991c8 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.week.based.views.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.week.based.views.tests.js @@ -248,29 +248,6 @@ module('Integration: Appointment Day, Week views', { } }); - test('Appointment should be copied before sending to the details view', async function(assert) { - const task = { - text: 'Task 1', - startDate: 1429776000000, - endDate: 1429794000000 - }; - - const scheduler = await createInstance({ - dataSource: new DataSource({ - store: [task] - }), - currentDate: new Date(2015, 3, 23), - - }); - - scheduler.instance.showAppointmentPopup(task); - - const detailsForm = scheduler.instance.getAppointmentDetailsForm(); - const formData = detailsForm.option('formData'); - - assert.notEqual(formData, task, 'Appointment data is copied'); - }); - test('Non-grid-aligned appointments should be resized correctly', async function(assert) { const scheduler = await createInstance({ currentDate: new Date(2015, 1, 9), @@ -809,40 +786,6 @@ module('Integration: Appointment Day, Week views', { assert.equal($appointmentRecurringIcon.css('display'), 'none', 'Appointment recurring icon isn\'t visible'); }); - test('Appointment startDate and endDate should have correct format in the details view after allDay appoitment opening (T505119)', async function(assert) { - const tasks = [{ - text: 'AllDay task', - start: new Date(2017, 2, 13), - end: new Date(2017, 2, 13, 0, 30), - AllDay: true - }, { - text: 'Short task', - start: new Date(2017, 2, 13), - end: new Date(2017, 2, 13, 0, 30) - }]; - - const scheduler = await createInstance({ - dataSource: tasks, - currentDate: new Date(2017, 2, 13), - currentView: 'week', - views: ['week'], - startDateExpr: 'start', - endDateExpr: 'end', - allDayExpr: 'AllDay', - - }); - scheduler.instance.showAppointmentPopup(tasks[0]); - scheduler.instance.hideAppointmentPopup(); - scheduler.instance.showAppointmentPopup(tasks[1]); - - const detailsForm = scheduler.instance.getAppointmentDetailsForm(); - const startDateEditor = detailsForm.getEditor('start'); - const endDateEditor = detailsForm.getEditor('end'); - - assert.equal(startDateEditor.option('type'), 'datetime', 'start date is correct'); - assert.equal(endDateEditor.option('type'), 'datetime', 'end date is correct'); - }); - test('Scheduler should not throw error at deferred appointment loading (T518327)', async function(assert) { const data = [{ text: 'Task 1', startDate: new Date(2017, 4, 22, 16), endDate: new Date(2017, 4, 24, 1) }]; @@ -892,66 +835,6 @@ module('Integration: Appointment Day, Week views', { } }); - test('FormData should be reset on saveChanges, dateSerializationFormat is set in initial appointment data (T569673)', async function(assert) { - const task = { text: 'Task', StartDate: '2016-05-25T09:40:00', - EndDate: '2016-05-25T10:40:00' }; - - const scheduler = await createInstance({ - dataSource: [task], - currentDate: new Date(2016, 4, 25), - currentView: 'week', - views: ['week'], - startDateExpr: 'StartDate', - endDateExpr: 'EndDate', - - onAppointmentFormOpening: function(data) { - const form = data.form; - let startDate = data.appointmentData.StartDate; - const endDate = data.appointmentData.EndDate; - - form.option('items', [ - { - dataField: 'StartDate', - editorType: 'dxDateBox', - editorOptions: { - value: startDate, - type: 'datetime', - onValueChanged: function(args) { - startDate = args.value; - form.getEditor('EndDate') - .option('value', new Date(1464160900000)); - } - } - }, { - name: 'EndDate', - dataField: 'EndDate', - editorType: 'dxDateBox', - editorOptions: { - value: endDate, - type: 'datetime', - readOnly: true - } - } - ]); - }, - height: 800 - }); - - scheduler.instance.showAppointmentPopup(task, true); - - const detailsForm = scheduler.instance.getAppointmentDetailsForm(); - const startDateEditor = detailsForm.getEditor('StartDate'); - - startDateEditor.option('value', '2016-05-25T10:40:00'); - - $('.dx-scheduler-legacy-appointment-popup .dx-popup-done').trigger('dxclick').trigger('dxclick'); - - const $appointments = scheduler.instance.$element().find('.' + APPOINTMENT_CLASS); - - const endDateFormat = dateSerialization.getDateSerializationFormat(dataUtils.data($appointments[1], 'dxItemData').EndDate); - assert.deepEqual(endDateFormat, 'yyyy-MM-ddTHH:mm:ss', 'Appointment EndDate format is OK'); - }); - test('A long appointment should not change start date if resized from the bottom', async function(assert) { const expectedStartDate = new Date(2018, 4, 21, 0, 30); const scheduler = await createInstance({ diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/common.events.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/common.events.tests.js index 672cd727ac5b..fee559f2b6cf 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/common.events.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/common.events.tests.js @@ -615,28 +615,6 @@ QUnit.module('Events', { assert.deepEqual(appointments.option('onAppointmentDblClick')(), scheduler.instance.option('onAppointmentDblClick')(), 'scheduler has correct onAppointmentDblClick after option change'); }); - QUnit.test('onAppointmentFormOpening event should be fired while details form is opening', async function(assert) { - const stub = sinon.stub(); - const data = { - text: 'One', - location: 'NY' - }; - const scheduler = await createWrapper({ - currentView: 'month', - onAppointmentFormOpening: stub, - editing: { - }, - }); - - scheduler.instance.showAppointmentPopup(data); - - const args = stub.getCall(0).args[0]; - - assert.ok(stub.calledOnce, 'Event was fired'); - assert.equal(args.appointmentData, data, 'Appointment data is OK'); - assert.equal(args.form, scheduler.instance.getAppointmentDetailsForm(), 'Appointment form is OK'); - }); - QUnit.test('Option changed', async function(assert) { const scheduler = await createWrapper(); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/editing.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/editing.tests.js index 6b4e95fc64ab..01fd7366d7ce 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/editing.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/editing.tests.js @@ -77,127 +77,6 @@ QUnit.test('Appointment should not be draggable & resizable', async function(ass assert.ok(appointments.option('allowResize'), 'Resize is allowed'); }); -QUnit.test('ReadOnly option should be passed to the details appointment view', async function(assert) { - await this.createInstance({ - editing: { - allowUpdating: false, - } - }); - - this.instance.showAppointmentPopup({ - text: 'a', - startDate: new Date(2015, 5, 15, 10), - endDate: new Date(2015, 5, 15, 11) - }); - - let detailsAppointmentView = this.instance.getAppointmentDetailsForm(); - - assert.ok(detailsAppointmentView.option('readOnly'), 'ReadOnly option is correct'); - - this.instance.option('editing.allowUpdating', true); - this.instance.showAppointmentPopup({ - text: 'a', - startDate: new Date(2015, 5, 15, 10), - endDate: new Date(2015, 5, 15, 11) - }); - detailsAppointmentView = this.instance.getAppointmentDetailsForm(); - - assert.notOk(detailsAppointmentView.option('readOnly'), 'ReadOnly option is correct'); -}); - -QUnit.test('Details appointment view should be readOnly if editing.allowUpdating=false', async function(assert) { - await this.createInstance({ - editing: { - allowUpdating: false, - } - }); - - this.instance.showAppointmentPopup({ - text: 'a', - startDate: new Date(2015, 5, 15, 10), - endDate: new Date(2015, 5, 15, 11) - }); - - let detailsAppointmentView = this.instance.getAppointmentDetailsForm(); - - assert.ok(detailsAppointmentView.option('readOnly'), 'ReadOnly option is correct'); - - this.instance.option('editing', { - allowUpdating: true - }); - this.instance.showAppointmentPopup({ - text: 'a', - startDate: new Date(2015, 5, 15, 10), - endDate: new Date(2015, 5, 15, 11) - }); - detailsAppointmentView = this.instance.getAppointmentDetailsForm(); - - assert.notOk(detailsAppointmentView.option('readOnly'), 'ReadOnly option is correct'); -}); - -QUnit.test('Details appointment view shouldn\'t be readOnly when adding new appointment if editing.allowUpdating=false', async function(assert) { - await this.createInstance({ - currentDate: new Date(2015, 5, 14), - editing: { - allowUpdating: false, - allowAdding: true, - } - }); - - this.instance.showAppointmentPopup({ - text: 'a', - startDate: new Date(2015, 12, 15, 10), - endDate: new Date(2015, 12, 15, 11) - }, true); - - const detailsAppointmentView = this.instance.getAppointmentDetailsForm(); - - assert.notOk(detailsAppointmentView.option('readOnly'), 'ReadOnly option is correct'); -}); - -QUnit.test('Details appointment form should be readOnly after adding new appointment if editing.allowUpdating=false', async function(assert) { - await this.createInstance({ - currentDate: new Date(2015, 5, 14), - editing: { - allowUpdating: false, - }, - dataSource: [] - }); - - const a = { text: 'a', startDate: new Date(2015, 5, 14, 0), endDate: new Date(2015, 5, 14, 0, 30) }; - - this.instance.showAppointmentPopup(a, true); - this.instance.hideAppointmentPopup(); - - this.instance.showAppointmentPopup(a); - - const detailsAppointmentView = this.instance.getAppointmentDetailsForm(); - - assert.ok(detailsAppointmentView.option('readOnly'), 'ReadOnly option is correct'); - this.instance.hideAppointmentPopup(); -}); - -QUnit.test('Details form of new appointment shouldn\'t be readOnly after try to change existing appointment if editing.allowUpdating=false', async function(assert) { - const first = { text: 'first', startDate: new Date(2015, 5, 14, 0), endDate: new Date(2015, 5, 14, 0, 30) }; - const second = { text: 'second', startDate: new Date(2015, 5, 14, 1), endDate: new Date(2015, 5, 14, 1, 30) }; - - await this.createInstance({ - currentDate: new Date(2015, 5, 14), - editing: { - allowUpdating: false, - }, - dataSource: [first] - }); - this.instance.showAppointmentPopup(first); - this.instance.hideAppointmentPopup(); - this.instance.showAppointmentPopup(second, true); - - const detailsAppointmentView = this.instance.getAppointmentDetailsForm(); - - assert.notOk(detailsAppointmentView.option('readOnly'), 'ReadOnly option is correct'); - this.instance.hideAppointmentPopup(); -}); - QUnit.module('Editing option: complex object', { beforeEach: function() { this.createInstance = function(options) { diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.agenda.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.agenda.tests.js index f2b037898378..002e62210148 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.agenda.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.agenda.tests.js @@ -1212,31 +1212,6 @@ module('Integration: Agenda', moduleConfig, () => { }); }); - test('Long appointment parts popup should have original data', async function(assert) { - const instance = await createInstance({ - views: ['agenda'], - currentView: 'agenda', - currentDate: new Date(2016, 1, 24), - startDayHour: 8, - endDayHour: 20, - startDateExpr: 'Start', - dataSource: [ - { Start: new Date(2016, 1, 24, 1), endDate: new Date(2016, 1, 27, 1, 30), text: 'a' } - ], - - }); - - const $appointment = $(instance.$element()).find('.dx-scheduler-appointment').eq(1); - $appointment.trigger(dblclickEvent.name); - - const detailsForm = instance.getAppointmentDetailsForm(); - const formData = detailsForm.option('formData'); - - assert.deepEqual(formData.Start, new Date(2016, 1, 24, 1), 'start is correct'); - assert.deepEqual(formData.endDate, new Date(2016, 1, 27, 1, 30), 'end is correct'); - assert.equal(formData.text, 'a', 'text is correct'); - }); - test('Long appointment should be rendered correctly after changing view', async function(assert) { const instance = await createInstance({ views: ['agenda', 'month'], diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.base.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.base.tests.js index 6f92746e6480..288b42b430bb 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.base.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.base.tests.js @@ -257,13 +257,6 @@ QUnit.test('Scheduler should not throw an error when the details form is opened } }); -QUnit.test('The \'scrollingEnabled\' option of an appointment form should be \'true\'', async function(assert) { - await this.createInstance({ }); - this.instance.showAppointmentPopup({ startDate: new Date() }); - - assert.strictEqual(this.instance.getAppointmentDetailsForm().option('scrollingEnabled'), true, 'the scrollingEnabled option is OK'); -}); - QUnit.module('Integration: Date options with ISO8601', { beforeEach: function() { this.defaultForceIsoDateParsing = config().forceIsoDateParsing; 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 2f6c1bc3c0d3..e5d9fa45b79f 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 @@ -192,175 +192,6 @@ QUnit.module('Integration: Resources', moduleConfig, () => { assert.ok(onAppointmentFormOpeningRaised, 'onAppointmentFormOpening event should be raised'); }); - QUnit.test('Editor for resource should be passed to details view', async function(assert) { - const task1 = { - text: 'Task 1', - ownerId: 1, - startDate: new Date(2015, 1, 9, 1, 0), - endDate: new Date(2015, 1, 9, 2, 0) - }; - const task2 = { - text: 'Task 2', - roomId: 1, - startDate: new Date(2015, 1, 9, 1, 0), - endDate: new Date(2015, 1, 9, 2, 0) - }; - const roomResource = [ - { - text: '#1', - id: 1, - color: '#606060' - }, { - text: '#2', - id: 2, - color: '#606066' - } - ]; - const resources = [ - { - field: 'ownerId', - allowMultiple: true, - dataSource: [{ - text: 'Jack', - id: 1, - color: '#606060' - }, { - text: 'Mike', - id: 2, - color: '#ff0000' - }] - }, { - field: 'roomId', - allowMultiple: false, - dataSource: new DataSource(roomResource) - }]; - - const scheduler = await createWrapper({ - resources: resources, - dataSource: new DataSource({ - store: [task1, task2] - }), - currentDate: new Date(2015, 1, 9), - - }); - - scheduler.instance.showAppointmentPopup(task1); - - let taskDetailsView = scheduler.instance.getAppointmentDetailsForm(); - - const ownerEditor = taskDetailsView.option('items')[0].items[6]; - await ownerEditor.editorOptions.dataSource.load(); - - assert.ok(taskDetailsView.getEditor('ownerId'), 'Editor is exist'); - assert.equal(ownerEditor.editorType, 'dxTagBox', 'Editor is dxTagBox'); - assert.deepEqual(ownerEditor.editorOptions.dataSource.items(), resources[0].dataSource, 'Data source is OK'); - assert.deepEqual(taskDetailsView.option('formData').ownerId, [1], 'Value is OK'); - - scheduler.instance.hideAppointmentPopup(); - scheduler.instance.showAppointmentPopup(task2); - taskDetailsView = scheduler.instance.getAppointmentDetailsForm(); - - const roomEditor = taskDetailsView.option('items')[0].items[7]; - - roomEditor.editorOptions.dataSource.load(); - - assert.ok(taskDetailsView.getEditor('roomId'), 'Editor is exist'); - assert.equal(roomEditor.editorType, 'dxSelectBox', 'Editor is dxSelectBox'); - - assert.strictEqual(taskDetailsView.option('formData').roomId, 1, 'Value is OK'); - assert.deepEqual(roomEditor.editorOptions.dataSource.items(), roomResource, 'Data source is OK'); - }); - - QUnit.test('Editor for resource should be passed to details view for scheduler with groups', async function(assert) { - const task = { - text: 'Task 1', - ownerId: 1, - startDate: new Date(2015, 1, 9, 1, 0), - endDate: new Date(2015, 1, 9, 2, 0) - }; - const resources = [{ - field: 'ownerId', - allowMultiple: true, - valueExpr: 'uid', - displayExpr: 'name', - dataSource: [ - { uid: 1, name: 'Jack', color: '#606060' }, - { uid: 2, name: 'Mike', color: '#ff0000' }, - ] - }]; - - const scheduler = await createWrapper({ - resources: resources, - groups: ['ownerId'], - dataSource: new DataSource({ - store: [task] - }), - currentDate: new Date(2015, 1, 9), - - }); - - scheduler.instance.showAppointmentPopup(task); - - const taskDetailsView = scheduler.instance.getAppointmentDetailsForm(); - const ownerEditor = taskDetailsView.option('items')[0].items[6]; - - assert.equal(ownerEditor.editorType, 'dxTagBox', 'Editor is dxTagBox'); - assert.deepEqual(ownerEditor.editorOptions.dataSource.items(), resources[0].dataSource, 'Data source is OK'); - assert.equal(ownerEditor.editorOptions.valueExpr, resources[0].valueExpr, 'valueExpr is OK'); - assert.equal(ownerEditor.editorOptions.displayExpr, resources[0].displayExpr, 'displayExpr is OK'); - }); - - QUnit.test('Editor for resource with right value should be passed to details view when fieldExpr is used', async function(assert) { - const appointment = { - 'Price': 10, - 'startDate': new Date(2015, 4, 24, 9, 10, 0, 0), - 'endDate': new Date(2015, 4, 24, 11, 1, 0, 0), - 'Movie': { - 'ID': 3 - }, - 'TheatreId': 1 - }; - - const resources = [{ - fieldExpr: 'Movie.ID', - useColorAsDefault: true, - allowMultiple: false, - dataSource: [{ - 'ID': 1, - 'Color': 'blue' - }, { - 'ID': 3, - 'Color': 'red' - }], - valueExpr: 'ID', - colorExpr: 'Color' - }, { - fieldExpr: 'TheatreId', - dataSource: [{ - id: 1 - }, { - id: 2 - }] - }]; - - const scheduler = await createWrapper({ - resources: resources, - dataSource: [appointment], - currentDate: new Date(2015, 4, 24), - - }); - - scheduler.instance.showAppointmentPopup(appointment); - - const taskDetailsView = scheduler.instance.getAppointmentDetailsForm(); - const movieEditor = taskDetailsView.option('items')[0].items[6]; - - movieEditor.editorOptions.dataSource.load(); - - assert.deepEqual(movieEditor.editorOptions.dataSource.items(), resources[0].dataSource, 'Data source is OK'); - assert.strictEqual(taskDetailsView.option('formData').Movie.ID, 3, 'Value is OK'); - }); - QUnit.test('Appointments should be repainted if \'groups\' option is changed', async function(assert) { const scheduler = await createWrapper({ dataSource: new DataSource({ diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/timezones.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/timezones.tests.js index f8e868665784..4b7dbfee79e7 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/timezones.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/timezones.tests.js @@ -95,129 +95,6 @@ const createScheduler = (options = {}) => { module('Common', moduleConfig, () => { if(isDesktopEnvironment()) { module('Appointments rendering when appointment timeZone is set', () => { - const cases = [{ - caseName: 'startDateTimeZone = endDateTimezone', - appointment: { - startDate: new Date(2020, 1, 4, 5).toString(), - startDateTimeZone: timeZones.Yekaterinburg, - endDateTimeZone: timeZones.Yekaterinburg, - endDate: new Date(2020, 1, 4, 6).toString(), - }, - expectedContent: `${dateLocalization.format(new Date(2020, 1, 4, 5), 'shorttime')} - ${dateLocalization.format(new Date(2020, 1, 4, 6), 'shorttime')}`, - expectedPosition: { - top: 380, - left: 0 - }, - expectedPopupDates: { - startDate: '2/4/2020, 7:00 AM', - endDate: '2/4/2020, 8:00 AM' - }, - expectedHeight: 100, - stubClientTimeZone: true - }, - { - caseName: 'startDateTimeZone != endDateTimezone', - appointment: { - startDate: new Date(2020, 1, 4, 5).toString(), - startDateTimeZone: timeZones.Moscow, - endDateTimeZone: timeZones.Yekaterinburg, - endDate: new Date(2020, 1, 4, 6).toString() - }, - expectedContent: `${dateLocalization.format(new Date(2020, 1, 4, 5), 'shorttime')} - ${dateLocalization.format(new Date(2020, 1, 4, 6), 'shorttime')}`, - expectedPosition: { - top: 380, - left: 0 - }, - expectedPopupDates: { - startDate: '2/4/2020, 5:00 AM', - endDate: '2/4/2020, 8:00 AM' - }, - expectedHeight: 100, - stubClientTimeZone: true - }, - { - caseName: 'startDateTimeZone = endDateTimezone and scheduler timeZone is set', - appointment: { - startDate: new Date('2020-02-04T14:00:00.000Z'), - endDate: new Date('2020-02-04T15:00:00.000Z'), - startDateTimeZone: 'Africa/Algiers', - endDateTimeZone: 'Africa/Algiers' - }, - schedulerTimeZone: timeZones.Yekaterinburg, - expectedContent: '7:00 PM - 8:00 PM', - expectedPosition: { - top: 1444, - left: 0 - }, - expectedPopupDates: { - startDate: '2/4/2020, 3:00 PM', - endDate: '2/4/2020, 4:00 PM' - }, - expectedHeight: 100, - stubClientTimeZone: false - }, - { - caseName: 'startDateTimeZone != endDateTimezone and scheduler timeZone is set', - appointment: { - startDate: new Date('2020-02-04T14:00:00.000Z'), - endDate: new Date('2020-02-04T15:00:00.000Z'), - startDateTimeZone: 'Africa/Algiers', - endDateTimeZone: 'Africa/Cairo' - }, - schedulerTimeZone: timeZones.Yekaterinburg, - expectedContent: '7:00 PM - 8:00 PM', - expectedPosition: { - top: 1444, - left: 0 - }, - expectedPopupDates: { - startDate: '2/4/2020, 3:00 PM', - endDate: '2/4/2020, 5:00 PM' - }, - expectedHeight: 100, - stubClientTimeZone: false - }]; - - const runTest = async(config, assert) => { - const scheduler = await createWrapper({ - currentDate: new Date(2020, 1, 4), - views: ['day'], - currentView: 'day', - firstDayOfWeek: 1, - dataSource: [config.appointment], - timeZone: config.schedulerTimeZone, - editing: config.editing, - }); - - assert.equal(scheduler.appointments.getDateText(), config.expectedContent, 'Appointment content has correct dates'); - assert.deepEqual(scheduler.appointments.getAppointmentPosition(), config.expectedPosition, 'Appointment is rendered in right cell'); - - scheduler.appointments.dblclick(0); - const form = scheduler.instance.getAppointmentDetailsForm(); - const startDateBox = form.getEditor('startDate'); - const endDateBox = form.getEditor('endDate'); - - assert.equal(startDateBox.option('text'), config.expectedPopupDates.startDate, 'Appointment popup has right startDate'); - assert.equal(endDateBox.option('text'), config.expectedPopupDates.endDate, 'Appointment popup has right endDate'); - }; - - cases.forEach(config => { - test(`Appointment should have correct size, position and popup content if ${config.caseName}`, async function(assert) { - const schedulerOptions = { ...config, }; - - if(config.stubClientTimeZone) { - const tzOffsetStub = sinon.stub(timeZoneUtils, 'getClientTimezoneOffset').returns(-10800000); - try { - await runTest(schedulerOptions, assert); - } finally { - tzOffsetStub.restore(); - } - } else { - await runTest(schedulerOptions, assert); - } - }); - }); - test('Appointments should be filtered correctly when remoteFiltering is enabled', async function(assert) { const dataSource = new DataSource({ store: new ArrayStore({ @@ -1823,64 +1700,6 @@ module('Appointment popup', moduleConfig, () => { }); }); - ['Etc/GMT-5', 'Asia/Ashkhabad'].forEach(timeZone => { - test(`Appointment startDate and endDate should be correct in the details view, if custom timeZone='${timeZone}' is setting`, - async function(assert) { - const startDate = new Date(2015, 3, 11, 11); - const endDate = new Date(2015, 3, 11, 11, 30); - - const appointment = { - text: 'Task 1', - Start: startDate, - End: endDate - }; - - const scheduler = await createWrapper({ - timeZone, - dataSource: new DataSource({ - store: [appointment] - }), - editing: { - }, - currentDate: new Date(2015, 3, 23), - startDateExpr: 'Start', - endDateExpr: 'End' - }); - - - scheduler.instance.showAppointmentPopup(appointment); - - const detailsForm = scheduler.instance.getAppointmentDetailsForm(); - const formData = detailsForm.option('formData'); - const deltaTz = getDeltaTz(5, startDate); - - assert.deepEqual(formData.Start, new Date(startDate.getTime() + deltaTz), 'start date is correct'); - assert.deepEqual(formData.End, new Date(endDate.getTime() + deltaTz), 'end date is correct'); - }); - }); - - test('Appointment startDate and endDate should be correct in the details view for new appointment, if custom timeZone was set', - async function(assert) { - const scheduler = await createWrapper({ - dataSource: new DataSource({ - store: [] - }), - currentDate: new Date(2015, 3, 23), - startDateExpr: 'Start', - endDateExpr: 'End', - timeZone: 'Asia/Calcutta', - - }); - - pointerMock(scheduler.getElement().find(CLASSES.dateTableCell).eq(22)).start().click().click(); - - const detailsForm = scheduler.instance.getAppointmentDetailsForm(); - const formData = detailsForm.option('formData'); - - assert.deepEqual(formData.Start, new Date(2015, 3, 23, 11), 'start date is correct'); - assert.deepEqual(formData.End, new Date(2015, 3, 23, 11, 30), 'end date is correct'); - }); - test('Appointment date correction should be rollback after closing popup, if custom timeZone was set as string', async function(assert) { const updatedItem = { text: 'Task 1', From 5b8ebbd95335d24239cd0fa6e201d38e14f16ecb Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Wed, 1 Apr 2026 10:52:02 -0300 Subject: [PATCH 03/32] Scheduler - Add side-effect imports for UI components removed with legacy form --- .../js/__internal/scheduler/appointment_popup/m_form.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/devextreme/js/__internal/scheduler/appointment_popup/m_form.ts b/packages/devextreme/js/__internal/scheduler/appointment_popup/m_form.ts index 3b182d90714a..a16fb3c464ed 100644 --- a/packages/devextreme/js/__internal/scheduler/appointment_popup/m_form.ts +++ b/packages/devextreme/js/__internal/scheduler/appointment_popup/m_form.ts @@ -1,3 +1,9 @@ +import '../m_recurrence_editor'; +import '@js/ui/text_area'; +import '@js/ui/tag_box'; +import '@js/ui/switch'; +import '@js/ui/select_box'; + import type { TextEditorButton } from '@js/common'; import messageLocalization from '@js/common/core/localization/message'; import { DataSource } from '@js/common/data'; From 036e70c6ae0cd5379187fd88e808ac3d74f8e5c3 Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Wed, 1 Apr 2026 11:24:07 -0300 Subject: [PATCH 04/32] Scheduler - Remove legacy popup references from QUnit helpers, tests, and SCSS --- .../scss/widgets/base/scheduler/_common.scss | 17 -------- .../scss/widgets/base/scheduler/_index.scss | 39 ------------------- .../scss/widgets/fluent/scheduler/_index.scss | 29 -------------- .../widgets/generic/scheduler/_index.scss | 29 -------------- .../widgets/material/scheduler/_index.scss | 29 -------------- .../testing/helpers/scheduler/helpers.js | 4 +- .../appointment.editing.tests.js | 4 +- 7 files changed, 4 insertions(+), 147 deletions(-) diff --git a/packages/devextreme-scss/scss/widgets/base/scheduler/_common.scss b/packages/devextreme-scss/scss/widgets/base/scheduler/_common.scss index 0a0f2411c040..9f98e29c0f02 100644 --- a/packages/devextreme-scss/scss/widgets/base/scheduler/_common.scss +++ b/packages/devextreme-scss/scss/widgets/base/scheduler/_common.scss @@ -7,23 +7,6 @@ $scheduler-appointment-collector-margin: 3px; $scheduler-appointment-collector-height: 22px; $scheduler-popup-scrollable-content-padding: 20px; -.dx-scheduler-legacy-appointment-popup { - .dx-popup-content { - padding-top: 0; - padding-bottom: 0; - } - - .dx-scrollable-content { - padding-top: $scheduler-popup-scrollable-content-padding; - } - - .dx-form.dx-recurrence-editor-container { - .dx-scrollable-content { - padding-top: 0; - } - } -} - .dx-scheduler { .dx-empty-message { line-height: normal; diff --git a/packages/devextreme-scss/scss/widgets/base/scheduler/_index.scss b/packages/devextreme-scss/scss/widgets/base/scheduler/_index.scss index 05b0808f5944..6ceba003716c 100644 --- a/packages/devextreme-scss/scss/widgets/base/scheduler/_index.scss +++ b/packages/devextreme-scss/scss/widgets/base/scheduler/_index.scss @@ -604,45 +604,6 @@ $scheduler-appointment-form-label-padding: 20px; } } - .dx-scheduler-legacy-appointment-popup { - .dx-form .dx-field-item.dx-appointment-form-switch > div { - flex-grow: 0; - width: auto; - } - - .dx-layout-manager .dx-label-h-align .dx-field-item-content { - .dx-switch, - .dx-checkbox { - margin: 0; - } - } - - .dx-field-item-label-location-left { - padding-right: $scheduler-appointment-form-label-padding; - } - - .dx-field { - min-height: 0; - } - - .dx-field-label { - width: auto; - } - - .dx-field-value { - padding-left: 0; - padding-right: 0; - - &:not(.dx-widget) > .dx-checkbox { - float: left; - - &.dx-rtl { - float: right; - } - } - } - } - .dx-scheduler-appointment-collector { &.dx-button.dx-state-hover { &::before { diff --git a/packages/devextreme-scss/scss/widgets/fluent/scheduler/_index.scss b/packages/devextreme-scss/scss/widgets/fluent/scheduler/_index.scss index 081ca90b0bea..a40c6ea98837 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/scheduler/_index.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/scheduler/_index.scss @@ -760,35 +760,6 @@ $fluent-scheduler-agenda-time-panel-cell-padding: 8px; } } -.dx-scheduler-legacy-appointment-popup { - .dx-form { - padding: 0 10px 0 10px; - } - - .dx-popup-title { - background-color: $scheduler-popup-title-bg; - border-bottom: none; - - .dx-closebutton, - .dx-closebutton.dx-rtl { - margin: 0; - } - } - - .dx-toolbar-after { - margin-right: 4px; - - .dx-rtl & { - margin-left: 4px; - margin-right: 0; - } - } -} - -.dx-scheduler-legacy-appointment-popup .dx-form-validation-summary { - padding: 10px 20px; -} - .dx-scheduler-header-panel, .dx-scheduler-time-panel { font-size: $fluent-scheduler-workspace-info-text-size; diff --git a/packages/devextreme-scss/scss/widgets/generic/scheduler/_index.scss b/packages/devextreme-scss/scss/widgets/generic/scheduler/_index.scss index fc82711b346a..2abce2057d9c 100644 --- a/packages/devextreme-scss/scss/widgets/generic/scheduler/_index.scss +++ b/packages/devextreme-scss/scss/widgets/generic/scheduler/_index.scss @@ -231,31 +231,6 @@ $generic-scheduler-agenda-group-header-padding: $generic-scheduler-agenda-time-c } } -.dx-scheduler-legacy-appointment-popup { - .dx-popup-title { - background-color: $scheduler-popup-title-bg; - - .dx-closebutton, - .dx-closebutton.dx-rtl { - margin: 0; - } - } - - .dx-popup-bottom { - border-top: 1px solid; - border-top-color: $scheduler-appointment-form-separator-color; - } - - .dx-toolbar-after { - margin-right: 4px; - - .dx-rtl & { - margin-left: 4px; - margin-right: 0; - } - } -} - .dx-scheduler-appointment-popup { > .dx-overlay-content > .dx-toolbar.dx-widget { > .dx-toolbar-items-container { @@ -334,10 +309,6 @@ $generic-scheduler-agenda-group-header-padding: $generic-scheduler-agenda-time-c } } -.dx-scheduler-legacy-appointment-popup .dx-form-validation-summary { - padding: 10px 20px; -} - .dx-scheduler-work-space-month .dx-scheduler-date-table-cell { font-size: $generic-scheduler-month-date-text-size; } diff --git a/packages/devextreme-scss/scss/widgets/material/scheduler/_index.scss b/packages/devextreme-scss/scss/widgets/material/scheduler/_index.scss index 8a65dd85500b..8f45e24750f9 100644 --- a/packages/devextreme-scss/scss/widgets/material/scheduler/_index.scss +++ b/packages/devextreme-scss/scss/widgets/material/scheduler/_index.scss @@ -733,35 +733,6 @@ $material-scheduler-agenda-time-panel-cell-padding: 8px; } } -.dx-scheduler-legacy-appointment-popup { - .dx-form { - padding: 0 10px 0 10px; - } - - .dx-popup-title { - background-color: $scheduler-popup-title-bg; - border-bottom: none; - - .dx-closebutton, - .dx-closebutton.dx-rtl { - margin: 0; - } - } - - .dx-toolbar-after { - margin-right: 4px; - - .dx-rtl & { - margin-left: 4px; - margin-right: 0; - } - } -} - -.dx-scheduler-legacy-appointment-popup .dx-form-validation-summary { - padding: 10px 20px; -} - .dx-scheduler-header-panel, .dx-scheduler-time-panel { font-size: $material-scheduler-workspace-info-text-size; diff --git a/packages/devextreme/testing/helpers/scheduler/helpers.js b/packages/devextreme/testing/helpers/scheduler/helpers.js index ff0457009b81..52b8eb8a095c 100644 --- a/packages/devextreme/testing/helpers/scheduler/helpers.js +++ b/packages/devextreme/testing/helpers/scheduler/helpers.js @@ -566,14 +566,14 @@ export class SchedulerTestWrapper extends ElementWrapper { hide: () => $(CLASSES.dialog).find('.dx-closebutton.dx-button').trigger('dxclick') }, - getPopup: () => $('.dx-overlay-wrapper.dx-scheduler-appointment-popup, .dx-overlay-wrapper.dx-scheduler-legacy-appointment-popup'), + getPopup: () => $('.dx-overlay-wrapper.dx-scheduler-appointment-popup'), getRecurrenceDialog: () => $(`${CLASSES.dialog}${CLASSES.popup}`), getPopupTitleElement: () => this.appointmentPopup.getPopup().find('.dx-popup-title'), hasVerticalScroll: () => { const scrollableContainer = this.appointmentPopup.getPopup().find('.dx-scrollable-container').get(0); return scrollableContainer.scrollHeight > scrollableContainer.clientHeight; }, - getPopupInstance: () => $('.dx-scheduler-appointment-popup.dx-widget, .dx-scheduler-legacy-appointment-popup.dx-widget').dxPopup('instance'), + getPopupInstance: () => $('.dx-scheduler-appointment-popup.dx-widget').dxPopup('instance'), isVisible: () => this.appointmentPopup.getPopup().length !== 0, setPopupHeight: height => this.appointmentPopup.getPopupInstance().option('height', height), getToolbarElementByLocation: location => { diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js index 61b6f964ed83..69a4a7483eba 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js @@ -188,7 +188,7 @@ module('Integration: Appointment editing', { try { scheduler.instance.showAppointmentPopup(newItem, true); - $('.dx-scheduler-legacy-appointment-popup .dx-popup-done').trigger('dxclick'); + $('.dx-scheduler-appointment-popup .dx-popup-done').trigger('dxclick'); assert.ok(spy.calledOnce, 'Add method is called'); assert.deepEqual(spy.getCall(0).args[0], newItem, 'New item is correct'); @@ -290,7 +290,7 @@ module('Integration: Appointment editing', { try { scheduler.instance.showAppointmentPopup(updatedItem); - $('.dx-scheduler-legacy-appointment-popup .dx-popup-done').trigger('dxclick'); + $('.dx-scheduler-appointment-popup .dx-popup-done').trigger('dxclick'); hide(); From 0db7467f8b43741d09ab1b62e43bc284fccc9a3d Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Wed, 1 Apr 2026 11:32:37 -0300 Subject: [PATCH 05/32] Scheduler - Remove unused SCSS variables from deleted legacy popup styles --- .../devextreme-scss/scss/widgets/base/scheduler/_common.scss | 1 - .../devextreme-scss/scss/widgets/base/scheduler/_index.scss | 2 -- .../devextreme-scss/scss/widgets/fluent/scheduler/_colors.scss | 1 - .../devextreme-scss/scss/widgets/generic/scheduler/_colors.scss | 2 -- .../scss/widgets/material/scheduler/_colors.scss | 1 - 5 files changed, 7 deletions(-) diff --git a/packages/devextreme-scss/scss/widgets/base/scheduler/_common.scss b/packages/devextreme-scss/scss/widgets/base/scheduler/_common.scss index 9f98e29c0f02..d331e306e8e3 100644 --- a/packages/devextreme-scss/scss/widgets/base/scheduler/_common.scss +++ b/packages/devextreme-scss/scss/widgets/base/scheduler/_common.scss @@ -5,7 +5,6 @@ $scheduler-appointment-collector-margin: 3px; $scheduler-appointment-collector-height: 22px; -$scheduler-popup-scrollable-content-padding: 20px; .dx-scheduler { .dx-empty-message { diff --git a/packages/devextreme-scss/scss/widgets/base/scheduler/_index.scss b/packages/devextreme-scss/scss/widgets/base/scheduler/_index.scss index 6ceba003716c..9a868e452bed 100644 --- a/packages/devextreme-scss/scss/widgets/base/scheduler/_index.scss +++ b/packages/devextreme-scss/scss/widgets/base/scheduler/_index.scss @@ -99,8 +99,6 @@ $scheduler-time-indicator-shadow-color: rgba(255, 255, 255, 0.1); $scheduler-time-indicator-shadow: 0 1px 0 0 $scheduler-time-indicator-shadow-color; $scheduler-time-indicator-text-shadow: $scheduler-time-indicator-shadow-color 1px 0 0; -$scheduler-appointment-form-label-padding: 20px; - @use "./appointment" with ( $scheduler-transparent-top-border: $scheduler-transparent-top-border, $scheduler-appointment-base-color: $scheduler-appointment-base-color, diff --git a/packages/devextreme-scss/scss/widgets/fluent/scheduler/_colors.scss b/packages/devextreme-scss/scss/widgets/fluent/scheduler/_colors.scss index 96b0642dcdb4..965f42ee75bf 100644 --- a/packages/devextreme-scss/scss/widgets/fluent/scheduler/_colors.scss +++ b/packages/devextreme-scss/scss/widgets/fluent/scheduler/_colors.scss @@ -65,7 +65,6 @@ $scheduler-current-time-cell-color: $base-accent !default; $scheduler-time-indicator-color: #eb5757 !default; $scheduler-dd-appointment-hover-text-color: $base-inverted-text-color !default; $scheduler-form-icon-color: $base-icon-color !default; -$scheduler-popup-title-bg: $scheduler-workspace-background-color !default; $scheduler-workspace-month-text-color: $base-text-color !default; $scheduler-workspace-other-month-text-color: $base-label-color !default; $scheduler-dropdown-appointment-date-color: color.change($base-text-color, $alpha: 0.54) !default; diff --git a/packages/devextreme-scss/scss/widgets/generic/scheduler/_colors.scss b/packages/devextreme-scss/scss/widgets/generic/scheduler/_colors.scss index 9a50494cc11c..a218d48aded9 100644 --- a/packages/devextreme-scss/scss/widgets/generic/scheduler/_colors.scss +++ b/packages/devextreme-scss/scss/widgets/generic/scheduler/_colors.scss @@ -68,7 +68,6 @@ $scheduler-current-time-cell-color: $base-accent !default; $scheduler-time-indicator-color: null !default; $scheduler-dd-appointment-hover-text-color: null !default; $scheduler-form-icon-color: $base-icon-color !default; -$scheduler-popup-title-bg: $scheduler-workspace-background-color !default; $scheduler-workspace-month-text-color: null !default; $scheduler-dropdown-appointment-date-color: null !default; $scheduler-workspace-active-cell-color: null !default; @@ -76,7 +75,6 @@ $scheduler-workspace-hovered-cell-color: null !default; $scheduler-group-header-color: null !default; $scheduler-header-bg: null !default; $scheduler-alldaypanel-bg: null !default; -$scheduler-appointment-form-separator-color: $base-border-color !default; $scheduler-tab-selected-bg: null !default; $scheduler-tab-selected-before-bg: null !default; $scheduler-tab-focused-border-color: null !default; diff --git a/packages/devextreme-scss/scss/widgets/material/scheduler/_colors.scss b/packages/devextreme-scss/scss/widgets/material/scheduler/_colors.scss index 404f8b130a75..36419aac68b0 100644 --- a/packages/devextreme-scss/scss/widgets/material/scheduler/_colors.scss +++ b/packages/devextreme-scss/scss/widgets/material/scheduler/_colors.scss @@ -64,7 +64,6 @@ $scheduler-current-time-cell-color: $base-accent !default; $scheduler-time-indicator-color: #eb5757 !default; $scheduler-dd-appointment-hover-text-color: $base-inverted-text-color !default; $scheduler-form-icon-color: $base-icon-color !default; -$scheduler-popup-title-bg: $scheduler-workspace-background-color !default; $scheduler-workspace-month-text-color: $base-text-color !default; $scheduler-workspace-other-month-text-color: color.change($base-text-color, $alpha: 0.6) !default; $scheduler-dropdown-appointment-date-color: $base-text-color !default; From d4f0755c89bdfa810bd91caee8ef51f2bd4e84f0 Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Wed, 1 Apr 2026 11:52:04 -0300 Subject: [PATCH 06/32] Scheduler - Update QUnit tests to use new form editor names --- .../devextreme/testing/helpers/scheduler/helpers.js | 4 ++-- .../integration.appointmentCollector.tests.js | 2 +- .../integration.recurringAppointments.tests.js | 8 ++++---- .../timezones.tests.js | 12 ++++++------ 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/devextreme/testing/helpers/scheduler/helpers.js b/packages/devextreme/testing/helpers/scheduler/helpers.js index 52b8eb8a095c..dcaf6b440972 100644 --- a/packages/devextreme/testing/helpers/scheduler/helpers.js +++ b/packages/devextreme/testing/helpers/scheduler/helpers.js @@ -602,8 +602,8 @@ export class SchedulerTestWrapper extends ElementWrapper { getFormInstance: () => this.appointmentPopup.getPopup().find('.dx-form').dxForm('instance'), getEditor: name => this.appointmentForm.getFormInstance().getEditor(name), setSubject: (value, fieldName = 'text') => this.appointmentForm.getEditor(fieldName).option('value', value), - setStartDate: (value) => this.appointmentForm.getEditor('startDate').option('value', value), - setEndDate: (value) => this.appointmentForm.getEditor('endDate').option('value', value), + setStartDate: (value) => this.appointmentForm.getEditor('startDateEditor').option('value', value), + setEndDate: (value) => this.appointmentForm.getEditor('endDateEditor').option('value', value), hasFormSingleColumn: () => $('.dx-responsivebox').first().hasClass('dx-responsivebox-screen-xs'), getRecurrentAppointmentFormDialogButtons: () => $('.dx-dialog-buttons .dx-button'), diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.appointmentCollector.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.appointmentCollector.tests.js index 5ddd8f299f5a..56b77f5d001a 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.appointmentCollector.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.appointmentCollector.tests.js @@ -60,7 +60,7 @@ module('Integration: collector', baseConfig, () => { currentDate: new Date(2017, 4, 25), height: 600, onAppointmentFormOpening: e => { - const startDate = e.form.getEditor('startDate').option('value'); + const startDate = e.form.getEditor('startDateEditor').option('value'); assert.equal(startDate.getDate(), 16, 'Recurrence appointment date should be display equal targetedAppointmentData date in form'); }, editing: { diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js index 70fa05585fab..6a289246b600 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js @@ -1688,8 +1688,8 @@ supportedScrollingModes.forEach(scrollingMode => { scheduler.appointments.dblclick(2); scheduler.appointmentForm.clickFormDialogButton(1); - const formStartDate = scheduler.appointmentForm.getEditor('startDate'); - const formEndDate = scheduler.appointmentForm.getEditor('endDate'); + const formStartDate = scheduler.appointmentForm.getEditor('startDateEditor'); + const formEndDate = scheduler.appointmentForm.getEditor('endDateEditor'); assert.deepEqual(formStartDate.option('value'), new Date(2019, 2, 30, 2, 2), 'Appointment third occurrence sets right startDate in appointmentForm'); assert.deepEqual(formEndDate.option('value'), new Date(2019, 2, 30, 3, 2), 'Appointment third occurrence sets right endDate in appointmentForm'); @@ -1716,8 +1716,8 @@ supportedScrollingModes.forEach(scrollingMode => { scheduler.appointments.dblclick(2); scheduler.appointmentForm.clickFormDialogButton(1); - const formStartDate = scheduler.appointmentForm.getEditor('startDate'); - const formEndDate = scheduler.appointmentForm.getEditor('endDate'); + const formStartDate = scheduler.appointmentForm.getEditor('startDateEditor'); + const formEndDate = scheduler.appointmentForm.getEditor('endDateEditor'); assert.deepEqual(formStartDate.option('value'), new Date(2019, 2, 30, 4, 0), 'Appointment third occurrence sets right startDate in appointmentForm'); assert.deepEqual(formEndDate.option('value'), new Date(2019, 2, 30, 5, 0), 'Appointment third occurrence sets right endDate in appointmentForm'); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/timezones.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/timezones.tests.js index 4b7dbfee79e7..b18adbaf7343 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/timezones.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/timezones.tests.js @@ -195,8 +195,8 @@ module('Common', moduleConfig, () => { onAdd: e => { e.component.showAppointmentPopup(e.itemData, true); - const startDate = scheduler.appointmentForm.getEditor('startDate').option('value'); - const endDate = scheduler.appointmentForm.getEditor('endDate').option('value'); + const startDate = scheduler.appointmentForm.getEditor('startDateEditor').option('value'); + const endDate = scheduler.appointmentForm.getEditor('endDateEditor').option('value'); assert.equal(startDate.valueOf(), expectedStartDate.valueOf(), 'start date should be equal with date from grid - 5/22/2017 2:00 AM'); assert.equal(endDate.valueOf(), expectedEndDate.valueOf(), 'start date should be equal with date from grid - 5/22/2017 2:30 AM'); @@ -1663,8 +1663,8 @@ module('Appointment popup', moduleConfig, () => { scheduler.appointments.dblclick(index); const text = scheduler.appointments.getTitleText(index); - const startDate = scheduler.appointmentForm.getEditor('startDate').option('value'); - const endDate = scheduler.appointmentForm.getEditor('endDate').option('value'); + const startDate = scheduler.appointmentForm.getEditor('startDateEditor').option('value'); + const endDate = scheduler.appointmentForm.getEditor('endDateEditor').option('value'); assert.equal(startDate.valueOf(), testCase.startDate, `StartDate of '${text}' should be valid`); assert.equal(endDate.valueOf(), testCase.endDate, `EndDate of '${text}' should be valid`); @@ -1691,8 +1691,8 @@ module('Appointment popup', moduleConfig, () => { scheduler.appointments.dblclick(index); const text = scheduler.appointments.getTitleText(index); - const startDate = scheduler.appointmentForm.getEditor('startDate').option('value'); - const endDate = scheduler.appointmentForm.getEditor('endDate').option('value'); + const startDate = scheduler.appointmentForm.getEditor('startDateEditor').option('value'); + const endDate = scheduler.appointmentForm.getEditor('endDateEditor').option('value'); assert.equal(startDate.valueOf(), testCase.startDate, `StartDate of '${text}' should be valid`); assert.equal(endDate.valueOf(), testCase.endDate, `EndDate of '${text}' should be valid`); From e9468705fe078baf57d8b7bfd5a6157c0c413009 Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Wed, 1 Apr 2026 12:41:41 -0300 Subject: [PATCH 07/32] Scheduler - Adapt QUnit tests to new popup layout and form editor names --- .../testing/helpers/scheduler/helpers.js | 2 +- .../appointment.editing.tests.js | 4 +- .../integration.adaptivity.tests.js | 49 +++++++++---------- ...integration.recurringAppointments.tests.js | 32 +++++++----- .../integration.resources.tests.js | 3 +- 5 files changed, 47 insertions(+), 43 deletions(-) diff --git a/packages/devextreme/testing/helpers/scheduler/helpers.js b/packages/devextreme/testing/helpers/scheduler/helpers.js index dcaf6b440972..56d907e50b15 100644 --- a/packages/devextreme/testing/helpers/scheduler/helpers.js +++ b/packages/devextreme/testing/helpers/scheduler/helpers.js @@ -601,7 +601,7 @@ export class SchedulerTestWrapper extends ElementWrapper { this.appointmentForm = { getFormInstance: () => this.appointmentPopup.getPopup().find('.dx-form').dxForm('instance'), getEditor: name => this.appointmentForm.getFormInstance().getEditor(name), - setSubject: (value, fieldName = 'text') => this.appointmentForm.getEditor(fieldName).option('value', value), + setSubject: (value, fieldName = 'subjectEditor') => this.appointmentForm.getEditor(fieldName).option('value', value), setStartDate: (value) => this.appointmentForm.getEditor('startDateEditor').option('value', value), setEndDate: (value) => this.appointmentForm.getEditor('endDateEditor').option('value', value), diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js index 69a4a7483eba..39b6f295ec84 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js @@ -191,7 +191,7 @@ module('Integration: Appointment editing', { $('.dx-scheduler-appointment-popup .dx-popup-done').trigger('dxclick'); assert.ok(spy.calledOnce, 'Add method is called'); - assert.deepEqual(spy.getCall(0).args[0], newItem, 'New item is correct'); + assert.deepEqual(spy.getCall(0).args[0], { ...newItem, allDay: false, recurrenceRule: '' }, 'New item is correct'); } finally { scheduler.instance.addAppointment = addAppointment; } @@ -296,7 +296,7 @@ module('Integration: Appointment editing', { assert.ok(spy.calledOnce, 'Update method is called'); assert.deepEqual(spy.getCall(0).args[0], updatedItem, 'Target item is correct'); - assert.deepEqual(spy.getCall(0).args[1], updatedItem, 'New data is correct'); + assert.deepEqual(spy.getCall(0).args[1], { ...updatedItem, allDay: false, recurrenceRule: '' }, 'New data is correct'); } finally { scheduler.instance.updateAppointment = updateAppointment; } diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.adaptivity.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.adaptivity.tests.js index 7af17d0de071..f8822161e297 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.adaptivity.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.adaptivity.tests.js @@ -264,8 +264,8 @@ if(isDesktopEnvironment()) { resetWindowWidth(); } }, () => { - test('The fullscreen mode is enabled of popup when window\'s width < 1000px', async function(assert) { - setWindowWidth(900); + test('The fullscreen mode is enabled of popup when window\'s width < 485px', async function(assert) { + setWindowWidth(400); const scheduler = await createInstance({ }); scheduler.appointments.compact.click(); @@ -276,8 +276,8 @@ if(isDesktopEnvironment()) { assert.equal(popup.option('maxWidth'), '100%', 'maxWidth'); }); - test('The fullscreen mode is disabled of popup when window\'s width > 1000px', async function(assert) { - setWindowWidth(1001); + test('The fullscreen mode is disabled of popup when window\'s width > 485px', async function(assert) { + setWindowWidth(600); const scheduler = await createInstance({ }); scheduler.appointments.compact.click(); @@ -285,11 +285,11 @@ if(isDesktopEnvironment()) { const popup = scheduler.appointmentPopup.getPopupInstance(); assert.notOk(popup.option('fullScreen'), 'The fullscreen mode is disabled'); - assert.equal(popup.option('maxWidth'), 485, 'maxWidth'); + assert.equal(popup.option('maxWidth'), 380, 'maxWidth'); }); - test('The fullscreen mode is disabled of popup when window\'s width > 1000px, with recurrence editor', async function(assert) { - setWindowWidth(1001); + test('The fullscreen mode is disabled of popup when window\'s width > 485px, with recurrence editor', async function(assert) { + setWindowWidth(600); const scheduler = await createInstance({ }); scheduler.option('dataSource', [{ @@ -304,37 +304,37 @@ if(isDesktopEnvironment()) { const popup = scheduler.appointmentPopup.getPopupInstance(); assert.notOk(popup.option('fullScreen'), 'The fullscreen mode is disabled'); - assert.equal(popup.option('maxWidth'), 970, 'maxWidth'); + assert.equal(popup.option('maxWidth'), 380, 'maxWidth'); }); - test('The fullscreen mode is enabled of popup when the window\'s width < 1000px by resizing the window', async function(assert) { - setWindowWidth(1001); + test('The fullscreen mode is enabled of popup when the window\'s width < 485px by resizing the window', async function(assert) { + setWindowWidth(600); const scheduler = await createInstance({ }); scheduler.appointments.compact.click(); scheduler.tooltip.clickOnItem(); const popup = scheduler.appointmentPopup.getPopupInstance(); - setWindowWidth(767); + setWindowWidth(400); resizeCallbacks.fire(); assert.ok(popup.option('fullScreen'), 'The fullscreen mode is enabled'); assert.equal(popup.option('maxWidth'), '100%', 'maxWidth'); }); - test('The fullscreen mode is disabled of popup when the window\'s width > 1000px by resizing the window', async function(assert) { - setWindowWidth(799); + test('The fullscreen mode is disabled of popup when the window\'s width > 485px by resizing the window', async function(assert) { + setWindowWidth(400); const scheduler = await createInstance({ }); scheduler.appointments.compact.click(); scheduler.tooltip.clickOnItem(); const popup = scheduler.appointmentPopup.getPopupInstance(); - setWindowWidth(1001); + setWindowWidth(600); resizeCallbacks.fire(); assert.notOk(popup.option('fullScreen'), 'The fullscreen mode is disabled'); - assert.equal(popup.option('maxWidth'), 485, 'maxWidth'); + assert.equal(popup.option('maxWidth'), 380, 'maxWidth'); }); }); } @@ -350,8 +350,8 @@ if(!isDesktopEnvironment()) { resetWindowWidth(); } }, () => { - test('The fullscreen mode is enabled of popup when window\'s width < 500px', async function(assert) { - setWindowWidth(499); + test('The fullscreen mode is enabled of popup when window\'s width < 485px', async function(assert) { + setWindowWidth(400); const scheduler = await createInstance({ }); scheduler.appointments.compact.click(); @@ -362,7 +362,7 @@ if(!isDesktopEnvironment()) { assert.equal(popup.option('maxWidth'), '100%', 'maxWidth'); }); - test('The fullscreen mode is disabled of popup when window\'s width > 500px', async function(assert) { + test('The fullscreen mode is disabled of popup when window\'s width > 485px', async function(assert) { setWindowWidth(501); const scheduler = await createInstance({ }); @@ -371,10 +371,10 @@ if(!isDesktopEnvironment()) { const popup = scheduler.appointmentPopup.getPopupInstance(); assert.notOk(popup.option('fullScreen'), 'The fullscreen mode is disabled'); - assert.equal(popup.option('maxWidth'), 350, 'maxWidth'); + assert.equal(popup.option('maxWidth'), 380, 'maxWidth'); }); - test('The fullscreen mode is disabled of popup when window\'s width > 500px, with recurrence editor', async function(assert) { + test('The fullscreen mode is disabled of popup when window\'s width > 485px, with recurrence editor', async function(assert) { setWindowWidth(501); const scheduler = await createInstance({ }); @@ -389,7 +389,7 @@ if(!isDesktopEnvironment()) { const popup = scheduler.appointmentPopup.getPopupInstance(); assert.notOk(popup.option('fullScreen'), 'The fullscreen mode is disabled'); - assert.equal(popup.option('maxWidth'), 350, 'maxWidth'); + assert.equal(popup.option('maxWidth'), 380, 'maxWidth'); }); }); } @@ -408,8 +408,7 @@ module('Appointment popup buttons', moduleConfig, () => { scheduler.tooltip.clickOnItem(); const popup = scheduler.appointmentPopup; - assert.ok(popup.hasToolbarButtonsInSection(TOOLBAR_TOP_LOCATION, SECTION_BEFORE, [CANCEL_BUTTON]), 'the \'Cancel\' button is located inside the \'before\' section'); - assert.ok(popup.hasToolbarButtonsInSection(TOOLBAR_TOP_LOCATION, SECTION_AFTER, [DONE_BUTTON]), 'the \'Done\' button is located inside the \'after\' section'); + assert.ok(popup.hasToolbarButtonsInSection(TOOLBAR_TOP_LOCATION, SECTION_AFTER, [CANCEL_BUTTON, DONE_BUTTON]), 'the \'Cancel\' and \'Done\' buttons are located inside the \'after\' section'); } finally { this.realDeviceMock.restore(); } @@ -423,7 +422,7 @@ module('Appointment popup buttons', moduleConfig, () => { scheduler.tooltip.clickOnItem(); const popup = scheduler.appointmentPopup; - assert.ok(popup.hasToolbarButtonsInSection(TOOLBAR_BOTTOM_LOCATION, SECTION_AFTER, [DONE_BUTTON, CANCEL_BUTTON]), 'the \'Cancel\' and \'Done\' buttons are located in the \'after\' section'); + assert.ok(popup.hasToolbarButtonsInSection(TOOLBAR_TOP_LOCATION, SECTION_AFTER, [DONE_BUTTON, CANCEL_BUTTON]), 'the \'Cancel\' and \'Done\' buttons are located in the \'after\' section'); } finally { this.realDeviceMock.restore(); } @@ -437,7 +436,7 @@ module('Appointment popup buttons', moduleConfig, () => { scheduler.tooltip.clickOnItem(); const popup = scheduler.appointmentPopup; - assert.ok(popup.hasToolbarButtonsInSection(TOOLBAR_BOTTOM_LOCATION, SECTION_AFTER, [CANCEL_BUTTON, DONE_BUTTON]), 'the \'Cancel\' and \'Done\' buttons are located in the \'after\' section'); + assert.ok(popup.hasToolbarButtonsInSection(TOOLBAR_TOP_LOCATION, SECTION_AFTER, [CANCEL_BUTTON, DONE_BUTTON]), 'the \'Cancel\' and \'Done\' buttons are located in the \'after\' section'); } finally { this.realDeviceMock.restore(); } diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js index 6a289246b600..4fa26d903c12 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js @@ -676,6 +676,8 @@ supportedScrollingModes.forEach(scrollingMode => { text: 'Task 2', startDate: new Date(2015, 1, 11, 3), endDate: new Date(2015, 1, 11, 4), + allDay: false, + recurrenceRule: '', }; const scheduler = await this.createInstance({ @@ -693,11 +695,11 @@ supportedScrollingModes.forEach(scrollingMode => { const $title = $('.dx-textbox').eq(0); const title = $title.dxTextBox('instance'); - const $startDate = $('.dx-datebox').eq(0); - const startDate = $startDate.dxDateBox('instance'); + const $startTime = $('.dx-datebox').eq(1); + const startTime = $startTime.dxDateBox('instance'); title.option('value', 'Task 2'); - startDate.option('value', new Date(2015, 1, 11, 3, 0)); + startTime.option('value', new Date(2015, 1, 11, 3, 0)); $('.dx-button.dx-popup-done').eq(0).trigger('dxclick'); await clock.tickAsync(300); clock.restore(); @@ -717,6 +719,8 @@ supportedScrollingModes.forEach(scrollingMode => { customData: { texts: ['123', '456'] }, startDate: new Date(2015, 1, 11, 3), endDate: new Date(2015, 1, 11, 4), + allDay: false, + recurrenceRule: '', }; const scheduler = await this.createInstance({ @@ -743,11 +747,11 @@ supportedScrollingModes.forEach(scrollingMode => { const $title = $('.dx-textbox').eq(0); const title = $title.dxTextBox('instance'); - const $startDate = $('.dx-datebox').eq(0); - const startDate = $startDate.dxDateBox('instance'); + const $startTime = $('.dx-datebox').eq(1); + const startTime = $startTime.dxDateBox('instance'); title.option('value', 'Task 2'); - startDate.option('value', new Date(2015, 1, 11, 3, 0)); + startTime.option('value', new Date(2015, 1, 11, 3, 0)); $('.dx-button.dx-popup-done').eq(0).trigger('dxclick'); await clock.tickAsync(300); clock.restore(); @@ -874,7 +878,9 @@ supportedScrollingModes.forEach(scrollingMode => { const updatedItem = { text: 'Task 2', startDate: new Date(2015, 1, 11, 3), - endDate: new Date(2015, 1, 11, 4) + endDate: new Date(2015, 1, 11, 4), + allDay: false, + recurrenceRule: '', }; const scheduler = await this.createInstance({ @@ -892,11 +898,11 @@ supportedScrollingModes.forEach(scrollingMode => { const $title = $('.dx-textbox').eq(0); const title = $title.dxTextBox('instance'); - const $startDate = $('.dx-datebox').eq(0); - const startDate = $startDate.dxDateBox('instance'); + const $startTime = $('.dx-datebox').eq(1); + const startTime = $startTime.dxDateBox('instance'); title.option('value', 'Task 2'); - startDate.option('value', new Date(2015, 1, 11, 3, 0)); + startTime.option('value', new Date(2015, 1, 11, 3, 0)); $('.dx-button.dx-popup-done').eq(0).trigger('dxclick'); await clock.tickAsync(300); clock.restore(); @@ -1344,11 +1350,11 @@ supportedScrollingModes.forEach(scrollingMode => { $('.dx-dialog-buttons .dx-button').eq(1).trigger('dxclick'); - const $startDate = $('.dx-datebox').eq(0); - const startDate = $startDate.dxDateBox('instance'); + const $startTime = $('.dx-datebox').eq(1); + const startTime = $startTime.dxDateBox('instance'); const expectedStartDate = new Date(2018, 4, 23, 9, 0); - startDate.option('value', expectedStartDate); + startTime.option('value', expectedStartDate); $('.dx-button.dx-popup-done').eq(0).trigger('dxclick'); await clock.tickAsync(300); clock.restore(); 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 e5d9fa45b79f..f20b334662d0 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 @@ -344,8 +344,7 @@ QUnit.module('Integration: Resources', moduleConfig, () => { scheduler.instance.showAppointmentPopup(data[0]); - // TODO: replace with 2 after edit form refactor - assert.equal(loadStub.callCount, 3, 'Store requested in select box'); + assert.equal(loadStub.callCount, 2, 'Store requested in select box'); assert.equal(byKeyStub.callCount, 0, 'Resources are loaded only once'); }); From 2cb95960fa12f57abc599ef80fd4aa048f00e5de Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Wed, 1 Apr 2026 13:09:24 -0300 Subject: [PATCH 08/32] Scheduler - Remove QUnit tests that depended on legacy popup behavior --- .../appointment.monthView.tests.js | 43 ---------- .../integration.adaptivity.tests.js | 80 ------------------- .../integration.resources.tests.js | 42 ---------- 3 files changed, 165 deletions(-) diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.monthView.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.monthView.tests.js index 08035e6edd61..ac6423c699ce 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.monthView.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.monthView.tests.js @@ -97,49 +97,6 @@ module('Integration: Appointments in Month view', { fx.off = false; } }, () => { - module('Scrolling mode standard', () => { - test('Appointments should be rendered correctly when resourses store is asynchronous', async function(assert) { - const appointments = [ - { startDate: new Date(2015, 2, 4), text: 'a', endDate: new Date(2015, 2, 4, 0, 30), roomId: 1 }, - { startDate: new Date(2015, 2, 4), text: 'b', endDate: new Date(2015, 2, 4, 0, 30), roomId: 2 } - ]; - - const scheduler = await createInstanceBase({ - currentDate: new Date(2015, 2, 4), - views: ['month'], - dataSource: appointments, - width: 840, - height: 600, - currentView: 'month', - firstDayOfWeek: 1, - groups: ['roomId'], - resources: [ - { - field: 'roomId', - allowMultiple: true, - dataSource: new DataSource({ - store: new CustomStore({ - load: function() { - const d = $.Deferred(); - setTimeout(function() { - d.resolve([ - { id: 1, text: 'Room 1', color: '#ff0000' }, - { id: 2, text: 'Room 2', color: '#0000ff' } - ]); - }, 300); - - return d.promise(); - } - }) - }) - } - ] - }); - - assert.deepEqual(scheduler.instance.$element().find('.' + APPOINTMENT_CLASS).length, 2, 'Appointments are rendered'); - }); - }); - supportedScrollingModes.forEach(scrollingMode => { module(`Scrolling mode ${scrollingMode}`, () => { const createInstance = async(options) => { diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.adaptivity.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.adaptivity.tests.js index f8822161e297..fe303687a980 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.adaptivity.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.adaptivity.tests.js @@ -181,30 +181,6 @@ if(isDesktopEnvironment()) { assert.ok(scheduler.appointmentForm.hasFormSingleColumn(), 'Appointment form has single column'); }); - test('Items has layout with non-one column when the form\'s width > 600px', async function(assert) { - const scheduler = await createInstance({ }); - setWindowWidth(700); - scheduler.appointments.compact.click(); - scheduler.tooltip.clickOnItem(); - - assert.notOk(scheduler.appointmentForm.hasFormSingleColumn(), 'Appointment form has not single column'); - }); - - test('Items with recurrence editor has layout with non-one column when the form\'s width > 600px', async function(assert) { - const scheduler = await createInstance({ }); - setWindowWidth(700); - scheduler.option('dataSource', [{ - startDate: new Date(2015, 1, 1), - endDate: new Date(2015, 1, 2), - recurrenceRule: 'FREQ=WEEKLY' - }]); - scheduler.appointments.compact.click(); - scheduler.tooltip.clickOnItem(); - $('.dx-dialog-buttons .dx-button').eq(0).trigger('dxclick'); - - assert.notOk(scheduler.appointmentForm.hasFormSingleColumn(), 'Appointment form has not single column'); - }); - test('Items has layout with one column when the form\'s width < 600px on window resizing', async function(assert) { const scheduler = await createInstance({ }); setWindowWidth(700); @@ -217,17 +193,6 @@ if(isDesktopEnvironment()) { assert.ok(scheduler.appointmentForm.hasFormSingleColumn(), 'Appointment form has single column'); }); - test('Items has layout with non-one column when the form\'s width > 600px on window resizing', async function(assert) { - const scheduler = await createInstance({ }); - setWindowWidth(500); - scheduler.appointments.compact.click(); - scheduler.tooltip.clickOnItem(); - - setWindowWidth(700); - resizeCallbacks.fire(); - - assert.notOk(scheduler.appointmentForm.hasFormSingleColumn(), 'Appointment form has not single column'); - }); }); } @@ -276,37 +241,6 @@ if(isDesktopEnvironment()) { assert.equal(popup.option('maxWidth'), '100%', 'maxWidth'); }); - test('The fullscreen mode is disabled of popup when window\'s width > 485px', async function(assert) { - setWindowWidth(600); - - const scheduler = await createInstance({ }); - scheduler.appointments.compact.click(); - scheduler.tooltip.clickOnItem(); - const popup = scheduler.appointmentPopup.getPopupInstance(); - - assert.notOk(popup.option('fullScreen'), 'The fullscreen mode is disabled'); - assert.equal(popup.option('maxWidth'), 380, 'maxWidth'); - }); - - test('The fullscreen mode is disabled of popup when window\'s width > 485px, with recurrence editor', async function(assert) { - setWindowWidth(600); - - const scheduler = await createInstance({ }); - scheduler.option('dataSource', [{ - startDate: new Date(2015, 1, 1), - endDate: new Date(2015, 1, 2), - recurrenceRule: 'FREQ=WEEKLY' - }]); - await waitAsync(0); - scheduler.appointments.compact.click(); - scheduler.tooltip.clickOnItem(); - $('.dx-dialog-buttons .dx-button').eq(0).trigger('dxclick'); - const popup = scheduler.appointmentPopup.getPopupInstance(); - - assert.notOk(popup.option('fullScreen'), 'The fullscreen mode is disabled'); - assert.equal(popup.option('maxWidth'), 380, 'maxWidth'); - }); - test('The fullscreen mode is enabled of popup when the window\'s width < 485px by resizing the window', async function(assert) { setWindowWidth(600); @@ -322,20 +256,6 @@ if(isDesktopEnvironment()) { assert.equal(popup.option('maxWidth'), '100%', 'maxWidth'); }); - test('The fullscreen mode is disabled of popup when the window\'s width > 485px by resizing the window', async function(assert) { - setWindowWidth(400); - - const scheduler = await createInstance({ }); - scheduler.appointments.compact.click(); - scheduler.tooltip.clickOnItem(); - const popup = scheduler.appointmentPopup.getPopupInstance(); - - setWindowWidth(600); - resizeCallbacks.fire(); - - assert.notOk(popup.option('fullScreen'), 'The fullscreen mode is disabled'); - assert.equal(popup.option('maxWidth'), 380, 'maxWidth'); - }); }); } 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 f20b334662d0..1d708a84bb12 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 @@ -306,48 +306,6 @@ QUnit.module('Integration: Resources', moduleConfig, () => { assert.equal(getHexColor($appointments.eq(1)), '#0000ff', 'Color is OK'); }); - QUnit.test('Resources should not be reloaded when details popup is opening', async function(assert) { - const loadStub = sinon.stub().returns([ - { text: 'o1', id: 1 }, - { text: 'o2', id: 2 } - ]); - const byKeyStub = sinon.stub(); - const data = [{ - text: 'a', - startDate: new Date(2015, 4, 26, 5), - endDate: new Date(2015, 4, 26, 5, 30), - ownerId: 1 - }, { - text: 'b', - startDate: new Date(2015, 4, 26, 5), - endDate: new Date(2015, 4, 26, 5, 30), - ownerId: 2 - }]; - const scheduler = await createWrapper({ - dataSource: new DataSource({ - store: data - }), - currentDate: new Date(2015, 4, 26), - groups: ['ownerId'], - resources: [{ - fieldExpr: 'ownerId', - allowMultiple: true, - dataSource: new CustomStore({ - load: loadStub, - byKey: byKeyStub - }) - }], - - }); - - assert.equal(loadStub.callCount, 1, 'Resources are loaded only once'); - - scheduler.instance.showAppointmentPopup(data[0]); - - assert.equal(loadStub.callCount, 2, 'Store requested in select box'); - assert.equal(byKeyStub.callCount, 0, 'Resources are loaded only once'); - }); - [true, false].forEach((renovateRender) => { QUnit.test(`Resources should be set correctly is the resources[].dataSource option is changed(T396746) when renovateRender is ${renovateRender}`, async function(assert) { const resourceData = [{ id: 1, text: 'John', color: 'red' }]; From 7fd09059d4e76012b2435e42b646b66171be3506 Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Wed, 1 Apr 2026 18:47:11 -0300 Subject: [PATCH 09/32] Scheduler - Fix dead legacy form references in m_scheduler.ts --- packages/devextreme/js/__internal/scheduler/m_scheduler.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/devextreme/js/__internal/scheduler/m_scheduler.ts b/packages/devextreme/js/__internal/scheduler/m_scheduler.ts index 2a701eceffdf..d115b5d82525 100644 --- a/packages/devextreme/js/__internal/scheduler/m_scheduler.ts +++ b/packages/devextreme/js/__internal/scheduler/m_scheduler.ts @@ -1096,7 +1096,7 @@ class Scheduler extends SchedulerOptionsBaseWidget { private createAppointmentPopupForm() { if (this.appointmentForm) { - this.appointmentForm.form?.dispose(); + this.appointmentForm.dispose(); } this.appointmentForm = this.createAppointmentForm(); @@ -1897,7 +1897,7 @@ class Scheduler extends SchedulerOptionsBaseWidget { /// #DEBUG getAppointmentDetailsForm() { - return this.appointmentForm.form; + return this.appointmentForm.dxForm; } /// #ENDDEBUG From 99c959dcb021532cc11f669b31045e5348970f40 Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 05:55:39 -0300 Subject: [PATCH 10/32] Scheduler - Remove dead isToolbarVisible option, restore unrelated monthView test --- .../js/__internal/scheduler/m_scheduler.ts | 3 -- .../appointment.monthView.tests.js | 43 +++++++++++++++++++ 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/packages/devextreme/js/__internal/scheduler/m_scheduler.ts b/packages/devextreme/js/__internal/scheduler/m_scheduler.ts index d115b5d82525..dd41dd77b9a1 100644 --- a/packages/devextreme/js/__internal/scheduler/m_scheduler.ts +++ b/packages/devextreme/js/__internal/scheduler/m_scheduler.ts @@ -1612,7 +1612,6 @@ class Scheduler extends SchedulerOptionsBaseWidget { if (isPopupEditing) { this.appointmentPopup.show(singleRawAppointment, { - isToolbarVisible: true, action: ACTION_TO_APPOINTMENT.EXCLUDE_FROM_SERIES, excludeInfo: { sourceAppointment: rawAppointment, @@ -1993,7 +1992,6 @@ class Scheduler extends SchedulerOptionsBaseWidget { if (isCreateAppointment) { delete this.editAppointmentData; // TODO this.editing.allowAdding && this.appointmentPopup.show(rawAppointment, { - isToolbarVisible: true, action: ACTION_TO_APPOINTMENT.CREATE, }); } else { @@ -2003,7 +2001,6 @@ class Scheduler extends SchedulerOptionsBaseWidget { this.editAppointmentData = rawAppointment; // TODO this.appointmentPopup.show(rawAppointment, { - isToolbarVisible: this.editing.allowUpdating, action: ACTION_TO_APPOINTMENT.UPDATE, }); }, false, true); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.monthView.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.monthView.tests.js index ac6423c699ce..08035e6edd61 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.monthView.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.monthView.tests.js @@ -97,6 +97,49 @@ module('Integration: Appointments in Month view', { fx.off = false; } }, () => { + module('Scrolling mode standard', () => { + test('Appointments should be rendered correctly when resourses store is asynchronous', async function(assert) { + const appointments = [ + { startDate: new Date(2015, 2, 4), text: 'a', endDate: new Date(2015, 2, 4, 0, 30), roomId: 1 }, + { startDate: new Date(2015, 2, 4), text: 'b', endDate: new Date(2015, 2, 4, 0, 30), roomId: 2 } + ]; + + const scheduler = await createInstanceBase({ + currentDate: new Date(2015, 2, 4), + views: ['month'], + dataSource: appointments, + width: 840, + height: 600, + currentView: 'month', + firstDayOfWeek: 1, + groups: ['roomId'], + resources: [ + { + field: 'roomId', + allowMultiple: true, + dataSource: new DataSource({ + store: new CustomStore({ + load: function() { + const d = $.Deferred(); + setTimeout(function() { + d.resolve([ + { id: 1, text: 'Room 1', color: '#ff0000' }, + { id: 2, text: 'Room 2', color: '#0000ff' } + ]); + }, 300); + + return d.promise(); + } + }) + }) + } + ] + }); + + assert.deepEqual(scheduler.instance.$element().find('.' + APPOINTMENT_CLASS).length, 2, 'Appointments are rendered'); + }); + }); + supportedScrollingModes.forEach(scrollingMode => { module(`Scrolling mode ${scrollingMode}`, () => { const createInstance = async(options) => { From a885be2842e15e90211ee53969a8edcfc0adb334 Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 06:09:44 -0300 Subject: [PATCH 11/32] Scheduler - Fix isToolbarVisible assertion and stale timezone test expectations --- .../integration.appointmentTooltip.tests.js | 2 -- .../tests/DevExpress.ui.widgets.scheduler/timezones.tests.js | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.appointmentTooltip.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.appointmentTooltip.tests.js index 77d1006c646a..1f63e201dfc0 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.appointmentTooltip.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.appointmentTooltip.tests.js @@ -335,8 +335,6 @@ module('Integration: Appointment tooltip', moduleConfig, () => { }, 'show has a right appointment data arg'); - assert.equal(args[1].isToolbarVisible, true, 'show has a right createNewAppointment arg'); - assert.notOk(scheduler.tooltip.isVisible(), 'tooltip was hidden'); }); diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/timezones.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/timezones.tests.js index b18adbaf7343..d5d612a56b18 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/timezones.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/timezones.tests.js @@ -299,7 +299,7 @@ module('API', moduleConfig, () => { assert.ok(updateAppointment.calledOnce, 'Update method is called'); assert.deepEqual(updateAppointment.getCall(0).args[0], updatedItem, 'Target item is correct'); - assert.deepEqual(updateAppointment.getCall(0).args[1], updatedItem, 'New data is correct'); + assert.deepEqual(updateAppointment.getCall(0).args[1], { ...updatedItem, allDay: false, recurrenceRule: '' }, 'New data is correct'); } finally { updateAppointment.restore(); } @@ -1726,7 +1726,7 @@ module('Appointment popup', moduleConfig, () => { assert.ok(updateAppointment.calledOnce, 'Update method is called'); assert.deepEqual(updateAppointment.getCall(0).args[0], updatedItem, 'Target item is correct'); - assert.deepEqual(updateAppointment.getCall(0).args[1], updatedItem, 'New data is correct'); + assert.deepEqual(updateAppointment.getCall(0).args[1], { ...updatedItem, allDay: false, recurrenceRule: '' }, 'New data is correct'); } finally { updateAppointment.restore(); } From 8523b4ca1a4c851d8b165a86636c09dd237c8d08 Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 10:02:57 -0300 Subject: [PATCH 12/32] Scheduler - Remove unused legacy m_recurrence_editor --- .../scheduler/appointment_popup/m_form.ts | 1 - .../scheduler/m_recurrence_editor.ts | 844 ------------------ 2 files changed, 845 deletions(-) delete mode 100644 packages/devextreme/js/__internal/scheduler/m_recurrence_editor.ts diff --git a/packages/devextreme/js/__internal/scheduler/appointment_popup/m_form.ts b/packages/devextreme/js/__internal/scheduler/appointment_popup/m_form.ts index a16fb3c464ed..f5820a5f440e 100644 --- a/packages/devextreme/js/__internal/scheduler/appointment_popup/m_form.ts +++ b/packages/devextreme/js/__internal/scheduler/appointment_popup/m_form.ts @@ -1,4 +1,3 @@ -import '../m_recurrence_editor'; import '@js/ui/text_area'; import '@js/ui/tag_box'; import '@js/ui/switch'; diff --git a/packages/devextreme/js/__internal/scheduler/m_recurrence_editor.ts b/packages/devextreme/js/__internal/scheduler/m_recurrence_editor.ts deleted file mode 100644 index 501339c94bfb..000000000000 --- a/packages/devextreme/js/__internal/scheduler/m_recurrence_editor.ts +++ /dev/null @@ -1,844 +0,0 @@ -/* eslint-disable max-classes-per-file, spellcheck/spell-checker */ -import '@js/ui/radio_group'; - -import dateLocalization from '@js/common/core/localization/date'; -import messageLocalization from '@js/common/core/localization/message'; -import registerComponent from '@js/core/component_registrator'; -import $ from '@js/core/renderer'; -import dateUtils from '@js/core/utils/date'; -import { extend } from '@js/core/utils/extend'; -import { isDefined } from '@js/core/utils/type'; -import ButtonGroup from '@js/ui/button_group'; -import Editor from '@js/ui/editor/editor'; -import Form from '@js/ui/form'; -import { current, isFluent } from '@js/ui/themes'; - -import { getRecurrenceString, parseRecurrenceRule } from './recurrence/base'; -import { daysFromByDayRule } from './recurrence/days_from_by_day_rule'; - -const RECURRENCE_EDITOR = 'dx-recurrence-editor'; -const LABEL_POSTFIX = '-label'; -const WRAPPER_POSTFIX = '-wrapper'; -const RECURRENCE_EDITOR_CONTAINER = 'dx-recurrence-editor-container'; -const REPEAT_END_TYPE_EDITOR = 'dx-recurrence-radiogroup-repeat-type'; -const REPEAT_COUNT_EDITOR = 'dx-recurrence-numberbox-repeat-count'; -const REPEAT_UNTIL_DATE_EDITOR = 'dx-recurrence-datebox-until-date'; -const RECURRENCE_BUTTON_GROUP = 'dx-recurrence-button-group'; -const FREQUENCY_EDITOR = 'dx-recurrence-selectbox-freq'; -const INTERVAL_EDITOR = 'dx-recurrence-numberbox-interval'; -const REPEAT_ON_EDITOR = 'dx-recurrence-repeat-on'; -const DAY_OF_MONTH = 'dx-recurrence-numberbox-day-of-month'; -const MONTH_OF_YEAR = 'dx-recurrence-selectbox-month-of-year'; - -const recurrentEditorNumberBoxWidth = 90; -const repeatInputWidth = '100%'; -const recurrentEditorSelectBoxWidth = 120; -const defaultRecurrenceTypeIndex = 1; // default daily recurrence - -const frequenciesMessages = [ - /* { - // functionality is not removed, but hide the ability to set minute recurrence in the editor. - // in the future, if we publish the dxRecurrenceEditor, then we publish the minute recurrence - recurrence: 'dxScheduler-recurrenceMinutely', - value: 'minutely' - } */ - { - recurrence: 'dxScheduler-recurrenceHourly', - value: 'hourly', - }, { - recurrence: 'dxScheduler-recurrenceDaily', - value: 'daily', - }, { - recurrence: 'dxScheduler-recurrenceWeekly', - value: 'weekly', - }, { - recurrence: 'dxScheduler-recurrenceMonthly', - value: 'monthly', - }, { - recurrence: 'dxScheduler-recurrenceYearly', - value: 'yearly', - }, -]; - -const frequencies = frequenciesMessages.map((item) => ({ text() { return messageLocalization.format(item.recurrence); }, value: item.value })); - -const repeatEndTypes = [ - { type: 'never' }, - { type: 'until' }, - { type: 'count' }, -]; - -const days = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA']; - -const getStylingModeFunc = (): string | undefined => (isFluent(current()) ? 'filled' : undefined); - -class RecurrenceRule { - private recurrenceRule: any; - - constructor(rule) { - this.recurrenceRule = parseRecurrenceRule(rule); - } - - makeRules(string) { - this.recurrenceRule = parseRecurrenceRule(string); - } - - makeRule(field, value) { - if (!value || (Array.isArray(value) && !value.length)) { - // eslint-disable-next-line @typescript-eslint/no-dynamic-delete - delete this.recurrenceRule[field]; - return; - } - - if (isDefined(field)) { - if (field === 'until') { - delete this.recurrenceRule.count; - } - - if (field === 'count') { - delete this.recurrenceRule.until; - } - - this.recurrenceRule[field] = value; - } - } - - getRepeatEndRule() { - const rules = this.recurrenceRule; - - if ('count' in rules) { - return 'count'; - } - - if ('until' in rules) { - return 'until'; - } - - return 'never'; - } - - getRecurrenceString() { - return getRecurrenceString(this.recurrenceRule); - } - - getRules() { - return this.recurrenceRule; - } - - getDaysFromByDayRule() { - return daysFromByDayRule(this.recurrenceRule); - } -} - -class RecurrenceEditor extends Editor { - private recurrenceRule!: RecurrenceRule; - - private $container: any; - - private weekEditor: any; - - private editors!: any[]; - - private $repeatOnWeek: any; - - private recurrenceForm: any; - - _getDefaultOptions() { - // @ts-expect-error - const defaultOptions = super._getDefaultOptions(); - - return extend(defaultOptions, { - value: null, - - startDate: new Date(), - - firstDayOfWeek: undefined, - }); - } - - private getFirstDayOfWeek() { - const firstDayOfWeek = this.option('firstDayOfWeek'); - return isDefined(firstDayOfWeek) ? firstDayOfWeek : dateLocalization.firstDayOfWeekIndex(); - } - - private createComponent(element, name, config = {}) { - // @ts-expect-error - this._extendConfig(config, { - readOnly: this.option('readOnly'), - }); - - // @ts-expect-error - return super._createComponent(element, name, config); - } - - _init() { - // @ts-expect-error - super._init(); - this.recurrenceRule = new RecurrenceRule(this.option('value')); - } - - _render() { - // @ts-expect-error - super._render(); - - (this.$element() as any).addClass(RECURRENCE_EDITOR); - - this.$container = $('
') - .addClass(RECURRENCE_EDITOR_CONTAINER) - .appendTo(this.$element()); - - this.prepareEditors(); - this.renderEditors(this.$container); - this.updateRepeatInputAriaLabel(); - } - - getEditorByField(fieldName) { - let editor = this.getRecurrenceForm().getEditor(fieldName); - - if (!isDefined(editor)) { - switch (fieldName) { - case 'byday': - editor = this.weekEditor; - break; - default: - break; - } - } - - return editor; - } - - private prepareEditors() { - const freq = (this.recurrenceRule.getRules().freq || frequenciesMessages[defaultRecurrenceTypeIndex].value).toLowerCase(); - - this.editors = [ - this.createFreqEditor(freq), - this.createIntervalEditor(freq), - this.createRepeatOnLabel(freq), - { - itemType: 'group', - cssClass: REPEAT_ON_EDITOR, - colCount: 2, - colCountByScreen: { xs: 2 }, - items: this.createRepeatOnEditor(freq), - }, - { - itemType: 'group', - colCount: 2, - items: this.createRepeatEndEditor(), - }, - ]; - - return this.editors; - } - - private createFreqEditor(freq) { - return { - dataField: 'freq', - name: 'FREQ', - editorType: 'dxSelectBox', - cssClass: FREQUENCY_EDITOR, - editorOptions: { - stylingMode: getStylingModeFunc(), - items: frequencies, - value: freq, - field: 'freq', - valueExpr: 'value', - displayExpr: 'text', - layout: 'horizontal', - elementAttr: { - class: FREQUENCY_EDITOR, - }, - onValueChanged: (args) => this.valueChangedHandler(args), - }, - label: { - text: messageLocalization.format('dxScheduler-editorLabelRecurrence'), - }, - }; - } - - private createIntervalEditor(freq) { - const interval = this.recurrenceRule.getRules().interval || 1; - return { - itemType: 'group', - colCount: 2, - cssClass: `${INTERVAL_EDITOR}${WRAPPER_POSTFIX}`, - colCountByScreen: { xs: 2 }, - items: [ - { - dataField: 'interval', - editorType: 'dxNumberBox', - editorOptions: { - stylingMode: getStylingModeFunc(), - format: '#', - width: recurrentEditorNumberBoxWidth, - min: 1, - field: 'interval', - value: interval, - showSpinButtons: true, - useLargeSpinButtons: false, - elementAttr: { - class: INTERVAL_EDITOR, - }, - onValueChanged: (args) => this.valueChangedHandler(args), - }, - label: { - text: messageLocalization.format('dxScheduler-recurrenceRepeatEvery'), - }, - }, - { - name: 'intervalLabel', - cssClass: `${INTERVAL_EDITOR}${LABEL_POSTFIX}`, - template: () => messageLocalization.format(`dxScheduler-recurrenceRepeat${freq.charAt(0).toUpperCase()}${freq.substr(1).toLowerCase()}`), - }, - ], - }; - } - - private createRepeatOnLabel(freq) { - return { - itemType: 'group', - cssClass: `${REPEAT_ON_EDITOR}${LABEL_POSTFIX}`, - items: [ - { - name: 'repeatOnLabel', - colSpan: 2, - template: () => messageLocalization.format('dxScheduler-recurrenceRepeatOn'), - visible: freq && freq !== 'daily' && freq !== 'hourly', - }, - ], - }; - } - - private createRepeatOnEditor(freq) { - return [ - this.createByDayEditor(freq), - this.createByMonthEditor(freq), - this.createByMonthDayEditor(freq), - ]; - } - - private createByDayEditor(freq) { - return { - dataField: 'byday', - colSpan: 2, - template: (_, itemElement) => { - const firstDayOfWeek = this.getFirstDayOfWeek() as any; - const byDay = this.daysOfWeekByRules(); - - const localDaysNames = dateLocalization.getDayNames('abbreviated'); - const dayNames = days.slice(firstDayOfWeek).concat(days.slice(0, firstDayOfWeek)); - - const itemsButtonGroup = localDaysNames.slice(firstDayOfWeek).concat(localDaysNames.slice(0, firstDayOfWeek)).map((item, index) => ({ text: item, key: dayNames[index] })); - - this.$repeatOnWeek = $('
').addClass(RECURRENCE_BUTTON_GROUP).appendTo(itemElement); - - this.weekEditor = this.createComponent(this.$repeatOnWeek, ButtonGroup, { - items: itemsButtonGroup, - field: 'byday', - selectionMode: 'multiple', - selectedItemKeys: byDay, - keyExpr: 'key', - onSelectionChanged: (e) => { - const selectedItemKeys = e.component.option('selectedItemKeys'); - const selectedKeys = selectedItemKeys?.length - ? selectedItemKeys - : this.getDefaultByDayValue(); - - this.recurrenceRule.makeRule('byday', selectedKeys); - this.changeEditorValue(); - }, - }); - }, - visible: freq === 'weekly', - label: { - visible: false, - }, - }; - } - - private createByMonthEditor(freq) { - const monthsName = (dateLocalization.getMonthNames as any)('wide'); - const months = [...Array(12)].map((_, i) => ({ value: `${i + 1}`, text: monthsName[i] })); - - return { - dataField: 'bymonth', - editorType: 'dxSelectBox', - editorOptions: { - stylingMode: getStylingModeFunc(), - field: 'bymonth', - items: months, - value: this.monthOfYearByRules(), - width: recurrentEditorSelectBoxWidth, - displayExpr: 'text', - valueExpr: 'value', - elementAttr: { - class: MONTH_OF_YEAR, - }, - onValueChanged: (args) => this.valueChangedHandler(args), - }, - visible: freq === 'yearly', - label: { - visible: false, - }, - }; - } - - private createByMonthDayEditor(freq) { - return { - dataField: 'bymonthday', - editorType: 'dxNumberBox', - editorOptions: { - stylingMode: getStylingModeFunc(), - min: 1, - max: 31, - format: '#', - width: recurrentEditorNumberBoxWidth, - field: 'bymonthday', - showSpinButtons: true, - useLargeSpinButtons: false, - value: this.dayOfMonthByRules(), - elementAttr: { - class: DAY_OF_MONTH, - }, - onValueChanged: (args) => this.valueChangedHandler(args), - }, - visible: freq === 'monthly' || freq === 'yearly', - label: { - visible: false, - }, - }; - } - - private createRepeatEndEditor() { - const repeatType = this.recurrenceRule.getRepeatEndRule(); - - return [{ - colSpan: 2, - template: messageLocalization.format('dxScheduler-recurrenceEnd'), - }, { - colSpan: 1, - label: { visible: false }, - dataField: 'repeatEnd', - editorType: 'dxRadioGroup', - editorOptions: { - items: repeatEndTypes, - value: repeatType, - valueExpr: 'type', - field: 'repeatEnd', - itemTemplate: (itemData) => { - if (itemData.type === 'count') { - return messageLocalization.format('dxScheduler-recurrenceAfter'); - } - if (itemData.type === 'until') { - return messageLocalization.format('dxScheduler-recurrenceOn'); - } - - return messageLocalization.format('dxScheduler-recurrenceNever'); - }, - layout: 'vertical', - elementAttr: { class: REPEAT_END_TYPE_EDITOR }, - onValueChanged: (args) => this.repeatEndValueChangedHandler(args), - }, - }, { - colSpan: 1, - itemType: 'group', - items: [ - this.getRepeatUntilEditorOptions(), - this.getRepeatCountEditorOptions(), - ], - }]; - } - - private renderEditors($container) { - this.recurrenceForm = this.createComponent($container, Form, { - items: this.editors, - showValidationSummary: false, - scrollingEnabled: true, - showColonAfterLabel: false, - labelLocation: 'top', - }); - - this.changeRepeatEndInputsVisibility(); - } - - getRecurrenceForm() { - return this.recurrenceForm; - } - - changeValueByVisibility(value) { - if (value) { - if (!this.option('value')) { - this.handleDefaults(); - } - } else { - this.recurrenceRule.makeRules(''); - this.option('value', ''); - } - } - - private handleDefaults() { - this.recurrenceRule.makeRule('freq', frequenciesMessages[defaultRecurrenceTypeIndex].value); - this.changeEditorValue(); - } - - private changeEditorValue() { - this.option('value', this.recurrenceRule.getRecurrenceString() ?? ''); - } - - private daysOfWeekByRules() { - let daysByRule = this.recurrenceRule.getDaysFromByDayRule(); - if (!daysByRule.length) { - daysByRule = this.getDefaultByDayValue(); - } - - return daysByRule; - } - - private getDefaultByDayValue() { - const startDate = this.option('startDate') as any; - const startDay = startDate.getDay(); - return [days[startDay]]; - } - - private dayOfMonthByRules() { - let dayByRule = this.recurrenceRule.getRules().bymonthday; - - if (!dayByRule) { - dayByRule = (this.option('startDate') as any).getDate(); - } - - return dayByRule; - } - - private monthOfYearByRules() { - let monthByRule = this.recurrenceRule.getRules().bymonth; - - if (!monthByRule) { - monthByRule = (this.option('startDate') as any).getMonth() + 1; - } - - return String(monthByRule); - } - - private repeatEndValueChangedHandler(args) { - const { value } = args; - - this.changeRepeatEndInputsVisibility(value); - - if (value === 'until') { - this.recurrenceRule.makeRule(value, this.getUntilValue()); - } - if (value === 'count') { - this.recurrenceRule.makeRule(value, this.recurrenceForm.option('formData.count')); - } - if (value === 'never') { - this.recurrenceRule.makeRule('count', ''); - this.recurrenceRule.makeRule('until', ''); - } - - this.changeEditorValue(); - this.updateRepeatInputAriaLabel(); - } - - private changeRepeatEndInputsVisibility(value = this.recurrenceRule.getRepeatEndRule()) { - if (value === 'until') { - this.recurrenceForm.itemOption('until', 'visible', true); - this.recurrenceForm.itemOption('count', 'visible', false); - } - if (value === 'count') { - this.recurrenceForm.itemOption('until', 'visible', false); - this.recurrenceForm.itemOption('count', 'visible', true); - } - if (value === 'never') { - this.recurrenceForm.itemOption('until', 'visible', false); - this.recurrenceForm.itemOption('count', 'visible', false); - } - } - - private getRepeatCountEditorOptions() { - const count = this.recurrenceRule.getRules().count || 1; - - return { - dataField: 'count', - cssClass: REPEAT_COUNT_EDITOR, - label: { visible: false }, - editorType: 'dxNumberBox', - editorOptions: { - stylingMode: getStylingModeFunc(), - field: 'count', - format: `# ${messageLocalization.format('dxScheduler-recurrenceRepeatCount')}`, - width: repeatInputWidth, - min: 1, - showSpinButtons: true, - useLargeSpinButtons: false, - value: count, - onValueChanged: this.repeatCountValueChangeHandler.bind(this), - inputAttr: { 'aria-label': messageLocalization.format('dxScheduler-recurrenceOccurrenceLabel') }, - }, - }; - } - - private updateRepeatInputAriaLabel(): void { - const radioButtons = this.getEditorByField('repeatEnd').itemElements(); - const untilLabel = messageLocalization.format('dxScheduler-recurrenceOn'); - const untilValue = this.recurrenceForm.getEditor('until').option('value'); - const untilValueFormat = `${dateLocalization.format(untilValue, 'd')} ${dateLocalization.format(untilValue, 'monthAndYear')}`; - const isUntilVisible = this.recurrenceForm.itemOption('until').visible; - - const countLabel = messageLocalization.format('dxScheduler-recurrenceAfter'); - const countPostfix = messageLocalization.format('dxScheduler-recurrenceRepeatCount'); - const countValue = this.recurrenceForm.getEditor('count').option('value'); - const isCountVisible = this.recurrenceForm.itemOption('count').visible; - - radioButtons[1].setAttribute('aria-label', isUntilVisible ? `${untilLabel} ${untilValueFormat}` : untilLabel); - radioButtons[2].setAttribute('aria-label', isCountVisible ? `${countLabel} ${countValue} ${countPostfix}` : countLabel); - } - - private repeatCountValueChangeHandler(args) { - if (this.recurrenceRule.getRepeatEndRule() === 'count') { - const { value } = args; - this.recurrenceRule.makeRule('count', value); - this.changeEditorValue(); - this.updateRepeatInputAriaLabel(); - } - } - - private getRepeatUntilEditorOptions() { - const until = this.getUntilValue(); - - return { - dataField: 'until', - label: { visible: false }, - cssClass: REPEAT_UNTIL_DATE_EDITOR, - editorType: 'dxDateBox', - editorOptions: { - stylingMode: getStylingModeFunc(), - field: 'until', - value: until, - type: 'date', - width: repeatInputWidth, - onValueChanged: this.repeatUntilValueChangeHandler.bind(this), - calendarOptions: { - firstDayOfWeek: this.getFirstDayOfWeek(), - }, - useMaskBehavior: true, - inputAttr: { 'aria-label': messageLocalization.format('dxScheduler-recurrenceUntilDateLabel') }, - }, - }; - } - - private formatUntilDate(date: Date): Date { - const untilDate = this.recurrenceRule.getRules().until; - const isSameDate = dateUtils.sameDate(untilDate, date); - - return untilDate && isSameDate - ? date - : dateUtils.setToDayEnd(date); - } - - private repeatUntilValueChangeHandler(args) { - if (this.recurrenceRule.getRepeatEndRule() === 'until') { - const dateInTimeZone = this.formatUntilDate(new Date(args.value)); - const getStartDateTimeZone: any = this.option('getStartDateTimeZone'); - const appointmentTimeZone = getStartDateTimeZone(); - - const path = appointmentTimeZone ? 'fromAppointment' : 'fromGrid'; - const dateInLocaleTimeZone = (this.option('timeZoneCalculator') as any) - .createDate(dateInTimeZone, path, appointmentTimeZone); - - this.recurrenceRule.makeRule('until', dateInLocaleTimeZone); - this.changeEditorValue(); - this.updateRepeatInputAriaLabel(); - } - } - - private valueChangedHandler(args) { - const { value, previousValue } = args; - const field = args.component.option('field'); - - if (!this.option('visible')) { - this.option('value', ''); - } else { - this.recurrenceRule.makeRule(field, value); - if (field === 'freq') { - this.makeRepeatOnRule(value); - this.changeRepeatOnVisibility(value, previousValue); - } - this.changeEditorValue(); - } - } - - private makeRepeatOnRule(value) { - if (value === 'daily' || value === 'hourly') { - this.recurrenceRule.makeRule('byday', ''); - this.recurrenceRule.makeRule('bymonth', ''); - this.recurrenceRule.makeRule('bymonthday', ''); - } - if (value === 'weekly') { - this.recurrenceRule.makeRule('byday', this.daysOfWeekByRules()); - this.recurrenceRule.makeRule('bymonth', ''); - this.recurrenceRule.makeRule('bymonthday', ''); - } - - if (value === 'monthly') { - this.recurrenceRule.makeRule('bymonthday', this.dayOfMonthByRules()); - this.recurrenceRule.makeRule('bymonth', ''); - this.recurrenceRule.makeRule('byday', ''); - } - - if (value === 'yearly') { - this.recurrenceRule.makeRule('bymonthday', this.dayOfMonthByRules()); - this.recurrenceRule.makeRule('bymonth', this.monthOfYearByRules()); - this.recurrenceRule.makeRule('byday', ''); - } - } - - _optionChanged(args) { - switch (args.name) { - case 'readOnly': - this.recurrenceForm?.option('readOnly', args.value); - this.weekEditor?.option('readOnly', args.value); - // @ts-expect-error - super._optionChanged(args); - break; - case 'value': - this.recurrenceRule.makeRules(args.value); - - this.changeRepeatIntervalLabel(); - this.changeRepeatEndInputsVisibility(); - this.changeEditorsValue(this.recurrenceRule.getRules()); - - // @ts-expect-error - super._optionChanged(args); - break; - case 'startDate': - this.makeRepeatOnRule(this.recurrenceRule.getRules().freq); - - if (isDefined(this.recurrenceRule.getRecurrenceString())) { - this.changeEditorValue(); - } - - break; - case 'firstDayOfWeek': - if (this.weekEditor) { - const localDaysNames = dateLocalization.getDayNames('abbreviated'); - const dayNames = days.slice(args.value).concat(days.slice(0, args.value)); - - const itemsButtonGroup = localDaysNames.slice(args.value).concat(localDaysNames.slice(0, args.value)).map((item, index) => ({ text: item, key: dayNames[index] })); - - this.weekEditor.option('items', itemsButtonGroup); - } - if (this.recurrenceForm.itemOption('until').visible) { - this.recurrenceForm.getEditor('until').option('calendarOptions.firstDayOfWeek', this.getFirstDayOfWeek()); - } - break; - default: - // @ts-expect-error - super._optionChanged(args); - } - } - - private changeRepeatOnVisibility(freq, previousFreq) { - if (freq !== previousFreq) { - this.recurrenceForm.itemOption('byday', 'visible', false); - this.recurrenceForm.itemOption('bymonthday', 'visible', false); - this.recurrenceForm.itemOption('bymonth', 'visible', false); - - this.recurrenceForm.itemOption('repeatOnLabel', 'visible', freq && freq !== 'daily' && freq !== 'hourly'); - - if (freq === 'weekly') { - this.recurrenceForm.itemOption('byday', 'visible', true); - } - if (freq === 'monthly') { - this.recurrenceForm.itemOption('bymonthday', 'visible', true); - } - if (freq === 'yearly') { - this.recurrenceForm.itemOption('bymonthday', 'visible', true); - this.recurrenceForm.itemOption('bymonth', 'visible', true); - } - } - } - - private changeRepeatIntervalLabel() { - const { freq } = this.recurrenceRule.getRules(); - - freq && this.recurrenceForm.itemOption('intervalLabel', 'template', messageLocalization.format(`dxScheduler-recurrenceRepeat${freq.charAt(0).toUpperCase()}${freq.substr(1).toLowerCase()}`)); - } - - private changeEditorsValue(rules) { - this.recurrenceForm.getEditor('freq').option('value', (rules.freq || frequenciesMessages[defaultRecurrenceTypeIndex].value).toLowerCase()); - - this.changeDayOfWeekValue(); - this.changeDayOfMonthValue(); - this.changeMonthOfYearValue(); - - this.changeIntervalValue(rules.interval); - - this.changeRepeatCountValue(); - this.changeRepeatEndValue(); - this.changeRepeatUntilValue(); - } - - private changeIntervalValue(value) { - this.recurrenceForm.getEditor('interval').option('value', value || 1); - } - - private changeRepeatEndValue() { - const repeatType = this.recurrenceRule.getRepeatEndRule(); - - this.recurrenceForm.getEditor('repeatEnd').option('value', repeatType); - } - - private changeDayOfWeekValue() { - const isEditorVisible = this.recurrenceForm.itemOption('byday').visible; - if (isEditorVisible) { - const days = this.daysOfWeekByRules(); - this.getEditorByField('byday').option('selectedItemKeys', days); - } - } - - private changeDayOfMonthValue() { - const isEditorVisible = this.recurrenceForm.itemOption('bymonthday').visible; - if (isEditorVisible) { - const day = this.dayOfMonthByRules(); - this.recurrenceForm.getEditor('bymonthday').option('value', day); - } - } - - private changeMonthOfYearValue() { - const isEditorVisible = this.recurrenceForm.itemOption('bymonth').visible; - if (isEditorVisible) { - const month = this.monthOfYearByRules(); - this.recurrenceForm.getEditor('bymonth').option('value', month); - } - } - - private changeRepeatCountValue() { - const count = this.recurrenceRule.getRules().count || 1; - this.recurrenceForm.getEditor('count').option('value', count); - } - - private changeRepeatUntilValue() { - this.recurrenceForm.getEditor('until').option('value', this.getUntilValue()); - } - - private getUntilValue() { - const untilDate = this.recurrenceRule.getRules().until; - - if (!untilDate) { - return this.formatUntilDate(new Date()); - } - - const getStartDateTimeZone: any = this.option('getStartDateTimeZone'); - const appointmentTimeZone = getStartDateTimeZone(); - - const path = appointmentTimeZone ? 'toAppointment' : 'toGrid'; - - return (this.option('timeZoneCalculator') as any).createDate(untilDate, path, appointmentTimeZone); - } -} - -registerComponent('dxRecurrenceEditor', RecurrenceEditor as any); - -export default RecurrenceEditor; From 51d78c5dee138b4b4c46d922ffde9316ed958fcf Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 10:04:12 -0300 Subject: [PATCH 13/32] Scheduler - Remove unused getAppointmentDetailsForm --- packages/devextreme/js/__internal/scheduler/m_scheduler.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/devextreme/js/__internal/scheduler/m_scheduler.ts b/packages/devextreme/js/__internal/scheduler/m_scheduler.ts index dd41dd77b9a1..017c70cd211d 100644 --- a/packages/devextreme/js/__internal/scheduler/m_scheduler.ts +++ b/packages/devextreme/js/__internal/scheduler/m_scheduler.ts @@ -1894,12 +1894,6 @@ class Scheduler extends SchedulerOptionsBaseWidget { this._fireContentReadyAction(); } - /// #DEBUG - getAppointmentDetailsForm() { - return this.appointmentForm.dxForm; - } - /// #ENDDEBUG - getAppointmentsInstance() { return this._appointments; } From 2dbea14e69a0b344f4d67bc5a95275f7ea1f3a43 Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 10:07:34 -0300 Subject: [PATCH 14/32] Scheduler - Remove legacy QUnit tests covered by jest --- .../testing/helpers/scheduler/helpers.js | 1 - .../appointment.editing.tests.js | 57 -------- .../integration.adaptivity.tests.js | 72 ---------- ...integration.recurringAppointments.tests.js | 125 ------------------ 4 files changed, 255 deletions(-) diff --git a/packages/devextreme/testing/helpers/scheduler/helpers.js b/packages/devextreme/testing/helpers/scheduler/helpers.js index 56d907e50b15..ecd95dbd2703 100644 --- a/packages/devextreme/testing/helpers/scheduler/helpers.js +++ b/packages/devextreme/testing/helpers/scheduler/helpers.js @@ -605,7 +605,6 @@ export class SchedulerTestWrapper extends ElementWrapper { setStartDate: (value) => this.appointmentForm.getEditor('startDateEditor').option('value', value), setEndDate: (value) => this.appointmentForm.getEditor('endDateEditor').option('value', value), - hasFormSingleColumn: () => $('.dx-responsivebox').first().hasClass('dx-responsivebox-screen-xs'), getRecurrentAppointmentFormDialogButtons: () => $('.dx-dialog-buttons .dx-button'), clickFormDialogButton: (index = 0) => this.appointmentForm.getRecurrentAppointmentFormDialogButtons().eq(index).trigger('dxclick'), getPendingEditorsCount: () => $(this.appointmentForm.getFormInstance().element()).find('.dx-validation-pending').length, diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js index 39b6f295ec84..0555241d9dc3 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js @@ -171,32 +171,6 @@ module('Integration: Appointment editing', { assert.expect(2); }); - test('Add new appointment', async function(assert) { - const data = new DataSource({ - store: this.tasks - }); - - const scheduler = await this.createInstance({ - currentDate: new Date(2015, 1, 9), - dataSource: data, - - }); - const addAppointment = scheduler.instance.addAppointment; - const spy = sinon.spy(() => new Deferred()); - const newItem = { startDate: new Date(2015, 1, 1, 1), endDate: new Date(2015, 1, 1, 2), text: 'caption' }; - scheduler.instance.addAppointment = spy; - try { - scheduler.instance.showAppointmentPopup(newItem, true); - - $('.dx-scheduler-appointment-popup .dx-popup-done').trigger('dxclick'); - - assert.ok(spy.calledOnce, 'Add method is called'); - assert.deepEqual(spy.getCall(0).args[0], { ...newItem, allDay: false, recurrenceRule: '' }, 'New item is correct'); - } finally { - scheduler.instance.addAppointment = addAppointment; - } - }); - test('Add new appointment with delay(T381444)', async function(assert) { const done = assert.async(); const data = []; @@ -271,37 +245,6 @@ module('Integration: Appointment editing', { const popup = scheduler.instance.appointmentPopup.popup; }); - // TODO: update editors in popup - test('Update appointment', async function(assert) { - const data = new DataSource({ - store: this.tasks - }); - - const scheduler = await this.createInstance({ - currentDate: new Date(2015, 1, 9), - dataSource: data, - - }); - - const updateAppointment = scheduler.instance.updateAppointment; - const spy = sinon.spy(() => new Deferred()); - const updatedItem = this.tasks[0]; - scheduler.instance.updateAppointment = spy; - try { - scheduler.instance.showAppointmentPopup(updatedItem); - - $('.dx-scheduler-appointment-popup .dx-popup-done').trigger('dxclick'); - - hide(); - - assert.ok(spy.calledOnce, 'Update method is called'); - assert.deepEqual(spy.getCall(0).args[0], updatedItem, 'Target item is correct'); - assert.deepEqual(spy.getCall(0).args[1], { ...updatedItem, allDay: false, recurrenceRule: '' }, 'New data is correct'); - } finally { - scheduler.instance.updateAppointment = updateAppointment; - } - }); - test('Scheduler should add only one appointment at multiple "done" button clicks on appointment form', async function(assert) { const a = { text: 'a', startDate: new Date(2017, 7, 9), endDate: new Date(2017, 7, 9, 0, 15) }; const scheduler = await createWrapper({ diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.adaptivity.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.adaptivity.tests.js index fe303687a980..8437ac20fb84 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.adaptivity.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.adaptivity.tests.js @@ -146,78 +146,6 @@ module('Mobile tooltip', moduleConfig, () => { }); }); -if(isDesktopEnvironment()) { - module('Appointment form on desktop', { - beforeEach() { - fx.off = true; - }, - - afterEach() { - fx.off = false; - resetWindowWidth(); - } - }, () => { - test('Items has layout with one column when the form\'s width < 600px', async function(assert) { - const scheduler = await createInstance({ }); - setWindowWidth(500); - scheduler.appointments.compact.click(); - scheduler.tooltip.clickOnItem(); - - assert.ok(scheduler.appointmentForm.hasFormSingleColumn(), 'Appointment form has single column'); - }); - - test('Items with recurrence editor has layout with one column when the form\'s width < 600px', async function(assert) { - const scheduler = await createInstance({ }); - setWindowWidth(500); - scheduler.option('dataSource', [{ - startDate: new Date(2015, 1, 1), - endDate: new Date(2015, 1, 2), - recurrenceRule: 'FREQ=WEEKLY' - }]); - scheduler.appointments.compact.click(); - scheduler.tooltip.clickOnItem(); - $('.dx-dialog-buttons .dx-button').eq(0).trigger('dxclick'); - - assert.ok(scheduler.appointmentForm.hasFormSingleColumn(), 'Appointment form has single column'); - }); - - test('Items has layout with one column when the form\'s width < 600px on window resizing', async function(assert) { - const scheduler = await createInstance({ }); - setWindowWidth(700); - scheduler.appointments.compact.click(); - scheduler.tooltip.clickOnItem(); - - setWindowWidth(500); - resizeCallbacks.fire(); - - assert.ok(scheduler.appointmentForm.hasFormSingleColumn(), 'Appointment form has single column'); - }); - - }); -} - -if(!isDesktopEnvironment()) { - module('Appointment form on mobile', { - beforeEach() { - fx.off = true; - setWindowWidth(800); - }, - - afterEach() { - fx.off = false; - resetWindowWidth(); - } - }, () => { - test('Items has layout with one column', async function(assert) { - const scheduler = await createInstance({ }); - scheduler.appointments.compact.click(); - scheduler.tooltip.clickOnItem(); - - assert.ok(scheduler.appointmentForm.hasFormSingleColumn(), 'Appointment form has single column'); - }); - }); -} - if(isDesktopEnvironment()) { module('Appointment popup size, desktop', { beforeEach() { diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js index 4fa26d903c12..50711c8c6210 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js @@ -660,59 +660,6 @@ supportedScrollingModes.forEach(scrollingMode => { $('.dx-dialog-buttons .dx-button').eq(1).trigger('dxclick'); }); - test('Recurrent Task editing, single mode', async function(assert) { - const data = new DataSource({ - store: [ - { - text: 'Task 1', - startDate: new Date(2015, 1, 9, 1, 0), - endDate: new Date(2015, 1, 9, 2, 0), - recurrenceRule: 'FREQ=DAILY' - } - ] - }); - - const updatedItem = { - text: 'Task 2', - startDate: new Date(2015, 1, 11, 3), - endDate: new Date(2015, 1, 11, 4), - allDay: false, - recurrenceRule: '', - }; - - const scheduler = await this.createInstance({ - currentDate: new Date(2015, 1, 9), - dataSource: data, - currentView: 'week', - firstDayOfWeek: 1, - - }); - - const clock = sinon.useFakeTimers(); - await scheduler.appointments.click(2, clock); - scheduler.tooltip.clickOnItem(); - $('.dx-dialog-buttons .dx-button').eq(1).trigger('dxclick'); - - const $title = $('.dx-textbox').eq(0); - const title = $title.dxTextBox('instance'); - const $startTime = $('.dx-datebox').eq(1); - const startTime = $startTime.dxDateBox('instance'); - - title.option('value', 'Task 2'); - startTime.option('value', new Date(2015, 1, 11, 3, 0)); - $('.dx-button.dx-popup-done').eq(0).trigger('dxclick'); - await clock.tickAsync(300); - clock.restore(); - - const updatedSingleItem = scheduler.instance.option('dataSource').items()[1]; - const updatedRecurringItem = scheduler.instance.option('dataSource').items()[0]; - const exceptionDate = new Date(2015, 1, 11, 1, 0, 0, 0); - - assert.deepEqual(updatedSingleItem, updatedItem, 'New data is correct'); - - assert.equal(updatedRecurringItem.recurrenceException, dateSerialization.serializeDate(exceptionDate, 'yyyyMMddTHHmmssZ'), 'Exception for recurrence appointment is correct'); - }); - test('Recurrent Task editing, single mode, should not reference copy recurrent data (T1228488)', async function(assert) { const updatedItem = { text: 'Task 2', @@ -763,78 +710,6 @@ supportedScrollingModes.forEach(scrollingMode => { assert.deepEqual(updatedRecurringItem.customData.texts, ['123'], 'Recurrence data is correct'); }); - test('Recurrent Task edition canceling, single mode', async function(assert) { - const data = new DataSource({ - store: [ - { - text: 'Task 1', - startDate: new Date(2015, 1, 9, 1, 0), - endDate: new Date(2015, 1, 9, 2, 0), - recurrenceRule: 'FREQ=DAILY' - } - ] - }); - - const scheduler = await this.createInstance({ - currentDate: new Date(2015, 1, 9), - dataSource: data, - currentView: 'week', - firstDayOfWeek: 1 - }); - - const clock = sinon.useFakeTimers(); - $(scheduler.instance.$element()).find('.dx-scheduler-appointment').eq(2).trigger('dxclick'); - await clock.tickAsync(300); - $('.dx-scheduler-appointment-tooltip-buttons .dx-button').eq(1).trigger('dxclick'); - $('.dx-dialog-buttons .dx-button').eq(1).trigger('dxclick'); - $('.dx-button.dx-popup-cancel').eq(0).trigger('dxclick'); - - $(scheduler.instance.$element()).find('.dx-scheduler-appointment').eq(2).trigger('dxclick'); - await clock.tickAsync(300); - $('.dx-scheduler-appointment-tooltip-buttons .dx-button').eq(1).trigger('dxclick'); - $('.dx-dialog-buttons .dx-button').eq(0).trigger('dxclick'); - $('.dx-button.dx-popup-done').eq(0).trigger('dxclick'); - clock.restore(); - - const items = scheduler.instance.option('dataSource').items(); - - assert.equal(items.length, 1, 'Items are correct'); - }); - - test('Recurrent Task editing, single mode - canceling', async function(assert) { - const data = new DataSource({ - store: [ - { - text: 'Task 1', - startDate: new Date(2015, 1, 9, 1, 0), - endDate: new Date(2015, 1, 9, 2, 0), - recurrenceRule: 'FREQ=DAILY' - } - ] - }); - - const scheduler = await this.createInstance({ - currentDate: new Date(2015, 1, 9), - dataSource: data, - currentView: 'week', - firstDayOfWeek: 1 - }); - - const clock = sinon.useFakeTimers(); - $(scheduler.instance.$element()).find('.dx-scheduler-appointment').eq(2).trigger('dxclick'); - await clock.tickAsync(300); - $('.dx-scheduler-appointment-tooltip-buttons .dx-button').eq(1).trigger('dxclick'); - $('.dx-dialog-buttons .dx-button').eq(1).trigger('dxclick'); - - $('.dx-button.dx-popup-cancel').eq(0).trigger('dxclick'); - await clock.tickAsync(300); - clock.restore(); - - const recurrentItem = scheduler.instance.option('dataSource').items()[0]; - - assert.equal(recurrentItem.recurrenceException, undefined, 'Exception for recurrence appointment is correct'); - }); - test('Recurrent Task editing, confirmation tooltip should be shown after double click on recurrent appointment', async function(assert) { const data = new DataSource({ store: [ From 2b20eeafdf779f1c81917f1ea3a5e344e24f3e31 Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 10:16:16 -0300 Subject: [PATCH 15/32] Scheduler - Remove additional legacy QUnit tests covered by jest --- ...integration.recurringAppointments.tests.js | 93 ------------------- 1 file changed, 93 deletions(-) diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js index 50711c8c6210..6e0f4d8b634e 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/integration.recurringAppointments.tests.js @@ -738,58 +738,6 @@ supportedScrollingModes.forEach(scrollingMode => { $('.dx-dialog-buttons .dx-button').eq(1).trigger('dxclick'); }); - test('Recurrent Task editing, single mode - double click', async function(assert) { - const data = new DataSource({ - store: [ - { - text: 'Task 1', - startDate: new Date(2015, 1, 9, 1, 0), - endDate: new Date(2015, 1, 9, 2, 0), - recurrenceRule: 'FREQ=DAILY' - } - ] - }); - - const updatedItem = { - text: 'Task 2', - startDate: new Date(2015, 1, 11, 3), - endDate: new Date(2015, 1, 11, 4), - allDay: false, - recurrenceRule: '', - }; - - const scheduler = await this.createInstance({ - currentDate: new Date(2015, 1, 9), - dataSource: data, - currentView: 'week', - firstDayOfWeek: 1, - - }); - const clock = sinon.useFakeTimers(); - $(scheduler.instance.$element()).find('.dx-scheduler-appointment').eq(2).trigger(dblclickEvent.name); - await clock.tickAsync(300); - - $('.dx-dialog-buttons .dx-button').eq(1).trigger('dxclick'); - - const $title = $('.dx-textbox').eq(0); - const title = $title.dxTextBox('instance'); - const $startTime = $('.dx-datebox').eq(1); - const startTime = $startTime.dxDateBox('instance'); - - title.option('value', 'Task 2'); - startTime.option('value', new Date(2015, 1, 11, 3, 0)); - $('.dx-button.dx-popup-done').eq(0).trigger('dxclick'); - await clock.tickAsync(300); - clock.restore(); - - const updatedSingleItem = scheduler.instance.option('dataSource').items()[1]; - const updatedRecurringItem = scheduler.instance.option('dataSource').items()[0]; - const exceptionDate = new Date(2015, 1, 11, 1, 0, 0, 0); - - assert.deepEqual(updatedSingleItem, updatedItem, 'New data is correct'); - assert.equal(updatedRecurringItem.recurrenceException, dateSerialization.serializeDate(exceptionDate, 'yyyyMMddTHHmmssZ'), 'Exception for recurrence appointment is correct'); - }); - test('Recurrent allDay task dragging on month view, single mode', async function(assert) { const data = new DataSource({ store: [ @@ -1198,47 +1146,6 @@ supportedScrollingModes.forEach(scrollingMode => { assert.equal($appointments.length, 11, 'correct number of the appointments'); }); - test('Single changed appointment should be rendered correctly in specified timeZone', async function(assert) { - if(!isDesktopEnvironment()) { - assert.ok(true, 'This test is for desktop only'); - return; - } - - const scheduler = await this.createInstance({ - dataSource: [{ - text: 'Recurrence', - startDate: '2018-05-23T10:00:00Z', - endDate: '2018-05-23T10:30:00Z', - recurrenceRule: 'FREQ=DAILY' - }], - - views: ['week'], - currentView: 'week', - currentDate: new Date(2018, 4, 23), - timeZone: 'Etc/UTC', - height: 2000, - width: 800 - }); - - const clock = sinon.useFakeTimers(); - $(scheduler.instance.$element()).find('.dx-scheduler-appointment').eq(0).trigger('dxclick').trigger('dxclick'); - - $('.dx-dialog-buttons .dx-button').eq(1).trigger('dxclick'); - - const $startTime = $('.dx-datebox').eq(1); - const startTime = $startTime.dxDateBox('instance'); - const expectedStartDate = new Date(2018, 4, 23, 9, 0); - - startTime.option('value', expectedStartDate); - $('.dx-button.dx-popup-done').eq(0).trigger('dxclick'); - await clock.tickAsync(300); - clock.restore(); - - const actualStartDate = $(scheduler.instance.$element()).find('.dx-scheduler-appointment').eq(3).dxSchedulerAppointment('instance').option('startDate'); - - assert.deepEqual(actualStartDate, expectedStartDate, 'appointment starts in 9AM'); - }); - test('Recurrent appointment considers firstDayOfWeek of Scheduler, WEEKLY,INTERVAL=2 (T744191)', async function(assert) { const scheduler = await this.createInstance({ dataSource: [{ From 0681125affb050cbae5f2f0defa92904182dee5b Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 15:21:51 -0300 Subject: [PATCH 16/32] Scheduler - Remove dxRecurrenceEditor public API and QUnit tests --- .../devextreme/js/integration/jquery.d.ts | 7 - .../devextreme/js/ui/recurrence_editor.d.ts | 115 --- .../devextreme/js/ui/recurrence_editor.js | 19 - .../js/ui/recurrence_editor_types.d.ts | 7 - .../recurrenceEditor.tests.js | 880 ------------------ packages/devextreme/ts/dx.all.d.ts | 56 -- 6 files changed, 1084 deletions(-) delete mode 100644 packages/devextreme/js/ui/recurrence_editor.d.ts delete mode 100644 packages/devextreme/js/ui/recurrence_editor.js delete mode 100644 packages/devextreme/js/ui/recurrence_editor_types.d.ts delete mode 100644 packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/recurrenceEditor.tests.js diff --git a/packages/devextreme/js/integration/jquery.d.ts b/packages/devextreme/js/integration/jquery.d.ts index 5c31efce76e9..7d15a50e0a0e 100644 --- a/packages/devextreme/js/integration/jquery.d.ts +++ b/packages/devextreme/js/integration/jquery.d.ts @@ -40,7 +40,6 @@ import dxPopup, { Properties as PopupProperties } from '../ui/popup'; import dxProgressBar, { Properties as ProgressBarProperties } from '../ui/progress_bar'; import dxRadioGroup, { Properties as RadioGroupProperties } from '../ui/radio_group'; import dxRangeSlider, { Properties as RangeSliderProperties } from '../ui/range_slider'; -import dxRecurrenceEditor, { Properties as RecurrenceEditorProperties } from '../ui/recurrence_editor'; import dxResizable, { Properties as ResizableProperties } from '../ui/resizable'; import dxResponsiveBox, { Properties as ResponsiveBoxProperties } from '../ui/responsive_box'; import dxScheduler, { Properties as SchedulerProperties } from '../ui/scheduler'; @@ -414,12 +413,6 @@ declare global { dxRangeSlider(options: string): any; dxRangeSlider(options: string, ...params: any[]): any; - dxRecurrenceEditor(): JQuery; - dxRecurrenceEditor(options: 'instance'): dxRecurrenceEditor; - dxRecurrenceEditor(options: RecurrenceEditorProperties): JQuery; - dxRecurrenceEditor(options: string): any; - dxRecurrenceEditor(options: string, ...params: any[]): any; - dxResizable(): JQuery; dxResizable(options: 'instance'): dxResizable; dxResizable(options: ResizableProperties): JQuery; diff --git a/packages/devextreme/js/ui/recurrence_editor.d.ts b/packages/devextreme/js/ui/recurrence_editor.d.ts deleted file mode 100644 index b4b0a60cde9f..000000000000 --- a/packages/devextreme/js/ui/recurrence_editor.d.ts +++ /dev/null @@ -1,115 +0,0 @@ -import Editor, { - EditorOptions, ValueChangedInfo, -} from './editor/editor'; - -import { - EventInfo, - InitializedEventInfo, - ChangedOptionInfo, - NativeEventInfo, -} from '../events'; - -/** - * @docid _ui_recurrence_editor_ContentReadyEvent - * @public - * @type object - * @inherits EventInfo - */ -export type ContentReadyEvent = EventInfo; - -/** - * @docid _ui_recurrence_editor_DisposingEvent - * @public - * @type object - * @inherits EventInfo - */ -export type DisposingEvent = EventInfo; - -/** - * @docid _ui_recurrence_editor_InitializedEvent - * @public - * @type object - * @inherits InitializedEventInfo - */ -export type InitializedEvent = InitializedEventInfo; - -/** - * @docid _ui_recurrence_editor_OptionChangedEvent - * @public - * @type object - * @inherits EventInfo,ChangedOptionInfo - */ -export type OptionChangedEvent = EventInfo & ChangedOptionInfo; - -/** - * @docid _ui_recurrence_editor_ValueChangedEvent - * @public - * @type object - * @inherits NativeEventInfo,ValueChangedInfo - */ -export type ValueChangedEvent = NativeEventInfo & ValueChangedInfo; - -/** - * @namespace DevExpress.ui - * @docid - * @type object - */ -export interface dxRecurrenceEditorOptions extends EditorOptions { - /** - * @docid - * @default null - * @fires dxRecurrenceEditorOptions.onValueChanged - * @public - */ - value?: string; -} -/** - * @docid - * @isEditor - * @inherits Editor - * @namespace DevExpress.ui - * @public - */ -export default class dxRecurrenceEditor extends Editor { } - -export type Properties = dxRecurrenceEditorOptions; - -/// #DEBUG -// eslint-disable-next-line import/first -import { CheckedEvents } from '../core'; - -type FilterOutHidden = Omit; - -type EventsIntegrityCheckingHelper = CheckedEvents, Required>; - -/** -* @hidden -*/ -type Events = { -/** - * @docid dxRecurrenceEditorOptions.onContentReady - * @type_function_param1 e:{ui/recurrence_editor:ContentReadyEvent} - */ -onContentReady?: ((e: ContentReadyEvent) => void); -/** - * @docid dxRecurrenceEditorOptions.onDisposing - * @type_function_param1 e:{ui/recurrence_editor:DisposingEvent} - */ -onDisposing?: ((e: DisposingEvent) => void); -/** - * @docid dxRecurrenceEditorOptions.onInitialized - * @type_function_param1 e:{ui/recurrence_editor:InitializedEvent} - */ -onInitialized?: ((e: InitializedEvent) => void); -/** - * @docid dxRecurrenceEditorOptions.onOptionChanged - * @type_function_param1 e:{ui/recurrence_editor:OptionChangedEvent} - */ -onOptionChanged?: ((e: OptionChangedEvent) => void); -/** - * @docid dxRecurrenceEditorOptions.onValueChanged - * @type_function_param1 e:{ui/recurrence_editor:ValueChangedEvent} - */ -onValueChanged?: ((e: ValueChangedEvent) => void); -}; -/// #ENDDEBUG diff --git a/packages/devextreme/js/ui/recurrence_editor.js b/packages/devextreme/js/ui/recurrence_editor.js deleted file mode 100644 index d2d799d96e25..000000000000 --- a/packages/devextreme/js/ui/recurrence_editor.js +++ /dev/null @@ -1,19 +0,0 @@ -import RecurrenceEditor from '../__internal/scheduler/m_recurrence_editor'; -export default RecurrenceEditor; - -/** - * @name dxRecurrenceEditorOptions.startDate - * @type Date - * @default new Date() - * @hidden - */ - - -/** - * @name dxRecurrenceEditorOptions.firstDayOfWeek - * @type Enums.FirstDayOfWeek - * @default undefined - * @hidden - */ - - diff --git a/packages/devextreme/js/ui/recurrence_editor_types.d.ts b/packages/devextreme/js/ui/recurrence_editor_types.d.ts deleted file mode 100644 index 0116c5729d18..000000000000 --- a/packages/devextreme/js/ui/recurrence_editor_types.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export { - ContentReadyEvent, - DisposingEvent, - InitializedEvent, - OptionChangedEvent, - ValueChangedEvent, -} from './recurrence_editor'; diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/recurrenceEditor.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/recurrenceEditor.tests.js deleted file mode 100644 index 58e404bdba8c..000000000000 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/recurrenceEditor.tests.js +++ /dev/null @@ -1,880 +0,0 @@ -import $ from 'jquery'; -import dateUtils from 'core/utils/date'; -import RecurrenceEditor from '__internal/scheduler/m_recurrence_editor'; -import SelectBox from 'ui/select_box'; -import NumberBox from 'ui/number_box'; -import RadioGroup from 'ui/radio_group'; -import ButtonGroup from 'ui/button_group'; -import DateBox from 'ui/date_box'; -import { getAsciiStringByDate, getDateByAsciiString } from '__internal/scheduler/recurrence/base'; -import { createTimeZoneCalculator } from '__internal/scheduler/r1/timezone_calculator/index.js'; -import dateLocalization from 'common/core/localization/date'; - -const FREQUENCY_EDITOR = 'dx-recurrence-selectbox-freq'; -const REPEAT_COUNT_EDITOR = 'dx-recurrence-numberbox-repeat-count'; -const REPEAT_DATE_EDITOR = 'dx-recurrence-datebox-until-date'; -const REPEAT_ON_EDITOR = 'dx-recurrence-repeat-on'; -const REPEAT_END_TYPE_EDITOR = 'dx-recurrence-radiogroup-repeat-type'; -const DAY_OF_MONTH = 'dx-recurrence-numberbox-day-of-month'; -const MONTH_OF_YEAR = 'dx-recurrence-selectbox-month-of-year'; -const RECURRENCE_BUTTON_GROUP = 'dx-recurrence-button-group'; -const INTERVAL_EDITOR = 'dx-recurrence-numberbox-interval'; -const LABEL_POSTFIX = '-label'; - -const { testStart, test, module } = QUnit; - -testStart(() => { - $('#qunit-fixture').html('
'); -}); - -const createInstance = options => new RecurrenceEditor($('#recurrence-editor'), { - timeZoneCalculator: { createDate: (date) => date }, - getStartDateTimeZone: () => {}, - ...options -}); - -const getFreqEditor = instance => instance.getRecurrenceForm().getEditor('freq'); -const getRepeatEndEditor = instance => instance.getEditorByField('repeatEnd'); -const getIntervalEditor = instance => instance.getRecurrenceForm().getEditor('interval'); - -module('Recurrence Editor rendering', { - beforeEach: function() { - this.clock = sinon.useFakeTimers(); - }, - afterEach: function() { - this.clock.restore(); - }, -}, -() => { - test('Recurrence editor should be initialized', async function(assert) { - const instance = createInstance(); - assert.ok(instance instanceof RecurrenceEditor, 'dxRecurrenceEditor was initialized'); - - assert.ok(instance.$element().hasClass('dx-recurrence-editor'), 'dxRecurrence editor has right class'); - }); - - test('Recurrence editor should have correct default options', async function(assert) { - const instance = createInstance(); - - assert.equal(instance.option('value'), null, 'value is right'); - assert.equal(instance.option('visible'), true, 'editor is visible'); - assert.equal(instance.option('firstDayOfWeek'), undefined, 'firstDayOfWeek is right'); - assert.ok(instance.option('startDate') instanceof Date, 'startDate is right'); - }); - - test('Recurrence editor should correctly process null value and reset inner editors to default values', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY' }); - - instance.option('value', null); - instance.option('visible', true); - - assert.equal(getFreqEditor(instance).option('value'), 'daily', 'freq editor default value was set'); - }); - - test('Parts of recurrence editor should have right readonly option', async function(assert) { - const instance = createInstance({ - value: 'FREQ=DAILY', - readOnly: true - }); - - assert.equal(instance.getRecurrenceForm().getEditor('interval').option('readOnly'), instance.option('readOnly'), 'right readonly option'); - }); - - ['WEEKLY', 'MONTHLY', 'YEARLY'].forEach(value => { - QUnit.test(`Recurrence editor should not crash when FREQ=${value} is set without startDate`, async function(assert) { - const instance = createInstance({ value: `FREQ=${value}` }); - - assert.equal(instance.option('value'), `FREQ=${value}`); - assert.equal($('.dx-recurrence-editor-container').length, 1, 'recurrenceEditor was rendered'); - }); - }); - - test('The recurrence editor should fire value change only once when the last selected day unselecting (Angular T1154651)', async function(assert) { - const result = []; - const expectedResult = ['FREQ=WEEKLY;BYDAY=SU']; - const instance = createInstance({ - value: 'FREQ=WEEKLY;BYDAY=MO', - startDate: new Date('2023-06-18T22:00:00'), - }); - instance.on('valueChanged', ({ value }) => { - result.push(value); - }); - - $('#recurrence-editor .dx-item-selected').click(); - - this.clock.tick(100); - - assert.equal(result.length, 1, 'valueChanged called only once'); - assert.deepEqual(result, expectedResult, 'default value restored'); - }); -}); - -module('GetEditorByField', () => { - const cases = [ - { field: 'freq', isNecessarily: true, editorType: SelectBox }, - { field: 'interval', isNecessarily: true, editorType: NumberBox }, - { field: 'count', isNecessarily: true, editorType: NumberBox }, - { field: 'until', isNecessarily: true, editorType: DateBox }, - { field: 'repeatEnd', isNecessarily: true, editorType: RadioGroup }, - { field: 'byday', isNecessarily: false, editorType: ButtonGroup, freq: 'FREQ=WEEKLY' }, - { field: 'bymonth', isNecessarily: false, editorType: SelectBox, freq: 'FREQ=YEARLY' }, - { field: 'bymonthday', isNecessarily: false, editorType: NumberBox, freq: 'FREQ=MONTHLY' } - ]; - - cases.forEach((config) => { - QUnit.test(`getEditorByField should return editor if it's visible, field=${config.field}`, async function(assert) { - const instance = createInstance({ value: 'FREQ=DAILY' }); - let editor = instance.getEditorByField(config.field); - - if(!config.isNecessarily) { - assert.strictEqual(editor, undefined, 'editor is hidden'); - - instance.option('value', config.freq); - editor = instance.getEditorByField(config.field); - } - - assert.ok(editor instanceof config.editorType, `returned editor is ${config.editorType}`); - assert.equal(editor.option('field'), config.field, 'returned editor has correct field'); - }); - }); -}); - -module('Frequency editor', () => { - test('Recurrence editor should contain select box for select freq', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY' }); - - assert.ok(getFreqEditor(instance) instanceof SelectBox, 'Freq editor is SelectBox'); - }); - - test('Frequency editor should have right css class', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY' }); - - assert.ok(getFreqEditor(instance).$element().hasClass(FREQUENCY_EDITOR), 'Freq editor class is correct'); - }); - - test('Frequency editor should have right defaults', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY' }); - - assert.equal(getFreqEditor(instance).option('value'), 'weekly', 'Value is right'); - assert.equal(getFreqEditor(instance).option('layout'), 'horizontal', 'Layout is right'); - }); - - test('Freq editor should have right items', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY' }); - - const items = getFreqEditor(instance).option('items'); - /* { - // functionality is not removed, but hide the ability to set minute recurrence in the editor. - // in the future, if we publish the dxRecurrenceEditor, then we publish the minute recurrence - { text: 'Minutely', value: 'minutely' }; - }*/ - const itemValues = [{ text: 'Hourly', value: 'hourly' }, { text: 'Daily', value: 'daily' }, { text: 'Weekly', value: 'weekly' }, { text: 'Monthly', value: 'monthly' }, { text: 'Yearly', value: 'yearly' }]; - - for(let i = 0, len = items.length; i < len; i++) { - assert.equal(items[i].text(), itemValues[i].text, 'item text is right'); - assert.equal(items[i].value, itemValues[i].value, 'item value is right'); - } - }); - - test('Recurrence editor should correctly process values of the freq selectBox, byday setting', async function(assert) { - const instance = createInstance({ startDate: new Date(2015, 7, 27) }); - - assert.equal(instance.option('value'), null, 'Recurrence editor has right value'); - - getFreqEditor(instance).option('value', 'weekly'); - assert.equal(instance.option('value'), 'FREQ=WEEKLY;BYDAY=TH', 'Recurrence editor has right value'); - }); - - test('Recurrence editor should correctly process values of the freq selectBox, bymonthday setting', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY', startDate: new Date(2015, 2, 10) }); - - getFreqEditor(instance).option('value', 'monthly'); - - assert.equal(instance.option('value'), 'FREQ=MONTHLY;BYMONTHDAY=10', 'Recurrence editor has right value'); - }); - - test('Recurrence editor should correctly process values of the freq radioGroup, bymonthday and bymonth setting', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY', startDate: new Date(2015, 2, 10) }); - - getFreqEditor(instance).option('value', 'yearly'); - - assert.equal(instance.option('value'), 'FREQ=YEARLY;BYMONTHDAY=10;BYMONTH=3', 'Recurrence editor has right value'); - }); - - test('Recurrence editor onValueChanged should be fired after changing value', async function(assert) { - let fired = 0; - const instance = createInstance({ - value: 'FREQ=MONTHLY', - startDate: new Date(2019, 1, 1), - onValueChanged: function() { - fired++; - } - }); - - getFreqEditor(instance).option('value', 'weekly'); - - assert.equal(fired, 1, 'Recurrence editor onValueChanged is fired'); - }); - - test('Recurrence editor should correctly pass values to the freq editor', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY', startDate: new Date(2019, 1, 1), }); - - assert.equal(getFreqEditor(instance).option('value'), 'weekly', 'Freq editor has right value'); - - instance.option('value', 'FREQ=MONTHLY'); - assert.equal(getFreqEditor(instance).option('value'), 'monthly', 'Freq editor has right value'); - }); - - $.each(['minutely', 'hourly'], (_, value) => { - test(`Recurrence editor should correctly set frequency on ${value} freq`, async function(assert) { - const instance = createInstance(); - - assert.equal(instance.option('value'), null, 'Freq editor has right value'); - getFreqEditor(instance).option('value', value); - assert.equal(instance.option('value'), `FREQ=${value.toUpperCase()}`, 'Recurrence editor has right value'); - }); - - test(`Recurrence editor should correctly set interval on ${value} freq`, async function(assert) { - const instance = createInstance(); - - getFreqEditor(instance).option('value', value); - const intervalEditor = instance.getRecurrenceForm().getEditor('interval'); - intervalEditor.option('value', 10); - - assert.equal(instance.option('value'), `FREQ=${value.toUpperCase()};INTERVAL=10`, 'Freq editor has right value'); - }); - }); -}); - -module('Repeat-end editor', () => { - test('Recurrence editor should contain repeat-type radio group to turn on/of repeat-end', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY' }); - - assert.ok(getRepeatEndEditor(instance) instanceof RadioGroup, 'Repeat-end editor is RadioGroup'); - }); - - test('Recurrence repeat-end editor should have right default', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY' }); - const itemValues = [ - { type: 'never' }, - { type: 'until' }, - { type: 'count' } - ]; - - assert.ok(getRepeatEndEditor(instance).$element().hasClass(REPEAT_END_TYPE_EDITOR), 'Repeat-end editor has a class'); - assert.equal(getRepeatEndEditor(instance).option('value'), 'never', 'Repeat-end editor has a right default value'); - assert.deepEqual(getRepeatEndEditor(instance).option('items'), itemValues, 'Repeat-end editor items are correct'); - }); - - test('Repeat-end should process rules correctly', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY;COUNT=10' }); - - assert.equal(getRepeatEndEditor(instance).option('value'), 'count', 'value is correct'); - - instance.option('value', 'FREQ=WEEKLY;UNTIL=19971224T000000Z'); - - assert.equal(getRepeatEndEditor(instance).option('value'), 'until', 'value is correct'); - }); - - test('Recurrence repeat-type editor should be rendered with right inner editors', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY;COUNT=10' }); - - const $repeatCount = instance.$element().find('.' + REPEAT_COUNT_EDITOR); - const $repeatUntilDate = instance.$element().find('.' + REPEAT_DATE_EDITOR); - - assert.equal($repeatCount.length, 1, 'count editor was rendered'); - assert.equal($repeatUntilDate.length, 0, 'repeatUntilDate editor was rendered'); - }); - - test('Recurrence editor parts should be hidden if needed, recurrenceString changing', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY' }); - - const $repeatCount = () => instance.$element().find('.' + REPEAT_COUNT_EDITOR); - const $repeatUntilDate = () => instance.$element().find('.' + REPEAT_DATE_EDITOR); - - assert.equal($repeatCount().length, 0, 'repeat-count editor is invisible'); - assert.equal($repeatUntilDate().length, 0, 'repeat-until editor is invisible'); - - instance.option('value', 'FREQ=WEEKLY;COUNT=10'); - - assert.equal($repeatCount().length, 1, 'repeat-count editor is visible'); - assert.equal($repeatUntilDate().length, 0, 'repeat-until editor is invisible'); - - instance.option('value', 'FREQ=WEEKLY;UNTIL=20151107'); - - assert.equal($repeatCount().length, 0, 'repeat-count editor is invisible'); - assert.equal($repeatUntilDate().length, 1, 'repeat-until editor is visible'); - }); - - test('Recurrence editor parts should be hidden if needed, repeat-end editor value changing', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY;COUNT=10' }); - - const $repeatCount = () => instance.$element().find('.' + REPEAT_COUNT_EDITOR); - const $repeatUntilDate = () => instance.$element().find('.' + REPEAT_DATE_EDITOR); - - getRepeatEndEditor(instance).option('value', 'until'); - - assert.equal($repeatCount().length, 0, 'repeat-count editor is invisible'); - assert.equal($repeatUntilDate().length, 1, 'repeat-until editor is visible'); - - getRepeatEndEditor(instance).option('value', 'count'); - - assert.equal($repeatCount().length, 1, 'repeat-count editor is visible'); - assert.equal($repeatUntilDate().length, 0, 'repeat-until editor is invisible'); - }); - - test('Recurrence editor should correctly process values from repeat-end editor', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY;COUNT=10' }); - - let date = dateUtils.trimTime(new Date()); - - date.setDate(date.getDate() + 1); - date = new Date(date.getTime() - 1); - - getRepeatEndEditor(instance).option('value', 'until'); - assert.equal(instance.option('value').substring(0, 26), ('FREQ=WEEKLY;UNTIL=' + getAsciiStringByDate(date)).substring(0, 26), 'Recurrence editor have right value'); - }); - - test('Recurrence repeat-count editor should be rendered with right defaults', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY' }); - const count = instance.getEditorByField('count'); - - assert.equal(count.option('showSpinButtons'), true, 'numberBox has right min value'); - assert.equal(count.option('useLargeSpinButtons'), false, 'numberBox have right useLargeSpinButtons'); - assert.equal(count.option('min'), 1, 'numberBox has right min value'); - assert.equal(count.option('value'), 1, 'numberBox has right value'); - assert.equal(count.option('width'), '100%', 'numberBox has right width'); - }); - - test('Recurrence repeat-count editor should process rules correctly', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY' }); - const count = instance.getEditorByField('count'); - - ['FREQ=WEEKLY;COUNT=10', 'FREQ=WEEKLY;COUNT=12'].forEach((recurrenceString) => { - instance.option('value', recurrenceString); - - const ruleParts = recurrenceString.split(';'); - assert.equal(count.option('value'), ruleParts[1].split('=')[1], 'value of repeat-count editor is correct'); - }); - }); - - test('Recurrence editor should correctly process values from repeat-count editor', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY;COUNT=1' }); - const count = instance.getEditorByField('count'); - - [10, 12].forEach((value) => { - count.option('value', value); - assert.equal(instance.option('value'), `FREQ=WEEKLY;COUNT=${value}`, `Recurrence editor has right value=${value}`); - }); - }); - - test('Recurrence repeat-until editor should be rendered with right defaults', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY;UNTIL=20151007', firstDayOfWeek: 2 }); - const untilDate = instance.getEditorByField('until'); - - assert.equal(untilDate.option('type'), 'date', 'dateBox has right type'); - assert.deepEqual(untilDate.option('calendarOptions'), { firstDayOfWeek: 2 }, 'dateBox has right calendarOptions'); - assert.deepEqual(untilDate.option('value'), getDateByAsciiString('20151007'), 'dateBox has right value'); - }); - - test('Recurrence repeat-until editor should process rules correctly', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY;UNTIL=20151007' }); - const untilDate = instance.getEditorByField('until'); - - ['FREQ=WEEKLY;UNTIL=20151107', 'FREQ=WEEKLY;UNTIL=20201107'].forEach((recurrenceString) => { - instance.option('value', recurrenceString); - - const ruleParts = recurrenceString.split(';'); - assert.deepEqual(untilDate.option('value'), getDateByAsciiString(ruleParts[1].split('=')[1]), 'value of until-date editor is correct'); - }); - }); - - test('Recurrence editor should correctly process values from until-date editor', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY;UNTIL=20151007' }); - const untilDate = instance.getEditorByField('until'); - - [new Date(2015, 11, 7), new Date(2020, 11, 7)].forEach((date) => { - untilDate.option('value', date); - - date = dateUtils.trimTime(date); - date.setDate(date.getDate() + 1); - date = new Date(date.getTime() - 1); - - assert.equal(instance.option('value'), `FREQ=WEEKLY;UNTIL=${getAsciiStringByDate(date)}`, 'Recurrence editor has right value'); - }); - }); - - module('timezone', () => { - [ - [ - 'America/Los_Angeles', - undefined, - { - appointmentTimeZone: undefined, - path: 'Grid' - }], - [ - undefined, - 'America/Los_Angeles', - { - appointmentTimeZone: 'America/Los_Angeles', - path: 'Appointment' - }, - ], - [ - 'America/Los_Angeles', - 'America/Los_Angeles', - { - appointmentTimeZone: 'America/Los_Angeles', - path: 'Appointment' - }, - ] - ].forEach(testCase => { - test('Repeat-until dateBox should get date considering scheduler timeZone', async function(assert) { - const [gridTimeZone, startDateTimeZone] = testCase; - const timeZoneCalculator = createTimeZoneCalculator(gridTimeZone); - - const instance = createInstance({ - value: 'FREQ=WEEKLY;UNTIL=20230617T065959Z', - timeZoneCalculator, - getStartDateTimeZone: () => startDateTimeZone - }); - const untilDate = instance.getEditorByField('until'); - - assert.deepEqual(untilDate.option('value'), new Date('2023-06-16 23:59:59'), 'dateBox has right value'); - }); - - test('Repeat-until dateBox should apply date considering scheduler timeZone', async function(assert) { - const [gridTimeZone, startDateTimeZone, result] = testCase; - - const timeZoneCalculator = createTimeZoneCalculator(gridTimeZone); - const timeZoneCalculatorSpy = sinon.spy(timeZoneCalculator, 'createDate'); - - const instance = createInstance({ - value: 'FREQ=WEEKLY;UNTIL=20151007T000000Z', // some other date, we'll change it later in dateBox - timeZoneCalculator, - getStartDateTimeZone: () => startDateTimeZone - }); - assert.deepEqual(timeZoneCalculatorSpy.getCall(0).args[1], 'to' + result.path); - assert.deepEqual(timeZoneCalculatorSpy.getCall(0).args[2], result.appointmentTimeZone); - - const untilDate = instance.getEditorByField('until'); - - untilDate.option('value', new Date('2023-06-16 23:59:59')); - - assert.deepEqual(timeZoneCalculatorSpy.getCall(1).args[1], 'from' + result.path); - assert.deepEqual(timeZoneCalculatorSpy.getCall(1).args[2], result.appointmentTimeZone); - assert.equal(instance.option('value'), 'FREQ=WEEKLY;UNTIL=20230617T065959Z', 'Recurrence editor has right value'); - }); - }); - }); -}); - -module('Interval editor', () => { - test('Recurrence interval numberbox should be rendered with right defaults', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY' }); - - const $intervalLabel = instance.$element().find(`.${INTERVAL_EDITOR}${LABEL_POSTFIX}`); - assert.ok(getIntervalEditor(instance) instanceof NumberBox, 'Interval editor is NumberBox'); - - assert.equal($intervalLabel.length, 1, 'Label for interval editor was rendered'); - assert.equal(getIntervalEditor(instance).option('showSpinButtons'), true, 'Interval editor has right showSpinButtons'); - assert.equal(getIntervalEditor(instance).option('useLargeSpinButtons'), false, 'Interval editor has right useLargeSpinButtons'); - assert.equal(getIntervalEditor(instance).option('min'), 1, 'Interval editor has right min value'); - assert.equal(getIntervalEditor(instance).option('value'), 1, 'Interval editor hase right value'); - assert.equal(getIntervalEditor(instance).option('width'), 90, 'Interval editor has right width'); - }); - - test('Interval editor should have right css class', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY' }); - - assert.ok(getIntervalEditor(instance).$element().hasClass(INTERVAL_EDITOR), 'Interval editor class is correct'); - }); - - test('Recurrence interval editor should process value correctly', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY;INTERVAL=2' }); - - assert.equal(getIntervalEditor(instance).option('value'), 2, 'Interval editor has right value after init'); - - instance.option('value', 'FREQ=WEEKLY;INTERVAL=3'); - - assert.equal(getIntervalEditor(instance).option('value'), 3, 'Interval editor has right value'); - }); - - test('Recurrence editor should correctly process values from interval editor', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY;INTERVAL=2' }); - - getIntervalEditor(instance).option('value', 3); - - assert.equal(instance.option('value'), 'FREQ=WEEKLY;INTERVAL=3', 'Recurrence editor has right value'); - }); - - const textCases = [ - { freq: 'WEEKLY', expectedText: 'week(s)' }, - { freq: 'DAILY', expectedText: 'day(s)' }, - { freq: 'MONTHLY', expectedText: 'month(s)' }, - { freq: 'YEARLY', expectedText: 'year(s)' } - ]; - - textCases.forEach((config) => { - QUnit.test(`Recurrence interval label should have correct text on init, freq=${config.freq}`, async function(assert) { - const instance = createInstance({ - value: `FREQ=${config.freq}` - }); - - const $label = instance.$element().find(`.${INTERVAL_EDITOR}${LABEL_POSTFIX}`); - - assert.equal($label.text(), config.expectedText, 'label text is correct'); - }); - }); - - textCases.forEach((config) => { - QUnit.test(`Recurrence interval label should have correct text after changing freq, freq=${config.freq}`, async function(assert) { - const instance = createInstance(); - - instance.option('value', `FREQ=${config.freq}`); - const $label = instance.$element().find(`.${INTERVAL_EDITOR}${LABEL_POSTFIX}`); - - assert.equal($label.text(), config.expectedText, 'label text is correct'); - }); - }); -}); - -module('Repeat-on editor', () => { - test('Recurrence repeat-on editor should be rendered', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY' }); - - const $repeatOn = instance.$element().find('.' + REPEAT_ON_EDITOR); - - assert.equal($repeatOn.length, 1, 'repeat-on editor was rendered'); - }); - - test('Recurrence repeat-on lablle should have correct css class', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY' }); - - const $repeatOnLabel = instance.$element().find(`.${REPEAT_ON_EDITOR}${LABEL_POSTFIX}`); - - assert.equal($repeatOnLabel.text(), 'Repeat On', 'label text is correct'); - }); - - test('Recurrence repeat-on editor should contain repeat-on-week editor, when freq = weekly', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY' }); - - const buttonGroup = instance.getEditorByField('byday'); - - assert.ok(buttonGroup instanceof ButtonGroup, 'repeat-on-week editor was rendered'); - assert.ok(buttonGroup.$element().hasClass(RECURRENCE_BUTTON_GROUP), 'repeat-on-week editor has correct class'); - }); - - test('Repeat-on-week editor should have right defaults', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY' }); - - const buttonGroup = instance.getEditorByField('byday'); - - assert.equal(buttonGroup.option('selectionMode'), 'multiple', 'Selection mode is ok'); - assert.equal(buttonGroup.option('keyExpr'), 'key', 'KeyExpr mode is ok'); - assert.equal(buttonGroup.option('field'), 'byday', 'Field mode is ok'); - }); - - test('Recurrence repeat-on editor should process values correctly, freq = weekly', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY;BYDAY=TU,SU' }); - assert.deepEqual($('.' + 'dx-buttongroup').eq(0).dxButtonGroup('instance').option('selectedItemKeys'), ['SU', 'TU'], 'Right button group select item keys'); - - instance.option('value', 'FREQ=WEEKLY;BYDAY=MO'); - assert.deepEqual($('.' + 'dx-buttongroup').eq(0).dxButtonGroup('instance').option('selectedItemKeys'), ['MO'], 'Right button group select item keys'); - }); - - test('Recurrence repeat-on editor should process values by startDate correctly, freq = weekly', async function(assert) { - createInstance({ value: 'FREQ=WEEKLY', startDate: new Date(2015, 1, 1, 1) }); - - assert.deepEqual($('.' + 'dx-buttongroup').eq(0).dxButtonGroup('instance').option('selectedItemKeys'), ['SU'], 'Right button group select item keys'); - }); - - test('Recurrence repeat-on editor should process values by startDate correctly after remove selection, freq = weekly', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY', startDate: new Date(2015, 1, 1, 1) }); - - const buttonGroup = instance.getEditorByField('byday'); - buttonGroup.option('selectedItemKeys', []); - - assert.deepEqual(buttonGroup.option('selectedItemKeys'), ['SU'], 'Selection should consider startDate day'); - }); - - test('Recurrence editor should process values from repeat-on-editor after init correctly, freq=weekly', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY;BYDAY=TU' }); - - const buttonGroup = $('.' + 'dx-buttongroup').eq(0).dxButtonGroup('instance'); - buttonGroup.option('selectedItemKeys', ['TU', 'WE']); - - assert.equal(instance.option('value'), 'FREQ=WEEKLY;BYDAY=TU,WE', 'Recurrence editor value is correct'); - }); - - test('Recurrence editor should process values from repeat-on-editor after remove selection, freq=weekly', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY;BYDAY=TU', startDate: new Date(2015, 1, 1, 1) }); - - const buttonGroup = $('.' + 'dx-buttongroup').eq(0).dxButtonGroup('instance'); - buttonGroup.option('selectedItemKeys', []); - - assert.equal(instance.option('value'), 'FREQ=WEEKLY;BYDAY=SU', 'Recurrence editor value is correct'); - }); - - test('\'BYDAY\' rule has a higher priority than \'startDate\' rule, freq=weekly', async function(assert) { - createInstance({ value: 'FREQ=WEEKLY;BYDAY=TU', startDate: new Date(2015, 1, 1, 1) }); - - assert.deepEqual($('.' + 'dx-buttongroup').eq(0).dxButtonGroup('instance').option('selectedItemKeys'), ['TU'], 'Right button group select item keys'); - }); - - test('Recurrence editor should process values from repeat-on-editor correctly, freq=weekly', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY;BYDAY=TU,SU' }); - - const buttonGroup = $('.' + 'dx-buttongroup').eq(0).dxButtonGroup('instance'); - buttonGroup.option('selectedItemKeys', ['TU', 'SU', 'MO']); - - assert.equal(instance.option('value'), 'FREQ=WEEKLY;BYDAY=SU,MO,TU'); - }); - - test('Recurrence repeat-on editor should contain repeat-on-month editor, when freq = monthly', async function(assert) { - const instance = createInstance({ value: 'FREQ=MONTHLY', startDate: new Date(2019, 1, 1) }); - const dayOfMonth = instance.getRecurrenceForm().getEditor('bymonthday'); - - assert.ok(dayOfMonth.$element().hasClass(DAY_OF_MONTH), 'correct default value of day-of-month editor'); - assert.equal(dayOfMonth.option('min'), 1, 'correct default value of day-of-month editor'); - assert.equal(dayOfMonth.option('max'), 31, 'correct default value of day-of-month editor'); - assert.equal(dayOfMonth.option('showSpinButtons'), true, 'correct default value of day-of-month editor'); - assert.equal(dayOfMonth.option('useLargeSpinButtons'), false, 'numberBox have right useLargeSpinButtons'); - }); - - test('Recurrence repeat-on editor should should process values correctly, when freq = monthly', async function(assert) { - const instance = createInstance({ value: 'FREQ=MONTHLY;BYMONTHDAY=5' }); - - const dayOfMonth = instance.getRecurrenceForm().getEditor('bymonthday'); - - assert.equal(dayOfMonth.option('value'), 5, 'repeat-on-month editor was rendered'); - - instance.option('value', 'FREQ=MONTHLY;BYMONTHDAY=6'); - - assert.equal(dayOfMonth.option('value'), 6, 'repeat-on-month editor was rendered'); - }); - - test('Recurrence repeat-on editor should should process values by startDate correctly, when freq = monthly', async function(assert) { - const instance = createInstance({ value: 'FREQ=MONTHLY', startDate: new Date(2015, 1, 10, 1) }); - - const dayOfMonth = instance.getRecurrenceForm().getEditor('bymonthday'); - - assert.equal(dayOfMonth.option('value'), 10, 'repeat-on-month editor was rendered with right value'); - }); - - test('Recurrence editor should process values from repeat-on-editor correctly, freq=monthly', async function(assert) { - const instance = createInstance({ value: 'FREQ=MONTHLY;BYMONTHDAY=5' }); - - const dayOfMonth = instance.getRecurrenceForm().getEditor('bymonthday'); - dayOfMonth.option('value', 12); - - assert.equal(instance.option('value'), 'FREQ=MONTHLY;BYMONTHDAY=12'); - }); - - test('\'BYMONTHDAY\' rule has a higher priority than \'startDate\' rule, when freq = monthly', async function(assert) { - const instance = createInstance({ value: 'FREQ=MONTHLY;BYMONTHDAY=5', startDate: new Date(2015, 1, 10, 1) }); - - const dayOfMonth = instance.getRecurrenceForm().getEditor('bymonthday'); - - assert.equal(dayOfMonth.option('value'), 5, 'repeat-on-month editor was rendered with right value'); - }); - - test('Recurrence repeat-on editor should contain repeat-on-year editor parts, when freq = yearly', async function(assert) { - const instance = createInstance({ value: 'FREQ=YEARLY', startDate: new Date(2019, 1, 1) }); - - const $repeatOn = instance.$element().find('.' + REPEAT_ON_EDITOR); - const $repeatOnMonth = $repeatOn.find('.' + MONTH_OF_YEAR); - - assert.equal($repeatOnMonth.length, 1, 'repeat-on-month editor was rendered'); - const $day = $repeatOn.find('.' + DAY_OF_MONTH); - assert.equal($day.length, 1, 'day-of-month editor was rendered'); - }); - - test('Recurrence repeat-on editor parts should have right defaults, when freq = yearly', async function(assert) { - const instance = createInstance({ value: 'FREQ=YEARLY', startDate: new Date(2019, 1, 1) }); - - const monthOfYear = instance.getRecurrenceForm().getEditor('bymonth'); - - assert.ok(monthOfYear.$element().hasClass(MONTH_OF_YEAR), 'correct default value of day-of-month editor'); - assert.equal(monthOfYear.option('items').length, 12, 'items are correct'); - assert.equal(monthOfYear.option('value'), 2, 'value is correct'); - assert.equal(monthOfYear.option('text'), 'February', 'text is correct'); - }); - - test('Recurrence repeat-on editor should should process values correctly, when freq = yearly', async function(assert) { - const instance = createInstance({ value: 'FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=5' }); - - const getDayOfMonth = () => instance.getRecurrenceForm().getEditor('bymonthday').option('value'); - const getMonth = () => instance.getRecurrenceForm().getEditor('bymonth').option('value'); - - assert.equal(getDayOfMonth(), 5, 'day was set correctly'); - assert.equal(getMonth(), 10, 'month was set correctly'); - - instance.option('value', 'FREQ=YEARLY;BYMONTH=11;BYMONTHDAY=6'); - - assert.equal(getDayOfMonth(), 6, 'day was set correctly'); - assert.equal(getMonth(), 11, 'month was set correctly'); - }); - - test('Recurrence repeat-on editor should process values by startDate correctly, when freq = yearly', async function(assert) { - const instance = createInstance({ value: 'FREQ=YEARLY', startDate: new Date(2015, 2, 10, 1) }); - - const dayEditor = instance.getRecurrenceForm().getEditor('bymonthday'); - const monthEditor = instance.getRecurrenceForm().getEditor('bymonth'); - - assert.equal(dayEditor.option('value'), 10, 'day was set correctly'); - assert.equal(monthEditor.option('value'), 3, 'month was set correctly'); - }); - - test('Recurrence editor should process values from repeat-on-editor correctly, freq = yearly', async function(assert) { - const instance = createInstance({ value: 'FREQ=YEARLY;BYMONTHDAY=4;BYMONTH=11', startDate: new Date(2015, 7, 4) }); - - const monthEditor = instance.getRecurrenceForm().getEditor('bymonth'); - - monthEditor.option('value', '10'); - - assert.equal(instance.option('value'), 'FREQ=YEARLY;BYMONTHDAY=4;BYMONTH=10', 'recurrence editor value is correct'); - - const dayOfMonth = instance.getRecurrenceForm().getEditor('bymonthday'); - dayOfMonth.option('value', 5); - - assert.equal(instance.option('value'), 'FREQ=YEARLY;BYMONTHDAY=5;BYMONTH=10', 'recurrence editor value is correct'); - }); - - test('\'BYMONTH\' rule should has right default value, when freq = yearly', async function(assert) { - const instance = createInstance({ value: 'FREQ=YEARLY', startDate: new Date(2016, 4, 10) }); - - const monthEditor = instance.getRecurrenceForm().getEditor('bymonth'); - - assert.equal(monthEditor.option('value'), 5, 'month was set correctly'); - }); - - test('\'BYMONTH\' rule has a higher priority than \'startDate\' rule, when freq = yearly', async function(assert) { - const instance = createInstance({ value: 'FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=5', startDate: new Date(2015, 2, 10, 1) }); - - const monthEditor = instance.getRecurrenceForm().getEditor('bymonth'); - const dayEditor = instance.getRecurrenceForm().getEditor('bymonthday'); - - assert.equal(dayEditor.option('value'), 5, 'day was set correctly'); - assert.equal(monthEditor.option('value'), 10, 'month was set correctly'); - }); - - const repeatOnPartsVisibilityCases = [ - { freq: 'WEEKLY', byDayVisible: true, byMonthDayVisible: false, byMonthVisible: false, labelVisible: true }, - { freq: 'DAILY', byDayVisible: false, byMonthDayVisible: false, byMonthVisible: false, labelVisible: false }, - { freq: 'HOURLY', byDayVisible: false, byMonthDayVisible: false, byMonthVisible: false, labelVisible: false }, - { freq: 'MONTHLY', byDayVisible: false, byMonthDayVisible: true, byMonthVisible: false, labelVisible: true }, - { freq: 'YEARLY', byDayVisible: false, byMonthDayVisible: true, byMonthVisible: true, labelVisible: true } - ]; - - repeatOnPartsVisibilityCases.forEach((config) => { - QUnit.test(`Recurrence repeat-on editor parts visibility on init, freq=${config.freq}`, async function(assert) { - const instance = createInstance({ - value: `FREQ=${config.freq}` - }); - - const recurrenceForm = instance.getRecurrenceForm(); - - assert.equal(recurrenceForm.itemOption('repeatOnLabel').visible, config.labelVisible, `label visibility is ${config.byDayVisible}`); - assert.equal(recurrenceForm.itemOption('byday').visible, config.byDayVisible, `byday editor visibility is ${config.byDayVisible}`); - assert.equal(recurrenceForm.itemOption('bymonthday').visible, config.byMonthDayVisible, `bymonthday editor visibility is ${config.byMonthDayVisible}`); - assert.equal(recurrenceForm.itemOption('bymonth').visible, config.byMonthVisible, `bymonth editor visibility is ${config.byDayVisible}`); - }); - }); - - repeatOnPartsVisibilityCases.forEach((config) => { - QUnit.test(`Recurrence repeat-on editor parts visibility after changing freq, freq=${config.freq}`, async function(assert) { - const instance = createInstance(); - - instance.option('value', `FREQ=${config.freq}`); - const recurrenceForm = instance.getRecurrenceForm(); - - assert.equal(recurrenceForm.itemOption('repeatOnLabel').visible, config.labelVisible, `label visibility is ${config.byDayVisible}`); - assert.equal(recurrenceForm.itemOption('byday').visible, config.byDayVisible, `byday editor visibility is ${config.byDayVisible}`); - assert.equal(recurrenceForm.itemOption('bymonthday').visible, config.byMonthDayVisible, `bymonthday editor visibility is ${config.byMonthDayVisible}`); - assert.equal(recurrenceForm.itemOption('bymonth').visible, config.byMonthVisible, `bymonth editor visibility is ${config.byDayVisible}`); - }); - }); - - test('Recurrence editor should process values from repeat-on-editor correctly after freq changing', async function(assert) { - const instance = createInstance({ value: 'FREQ=YEARLY', startDate: new Date(2015, 2, 10) }); - - const monthEditor = instance.getRecurrenceForm().getEditor('bymonth'); - const freqEditor = instance.getRecurrenceForm().getEditor('freq'); - - monthEditor.option('value', '10'); - freqEditor.option('value', 'daily'); - - assert.equal(instance.option('value'), 'FREQ=DAILY', 'recurrence editor value is correct'); - - freqEditor.option('value', 'monthly'); - - const dayEditor = instance.getRecurrenceForm().getEditor('bymonthday'); - - dayEditor.option('value', 5); - freqEditor.option('value', 'yearly'); - - assert.equal(instance.option('value'), 'FREQ=YEARLY;BYMONTHDAY=5;BYMONTH=3', 'recurrence editor value is correct'); - }); -}); - -module('FirstDayOfWeek setting', () => { - test('Recurrence editor should have correct firstDayOfWeek default value', async function(assert) { - const instance = createInstance(); - - assert.strictEqual(instance.option('firstDayOfWeek'), undefined, 'default value is correct'); - }); - - test('Recurrence editor should have correct firstDayOfWeek value if this is different in localization', async function(assert) { - const spy = sinon.spy(dateLocalization, 'firstDayOfWeekIndex'); - - createInstance({ firstDayOfWeek: 0 }); - - assert.notOk(spy.called, 'firstDayOfWeekIndex wasn\'t called'); - }); - - test('Repeat-until dateBox should have right firstDayOfWeek', async function(assert) { - const instance = createInstance({ firstDayOfWeek: 5, value: 'FREQ=WEEKLY;UNTIL=20151007' }); - const untilDate = instance.getEditorByField('until'); - - assert.equal(untilDate.option('calendarOptions.firstDayOfWeek'), 5, 'First day of the week is ok'); - }); - - test('Repeat-until dateBox should have right firstDayOfWeek after firstDayOfWeek option changing', async function(assert) { - const instance = createInstance({ firstDayOfWeek: 5, value: 'FREQ=WEEKLY;UNTIL=20151007' }); - instance.option('firstDayOfWeek', 1); - const untilDate = instance.getEditorByField('until'); - - assert.equal(untilDate.option('calendarOptions.firstDayOfWeek'), 1, 'First day of the week is ok'); - }); - - const dayNames = [{ key: 'SU', text: 'Sun' }, { key: 'MO', text: 'Mon' }, { key: 'TU', text: 'Tue' }, { key: 'WE', text: 'Wed' }, { key: 'TH', text: 'Thu' }, { key: 'FR', text: 'Fri' }, { key: 'SA', text: 'Sat' }]; - - test('Repeat-on-week editor should be rendered correctly', async function(assert) { - createInstance({ firstDayOfWeek: 3, value: 'FREQ=WEEKLY;BYDAY=TU' }); - - const buttonGroup = $('.' + 'dx-buttongroup').eq(0).dxButtonGroup('instance'); - assert.deepEqual(buttonGroup.option('items'), dayNames.slice(3).concat(dayNames.slice(0, 3))); - }); - - test('Repeat-on-week editor should be rendered correctly after firstDayOfWeek option changing', async function(assert) { - const instance = createInstance({ firstDayOfWeek: 3, value: 'FREQ=WEEKLY;BYDAY=TU' }); - instance.option('firstDayOfWeek', 5); - - const buttonGroup = $('.' + 'dx-buttongroup').eq(0).dxButtonGroup('instance'); - assert.deepEqual(buttonGroup.option('items'), dayNames.slice(5).concat(dayNames.slice(0, 5))); - }); - - test('Repeat-count editor should have correct value after re-initializing values', async function(assert) { - const instance = createInstance({ value: 'FREQ=WEEKLY;BYDAY=SU,TU;COUNT=3' }); - - instance.option('value', ''); - instance.option('value', 'FREQ=WEEKLY;BYDAY=SU,TU;COUNT=3'); - - const count = instance.getEditorByField('count'); - - assert.equal(count.option('value'), 3, 'Value was processed correctly'); - }); -}); - diff --git a/packages/devextreme/ts/dx.all.d.ts b/packages/devextreme/ts/dx.all.d.ts index e69e30db6bc2..a2a0680f7991 100644 --- a/packages/devextreme/ts/dx.all.d.ts +++ b/packages/devextreme/ts/dx.all.d.ts @@ -313,14 +313,6 @@ declare global { dxRangeSlider(options: string): any; dxRangeSlider(options: string, ...params: any[]): any; - dxRecurrenceEditor(): JQuery; - dxRecurrenceEditor(options: 'instance'): DevExpress.ui.dxRecurrenceEditor; - dxRecurrenceEditor( - options: DevExpress.ui.dxRecurrenceEditor.Properties - ): JQuery; - dxRecurrenceEditor(options: string): any; - dxRecurrenceEditor(options: string, ...params: any[]): any; - dxResizable(): JQuery; dxResizable(options: 'instance'): DevExpress.ui.dxResizable; dxResizable(options: DevExpress.ui.dxResizable.Properties): JQuery; @@ -25505,54 +25497,6 @@ declare module DevExpress.ui { */ value?: Array; } - /** - * [descr:dxRecurrenceEditor] - */ - export class dxRecurrenceEditor extends Editor {} - module dxRecurrenceEditor { - /** - * [descr:_ui_recurrence_editor_ContentReadyEvent] - */ - export type ContentReadyEvent = - DevExpress.common.core.events.EventInfo; - /** - * [descr:_ui_recurrence_editor_DisposingEvent] - */ - export type DisposingEvent = - DevExpress.common.core.events.EventInfo; - /** - * [descr:_ui_recurrence_editor_InitializedEvent] - */ - export type InitializedEvent = - DevExpress.common.core.events.InitializedEventInfo; - /** - * [descr:_ui_recurrence_editor_OptionChangedEvent] - */ - export type OptionChangedEvent = - DevExpress.common.core.events.EventInfo & - DevExpress.common.core.events.ChangedOptionInfo; - /** - * @deprecated Attention! This type is for internal purposes only. If you used it previously, please submit a ticket to our {@link https://supportcenter.devexpress.com/ticket/create Support Center}. We will check if there is an alternative solution. - */ - export type Properties = dxRecurrenceEditorOptions; - /** - * [descr:_ui_recurrence_editor_ValueChangedEvent] - */ - export type ValueChangedEvent = - DevExpress.common.core.events.NativeEventInfo & - DevExpress.ui.Editor.ValueChangedInfo; - } - /** - * [descr:dxRecurrenceEditorOptions] - * @deprecated Attention! This type is for internal purposes only. If you used it previously, please submit a ticket to our {@link https://supportcenter.devexpress.com/ticket/create Support Center}. We will check if there is an alternative solution. - */ - export interface dxRecurrenceEditorOptions - extends EditorOptions { - /** - * [descr:dxRecurrenceEditorOptions.value] - */ - value?: string; - } /** * [descr:dxResizable] */ From 326a00a295f058a6d8a2bf47ba31986b0a22b9f0 Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 15:22:37 -0300 Subject: [PATCH 17/32] Scheduler - Regenerate wrappers after dxRecurrenceEditor removal --- packages/devextreme-angular/src/index.ts | 267 +------ packages/devextreme-angular/src/ui/all.ts | 3 - .../src/ui/recurrence-editor/index.ts | 666 ------------------ .../src/ui/recurrence-editor/ng-package.json | 5 - packages/devextreme-react/src/index.ts | 1 - .../devextreme-react/src/recurrence-editor.ts | 73 -- packages/devextreme-vue/src/index.ts | 1 - .../devextreme-vue/src/recurrence-editor.ts | 131 ---- 8 files changed, 1 insertion(+), 1146 deletions(-) delete mode 100644 packages/devextreme-angular/src/ui/recurrence-editor/index.ts delete mode 100644 packages/devextreme-angular/src/ui/recurrence-editor/ng-package.json delete mode 100644 packages/devextreme-react/src/recurrence-editor.ts delete mode 100644 packages/devextreme-vue/src/recurrence-editor.ts diff --git a/packages/devextreme-angular/src/index.ts b/packages/devextreme-angular/src/index.ts index b387f2eeeb37..a796f39ee9cd 100644 --- a/packages/devextreme-angular/src/index.ts +++ b/packages/devextreme-angular/src/index.ts @@ -1,16 +1,6 @@ import './common'; import './common/grids'; import './common/charts'; -import * as CommonModule from './common/index'; -import * as AiIntegrationModule from './common/ai-integration'; -import * as ChartsModule from './common/charts'; -import * as CoreAnimationModule from './common/core/animation'; -import * as CoreEnvironmentModule from './common/core/environment'; -import * as CoreEventsModule from './common/core/events'; -import * as CoreLocalizationModule from './common/core/localization'; -import * as DataModule from './common/data'; -import * as ExportExcelModule from './common/export/excel'; -import * as ExportPdfModule from './common/export/pdf'; export * from 'devextreme-angular/core'; export * from './ui/all'; @@ -67,7 +57,6 @@ export { DxProgressBarComponent, DxProgressBarModule } from 'devextreme-angular/ export { DxRadioGroupComponent, DxRadioGroupModule } from 'devextreme-angular/ui/radio-group'; export { DxRangeSelectorComponent, DxRangeSelectorModule } from 'devextreme-angular/ui/range-selector'; export { DxRangeSliderComponent, DxRangeSliderModule } from 'devextreme-angular/ui/range-slider'; -export { DxRecurrenceEditorComponent, DxRecurrenceEditorModule } from 'devextreme-angular/ui/recurrence-editor'; export { DxResizableComponent, DxResizableModule } from 'devextreme-angular/ui/resizable'; export { DxResponsiveBoxComponent, DxResponsiveBoxModule } from 'devextreme-angular/ui/responsive-box'; export { DxSankeyComponent, DxSankeyModule } from 'devextreme-angular/ui/sankey'; @@ -98,258 +87,4 @@ export { DxValidationGroupComponent, DxValidationGroupModule } from 'devextreme- export { DxValidationSummaryComponent, DxValidationSummaryModule } from 'devextreme-angular/ui/validation-summary'; export { DxValidatorComponent, DxValidatorModule } from 'devextreme-angular/ui/validator'; export { DxVectorMapComponent, DxVectorMapModule } from 'devextreme-angular/ui/vector-map'; -export namespace Common { - export type ApplyValueMode = import('devextreme/common').ApplyValueMode; - export type AsyncRule = import('devextreme/common').AsyncRule; - export type ButtonStyle = import('devextreme/common').ButtonStyle; - export type ButtonType = import('devextreme/common').ButtonType; - export type CompareRule = import('devextreme/common').CompareRule; - export type ComparisonOperator = import('devextreme/common').ComparisonOperator; - export const config = (CommonModule as any).config as typeof import('devextreme/common').config; - export type CustomRule = import('devextreme/common').CustomRule; - export type DataStructure = import('devextreme/common').DataStructure; - export type DataType = import('devextreme/common').DataType; - export type DateLike = import('devextreme/common').DateLike; - export type DefaultOptionsRule = import('devextreme/common').DefaultOptionsRule; - export type Direction = import('devextreme/common').Direction; - export type DisplayMode = import('devextreme/common').DisplayMode; - export type DragDirection = import('devextreme/common').DragDirection; - export type Draggable = import('devextreme/common').Draggable; - export type DragHighlight = import('devextreme/common').DragHighlight; - export type EditorStyle = import('devextreme/common').EditorStyle; - export type EmailRule = import('devextreme/common').EmailRule; - export type ExportFormat = import('devextreme/common').ExportFormat; - export type FieldChooserLayout = import('devextreme/common').FieldChooserLayout; - export type FirstDayOfWeek = import('devextreme/common').FirstDayOfWeek; - export type FloatingActionButtonDirection = import('devextreme/common').FloatingActionButtonDirection; - export type Format = import('devextreme/common').Format; - export type GlobalConfig = import('devextreme/common').GlobalConfig; - export const Guid = (CommonModule as any).Guid as typeof import('devextreme/common').Guid; - export type Guid = import('devextreme/common').Guid; - export type HorizontalAlignment = import('devextreme/common').HorizontalAlignment; - export type HorizontalEdge = import('devextreme/common').HorizontalEdge; - export type LabelMode = import('devextreme/common').LabelMode; - export type MaskMode = import('devextreme/common').MaskMode; - export type Mode = import('devextreme/common').Mode; - export type NumericRule = import('devextreme/common').NumericRule; - export type Orientation = import('devextreme/common').Orientation; - export type PageLoadMode = import('devextreme/common').PageLoadMode; - export type PageOrientation = import('devextreme/common').PageOrientation; - export type PatternRule = import('devextreme/common').PatternRule; - export type Position = import('devextreme/common').Position; - export type PositionAlignment = import('devextreme/common').PositionAlignment; - export type RangeRule = import('devextreme/common').RangeRule; - export type RequiredRule = import('devextreme/common').RequiredRule; - export type Scrollable = import('devextreme/common').Scrollable; - export type ScrollbarMode = import('devextreme/common').ScrollbarMode; - export type ScrollDirection = import('devextreme/common').ScrollDirection; - export type ScrollMode = import('devextreme/common').ScrollMode; - export type SearchMode = import('devextreme/common').SearchMode; - export type SelectAllMode = import('devextreme/common').SelectAllMode; - export const setTemplateEngine = (CommonModule as any).setTemplateEngine as typeof import('devextreme/common').setTemplateEngine; - export type SimplifiedSearchMode = import('devextreme/common').SimplifiedSearchMode; - export type SingleMultipleAllOrNone = import('devextreme/common').SingleMultipleAllOrNone; - export type SingleMultipleOrNone = import('devextreme/common').SingleMultipleOrNone; - export type SingleOrMultiple = import('devextreme/common').SingleOrMultiple; - export type SingleOrNone = import('devextreme/common').SingleOrNone; - export type SliderValueChangeMode = import('devextreme/common').SliderValueChangeMode; - export type Sortable = import('devextreme/common').Sortable; - export type SortOrder = import('devextreme/common').SortOrder; - export type StoreType = import('devextreme/common').StoreType; - export type StringLengthRule = import('devextreme/common').StringLengthRule; - export type SubmenuShowMode = import('devextreme/common').SubmenuShowMode; - export type TabsIconPosition = import('devextreme/common').TabsIconPosition; - export type TabsStyle = import('devextreme/common').TabsStyle; - export type template = import('devextreme/common').template; - export type TextBoxPredefinedButton = import('devextreme/common').TextBoxPredefinedButton; - export type TextEditorButton = import('devextreme/common').TextEditorButton; - export type TextEditorButtonLocation = import('devextreme/common').TextEditorButtonLocation; - export type ToolbarItemComponent = import('devextreme/common').ToolbarItemComponent; - export type ToolbarItemLocation = import('devextreme/common').ToolbarItemLocation; - export type TooltipShowMode = import('devextreme/common').TooltipShowMode; - export type ValidationCallbackData = import('devextreme/common').ValidationCallbackData; - export type ValidationMessageMode = import('devextreme/common').ValidationMessageMode; - export type ValidationRule = import('devextreme/common').ValidationRule; - export type ValidationRuleType = import('devextreme/common').ValidationRuleType; - export type ValidationStatus = import('devextreme/common').ValidationStatus; - export type VerticalAlignment = import('devextreme/common').VerticalAlignment; - export type VerticalEdge = import('devextreme/common').VerticalEdge; - export namespace AiIntegration { - export const AIIntegration = (AiIntegrationModule as any).AIIntegration as typeof import('devextreme/common/ai-integration').AIIntegration; - export type AIIntegration = import('devextreme/common/ai-integration').AIIntegration; - export type AIIntegrationOptions = import('devextreme/common/ai-integration').AIIntegrationOptions; - export type AIProvider = import('devextreme/common/ai-integration').AIProvider; - export type AIResponse = import('devextreme/common/ai-integration').AIResponse; - export type GenerateGridColumnCommandResponse = import('devextreme/common/ai-integration').GenerateGridColumnCommandResponse; - export type Prompt = import('devextreme/common/ai-integration').Prompt; - export type RequestParams = import('devextreme/common/ai-integration').RequestParams; - export type RequestParamsData = import('devextreme/common/ai-integration').RequestParamsData; - export type Response = import('devextreme/common/ai-integration').Response; - } - export namespace Charts { - export type AnimationEaseMode = import('devextreme/common/charts').AnimationEaseMode; - export type AnnotationType = import('devextreme/common/charts').AnnotationType; - export type ArgumentAxisHoverMode = import('devextreme/common/charts').ArgumentAxisHoverMode; - export type AxisScaleType = import('devextreme/common/charts').AxisScaleType; - export type ChartsAxisLabelOverlap = import('devextreme/common/charts').ChartsAxisLabelOverlap; - export type ChartsColor = import('devextreme/common/charts').ChartsColor; - export type ChartsDataType = import('devextreme/common/charts').ChartsDataType; - export type ChartsLabelOverlap = import('devextreme/common/charts').ChartsLabelOverlap; - export type DashStyle = import('devextreme/common/charts').DashStyle; - export type DiscreteAxisDivisionMode = import('devextreme/common/charts').DiscreteAxisDivisionMode; - export type Font = import('devextreme/common/charts').Font; - export type GradientColor = import('devextreme/common/charts').GradientColor; - export type HatchDirection = import('devextreme/common/charts').HatchDirection; - export type LabelOverlap = import('devextreme/common/charts').LabelOverlap; - export type LabelPosition = import('devextreme/common/charts').LabelPosition; - export type LegendHoverMode = import('devextreme/common/charts').LegendHoverMode; - export type LegendItem = import('devextreme/common/charts').LegendItem; - export type LegendMarkerState = import('devextreme/common/charts').LegendMarkerState; - export type Palette = import('devextreme/common/charts').Palette; - export type PaletteColorSet = import('devextreme/common/charts').PaletteColorSet; - export type PaletteExtensionMode = import('devextreme/common/charts').PaletteExtensionMode; - export type PointInteractionMode = import('devextreme/common/charts').PointInteractionMode; - export type PointSymbol = import('devextreme/common/charts').PointSymbol; - export const registerGradient = (ChartsModule as any).registerGradient as typeof import('devextreme/common/charts').registerGradient; - export const registerPattern = (ChartsModule as any).registerPattern as typeof import('devextreme/common/charts').registerPattern; - export type RelativePosition = import('devextreme/common/charts').RelativePosition; - export type ScaleBreak = import('devextreme/common/charts').ScaleBreak; - export type ScaleBreakLineStyle = import('devextreme/common/charts').ScaleBreakLineStyle; - export type SeriesHoverMode = import('devextreme/common/charts').SeriesHoverMode; - export type SeriesLabel = import('devextreme/common/charts').SeriesLabel; - export type SeriesPoint = import('devextreme/common/charts').SeriesPoint; - export type SeriesSelectionMode = import('devextreme/common/charts').SeriesSelectionMode; - export type SeriesType = import('devextreme/common/charts').SeriesType; - export type ShiftLabelOverlap = import('devextreme/common/charts').ShiftLabelOverlap; - export type TextOverflow = import('devextreme/common/charts').TextOverflow; - export type Theme = import('devextreme/common/charts').Theme; - export type TimeInterval = import('devextreme/common/charts').TimeInterval; - export type TimeIntervalConfig = import('devextreme/common/charts').TimeIntervalConfig; - export type ValueAxisVisualRangeUpdateMode = import('devextreme/common/charts').ValueAxisVisualRangeUpdateMode; - export type ValueErrorBarDisplayMode = import('devextreme/common/charts').ValueErrorBarDisplayMode; - export type ValueErrorBarType = import('devextreme/common/charts').ValueErrorBarType; - export type VisualRange = import('devextreme/common/charts').VisualRange; - export type VisualRangeUpdateMode = import('devextreme/common/charts').VisualRangeUpdateMode; - export type WordWrap = import('devextreme/common/charts').WordWrap; - export type ZoomPanAction = import('devextreme/common/charts').ZoomPanAction; - } - export namespace Core { - export namespace Animation { - export type AnimationConfig = import('devextreme/common/core/animation').AnimationConfig; - export const animationPresets = (CoreAnimationModule as any).animationPresets as typeof import('devextreme/common/core/animation').animationPresets; - export type AnimationState = import('devextreme/common/core/animation').AnimationState; - export const cancelAnimationFrame = (CoreAnimationModule as any).cancelAnimationFrame as typeof import('devextreme/common/core/animation').cancelAnimationFrame; - export type CollisionResolution = import('devextreme/common/core/animation').CollisionResolution; - export type CollisionResolutionCombination = import('devextreme/common/core/animation').CollisionResolutionCombination; - export const fx = (CoreAnimationModule as any).fx as typeof import('devextreme/common/core/animation').fx; - export type PositionConfig = import('devextreme/common/core/animation').PositionConfig; - export const requestAnimationFrame = (CoreAnimationModule as any).requestAnimationFrame as typeof import('devextreme/common/core/animation').requestAnimationFrame; - export const TransitionExecutor = (CoreAnimationModule as any).TransitionExecutor as typeof import('devextreme/common/core/animation').TransitionExecutor; - export type TransitionExecutor = import('devextreme/common/core/animation').TransitionExecutor; - } - export namespace Environment { - export type Device = import('devextreme/common/core/environment').Device; - export const getTimeZones = (CoreEnvironmentModule as any).getTimeZones as typeof import('devextreme/common/core/environment').getTimeZones; - export const hideTopOverlay = (CoreEnvironmentModule as any).hideTopOverlay as typeof import('devextreme/common/core/environment').hideTopOverlay; - export const initMobileViewport = (CoreEnvironmentModule as any).initMobileViewport as typeof import('devextreme/common/core/environment').initMobileViewport; - export type SchedulerTimeZone = import('devextreme/common/core/environment').SchedulerTimeZone; - } - export namespace Events { - export type AsyncCancelable = import('devextreme/common/core/events').AsyncCancelable; - export type Cancelable = import('devextreme/common/core/events').Cancelable; - export type ChangedOptionInfo = import('devextreme/common/core/events').ChangedOptionInfo; - export type EventInfo = import('devextreme/common/core/events').EventInfo; - export type EventObject = import('devextreme/common/core/events').EventObject; - export type InitializedEventInfo = import('devextreme/common/core/events').InitializedEventInfo; - export type ItemInfo = import('devextreme/common/core/events').ItemInfo; - export type NativeEventInfo = import('devextreme/common/core/events').NativeEventInfo; - export const off = (CoreEventsModule as any).off as typeof import('devextreme/common/core/events').off; - export const on = (CoreEventsModule as any).on as typeof import('devextreme/common/core/events').on; - export const one = (CoreEventsModule as any).one as typeof import('devextreme/common/core/events').one; - export const trigger = (CoreEventsModule as any).trigger as typeof import('devextreme/common/core/events').trigger; - } - export namespace Localization { - export type Format = import('devextreme/common/core/localization').Format; - export const formatDate = (CoreLocalizationModule as any).formatDate as typeof import('devextreme/common/core/localization').formatDate; - export const formatMessage = (CoreLocalizationModule as any).formatMessage as typeof import('devextreme/common/core/localization').formatMessage; - export const formatNumber = (CoreLocalizationModule as any).formatNumber as typeof import('devextreme/common/core/localization').formatNumber; - export const loadMessages = (CoreLocalizationModule as any).loadMessages as typeof import('devextreme/common/core/localization').loadMessages; - export const locale = (CoreLocalizationModule as any).locale as typeof import('devextreme/common/core/localization').locale; - export const parseDate = (CoreLocalizationModule as any).parseDate as typeof import('devextreme/common/core/localization').parseDate; - export const parseNumber = (CoreLocalizationModule as any).parseNumber as typeof import('devextreme/common/core/localization').parseNumber; - } - } - export namespace Data { - export const applyChanges = (DataModule as any).applyChanges as typeof import('devextreme/common/data').applyChanges; - export const ArrayStore = (DataModule as any).ArrayStore as typeof import('devextreme/common/data').ArrayStore; - export type ArrayStore = import('devextreme/common/data').ArrayStore; - export type ArrayStoreOptions = import('devextreme/common/data').ArrayStoreOptions; - export const base64_encode = (DataModule as any).base64_encode as typeof import('devextreme/common/data').base64_encode; - export const compileGetter = (DataModule as any).compileGetter as typeof import('devextreme/common/data').compileGetter; - export const compileSetter = (DataModule as any).compileSetter as typeof import('devextreme/common/data').compileSetter; - export const CustomStore = (DataModule as any).CustomStore as typeof import('devextreme/common/data').CustomStore; - export type CustomStore = import('devextreme/common/data').CustomStore; - export type CustomStoreOptions = import('devextreme/common/data').CustomStoreOptions; - export const DataSource = (DataModule as any).DataSource as typeof import('devextreme/common/data').DataSource; - export type DataSource = import('devextreme/common/data').DataSource; - export type DataSourceOptions = import('devextreme/common/data').DataSourceOptions; - export const EdmLiteral = (DataModule as any).EdmLiteral as typeof import('devextreme/common/data').EdmLiteral; - export type EdmLiteral = import('devextreme/common/data').EdmLiteral; - export const EndpointSelector = (DataModule as any).EndpointSelector as typeof import('devextreme/common/data').EndpointSelector; - export type EndpointSelector = import('devextreme/common/data').EndpointSelector; - export const errorHandler = (DataModule as any).errorHandler as typeof import('devextreme/common/data').errorHandler; - export type FilterDescriptor = import('devextreme/common/data').FilterDescriptor; - export type GroupDescriptor = import('devextreme/common/data').GroupDescriptor; - export type GroupingInterval = import('devextreme/common/data').GroupingInterval; - export type GroupItem = import('devextreme/common/data').GroupItem; - export const isGroupItemsArray = (DataModule as any).isGroupItemsArray as typeof import('devextreme/common/data').isGroupItemsArray; - export const isItemsArray = (DataModule as any).isItemsArray as typeof import('devextreme/common/data').isItemsArray; - export const isLoadResultObject = (DataModule as any).isLoadResultObject as typeof import('devextreme/common/data').isLoadResultObject; - export const keyConverters = (DataModule as any).keyConverters as typeof import('devextreme/common/data').keyConverters; - export type LangParams = import('devextreme/common/data').LangParams; - export type LoadOptions = import('devextreme/common/data').LoadOptions; - export type LoadResult = import('devextreme/common/data').LoadResult; - export type LoadResultObject = import('devextreme/common/data').LoadResultObject; - export const LocalStore = (DataModule as any).LocalStore as typeof import('devextreme/common/data').LocalStore; - export type LocalStore = import('devextreme/common/data').LocalStore; - export type LocalStoreOptions = import('devextreme/common/data').LocalStoreOptions; - export const ODataContext = (DataModule as any).ODataContext as typeof import('devextreme/common/data').ODataContext; - export type ODataContext = import('devextreme/common/data').ODataContext; - export type ODataContextOptions = import('devextreme/common/data').ODataContextOptions; - export const ODataStore = (DataModule as any).ODataStore as typeof import('devextreme/common/data').ODataStore; - export type ODataStore = import('devextreme/common/data').ODataStore; - export type ODataStoreOptions = import('devextreme/common/data').ODataStoreOptions; - export const query = (DataModule as any).query as typeof import('devextreme/common/data').query; - export type Query = import('devextreme/common/data').Query; - export type ResolvedData = import('devextreme/common/data').ResolvedData; - export type SearchOperation = import('devextreme/common/data').SearchOperation; - export type SelectDescriptor = import('devextreme/common/data').SelectDescriptor; - export const setErrorHandler = (DataModule as any).setErrorHandler as typeof import('devextreme/common/data').setErrorHandler; - export type SortDescriptor = import('devextreme/common/data').SortDescriptor; - export type Store = import('devextreme/common/data').Store; - export type StoreOptions = import('devextreme/common/data').StoreOptions; - export type SummaryDescriptor = import('devextreme/common/data').SummaryDescriptor; - } - export namespace Export { - export namespace Excel { - export type CellAddress = import('devextreme/common/export/excel').CellAddress; - export type CellRange = import('devextreme/common/export/excel').CellRange; - export type DataGridCell = import('devextreme/common/export/excel').DataGridCell; - export type DataGridExportOptions = import('devextreme/common/export/excel').DataGridExportOptions; - export const exportDataGrid = (ExportExcelModule as any).exportDataGrid as typeof import('devextreme/common/export/excel').exportDataGrid; - export const exportPivotGrid = (ExportExcelModule as any).exportPivotGrid as typeof import('devextreme/common/export/excel').exportPivotGrid; - export type PivotGridCell = import('devextreme/common/export/excel').PivotGridCell; - export type PivotGridExportOptions = import('devextreme/common/export/excel').PivotGridExportOptions; - } - export namespace Pdf { - export type Cell = import('devextreme/common/export/pdf').Cell; - export type DataGridCell = import('devextreme/common/export/pdf').DataGridCell; - export type DataGridExportOptions = import('devextreme/common/export/pdf').DataGridExportOptions; - export const exportDataGrid = (ExportPdfModule as any).exportDataGrid as typeof import('devextreme/common/export/pdf').exportDataGrid; - export const exportGantt = (ExportPdfModule as any).exportGantt as typeof import('devextreme/common/export/pdf').exportGantt; - export type GanttExportFont = import('devextreme/common/export/pdf').GanttExportFont; - export type GanttExportOptions = import('devextreme/common/export/pdf').GanttExportOptions; - } - } - export function Grids(): void {} -} +export * as Common from './common/index'; diff --git a/packages/devextreme-angular/src/ui/all.ts b/packages/devextreme-angular/src/ui/all.ts index 4e9def085bff..7cc6df9910ad 100644 --- a/packages/devextreme-angular/src/ui/all.ts +++ b/packages/devextreme-angular/src/ui/all.ts @@ -51,7 +51,6 @@ import { DxProgressBarModule } from 'devextreme-angular/ui/progress-bar'; import { DxRadioGroupModule } from 'devextreme-angular/ui/radio-group'; import { DxRangeSelectorModule } from 'devextreme-angular/ui/range-selector'; import { DxRangeSliderModule } from 'devextreme-angular/ui/range-slider'; -import { DxRecurrenceEditorModule } from 'devextreme-angular/ui/recurrence-editor'; import { DxResizableModule } from 'devextreme-angular/ui/resizable'; import { DxResponsiveBoxModule } from 'devextreme-angular/ui/responsive-box'; import { DxSankeyModule } from 'devextreme-angular/ui/sankey'; @@ -138,7 +137,6 @@ import { DxTemplateModule } from 'devextreme-angular/core'; DxRadioGroupModule, DxRangeSelectorModule, DxRangeSliderModule, - DxRecurrenceEditorModule, DxResizableModule, DxResponsiveBoxModule, DxSankeyModule, @@ -224,7 +222,6 @@ import { DxTemplateModule } from 'devextreme-angular/core'; DxRadioGroupModule, DxRangeSelectorModule, DxRangeSliderModule, - DxRecurrenceEditorModule, DxResizableModule, DxResponsiveBoxModule, DxSankeyModule, diff --git a/packages/devextreme-angular/src/ui/recurrence-editor/index.ts b/packages/devextreme-angular/src/ui/recurrence-editor/index.ts deleted file mode 100644 index a5d1d4bc1cfa..000000000000 --- a/packages/devextreme-angular/src/ui/recurrence-editor/index.ts +++ /dev/null @@ -1,666 +0,0 @@ -/* tslint:disable:max-line-length */ - - -import { - TransferState, - Component, - NgModule, - ElementRef, - NgZone, - PLATFORM_ID, - Inject, - - Input, - Output, - OnDestroy, - EventEmitter, - forwardRef, - HostListener, - OnChanges, - DoCheck, - SimpleChanges, -} from '@angular/core'; - - -import type { ContentReadyEvent, DisposingEvent, InitializedEvent, OptionChangedEvent, ValueChangedEvent } from 'devextreme/ui/recurrence_editor'; -import type { ValidationMessageMode, Position, ValidationStatus } from 'devextreme/common'; - -import DxRecurrenceEditor from 'devextreme/ui/recurrence_editor'; - -import { - ControlValueAccessor, - NG_VALUE_ACCESSOR -} from '@angular/forms'; - -import { - DxComponent, - DxTemplateHost, - DxIntegrationModule, - DxTemplateModule, - NestedOptionHost, - IterableDifferHelper, - WatcherHelper, -} from 'devextreme-angular/core'; - - - - - -const CUSTOM_VALUE_ACCESSOR_PROVIDER = { - provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => DxRecurrenceEditorComponent), - multi: true -}; -/** - * [descr:dxRecurrenceEditor] - - */ -@Component({ - selector: 'dx-recurrence-editor', - standalone: true, - template: '', - host: { ngSkipHydration: 'true' }, - imports: [ DxIntegrationModule ], - providers: [ - DxTemplateHost, - WatcherHelper, - CUSTOM_VALUE_ACCESSOR_PROVIDER, - NestedOptionHost, - IterableDifferHelper - ] -}) -export class DxRecurrenceEditorComponent extends DxComponent implements OnDestroy, ControlValueAccessor, OnChanges, DoCheck { - - instance: DxRecurrenceEditor = null; - - /** - * [descr:WidgetOptions.accessKey] - - */ - @Input() - get accessKey(): string | undefined { - return this._getOption('accessKey'); - } - set accessKey(value: string | undefined) { - this._setOption('accessKey', value); - } - - - /** - * [descr:WidgetOptions.activeStateEnabled] - - */ - @Input() - get activeStateEnabled(): boolean { - return this._getOption('activeStateEnabled'); - } - set activeStateEnabled(value: boolean) { - this._setOption('activeStateEnabled', value); - } - - - /** - * [descr:WidgetOptions.disabled] - - */ - @Input() - get disabled(): boolean { - return this._getOption('disabled'); - } - set disabled(value: boolean) { - this._setOption('disabled', value); - } - - - /** - * [descr:DOMComponentOptions.elementAttr] - - */ - @Input() - get elementAttr(): Record { - return this._getOption('elementAttr'); - } - set elementAttr(value: Record) { - this._setOption('elementAttr', value); - } - - - /** - * [descr:WidgetOptions.focusStateEnabled] - - */ - @Input() - get focusStateEnabled(): boolean { - return this._getOption('focusStateEnabled'); - } - set focusStateEnabled(value: boolean) { - this._setOption('focusStateEnabled', value); - } - - - /** - * [descr:DOMComponentOptions.height] - - */ - @Input() - get height(): number | string | undefined { - return this._getOption('height'); - } - set height(value: number | string | undefined) { - this._setOption('height', value); - } - - - /** - * [descr:WidgetOptions.hint] - - */ - @Input() - get hint(): string | undefined { - return this._getOption('hint'); - } - set hint(value: string | undefined) { - this._setOption('hint', value); - } - - - /** - * [descr:WidgetOptions.hoverStateEnabled] - - */ - @Input() - get hoverStateEnabled(): boolean { - return this._getOption('hoverStateEnabled'); - } - set hoverStateEnabled(value: boolean) { - this._setOption('hoverStateEnabled', value); - } - - - /** - * [descr:EditorOptions.isDirty] - - */ - @Input() - get isDirty(): boolean { - return this._getOption('isDirty'); - } - set isDirty(value: boolean) { - this._setOption('isDirty', value); - } - - - /** - * [descr:EditorOptions.isValid] - - */ - @Input() - get isValid(): boolean { - return this._getOption('isValid'); - } - set isValid(value: boolean) { - this._setOption('isValid', value); - } - - - /** - * [descr:EditorOptions.readOnly] - - */ - @Input() - get readOnly(): boolean { - return this._getOption('readOnly'); - } - set readOnly(value: boolean) { - this._setOption('readOnly', value); - } - - - /** - * [descr:DOMComponentOptions.rtlEnabled] - - */ - @Input() - get rtlEnabled(): boolean { - return this._getOption('rtlEnabled'); - } - set rtlEnabled(value: boolean) { - this._setOption('rtlEnabled', value); - } - - - /** - * [descr:WidgetOptions.tabIndex] - - */ - @Input() - get tabIndex(): number { - return this._getOption('tabIndex'); - } - set tabIndex(value: number) { - this._setOption('tabIndex', value); - } - - - /** - * [descr:EditorOptions.validationError] - - */ - @Input() - get validationError(): any { - return this._getOption('validationError'); - } - set validationError(value: any) { - this._setOption('validationError', value); - } - - - /** - * [descr:EditorOptions.validationErrors] - - */ - @Input() - get validationErrors(): Array { - return this._getOption('validationErrors'); - } - set validationErrors(value: Array) { - this._setOption('validationErrors', value); - } - - - /** - * [descr:EditorOptions.validationMessageMode] - - */ - @Input() - get validationMessageMode(): ValidationMessageMode { - return this._getOption('validationMessageMode'); - } - set validationMessageMode(value: ValidationMessageMode) { - this._setOption('validationMessageMode', value); - } - - - /** - * [descr:EditorOptions.validationMessagePosition] - - */ - @Input() - get validationMessagePosition(): Position { - return this._getOption('validationMessagePosition'); - } - set validationMessagePosition(value: Position) { - this._setOption('validationMessagePosition', value); - } - - - /** - * [descr:EditorOptions.validationStatus] - - */ - @Input() - get validationStatus(): ValidationStatus { - return this._getOption('validationStatus'); - } - set validationStatus(value: ValidationStatus) { - this._setOption('validationStatus', value); - } - - - /** - * [descr:dxRecurrenceEditorOptions.value] - - */ - @Input() - get value(): string { - return this._getOption('value'); - } - set value(value: string) { - this._setOption('value', value); - } - - - /** - * [descr:WidgetOptions.visible] - - */ - @Input() - get visible(): boolean { - return this._getOption('visible'); - } - set visible(value: boolean) { - this._setOption('visible', value); - } - - - /** - * [descr:DOMComponentOptions.width] - - */ - @Input() - get width(): number | string | undefined { - return this._getOption('width'); - } - set width(value: number | string | undefined) { - this._setOption('width', value); - } - - /** - - * [descr:dxRecurrenceEditorOptions.onContentReady] - - - */ - @Output() onContentReady: EventEmitter; - - /** - - * [descr:dxRecurrenceEditorOptions.onDisposing] - - - */ - @Output() onDisposing: EventEmitter; - - /** - - * [descr:dxRecurrenceEditorOptions.onInitialized] - - - */ - @Output() onInitialized: EventEmitter; - - /** - - * [descr:dxRecurrenceEditorOptions.onOptionChanged] - - - */ - @Output() onOptionChanged: EventEmitter; - - /** - - * [descr:dxRecurrenceEditorOptions.onValueChanged] - - - */ - @Output() onValueChanged: EventEmitter; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() accessKeyChange: EventEmitter; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() activeStateEnabledChange: EventEmitter; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() disabledChange: EventEmitter; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() elementAttrChange: EventEmitter>; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() focusStateEnabledChange: EventEmitter; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() heightChange: EventEmitter; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() hintChange: EventEmitter; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() hoverStateEnabledChange: EventEmitter; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() isDirtyChange: EventEmitter; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() isValidChange: EventEmitter; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() readOnlyChange: EventEmitter; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() rtlEnabledChange: EventEmitter; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() tabIndexChange: EventEmitter; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() validationErrorChange: EventEmitter; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() validationErrorsChange: EventEmitter>; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() validationMessageModeChange: EventEmitter; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() validationMessagePositionChange: EventEmitter; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() validationStatusChange: EventEmitter; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() valueChange: EventEmitter; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() visibleChange: EventEmitter; - - /** - - * This member supports the internal infrastructure and is not intended to be used directly from your code. - - */ - @Output() widthChange: EventEmitter; - - /** - - * [descr:undefined] - - - */ - @Output() onBlur: EventEmitter; - - - @HostListener('valueChange', ['$event']) change(_) { } - @HostListener('onBlur', ['$event']) touched = (_) => {}; - - - constructor(elementRef: ElementRef, ngZone: NgZone, templateHost: DxTemplateHost, - private _watcherHelper: WatcherHelper, - private _idh: IterableDifferHelper, - optionHost: NestedOptionHost, - transferState: TransferState, - @Inject(PLATFORM_ID) platformId: any) { - - super(elementRef, ngZone, templateHost, _watcherHelper, transferState, platformId); - - this._createEventEmitters([ - { subscribe: 'contentReady', emit: 'onContentReady' }, - { subscribe: 'disposing', emit: 'onDisposing' }, - { subscribe: 'initialized', emit: 'onInitialized' }, - { subscribe: 'optionChanged', emit: 'onOptionChanged' }, - { subscribe: 'valueChanged', emit: 'onValueChanged' }, - { emit: 'accessKeyChange' }, - { emit: 'activeStateEnabledChange' }, - { emit: 'disabledChange' }, - { emit: 'elementAttrChange' }, - { emit: 'focusStateEnabledChange' }, - { emit: 'heightChange' }, - { emit: 'hintChange' }, - { emit: 'hoverStateEnabledChange' }, - { emit: 'isDirtyChange' }, - { emit: 'isValidChange' }, - { emit: 'readOnlyChange' }, - { emit: 'rtlEnabledChange' }, - { emit: 'tabIndexChange' }, - { emit: 'validationErrorChange' }, - { emit: 'validationErrorsChange' }, - { emit: 'validationMessageModeChange' }, - { emit: 'validationMessagePositionChange' }, - { emit: 'validationStatusChange' }, - { emit: 'valueChange' }, - { emit: 'visibleChange' }, - { emit: 'widthChange' }, - { emit: 'onBlur' } - ]); - - this._idh.setHost(this); - optionHost.setHost(this); - } - - protected _createInstance(element, options) { - - return new DxRecurrenceEditor(element, options); - } - - - writeValue(value: any): void { - this.eventHelper.lockedValueChangeEvent = true; - this.value = value; - this.eventHelper.lockedValueChangeEvent = false; - } - - setDisabledState(isDisabled: boolean): void { - this.disabled = isDisabled; - } - - registerOnChange(fn: (_: any) => void): void { this.change = fn; } - registerOnTouched(fn: () => void): void { this.touched = fn; } - - _createWidget(element: any) { - super._createWidget(element); - this.instance.on('focusOut', (e) => { - this.eventHelper.fireNgEvent('onBlur', [e]); - }); - } - - ngOnDestroy() { - this._destroyWidget(); - } - - ngOnChanges(changes: SimpleChanges) { - super.ngOnChanges(changes); - this.setupChanges('validationErrors', changes); - } - - setupChanges(prop: string, changes: SimpleChanges) { - if (!(prop in this._optionsToUpdate)) { - this._idh.setup(prop, changes); - } - } - - ngDoCheck() { - this._idh.doCheck('validationErrors'); - this._watcherHelper.checkWatchers(); - super.ngDoCheck(); - super.clearChangedOptions(); - } - - _setOption(name: string, value: any) { - let isSetup = this._idh.setupSingle(name, value); - let isChanged = this._idh.getChanges(name, value) !== null; - - if (isSetup || isChanged) { - super._setOption(name, value); - } - } -} - -@NgModule({ - imports: [ - DxRecurrenceEditorComponent, - DxIntegrationModule, - DxTemplateModule - ], - exports: [ - DxRecurrenceEditorComponent, - DxTemplateModule - ] -}) -export class DxRecurrenceEditorModule { } - - -import type * as DxRecurrenceEditorTypes from "devextreme/ui/recurrence_editor_types"; -export { DxRecurrenceEditorTypes }; - - diff --git a/packages/devextreme-angular/src/ui/recurrence-editor/ng-package.json b/packages/devextreme-angular/src/ui/recurrence-editor/ng-package.json deleted file mode 100644 index 3360c83b3395..000000000000 --- a/packages/devextreme-angular/src/ui/recurrence-editor/ng-package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "lib": { - "entryFile": "index.ts" - } -} \ No newline at end of file diff --git a/packages/devextreme-react/src/index.ts b/packages/devextreme-react/src/index.ts index a80e1dfff0bf..b81c3370290a 100644 --- a/packages/devextreme-react/src/index.ts +++ b/packages/devextreme-react/src/index.ts @@ -51,7 +51,6 @@ export { ProgressBar } from "./progress-bar"; export { RadioGroup } from "./radio-group"; export { RangeSelector } from "./range-selector"; export { RangeSlider } from "./range-slider"; -export { RecurrenceEditor } from "./recurrence-editor"; export { Resizable } from "./resizable"; export { ResponsiveBox } from "./responsive-box"; export { Sankey } from "./sankey"; diff --git a/packages/devextreme-react/src/recurrence-editor.ts b/packages/devextreme-react/src/recurrence-editor.ts deleted file mode 100644 index 79686f8fe9c2..000000000000 --- a/packages/devextreme-react/src/recurrence-editor.ts +++ /dev/null @@ -1,73 +0,0 @@ -"use client" -import * as React from "react"; -import { memo, forwardRef, useImperativeHandle, useRef, useMemo, ForwardedRef, Ref, ReactElement } from "react"; -import dxRecurrenceEditor, { - Properties -} from "devextreme/ui/recurrence_editor"; - -import { Component as BaseComponent, IHtmlOptions, ComponentRef } from "./core/component"; - -import type { ContentReadyEvent, DisposingEvent, InitializedEvent, ValueChangedEvent } from "devextreme/ui/recurrence_editor"; - -type ReplaceFieldTypes = { - [P in keyof TSource]: P extends keyof TReplacement ? TReplacement[P] : TSource[P]; -} - -type IRecurrenceEditorOptionsNarrowedEvents = { - onContentReady?: ((e: ContentReadyEvent) => void); - onDisposing?: ((e: DisposingEvent) => void); - onInitialized?: ((e: InitializedEvent) => void); - onValueChanged?: ((e: ValueChangedEvent) => void); -} - -type IRecurrenceEditorOptions = React.PropsWithChildren & IHtmlOptions & { - defaultValue?: string; - onValueChange?: (value: string) => void; -}> - -interface RecurrenceEditorRef { - instance: () => dxRecurrenceEditor; -} - -const RecurrenceEditor = memo( - forwardRef( - (props: React.PropsWithChildren, ref: ForwardedRef) => { - const baseRef = useRef(null); - - useImperativeHandle(ref, () => ( - { - instance() { - return baseRef.current?.getInstance(); - } - } - ), []); - - const subscribableOptions = useMemo(() => (["value"]), []); - const independentEvents = useMemo(() => (["onContentReady","onDisposing","onInitialized","onValueChanged"]), []); - - const defaults = useMemo(() => ({ - defaultValue: "value", - }), []); - - return ( - React.createElement(BaseComponent>, { - WidgetClass: dxRecurrenceEditor, - ref: baseRef, - subscribableOptions, - independentEvents, - defaults, - ...props, - }) - ); - }, - ), -) as (props: React.PropsWithChildren & { ref?: Ref }) => ReactElement | null; -export default RecurrenceEditor; -export { - RecurrenceEditor, - IRecurrenceEditorOptions, - RecurrenceEditorRef -}; -import type * as RecurrenceEditorTypes from 'devextreme/ui/recurrence_editor_types'; -export { RecurrenceEditorTypes }; - diff --git a/packages/devextreme-vue/src/index.ts b/packages/devextreme-vue/src/index.ts index 3a0395e25650..73e2983d1fa6 100644 --- a/packages/devextreme-vue/src/index.ts +++ b/packages/devextreme-vue/src/index.ts @@ -50,7 +50,6 @@ export { DxProgressBar } from "./progress-bar"; export { DxRadioGroup } from "./radio-group"; export { DxRangeSelector } from "./range-selector"; export { DxRangeSlider } from "./range-slider"; -export { DxRecurrenceEditor } from "./recurrence-editor"; export { DxResizable } from "./resizable"; export { DxResponsiveBox } from "./responsive-box"; export { DxSankey } from "./sankey"; diff --git a/packages/devextreme-vue/src/recurrence-editor.ts b/packages/devextreme-vue/src/recurrence-editor.ts deleted file mode 100644 index 89158d3068f2..000000000000 --- a/packages/devextreme-vue/src/recurrence-editor.ts +++ /dev/null @@ -1,131 +0,0 @@ -import { PropType } from "vue"; -import { defineComponent } from "vue"; -import { prepareComponentConfig } from "./core/index"; -import RecurrenceEditor, { Properties } from "devextreme/ui/recurrence_editor"; -import { - ContentReadyEvent, - DisposingEvent, - InitializedEvent, - OptionChangedEvent, - ValueChangedEvent, -} from "devextreme/ui/recurrence_editor"; -import { - ValidationMessageMode, - Position, - ValidationStatus, -} from "devextreme/common"; - -type AccessibleOptions = Pick; - -interface DxRecurrenceEditor extends AccessibleOptions { - readonly instance?: RecurrenceEditor; -} - -const componentConfig = { - props: { - accessKey: String, - activeStateEnabled: Boolean, - disabled: Boolean, - elementAttr: Object as PropType>, - focusStateEnabled: Boolean, - height: [Number, String], - hint: String, - hoverStateEnabled: Boolean, - isDirty: Boolean, - isValid: Boolean, - onContentReady: Function as PropType<((e: ContentReadyEvent) => void)>, - onDisposing: Function as PropType<((e: DisposingEvent) => void)>, - onInitialized: Function as PropType<((e: InitializedEvent) => void)>, - onOptionChanged: Function as PropType<((e: OptionChangedEvent) => void)>, - onValueChanged: Function as PropType<((e: ValueChangedEvent) => void)>, - readOnly: Boolean, - rtlEnabled: Boolean, - tabIndex: Number, - validationError: {}, - validationErrors: Array as PropType>, - validationMessageMode: String as PropType, - validationMessagePosition: String as PropType, - validationStatus: String as PropType, - value: String, - visible: Boolean, - width: [Number, String] - }, - emits: { - "update:isActive": null, - "update:hoveredElement": null, - "update:accessKey": null, - "update:activeStateEnabled": null, - "update:disabled": null, - "update:elementAttr": null, - "update:focusStateEnabled": null, - "update:height": null, - "update:hint": null, - "update:hoverStateEnabled": null, - "update:isDirty": null, - "update:isValid": null, - "update:onContentReady": null, - "update:onDisposing": null, - "update:onInitialized": null, - "update:onOptionChanged": null, - "update:onValueChanged": null, - "update:readOnly": null, - "update:rtlEnabled": null, - "update:tabIndex": null, - "update:validationError": null, - "update:validationErrors": null, - "update:validationMessageMode": null, - "update:validationMessagePosition": null, - "update:validationStatus": null, - "update:value": null, - "update:visible": null, - "update:width": null, - }, - model: { prop: "value", event: "update:value" }, - computed: { - instance(): RecurrenceEditor { - return (this as any).$_instance; - } - }, - beforeCreate() { - (this as any).$_WidgetClass = RecurrenceEditor; - (this as any).$_hasAsyncTemplate = true; - } -}; - -prepareComponentConfig(componentConfig); - -const DxRecurrenceEditor = defineComponent(componentConfig); - -export default DxRecurrenceEditor; -export { - DxRecurrenceEditor -}; -import type * as DxRecurrenceEditorTypes from "devextreme/ui/recurrence_editor_types"; -export { DxRecurrenceEditorTypes }; From c4b9add7274eeabea267a7c416f76dcb4a97541b Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 16:21:22 -0300 Subject: [PATCH 18/32] Scheduler - Remove dxRecurrenceEditor from modules metadata --- packages/devextreme/build/gulp/modules_metadata.json | 7 ------- 1 file changed, 7 deletions(-) diff --git a/packages/devextreme/build/gulp/modules_metadata.json b/packages/devextreme/build/gulp/modules_metadata.json index 6ec06d899a89..622af4323f25 100644 --- a/packages/devextreme/build/gulp/modules_metadata.json +++ b/packages/devextreme/build/gulp/modules_metadata.json @@ -481,13 +481,6 @@ "default": { "path": "ui.dxResizable", "isWidget": true } } }, - { - "name": "ui/recurrence_editor", - "isInternal": true, - "exports": { - "default": { "path": "ui.dxRecurrenceEditor", "isWidget": true } - } - }, { "name": "ui/responsive_box", "exports": { From 33436c57f3af49a5d7ce38c4eca811129115bd7b Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 16:29:49 -0300 Subject: [PATCH 19/32] Scheduler - Add radio_group side-effect import after m_recurrence_editor removal --- .../js/__internal/scheduler/appointment_popup/m_form.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/devextreme/js/__internal/scheduler/appointment_popup/m_form.ts b/packages/devextreme/js/__internal/scheduler/appointment_popup/m_form.ts index f5820a5f440e..1991cc363e72 100644 --- a/packages/devextreme/js/__internal/scheduler/appointment_popup/m_form.ts +++ b/packages/devextreme/js/__internal/scheduler/appointment_popup/m_form.ts @@ -1,3 +1,4 @@ +import '@js/ui/radio_group'; import '@js/ui/text_area'; import '@js/ui/tag_box'; import '@js/ui/switch'; From a526f17c75bd98d91cea24a07767a64e5a1dfa37 Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 17:29:16 -0300 Subject: [PATCH 20/32] Scheduler - Trigger CI rerun From eb7662dd83a78ffe5e391e6566996b96f766d64c Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 17:36:04 -0300 Subject: [PATCH 21/32] Scheduler - Fix angular index.ts import order to match generator --- packages/devextreme-angular/src/index.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/devextreme-angular/src/index.ts b/packages/devextreme-angular/src/index.ts index a796f39ee9cd..eca4536e2dde 100644 --- a/packages/devextreme-angular/src/index.ts +++ b/packages/devextreme-angular/src/index.ts @@ -1,10 +1,8 @@ +export * from 'devextreme-angular/core'; +export * from './ui/all'; import './common'; import './common/grids'; import './common/charts'; - -export * from 'devextreme-angular/core'; -export * from './ui/all'; - export { DxAccordionComponent, DxAccordionModule } from 'devextreme-angular/ui/accordion'; export { DxActionSheetComponent, DxActionSheetModule } from 'devextreme-angular/ui/action-sheet'; export { DxAutocompleteComponent, DxAutocompleteModule } from 'devextreme-angular/ui/autocomplete'; From 4ebd8f7ea3fd421ce498ddb6e8368c0249539cae Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 17:41:41 -0300 Subject: [PATCH 22/32] Scheduler - Revert angular index.ts to generator output format --- packages/devextreme-angular/src/index.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/devextreme-angular/src/index.ts b/packages/devextreme-angular/src/index.ts index eca4536e2dde..a796f39ee9cd 100644 --- a/packages/devextreme-angular/src/index.ts +++ b/packages/devextreme-angular/src/index.ts @@ -1,8 +1,10 @@ -export * from 'devextreme-angular/core'; -export * from './ui/all'; import './common'; import './common/grids'; import './common/charts'; + +export * from 'devextreme-angular/core'; +export * from './ui/all'; + export { DxAccordionComponent, DxAccordionModule } from 'devextreme-angular/ui/accordion'; export { DxActionSheetComponent, DxActionSheetModule } from 'devextreme-angular/ui/action-sheet'; export { DxAutocompleteComponent, DxAutocompleteModule } from 'devextreme-angular/ui/autocomplete'; From bd3ee99f82697ed164fe859201262e4732f77548 Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 17:49:37 -0300 Subject: [PATCH 23/32] Scheduler - Trigger CI with skip-cache From 382982baa66d85884a19d20a92721b6fd2e00b05 Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 17:57:38 -0300 Subject: [PATCH 24/32] Scheduler - Match angular index.ts with CI generator format --- packages/devextreme-angular/src/index.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/devextreme-angular/src/index.ts b/packages/devextreme-angular/src/index.ts index a796f39ee9cd..eca4536e2dde 100644 --- a/packages/devextreme-angular/src/index.ts +++ b/packages/devextreme-angular/src/index.ts @@ -1,10 +1,8 @@ +export * from 'devextreme-angular/core'; +export * from './ui/all'; import './common'; import './common/grids'; import './common/charts'; - -export * from 'devextreme-angular/core'; -export * from './ui/all'; - export { DxAccordionComponent, DxAccordionModule } from 'devextreme-angular/ui/accordion'; export { DxActionSheetComponent, DxActionSheetModule } from 'devextreme-angular/ui/action-sheet'; export { DxAutocompleteComponent, DxAutocompleteModule } from 'devextreme-angular/ui/autocomplete'; From f1ba54fa58c4c4b114aa542a9c2b6be74ab8587e Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 17:58:33 -0300 Subject: [PATCH 25/32] Scheduler - Regenerate angular index.ts with Node 20 --- packages/devextreme-angular/src/index.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/devextreme-angular/src/index.ts b/packages/devextreme-angular/src/index.ts index eca4536e2dde..a796f39ee9cd 100644 --- a/packages/devextreme-angular/src/index.ts +++ b/packages/devextreme-angular/src/index.ts @@ -1,8 +1,10 @@ -export * from 'devextreme-angular/core'; -export * from './ui/all'; import './common'; import './common/grids'; import './common/charts'; + +export * from 'devextreme-angular/core'; +export * from './ui/all'; + export { DxAccordionComponent, DxAccordionModule } from 'devextreme-angular/ui/accordion'; export { DxActionSheetComponent, DxActionSheetModule } from 'devextreme-angular/ui/action-sheet'; export { DxAutocompleteComponent, DxAutocompleteModule } from 'devextreme-angular/ui/autocomplete'; From faa02712b3835042d5a45d2d3334d4f4b0564c7e Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 18:02:58 -0300 Subject: [PATCH 26/32] Scheduler - Trigger CI without skip-cache From 1546dab144836e45ec58e8dad2ca0ffd8ef45970 Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 18:07:20 -0300 Subject: [PATCH 27/32] Scheduler - Trigger CI with skip-cache to bust stale devextreme regenerate cache From 938890d48ada308011ea628594da4e42ed08dc4c Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 18:11:38 -0300 Subject: [PATCH 28/32] Scheduler - DEBUG: Show git diff in regenerate step --- packages/devextreme-angular/project.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/devextreme-angular/project.json b/packages/devextreme-angular/project.json index 975a6e471e9c..3fbbaf21d354 100644 --- a/packages/devextreme-angular/project.json +++ b/packages/devextreme-angular/project.json @@ -173,7 +173,8 @@ "options": { "commands": [ "pnpm --workspace-root nx clean:src-ui devextreme-angular", - "pnpm --workspace-root nx generate-components devextreme-angular" + "pnpm --workspace-root nx generate-components devextreme-angular", + "git diff -- packages/devextreme-angular/src/index.ts || true" ], "parallel": false }, From c16cc046836a46840169f12200012901ba0ffdcc Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 18:16:57 -0300 Subject: [PATCH 29/32] Scheduler - DEBUG: Print first 10 lines of generated index.ts --- packages/devextreme-angular/project.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/devextreme-angular/project.json b/packages/devextreme-angular/project.json index 3fbbaf21d354..1e2927137f8e 100644 --- a/packages/devextreme-angular/project.json +++ b/packages/devextreme-angular/project.json @@ -174,7 +174,7 @@ "commands": [ "pnpm --workspace-root nx clean:src-ui devextreme-angular", "pnpm --workspace-root nx generate-components devextreme-angular", - "git diff -- packages/devextreme-angular/src/index.ts || true" + "head -10 packages/devextreme-angular/src/index.ts" ], "parallel": false }, From 669f85d85b71acd2df0c348a70e5dde4bbe176d0 Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 18:21:59 -0300 Subject: [PATCH 30/32] Scheduler - DEBUG: Print index.ts diff after regenerate-all --- package.json | 2 +- packages/devextreme-angular/project.json | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 58c4ea6b8973..64dbfa36066f 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "react-storybook:start": "nx start devextreme-react-storybook", "tools": "dx-tools", "vue:regenerate": "nx regenerate devextreme-vue", - "regenerate-all": "nx run-many -t regenerate", + "regenerate-all": "nx run-many -t regenerate && git diff -- packages/devextreme-angular/src/index.ts", "lint-staged": "lint-staged", "prepare": "husky install", "all:set-timestamp-version": "ts-node tools/scripts/set-timestamp-version.ts", diff --git a/packages/devextreme-angular/project.json b/packages/devextreme-angular/project.json index 1e2927137f8e..975a6e471e9c 100644 --- a/packages/devextreme-angular/project.json +++ b/packages/devextreme-angular/project.json @@ -173,8 +173,7 @@ "options": { "commands": [ "pnpm --workspace-root nx clean:src-ui devextreme-angular", - "pnpm --workspace-root nx generate-components devextreme-angular", - "head -10 packages/devextreme-angular/src/index.ts" + "pnpm --workspace-root nx generate-components devextreme-angular" ], "parallel": false }, From b0c6f5f2ad027baf4ff13a6abb581a997d4c4719 Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 18:29:52 -0300 Subject: [PATCH 31/32] Scheduler - Regenerate angular wrappers with rebuilt nx-infra-plugin --- package.json | 2 +- packages/devextreme-angular/src/index.ts | 266 ++++++++++++++++++++++- 2 files changed, 266 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 64dbfa36066f..58c4ea6b8973 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "react-storybook:start": "nx start devextreme-react-storybook", "tools": "dx-tools", "vue:regenerate": "nx regenerate devextreme-vue", - "regenerate-all": "nx run-many -t regenerate && git diff -- packages/devextreme-angular/src/index.ts", + "regenerate-all": "nx run-many -t regenerate", "lint-staged": "lint-staged", "prepare": "husky install", "all:set-timestamp-version": "ts-node tools/scripts/set-timestamp-version.ts", diff --git a/packages/devextreme-angular/src/index.ts b/packages/devextreme-angular/src/index.ts index a796f39ee9cd..e197b8d0fee0 100644 --- a/packages/devextreme-angular/src/index.ts +++ b/packages/devextreme-angular/src/index.ts @@ -1,6 +1,16 @@ import './common'; import './common/grids'; import './common/charts'; +import * as CommonModule from './common/index'; +import * as AiIntegrationModule from './common/ai-integration'; +import * as ChartsModule from './common/charts'; +import * as CoreAnimationModule from './common/core/animation'; +import * as CoreEnvironmentModule from './common/core/environment'; +import * as CoreEventsModule from './common/core/events'; +import * as CoreLocalizationModule from './common/core/localization'; +import * as DataModule from './common/data'; +import * as ExportExcelModule from './common/export/excel'; +import * as ExportPdfModule from './common/export/pdf'; export * from 'devextreme-angular/core'; export * from './ui/all'; @@ -87,4 +97,258 @@ export { DxValidationGroupComponent, DxValidationGroupModule } from 'devextreme- export { DxValidationSummaryComponent, DxValidationSummaryModule } from 'devextreme-angular/ui/validation-summary'; export { DxValidatorComponent, DxValidatorModule } from 'devextreme-angular/ui/validator'; export { DxVectorMapComponent, DxVectorMapModule } from 'devextreme-angular/ui/vector-map'; -export * as Common from './common/index'; +export namespace Common { + export type ApplyValueMode = import('devextreme/common').ApplyValueMode; + export type AsyncRule = import('devextreme/common').AsyncRule; + export type ButtonStyle = import('devextreme/common').ButtonStyle; + export type ButtonType = import('devextreme/common').ButtonType; + export type CompareRule = import('devextreme/common').CompareRule; + export type ComparisonOperator = import('devextreme/common').ComparisonOperator; + export const config = (CommonModule as any).config as typeof import('devextreme/common').config; + export type CustomRule = import('devextreme/common').CustomRule; + export type DataStructure = import('devextreme/common').DataStructure; + export type DataType = import('devextreme/common').DataType; + export type DateLike = import('devextreme/common').DateLike; + export type DefaultOptionsRule = import('devextreme/common').DefaultOptionsRule; + export type Direction = import('devextreme/common').Direction; + export type DisplayMode = import('devextreme/common').DisplayMode; + export type DragDirection = import('devextreme/common').DragDirection; + export type Draggable = import('devextreme/common').Draggable; + export type DragHighlight = import('devextreme/common').DragHighlight; + export type EditorStyle = import('devextreme/common').EditorStyle; + export type EmailRule = import('devextreme/common').EmailRule; + export type ExportFormat = import('devextreme/common').ExportFormat; + export type FieldChooserLayout = import('devextreme/common').FieldChooserLayout; + export type FirstDayOfWeek = import('devextreme/common').FirstDayOfWeek; + export type FloatingActionButtonDirection = import('devextreme/common').FloatingActionButtonDirection; + export type Format = import('devextreme/common').Format; + export type GlobalConfig = import('devextreme/common').GlobalConfig; + export const Guid = (CommonModule as any).Guid as typeof import('devextreme/common').Guid; + export type Guid = import('devextreme/common').Guid; + export type HorizontalAlignment = import('devextreme/common').HorizontalAlignment; + export type HorizontalEdge = import('devextreme/common').HorizontalEdge; + export type LabelMode = import('devextreme/common').LabelMode; + export type MaskMode = import('devextreme/common').MaskMode; + export type Mode = import('devextreme/common').Mode; + export type NumericRule = import('devextreme/common').NumericRule; + export type Orientation = import('devextreme/common').Orientation; + export type PageLoadMode = import('devextreme/common').PageLoadMode; + export type PageOrientation = import('devextreme/common').PageOrientation; + export type PatternRule = import('devextreme/common').PatternRule; + export type Position = import('devextreme/common').Position; + export type PositionAlignment = import('devextreme/common').PositionAlignment; + export type RangeRule = import('devextreme/common').RangeRule; + export type RequiredRule = import('devextreme/common').RequiredRule; + export type Scrollable = import('devextreme/common').Scrollable; + export type ScrollbarMode = import('devextreme/common').ScrollbarMode; + export type ScrollDirection = import('devextreme/common').ScrollDirection; + export type ScrollMode = import('devextreme/common').ScrollMode; + export type SearchMode = import('devextreme/common').SearchMode; + export type SelectAllMode = import('devextreme/common').SelectAllMode; + export const setTemplateEngine = (CommonModule as any).setTemplateEngine as typeof import('devextreme/common').setTemplateEngine; + export type SimplifiedSearchMode = import('devextreme/common').SimplifiedSearchMode; + export type SingleMultipleAllOrNone = import('devextreme/common').SingleMultipleAllOrNone; + export type SingleMultipleOrNone = import('devextreme/common').SingleMultipleOrNone; + export type SingleOrMultiple = import('devextreme/common').SingleOrMultiple; + export type SingleOrNone = import('devextreme/common').SingleOrNone; + export type SliderValueChangeMode = import('devextreme/common').SliderValueChangeMode; + export type Sortable = import('devextreme/common').Sortable; + export type SortOrder = import('devextreme/common').SortOrder; + export type StoreType = import('devextreme/common').StoreType; + export type StringLengthRule = import('devextreme/common').StringLengthRule; + export type SubmenuShowMode = import('devextreme/common').SubmenuShowMode; + export type TabsIconPosition = import('devextreme/common').TabsIconPosition; + export type TabsStyle = import('devextreme/common').TabsStyle; + export type template = import('devextreme/common').template; + export type TextBoxPredefinedButton = import('devextreme/common').TextBoxPredefinedButton; + export type TextEditorButton = import('devextreme/common').TextEditorButton; + export type TextEditorButtonLocation = import('devextreme/common').TextEditorButtonLocation; + export type ToolbarItemComponent = import('devextreme/common').ToolbarItemComponent; + export type ToolbarItemLocation = import('devextreme/common').ToolbarItemLocation; + export type TooltipShowMode = import('devextreme/common').TooltipShowMode; + export type ValidationCallbackData = import('devextreme/common').ValidationCallbackData; + export type ValidationMessageMode = import('devextreme/common').ValidationMessageMode; + export type ValidationRule = import('devextreme/common').ValidationRule; + export type ValidationRuleType = import('devextreme/common').ValidationRuleType; + export type ValidationStatus = import('devextreme/common').ValidationStatus; + export type VerticalAlignment = import('devextreme/common').VerticalAlignment; + export type VerticalEdge = import('devextreme/common').VerticalEdge; + export namespace AiIntegration { + export const AIIntegration = (AiIntegrationModule as any).AIIntegration as typeof import('devextreme/common/ai-integration').AIIntegration; + export type AIIntegration = import('devextreme/common/ai-integration').AIIntegration; + export type AIIntegrationOptions = import('devextreme/common/ai-integration').AIIntegrationOptions; + export type AIProvider = import('devextreme/common/ai-integration').AIProvider; + export type AIResponse = import('devextreme/common/ai-integration').AIResponse; + export type GenerateGridColumnCommandResponse = import('devextreme/common/ai-integration').GenerateGridColumnCommandResponse; + export type Prompt = import('devextreme/common/ai-integration').Prompt; + export type RequestParams = import('devextreme/common/ai-integration').RequestParams; + export type RequestParamsData = import('devextreme/common/ai-integration').RequestParamsData; + export type Response = import('devextreme/common/ai-integration').Response; + } + export namespace Charts { + export type AnimationEaseMode = import('devextreme/common/charts').AnimationEaseMode; + export type AnnotationType = import('devextreme/common/charts').AnnotationType; + export type ArgumentAxisHoverMode = import('devextreme/common/charts').ArgumentAxisHoverMode; + export type AxisScaleType = import('devextreme/common/charts').AxisScaleType; + export type ChartsAxisLabelOverlap = import('devextreme/common/charts').ChartsAxisLabelOverlap; + export type ChartsColor = import('devextreme/common/charts').ChartsColor; + export type ChartsDataType = import('devextreme/common/charts').ChartsDataType; + export type ChartsLabelOverlap = import('devextreme/common/charts').ChartsLabelOverlap; + export type DashStyle = import('devextreme/common/charts').DashStyle; + export type DiscreteAxisDivisionMode = import('devextreme/common/charts').DiscreteAxisDivisionMode; + export type Font = import('devextreme/common/charts').Font; + export type GradientColor = import('devextreme/common/charts').GradientColor; + export type HatchDirection = import('devextreme/common/charts').HatchDirection; + export type LabelOverlap = import('devextreme/common/charts').LabelOverlap; + export type LabelPosition = import('devextreme/common/charts').LabelPosition; + export type LegendHoverMode = import('devextreme/common/charts').LegendHoverMode; + export type LegendItem = import('devextreme/common/charts').LegendItem; + export type LegendMarkerState = import('devextreme/common/charts').LegendMarkerState; + export type Palette = import('devextreme/common/charts').Palette; + export type PaletteColorSet = import('devextreme/common/charts').PaletteColorSet; + export type PaletteExtensionMode = import('devextreme/common/charts').PaletteExtensionMode; + export type PointInteractionMode = import('devextreme/common/charts').PointInteractionMode; + export type PointSymbol = import('devextreme/common/charts').PointSymbol; + export const registerGradient = (ChartsModule as any).registerGradient as typeof import('devextreme/common/charts').registerGradient; + export const registerPattern = (ChartsModule as any).registerPattern as typeof import('devextreme/common/charts').registerPattern; + export type RelativePosition = import('devextreme/common/charts').RelativePosition; + export type ScaleBreak = import('devextreme/common/charts').ScaleBreak; + export type ScaleBreakLineStyle = import('devextreme/common/charts').ScaleBreakLineStyle; + export type SeriesHoverMode = import('devextreme/common/charts').SeriesHoverMode; + export type SeriesLabel = import('devextreme/common/charts').SeriesLabel; + export type SeriesPoint = import('devextreme/common/charts').SeriesPoint; + export type SeriesSelectionMode = import('devextreme/common/charts').SeriesSelectionMode; + export type SeriesType = import('devextreme/common/charts').SeriesType; + export type ShiftLabelOverlap = import('devextreme/common/charts').ShiftLabelOverlap; + export type TextOverflow = import('devextreme/common/charts').TextOverflow; + export type Theme = import('devextreme/common/charts').Theme; + export type TimeInterval = import('devextreme/common/charts').TimeInterval; + export type TimeIntervalConfig = import('devextreme/common/charts').TimeIntervalConfig; + export type ValueAxisVisualRangeUpdateMode = import('devextreme/common/charts').ValueAxisVisualRangeUpdateMode; + export type ValueErrorBarDisplayMode = import('devextreme/common/charts').ValueErrorBarDisplayMode; + export type ValueErrorBarType = import('devextreme/common/charts').ValueErrorBarType; + export type VisualRange = import('devextreme/common/charts').VisualRange; + export type VisualRangeUpdateMode = import('devextreme/common/charts').VisualRangeUpdateMode; + export type WordWrap = import('devextreme/common/charts').WordWrap; + export type ZoomPanAction = import('devextreme/common/charts').ZoomPanAction; + } + export namespace Core { + export namespace Animation { + export type AnimationConfig = import('devextreme/common/core/animation').AnimationConfig; + export const animationPresets = (CoreAnimationModule as any).animationPresets as typeof import('devextreme/common/core/animation').animationPresets; + export type AnimationState = import('devextreme/common/core/animation').AnimationState; + export const cancelAnimationFrame = (CoreAnimationModule as any).cancelAnimationFrame as typeof import('devextreme/common/core/animation').cancelAnimationFrame; + export type CollisionResolution = import('devextreme/common/core/animation').CollisionResolution; + export type CollisionResolutionCombination = import('devextreme/common/core/animation').CollisionResolutionCombination; + export const fx = (CoreAnimationModule as any).fx as typeof import('devextreme/common/core/animation').fx; + export type PositionConfig = import('devextreme/common/core/animation').PositionConfig; + export const requestAnimationFrame = (CoreAnimationModule as any).requestAnimationFrame as typeof import('devextreme/common/core/animation').requestAnimationFrame; + export const TransitionExecutor = (CoreAnimationModule as any).TransitionExecutor as typeof import('devextreme/common/core/animation').TransitionExecutor; + export type TransitionExecutor = import('devextreme/common/core/animation').TransitionExecutor; + } + export namespace Environment { + export type Device = import('devextreme/common/core/environment').Device; + export const getTimeZones = (CoreEnvironmentModule as any).getTimeZones as typeof import('devextreme/common/core/environment').getTimeZones; + export const hideTopOverlay = (CoreEnvironmentModule as any).hideTopOverlay as typeof import('devextreme/common/core/environment').hideTopOverlay; + export const initMobileViewport = (CoreEnvironmentModule as any).initMobileViewport as typeof import('devextreme/common/core/environment').initMobileViewport; + export type SchedulerTimeZone = import('devextreme/common/core/environment').SchedulerTimeZone; + } + export namespace Events { + export type AsyncCancelable = import('devextreme/common/core/events').AsyncCancelable; + export type Cancelable = import('devextreme/common/core/events').Cancelable; + export type ChangedOptionInfo = import('devextreme/common/core/events').ChangedOptionInfo; + export type EventInfo = import('devextreme/common/core/events').EventInfo; + export type EventObject = import('devextreme/common/core/events').EventObject; + export type InitializedEventInfo = import('devextreme/common/core/events').InitializedEventInfo; + export type ItemInfo = import('devextreme/common/core/events').ItemInfo; + export type NativeEventInfo = import('devextreme/common/core/events').NativeEventInfo; + export const off = (CoreEventsModule as any).off as typeof import('devextreme/common/core/events').off; + export const on = (CoreEventsModule as any).on as typeof import('devextreme/common/core/events').on; + export const one = (CoreEventsModule as any).one as typeof import('devextreme/common/core/events').one; + export const trigger = (CoreEventsModule as any).trigger as typeof import('devextreme/common/core/events').trigger; + } + export namespace Localization { + export type Format = import('devextreme/common/core/localization').Format; + export const formatDate = (CoreLocalizationModule as any).formatDate as typeof import('devextreme/common/core/localization').formatDate; + export const formatMessage = (CoreLocalizationModule as any).formatMessage as typeof import('devextreme/common/core/localization').formatMessage; + export const formatNumber = (CoreLocalizationModule as any).formatNumber as typeof import('devextreme/common/core/localization').formatNumber; + export const loadMessages = (CoreLocalizationModule as any).loadMessages as typeof import('devextreme/common/core/localization').loadMessages; + export const locale = (CoreLocalizationModule as any).locale as typeof import('devextreme/common/core/localization').locale; + export const parseDate = (CoreLocalizationModule as any).parseDate as typeof import('devextreme/common/core/localization').parseDate; + export const parseNumber = (CoreLocalizationModule as any).parseNumber as typeof import('devextreme/common/core/localization').parseNumber; + } + } + export namespace Data { + export const applyChanges = (DataModule as any).applyChanges as typeof import('devextreme/common/data').applyChanges; + export const ArrayStore = (DataModule as any).ArrayStore as typeof import('devextreme/common/data').ArrayStore; + export type ArrayStore = import('devextreme/common/data').ArrayStore; + export type ArrayStoreOptions = import('devextreme/common/data').ArrayStoreOptions; + export const base64_encode = (DataModule as any).base64_encode as typeof import('devextreme/common/data').base64_encode; + export const compileGetter = (DataModule as any).compileGetter as typeof import('devextreme/common/data').compileGetter; + export const compileSetter = (DataModule as any).compileSetter as typeof import('devextreme/common/data').compileSetter; + export const CustomStore = (DataModule as any).CustomStore as typeof import('devextreme/common/data').CustomStore; + export type CustomStore = import('devextreme/common/data').CustomStore; + export type CustomStoreOptions = import('devextreme/common/data').CustomStoreOptions; + export const DataSource = (DataModule as any).DataSource as typeof import('devextreme/common/data').DataSource; + export type DataSource = import('devextreme/common/data').DataSource; + export type DataSourceOptions = import('devextreme/common/data').DataSourceOptions; + export const EdmLiteral = (DataModule as any).EdmLiteral as typeof import('devextreme/common/data').EdmLiteral; + export type EdmLiteral = import('devextreme/common/data').EdmLiteral; + export const EndpointSelector = (DataModule as any).EndpointSelector as typeof import('devextreme/common/data').EndpointSelector; + export type EndpointSelector = import('devextreme/common/data').EndpointSelector; + export const errorHandler = (DataModule as any).errorHandler as typeof import('devextreme/common/data').errorHandler; + export type FilterDescriptor = import('devextreme/common/data').FilterDescriptor; + export type GroupDescriptor = import('devextreme/common/data').GroupDescriptor; + export type GroupingInterval = import('devextreme/common/data').GroupingInterval; + export type GroupItem = import('devextreme/common/data').GroupItem; + export const isGroupItemsArray = (DataModule as any).isGroupItemsArray as typeof import('devextreme/common/data').isGroupItemsArray; + export const isItemsArray = (DataModule as any).isItemsArray as typeof import('devextreme/common/data').isItemsArray; + export const isLoadResultObject = (DataModule as any).isLoadResultObject as typeof import('devextreme/common/data').isLoadResultObject; + export const keyConverters = (DataModule as any).keyConverters as typeof import('devextreme/common/data').keyConverters; + export type LangParams = import('devextreme/common/data').LangParams; + export type LoadOptions = import('devextreme/common/data').LoadOptions; + export type LoadResult = import('devextreme/common/data').LoadResult; + export type LoadResultObject = import('devextreme/common/data').LoadResultObject; + export const LocalStore = (DataModule as any).LocalStore as typeof import('devextreme/common/data').LocalStore; + export type LocalStore = import('devextreme/common/data').LocalStore; + export type LocalStoreOptions = import('devextreme/common/data').LocalStoreOptions; + export const ODataContext = (DataModule as any).ODataContext as typeof import('devextreme/common/data').ODataContext; + export type ODataContext = import('devextreme/common/data').ODataContext; + export type ODataContextOptions = import('devextreme/common/data').ODataContextOptions; + export const ODataStore = (DataModule as any).ODataStore as typeof import('devextreme/common/data').ODataStore; + export type ODataStore = import('devextreme/common/data').ODataStore; + export type ODataStoreOptions = import('devextreme/common/data').ODataStoreOptions; + export const query = (DataModule as any).query as typeof import('devextreme/common/data').query; + export type Query = import('devextreme/common/data').Query; + export type ResolvedData = import('devextreme/common/data').ResolvedData; + export type SearchOperation = import('devextreme/common/data').SearchOperation; + export type SelectDescriptor = import('devextreme/common/data').SelectDescriptor; + export const setErrorHandler = (DataModule as any).setErrorHandler as typeof import('devextreme/common/data').setErrorHandler; + export type SortDescriptor = import('devextreme/common/data').SortDescriptor; + export type Store = import('devextreme/common/data').Store; + export type StoreOptions = import('devextreme/common/data').StoreOptions; + export type SummaryDescriptor = import('devextreme/common/data').SummaryDescriptor; + } + export namespace Export { + export namespace Excel { + export type CellAddress = import('devextreme/common/export/excel').CellAddress; + export type CellRange = import('devextreme/common/export/excel').CellRange; + export type DataGridCell = import('devextreme/common/export/excel').DataGridCell; + export type DataGridExportOptions = import('devextreme/common/export/excel').DataGridExportOptions; + export const exportDataGrid = (ExportExcelModule as any).exportDataGrid as typeof import('devextreme/common/export/excel').exportDataGrid; + export const exportPivotGrid = (ExportExcelModule as any).exportPivotGrid as typeof import('devextreme/common/export/excel').exportPivotGrid; + export type PivotGridCell = import('devextreme/common/export/excel').PivotGridCell; + export type PivotGridExportOptions = import('devextreme/common/export/excel').PivotGridExportOptions; + } + export namespace Pdf { + export type Cell = import('devextreme/common/export/pdf').Cell; + export type DataGridCell = import('devextreme/common/export/pdf').DataGridCell; + export type DataGridExportOptions = import('devextreme/common/export/pdf').DataGridExportOptions; + export const exportDataGrid = (ExportPdfModule as any).exportDataGrid as typeof import('devextreme/common/export/pdf').exportDataGrid; + export const exportGantt = (ExportPdfModule as any).exportGantt as typeof import('devextreme/common/export/pdf').exportGantt; + export type GanttExportFont = import('devextreme/common/export/pdf').GanttExportFont; + export type GanttExportOptions = import('devextreme/common/export/pdf').GanttExportOptions; + } + } + export function Grids(): void {} +} From 94160ff7811a696930e7ab2a65d6db0bc8cde1b7 Mon Sep 17 00:00:00 2001 From: Aleksey Semikozov Date: Thu, 2 Apr 2026 20:07:23 -0300 Subject: [PATCH 32/32] Scheduler - Remove stale recurrence-editor references from SSR test and helpers --- .../devextreme-angular/tests/src/server/component-names.ts | 1 - packages/devextreme/testing/helpers/scheduler/helpers.js | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/devextreme-angular/tests/src/server/component-names.ts b/packages/devextreme-angular/tests/src/server/component-names.ts index e19b22844953..787d54f1b48a 100644 --- a/packages/devextreme-angular/tests/src/server/component-names.ts +++ b/packages/devextreme-angular/tests/src/server/component-names.ts @@ -48,7 +48,6 @@ export const componentNames = [ 'radio-group', 'range-selector', 'range-slider', - 'recurrence-editor', 'resizable', 'responsive-box', 'sankey', diff --git a/packages/devextreme/testing/helpers/scheduler/helpers.js b/packages/devextreme/testing/helpers/scheduler/helpers.js index ecd95dbd2703..f22f97969508 100644 --- a/packages/devextreme/testing/helpers/scheduler/helpers.js +++ b/packages/devextreme/testing/helpers/scheduler/helpers.js @@ -556,8 +556,7 @@ export class SchedulerTestWrapper extends ElementWrapper { getSubject: () => { const textBox = this.appointmentPopup.form.getSubjectTextBox(); return textBox.option('value'); - }, - isRecurrenceEditorVisible: () => $('.dx-recurrence-editor-container').is(':visible') + } }, dialog: {

69ntGG+47<^1pLd|2`Qm*7)7HBHf?1w5 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%0D{C>SQ@KWrZNI)lks|ilNpjeyE?ZXOMqX&}A2I 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 diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/appointment-form-in-mobile-environment (fluent.blue.light).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/appointment-form-in-mobile-environment (fluent.blue.light).png deleted file mode 100644 index 43a6283c1cc77681b21a5d9efa2d70206fbd9af0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19911 zcmeIac{G=8-#6M!BT`6)L@6bbIa110#!zI+P$VTGGYzDSA<8^uY)~mvhGZrrWXL>| zWX#O_IlAt9zkBcJzV7|({XT!}XRY^It81Tp>OoD^>{8%bhx*X1j7Y-$lEUVtHn{#4fz{MBL*G-i6Y= zZ-ZVi6gkfdc)rN^BKTS0i8q^Jh3~8BJ@-8uL+Xnbo?g-S_lq=4d($-jyp7@XHc{t; zvv11x4<$~t{_wSQm>#_P;hn{+Sn*#r-m~FHWDp>(uv?7jyj=zc`v@|Ni~?B_-}HE!rc`o;_Q`%F24v(vn8< z!7?4QU{6<(=L?+=L5uU#0imI10`@9UZrRe8*&h*W-k!UlvSrH_yyZ)b)W)Sm_2=gf zn|#?dX)i8GsX{MmCMzkqs;Q~TYsZoM*ITpnc^PEo>f8&B{5z{DC^u~QR93cL{lW#tl-xP4 z_3PIUe^2-Q_EM|6tLtuFp2X$UVBceN5B4gAe93ikaHa0LzQ2(gOLbONbw3x^C&}2F z(eVnNTCBv#w=C-)w$rUPP4BPLCpR`~jP!U5wSBCq@xvmf+Kw5VK655m@ET)s0H+e) zwPt<;1B02R`CqsZPm50JaFgE9kGSc0p`T?~kJbLk0YU4F}dV5tgHRV3s`kDCh z_3KA>@2+C8>!CUL?gBTt19c6J2h@@ax}s)Y(y`HoB|eGvlLIH@@WA=Rp9`}S8r$gTV#Y^DqxPDco4?Y{DaQ|9@8jV~c>S7MJyh_T zu+0dQ0Jr8_*X(RDe6FwZYZ@wv1zzLoh)Z9e$uWsqQO4HDDk^R{aQ>Ci{O_NqPMwM} zZF;*WI5;?w>%alc)XSUSztqc%zxP|+mjjef5W@Jzm zCQ?{j9J68L#_q|%TC?VN>tkz5W28J~Wo4sq6B$`qF{=FT4yI9ldc# zH(U1RO}>e~O2et4`ls@Hu{Q>4Vkweu-(GQRxbcL6!R|=M@%07nRQ(k^c|GqNbPLP` zQyph-?v;P~v3=>cP@BUq@eqNl#VwhZS6VU-Z{NQCpib7~C%X3Qg@lA697aTPXZv=N zT047otM^W!%imsT3X6zz_Vk=OetgC9LcfHZtZc_n{qutwuW#S_+1xoWP}*DZgzQ$l zdhfn{Xh0cSj1xRF0sHpvXA>5Fidydc@xv3(S7_hDL$drgZ{8&PNXu$L&a5pvST101 z%?BHEF>&#~I*QBI&dyF(cXxJI>g8+y&%JHS&a>+3Ze>O>Sy_zuZu)If`Bhb0UY_%O ziD##-uCAu0rmUmmO)c4S0NaK94KF7@+Z(VRuh)~`OPeN{FRga|Jic)HjJ35un&f}7 zmx{7ntf{FPZc266OEoCkaQE)r8S!tgbj}zVar|jh8BeUlKDIedDCj!RUQ&}-7+w9N zA%&BTZRJL^1!rGulCJLV!G;vp|M_Z1C#N?Vwqv_R!+jLPMfFwG)C#dd%F4?npVyB! z8u}haJHX?UmY3fo9qT9MNf#~ZIKxYt;GR8h`S&PdH>_W;Ki*T8J^A$vC0k)mjIytk zj7)b&$48-d#{vpg$B%eSPY)ZeOWv;)!orK;@ZGd)-~B^EJh<4| z?~yHm^?9;wD2df&!4LHiuN3K{m=KG~^I|?4w3=dzvaYVr^XCU>ITelCvh5rf#!3>U zeV86%sm(=)l8zWxDWm3Z+~9q$lj|5P!(!*Ua`n1L5fN3G7@BEjJN~-scB?woTeoiU zUu%ABo;!PA&rmQ_MZo0C?eFR4cp%@Rl$G9_)ZD$=@XBIpNc~`WMMb9LEFazTb1%_Q zdCl9%RViv}?vSLk$lG71x^m@8Qu&#d{RaGuhlAzGHr;XLa#R-9)RT^T_n|{R#*t2R zSbw^M8n?@fiq_Vn1E2xOP_m8eakD>o_^=YH*)oEM(@Hi3fsx7v7t0zqf9)WJ-hT_rA)|VE!vx=@dfv^S^%&jf&dU<~)B5sKACa!-dIOC9$bG z)dgMbYJ*R%>)%~%*ur*dF}mPB2M5Qa@bF4(-+^y0ccR}ve!Q*C{s(t++O;$2-Hq9H zN6^pyyqP61Fz|DTfaik;l;nfICaSPIFO12k0R(iRUt(LVxR?JC8?nZOe}OYp$UHtK z=59iSy+@YljgA#eGgNP9C%p~^S! z6f7(#xW^)H|K;5k)eGs@EB*JJ(a5seFXO|+hJsXymA3djtck7m5u;aDUcRTNEMU#r zwVfRu$FE%3zqGW3Njcu-$zxz_T!Mb>)nwKe>w7E)EBVg6Jt71sYql@coI%{4KN$$6 zySw{jif+yWU*8g-n-W%+Fs=0KWBC-Uybiz3`l`auNK3CH(5JRGU}nZP=#WmiAG-`N zm402KN=vR&D8|!RwaZd~+eZ5FN}=|S-d;2i?nG`Op(l9#+qZ9Let$Q&xN#%ur2CeE zDSKCHs$+j}R=dlxxTdD2*!*y+u&{8{R}+4KgO1^0c@vX;z;9v`pN|0JMTMZPVBlkT z2zarGhrD~opS!%|@afYhW$p{_DC^%|s<0g|_?A=8b{dO#|}`#Fl0Y+ zBtYQmH(sF2@$qquj2mpY1u1N{S}do>lPC1Ju3|hXtN?HXjbt6w2Em@3>9zu3t}kDd z=YIb@gN}Oi*6>F&!HKJvtHR_Q9mRZne1MGBQL)IMJ4YulHQYq2q@=_sXjaPF+28M; zfAP4$#g8k_rRY|Y?=T(s60M!*9B$cPrSkpf_jEZ0g-gxvuAr@Lr3>> zy32gQ54^p5TW#9oPTX5J-28syUzy@5@sckc8|O+6y{VD6;5H#Wc3a3hU6U^Aw*e(58&7Z=`p1RpUz zt12b67VUU14Gqn3OC~Ma7>2zR)<|H#$ETbdbCXxF+r7EaPEk8=G5o~D#CRFKtp>i_ zIa>2$Dv@B3AKzYP?nIHFsDCC$>qj!HSW(7t@MzB2EXw%vqAj=jL%fQL_?G63=3DX*^&RFYVHTv&KY+Ly&!F`*l~ zWY6KlG%wFpgo#)-W?3JQlat%TdMs?unIK-<(TiAgWf4))o3rDW0Mn(ri@n!x*boyB zo`(C91{MSl;MlwOt;6*7-R$ha;tqm6fcB!MsWYtVJ@Mr~|bw|b(#x?gX3j$TSiNx^X$<{TlRD*x|ED5#&h z`gYv-(2yw^nabPN9zA*#Y~T+PQ&(3}Q8@u1hMArMT&9Y@;pOCK0K9m;GX{I(hP69Y z{=#)Uz;*cRzhuZ?@vnki{gE!DM%dBll9RcdF)WL!t9|isw6(Qu9}VCJcKU^dc_k!p zqI~1fwHJcM$8V;YHAw<%)9#h;I1w|-Nx%jj_l3e7Wo>PFkgKE@FHTWfn1>&=@d2*+ zf(f%k>I4fd;_&+*6(jRhDIS`vg2J8y2R4Q)x=W$7e`QZ>Nk(@I;?|M|i$JGj$9_1k zYqu6JC^OnEA`*<=VcGd_JdF)8;%E309{`8tipjJG+`Z7nl1~tW_z5 z;p`N;{wykLg@l9zcBz7_EM+o!PG5CowN1N|dyNSPFYhCOOG5dbQJ*5!;?qor4jn=f zGJ8wkE5gov3bp{=X9z}BN4H~#9KIRj1-QSc(bLl(TbeNhv@F33d;u@Xd=nH5BAr1m)v{mF z(b17mg!$=T2@o~vdWMHT1E%DIzN4ROgo)Ytqn_D@QqYHn42B!uh?#5~x`Tax`Sa8K zk9SrlabsA5E&>2bv3n7kksfLLajY?A99v!D}~eKUhgHI72*3uN-wRVGrp6@kKtNd`2oCyCLK;e; zduXWqM@pU#Mi!=itjqG!3$64mo<7V+v90OUaHDaMnXG=bF&i5jFa1u>19!|vgF^Gh z3w;{&T*6CO95#X5w%PSF<88&bxLJXnf@V>8U-syyjn5JiRJ8zuzL>rzdQM2%_14pP zk~Cc>;+3g5I5}f$2N{HK?Bc@Sl>!bpapFWGh~86CYc7G_{{HTf5uap->5<{~yhvyQ zQFCJ@teMV>qPWe||$K}0AwZ8|jtU`5Ns(d*<5|f&kwdeo^yTOvN z=MHIS99LGRR!vZhi(go9Y-w#(v9q@y2OOSonELsho|BVvqz4aKY^;zL`|Thko8z}` z3DU94_!KrY(APht<-{hBiRX;4y&D$BbVw(waOy|HVB;HhIx6u=YGB$hVT-#*NpnK? zibd<69IE$(l;wdhH{}bKpB!lo1$;ChHHhsu2#hT$R=SPlMt^mrahd-fB42DwZSs-= z%*@ZvZ;`XN7d5U5W8>o5KoG!Ty~-js0?=Yq!;hqwXkTkL z((xLVQlswzEi``rt{M;!K%0!cVR}YMssD5EkyBDq7I^^g1R^UaDk=gWTpXMGk%GL0NGauQZ4n`iLf7SirfvL#f~3*=u0Q|;4J2K_ZsPJme#XtoASkI< z8xED1mn;8l&tt_(Vx+sDj;+~Mcu%%-B}%RYg)ufY6_>V={?LuVuX|RlUY%41<;19L zE5Xr_iO@?V-vj6Xlgk0ffB2Pa2yMi1vPK3dA*#Hzbl1Lp51Pj(CI~`}j*dp{uMd=t z%{LQNRmChL`^T-x>@wDo2reLL*4$|)wsgojgZCdiJPDp_p? z^hD5(%kq4COBuQlB_-wYlmFw$1`1#WteK;8n6;EF?^X481j2fOPDLl|~5(wP7d+%N* zt)8A9ew;K2j)wx+W@BT6_hXIo(MHuREDlR7PST=o>e8;%?u~Hzt*L82xW{y^;~tf) zl2S=~dt^w2%aUE2%d%7M!uXk0t5%JUjsleKF1#n-x$-x3I}6A)J}lzpHL)^Hpt{K~ zUL4%Ldv|GhIT{FqCnixqP*CwFw~ZD+)@eX)XoDry63bp(JUqUD3}2vUY+)89Iv$i4 zPfT(eIyz}c>hIq}YsWyqu0T<0XWY00E!h`}cZ{g>g7B3qR}N}tP-6jy2x11&8+9O^ z0;6ZFMut^iFtiC!0gd?5m#7mO2O*teJ=7qH03zf6cd+LNzs6xfzdk?DL;f9e_r}tK z9Z>y4PfvD!{%v4YrUb!IY+4yH3vvw5W3F9=zTxe zX&(D*Y;w|QVP=dpLC{O|^w;|i9O(XTo+tJG*3S#39=^T_How|FM~H_ur5e*RGJ5Ey zpvJ=3PTr4deq%@h`R$m~oU$s)tm(D>YC=>YDtO}I#M+M)(FcPJ6Lc*g5Qy5l$%&4@ z;4OWyIo;fs00mon`?nYKR}nRqjz?D>r5((xzshB{LhrRkuA>MU3qYvo;iKQQ%xQM+ ztUxOV!qXpV$prOLgEZ1LH}wO<`z$0jKrpCNb!pCv_87~cKFoef>)ZgW(DG($D#*ytx7mh?a{oa9MQd3tS(*jaQk)Ty~Vv@DKPERkP8=$6o2Gto7#XagNJlKtf#a_|5 zwQMZ1%%WCAP=J0S_HWhP|2FE^P-b17n*G#}8?|KP24=x$=TmgU#2tc;qH%Tpa#=n) zeHMHc&sziYt@efHk)`n`dAz__+1c3{S`aP`P$+na&b|=NW9v=HyZ{|naQEKv7vQh! z`}wnSaeTHvl9rnKI2s41QiKua20=-vXC{oRr2s(g|HBcB$SMUz##7`st)m22>@096 zLl6@mk{~CuU@=rS0O*OUbJM?+@|+hNGc7r#V+pH-2{zFD{y;LG4-Gv%Gz~Jntp>lk zeIT4&)Mi8;hy-j5JmVhKv6&V1Z8;7^*}&F;5=70yQUyQ)Ha0Uq9}APC$7QMCg+b7a zAt@=zac(dH?f469pmm!W3t#IOB)$X;R5~{63h6j%-v+?o?6KmVxI`W|3NMJ9sM}tA zONS>| zxV6%H&@Tvx2SyklOo;p%bz-&PwPx2LY-X~4DS1mFvlIPCzy$dC_z18gCL-oVUEhx% z6-4SK6@-UG_<*n2I3=FU8F%l8zP_Btjzu*4Fo~emuTDlC)nwaQssSVu{tV=I13DkE z?Qj*K5v1whE+6^%ozQs?JsR`b5~za3X;KAU*&Ub%c8)uX{R6D$MBegzUiRG3^SZRl zm5dm#ikL~s=k=Td2{t2|ct^)YQwP|EJ4CJaky3=S1ovpSYhs>N<5Tn_YV`4IM2q|c zJ$qx0u5Y;!p9(y+(9oT@7LA#i8C*y{>r?@i#A^^E=b26l0)?!9wS^xotFG<`mg&aN zp6vxp9x{3vJugy)YH6`sJIyl^8RZXSoy z;1NSa$f`(*>Tv9BLN(6tkhs z4b&X{)~xBR8)TT6ApqxaQR^7c0%-Qo+zKU@XO%Fj8BpoOor4hGh3fAAncm(<8ph$n zhly4V?V$#wxy`nFGvFtUB<25t`Co7!jar{CI1%s>&c<3PmDj1MCy8CK&FmD!6#VxO z$Lln}Dft^-j-R<=l;ZXD@JxwE24#g95@!KVUn>7=orf6_1a{}8S>t2#!$%1INlxxc z$9+S&AO z0xcVhii)61`r*;R|M&(D#lU-Ug*T%>m&BX&bWYg)sm9f0-1~wsxT6^ZrhXZ;B0|Y{ z)zM!Bj9+Yed#R_V=L_2Jr-A~z-oW#C0kDF9KtNNj(^2|E+8;4r|Eit)M416&z`g}2 znFV3Nz^B4|hci*^wc}o7Bx^DxyREFON_gS#-@mPXHU|=g1HDBJ`2iwOgK!aB&em2q zC3}2>X!sU&EGq^A=~YFZ^t4;IO6v6V_mf-27L-#|jF0~t8K@-ug=Xq~w6C+u%D3^= zAZmL#IM%464-y>?wOU}pzmCngMWS)kX^AtIK0BVCq6 zSe<9sARX`v=;YW3MuqLAgM#wV z!^2={VU|hw#%&SHK6GuO+rW8#p_>x|?Hwbn5o?8tBO(!E4{8u{0KKC_pf!q!5R>~W z2Ef*>TNwmQx9K@eZHLtd4UrkH__q{2B_My*czJycH!oI+h`;~JSg6@!-6gf?xu8ha z@1cUAsO@_EWcG1$$Ho7fH>Q35EKe{srlSn3NU|azF9z`LA-Io%t*4r|A0sb-miko4 zoCQGYPsxX*x7mB532#@|*JpzD`ZxQY<_&WzBqVpHYhzeg81)n( z8`g(!4QsIQZ}ERM$MEc7^Z<547ga!d0$5uLn7`<4YwOWK2fwHDw0^K5 z{!`xKPjg#aTjGPl9t8~Uo@&tRe^bIzfOv*Yo1Ht}W-;C)H*z1kDoM=vN-PQMxhx9M z0RwP+u=!PN!hg0Fa^OHq<`GG;M2J)n9)VUdI8VjZn7k&;27v zhw#fQ(!-P-hkfcrsCJ}^%OQTjTI9Z!Wq!eUO@W}2L0mclreh`A6z{a8` z%5nn%0@&l!;K1-c5(hy;wX>`qqFPM(LMw^lfymOEo4u#eF_d4TDS{-Tg0JA7+MTAE z(b*Cp$-26_l39)i{vO)e5o~(NlP4eg_()?r{8J`@YI6~APZKUHJYNIYJ7_)n+>lKW z?0O4oeeRX^LpXjmP!s?89>_3+`4b%m^iMC~(IaAh(4iM0$wb4%B(DHmEe3w2ji3U7 zWiY1RfSy4trtUfs*S#_gn;a(3r@ZAw^N}9dcz;P+Z!(o#@3^_Hwp(UbT+(pmu@j&L-z#>rox`9y_;6hhDd7*h#xds{Lr?uEeWQ-;M9oAn<) zl;B5Nh*XgH5I!nyZ4K8$=<8EmqD(KR?!Zg3YlKB0ve3`rEklK`C6fHD@=!rFQd-VHBR z4c(7~1W4B4>V{#PR2+kgqTFAJWT5cL(rzsgWo{&4+{@ZdX7gN;P3zGm&L-2#n-Q2 zi8qb;(SmC|gY}f!4*vs}02l$a4^rc4jGG+$DM|A0*rSkMiR+V*A&iRycJ9%oT)#d# zG4TP3@zLwru2gZk^8Nw>JT?_Zd~hV~z6>NLKuP}i{%Qk+=RyNWy{Ktm`jZOKb}wUm zldPV%^hr=SNN5C+IWO3P%}SY>9mIyvcpMlw24EU<0Uo_TQAtTHvRRj_BPwC6uHU>F zo;od9AF#9X&&D^a5r&IA=9HKODbfsfClCRN)fB_@+7no_yv)oa@0&_07NNt zCprjuGGv6qB)(H)@(j?qt}e^^s-RipZPVHDUjD1!HlZ_RSq*+7RuHZWExrW#Qvku3 zh94>bf*#mVc+PSFMWB&D88=e^Iqj!MAQ=-^?PQ(a%M0&!i;IV&mH!EUR8)ov5giHt z+;t-M@bapiB)yavikAKs@i^B+o_~vBKj@pA`*MGQoZ(KzT3k{>!8U|~qz61a>6CC% z>=6;;p}SB^irN0#d~PG96#UW$^HM6?%-rsJ6HrdzHr!A0S9lQoCSO+kd5HsFLh?TF zD$fnPW<#Sz%7$~qhE*lK zkjW%wOMNf@cK*eW7kS}ymFJLAlb$XFz2Ti{y$1@bFcO^6dZJGOO~VB7NWzE_pFruO zBr>0%(IE(cFF|*hg)_3_=&ge!%~WSDWZuTHfB!?+qg~Md5xg1u{hK6t9g?8;|M|{c z5)zT-d5b~tPYAa!j0_MQp>KRTJZy&IEIN>q{RxKEJxH@GEG)?IJaTxcUvM8Vr2}&t zYBFwz*cixv!STw_12=$rL9#YL27ZuFH}YhEY$cKi1Zg;{Y|fGYpFWw|<(R0MJP0ll zuLhtri6m-@L~$l$&P$grB{DHFnY3k#5bFkD$)OCal4OU8#FE-1|2^&6Y|a)Iu~I~W z3vgEFwEG#b04#fJ- zKw8EGBzd?jyn!C(UL1+NX5IRE+RBO_S%-!6@MBIPkhLItyU7aJSl*Ul-Zf0E(+tDsLUOt)s+1wbtafl#>y zRt(S0a;R=UKH-nXT9>3MA0ZYD!f``F{wePrSJyQN&(4Y?%PQN$?B z1y1OKUrhKpJpUo6BM`evU~!QIY)Z~=MuBkXcTnR}ZGP#ZK@qwHMYaHQmN@%JpcC`( zAn-~PyasrO9o2}-Jj51^X+}$djnR{i?k#w|?(v{B)=E1vKiF)ZGMXZ!#u53mqUs7QE(mYAYY-98g**qzlGKa3@5gl^X5j)$BP z$Ki_+;~P2!NmTplB=#JGztP0_)nH z7NZ>}E~J@}EH;_dxYU-Hlap3Ry<{|C<6ObE1W>7~$JG$~9I%bJq{K{ZH$)cOaklpf z5&6Nov4ACzrQeW|Ml3>bDzt`2aO+9jX$X-WBdj78<{-%qL3f-vB5FIj3y+GwPdgL5{2n?8(t4PBUf(2J&WGyr->DUvoHBt86-aPFlbdBA{cdjtjP2vs9?mmTzXL}m%LcU+um0Q%fkkBuUyq{NA*0$MWG6QINg z@Beyxt^zVmSU2Os2Q(zzO=a4{0KLB7}%C?2wbFVrstdeK`00t4NMm4%NW-pCMOGSscF zz==zUysbu`OvG^knAa`b=mVyvT+{dPUT}wQUoLL$OJiL{a7Wf7mx!@NiV-@9G|osw zpQJ#xpcJzX$)yqlaTAFlg4fE4D+3vCre9)NPKSVKbZ~tvHouQe!$;#vJd)9hG|=y(ke}a; zSplXZ!tiz2#GVGoF25t7f53gW#{CmY^SGJJr8i%LPfSH?l(&V zXb{Z>>WXRro&&7;qN*yNEHu>?xxWj@(edQY?1rKTLG2ATMNCZ0Oe$^)Lo^m~x%gM0 zshO;#0LdK+;DL~UB(um(SI9&Y7>3qlcFlP`^>Lt9f85f)ZHj|yp_g4_GftjYfae9OIR z=GkNGkijCCLJsmkM-6EUc_JcJICmvP*IWF!@PR1ob5P{CtXZ@5o3M zs#^Jyu`zty`{$nbVrCP)nylkLGC9>z?q6sNAgR8$ezyFOj!}zvBxn zIt^0}?nVZJ@-|nIOGP{;99dIPA)+OeBLC;wWL6B&07>o7mh0{=z`BuKF`~l&>6pfU z@H@g6Ul8S9`i$}bEF`LW(gFC|BNV`5KzuHbA?={Y8$x}6{vLe+q&(fcy$|G<3>V!_LWrjjZ6%T*(S@AmCOiFPSoC{J{Su3Pm;o@fMqziB zKi*HyEWListLyMn0OyTnf9Nd}1KbWt;!N=5u4R+Yc^}t7`Sp*CtcLeP3L9G??hqne zcL4*Zo1t2P*|UMeQq)8Lw1taAjyZw+FKEJ>d;s-@WGTrm!J(KWPbiWAixoL(aDfrE zf=KjKf$7!TwHJsaabz}68)tQ11kFSzjU3gNqs?5+KK0vc1$*pZD z{mz0*UI-)pBk5I*sqgJeLEo=`@J4zn0_yZ!Dguz9n7d>1?aL(Mb|`1^tj{;>RTO7$ z!8ujclP6EE#@VmLWy(o50L#nhszzihBQ6WpJhKa^0H?t>x``x@pL31&kw7R}8@EZ(do!w)&wM>Q=ipPi;#OHl11pz1sBQBcK$AR}p{ zjQJs>4?0K=kl~i=@;C+zaS-abk`h&ejt%oaiqou#&j7PN8tx=ga!^ld#*A_9U~+Qu zMyquLIk$$OA9f^rP)GqRs;jy3@bNI5l!VVRewI|<;%F-+=#3!(FD8-ADJcoBUip0ccJ7!wPSHiE~5FLm;08V`7rAE{(d&ex2VlaFTe8_!|WuR61c~;>a2_Xj^WM zoGIjda1Ex#v$Oksis6OZbv@)H(*6$Ev_@z!f8K7GJ06&FnZ-5c%;U^}!XWSWGX84T~c`kCE~8vw#)IF6Sb5_n0Z*A7L=yH5iNJ(1$J143Wn$ zAzPg1e-f&3YIi=AdCfNlYXNVK9Dz&wA*=O3TZxC8apq8_E7+>P7m*sV18b$N?%qDw1(`7|C?U=DMCcd->0$3+0Y&4&u?P z!h6a2m-dA|Av-LtY(nk93-2BzsV0o$>}x7CvFn+=bh?gXQt(ZW7b9_21iD^;6s&Cu z)(gO_3DFwD*I=$fbrOe3IgzB~UNuB)@_pDBs7&5V z<=d`jk4X!fx5;a1?Nm@uu(Gj12Rel?EHSCj0br;2p$A;JZ~^9-0Vo3+;%n1-E}Y{W zv<50AoPw}|`MBCEn4#bxyJ791fszA&K0N@<{g#pQOqe*ZJ>CDRJG-HzgaHANK`^jV zk~-k#=H?d=z_kW+Fp#+K*`#eaVb`Bt8L5Z{1Q*C06{ zEiD=@{dJ5p|8P`hW^hmt9X6GWp&>ia7CEL#1ru1o$>|ULBx-s4Y?aMSQ?;|Sjg64Z zR>=;NsmV!d$qw1(@84(7Y<;-Ke=hRl;f^~LEKwO5Ps!{-{|N~Vy<%z_a~{jd1qWSTW zIL52&@zX@;Ek61yy8xLt;!_fd1ByKHIDLG!K$iRnpR^o3T9^@WctVA}=H~33Cu3R1 z%9Nb_Nf_X@%d)fR(W7Jl{jzSl^kl3ya_KR6WdI3RnwpwE1tG+Wta18G$`pU3QY@=P z+*y}rO30?tMdFSJK)xe;qAE5gCmaRy7G?=w?o1KSTZj_JCW5OUsQ{bfTz$o!C)$#b zmWbnqU~B@K2`=D9!Db;|%RYHgQBh%kT&jOypcKXyGc&V%sG#@rl-v+6%WCl_fcZzR zeC0p}M8EASP9gL2^WVVbTFi{@M`LaLDg@wdVAONz< zm89P0*q{8r|NQSY`0ua>)|{0X_iPtR?R#RKU325XJ@=y`-!?Np?&#*+(ih2du(Rv! zDj#WMV@?2%v^2r5gZzssC)}`L-v@$dlPIpw+VvbxQ7;cH z9f*|>eB@~W+@_?{O$kT94tZ=m(y$)OFBxD}3p2E4iUU64Rks97R7FP@16 zW$;m(Lpu<=>xGW?CtS95{a&Sr&p71MDX-{eqDqMlj$EAi^gS6hZiagek%- ztMofRxmn%1<^Q)p)lV@&^PLF|^u}JG^UHX7%gqYzY&fb$1Wto!lCuL?EEe#^lxZ7i~jE7%e7WEVTl+nFZ` zOUI=P^0zEiM{p#B3qSQ*{#~})d8Ugc!Xefz-bS@$%JYJ=>i6=ZOKT^$gOx(Xvfuz( z>jQ%z?u*gqNQp>*L~zZ)|A<~yASawTvk||3gZx$r0AOUxrJ&9ur*jF8G)`oI+2$j` zmVpE?Im~eF+BK%DTV>}ycpYLmRr_IoTT{DYO89&;r6%unBbFUM!&{kzTjWx#jHwi_=}lAmmAYZ ztS8kI!ftMWq}nY@ek%~jW#;nIyhx`jt?b?aVpzoju2fQx>;k$GEa!=3xUH{i+6 zfdh~x$*JGGx%w2_Jk$(1rTd3(Z9lJ_zn(Mfcrl@_HH@Hpa9`Mi<-cBq!!NeHFo7UM zZA*(hT4PRgbF+z=S&zoHM^<%;JB~d{(Xrra2-7O$mS~bwq7s{y-uU6S&FkT>hmCrA z*U>F?mx+yicX}6>CF1YWn(bau#ZY94^o7(0un1{3p{ zs!z*o?vurDKQOs^^`y(UZ{MVKby?o5#aqkV_ApfkX={A)BLOrZ{Vhzw$59}8r{m6& zU?)kapfJqVKXdL%O`w0flvS&VF4<-xT$o=F&h+E{meZqSv=kH7^g%Z)G*`-CrtUj< zkOP|y8%#7jUZT9Lj16au;J|?Qz1j0<&d;-ALq^7n+e-&Qt1(;=IK02KO!+SdZMQi`WuNnX7BKL9XIlP>@O diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/dx-number-boxes-not-integer-chars (fluent.blue.light).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/dx-number-boxes-not-integer-chars (fluent.blue.light).png deleted file mode 100644 index 067d221014f47a1a7d3397f9b6321afc4ac44e14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41904 zcmd4430%)>+wQ$A%RFVyRA$LkG8EA=WlDoGPYn_w4X6yYOqE22kTHrTEHYI@QYlGE zWsEdQrY1v?+TSyt=YF2O@B7{R-Jkb)_g1>7N|Ydy|*>bJmslx&UXHh_Th2DULYd-s~O zto>)t`tA3Z1Q-SAYIbhkbkU+kb1yI5^y}+x1W(w}j>|S3Vw0u#kE^(mXdYJbYD)|A zCo6`H|M|~HOKwo{<;#~p-|3NcFY3k(^{lKcg`Zy%dC=L($+YXwtD0U<@z={t>eT=F zqwX{Q`t_xg+W!CWvah>u-yVB-*vctu*A5Feo;`a~df>FXDJi-?Zzi-|d(}NhhOfG~ z;_2XFt6nDG-Pb4V>53t%ULLJexBi2xE9X_u8)}_l8t>UQqqIvrI%?nfgf{cUod0Ex;`N87@ryaTT z@x}EHL#^9%8M(IS@Zkpw?j0<5*QwgH^7&PxaGM3yodymZxYgagJX>|Z0Ly2WmyMq= zA?NjLHxG|VmaW^jPk3;0ocjI)2jtPdPW3YwJNEbT*Z1=tUtN~od&-n4Z!$t!v%Jx5 zxE(G^WAz)uE6A2OTK;$x^Q9lg9nB$*B6hH?bo<*V-Iid!dsi_IypJFRm~h##cp+~{ynnw}&z@UL^AgfejHxU8s;{P|@8o^GTXyQSLvEqq^=sY5i+c`V z^)i3|tc5YPd%j-1dT|K}4zF(2(bm>xp-dm1njCTcxfw{JHqc@^U`)xf~&`Athm@Fn*T5ACeua@2n2nf--+uE*DX zerp%RI!!b;@2~mL&#$g@TEAYy?Dije?FY{9I&9d1g*Vof zmL@2d7wXg;;%t^ye=oLpc4PhUelyQ@?bdD6v5}4sgN=H)HS6RSo6~jRz+H)nlj=9? z829T=PjjcN4yV~SI9O$b<43*u^E)fMRCMFslyi%M{CcaYDd_0v@cujOgWI3qJq}UP z(AanMXy;a~S_RKKuXJwi6>~Pl*?Hm3)9>u;v@9dI<&STl19%p3@$scWIzP5^ZrF47 z;gK6E2RCUyFyArydlyzTIa$x%-hR@gNhi34%hs8mVHOD&ZC;E}_1wAhG{L9h`*#i7 zSATwa|1_3weR{#H?wB!SKD~R~;>dm7$A2#x+qzQBm6O*N$wVQ>7N3bnjk|L4&*-C^`Kl`{2ow*?N_gm2#|? zOrAWsXRlsHMrUT8^VN199QdE#6-zud4$$4HQuyxO4%rMERw=e`9(0o+Gr`5h#n*Gk zjyV?>H(LMYeGZrB({I24*$$6$$M(wq_)-7hzy)s}o^G;j+qUr&Ctk8Im=dUW==M2| zXLf>lnC(dYpw@5vi zn5(iKh}T(fU2DF&R&q!yULRRSFgaB9!egGBw`^JVGD@qowDhQ!L;dS7^f~n$ z!Prk3#s;O{u2ox3Pd#W~^sv{%hYu$i7$oqtkKA_)IdS4I@-4}B`csx{2j}F#zy+QX zn|Y>n+qUuB znzZ-TuxidF=am)QYuaUm4++7vth6-eNtlIiSy|bWi$%60H4_KL94=X9^1GYagAn6ByOecOz86OuOqtS{@R7%Lcq!`~|9io8^Tth^=5J{+ z`qjDcm*xdY`?Wu37{7mZWk<}G2J8~&^83RNY1(zSv$N|z_p%2MU&G=~QbfN5=-pK= z<(;fEg2!B6`(gGK>$aTK4d04_v@7%X#l^*$mVN$g`7tXp`H+VDg6nG~XPi0HkAxpU zk_BFECg<)uemvz>%$BgZ=Om0|^-pmP@KovFzvqx4J_F`meQyQ5LIGZ_uk(FTTJoTs^oa zL4q=JHiw19~%a`W<{ zOnP}^eQ8O_t3rh?U8XHt*0*5h`GwPpU*52DaL98%JlL{v@y+i8+h&H&*g^8wSn)*d z@X+OVyzNSJCtO?mVTx9Z7A@Xpgp8X#Td~K)T@r6=X1;rLj&t5z$Gxv{V9Cep#nV%) zuYg)wE4fzL)o-f!SG@U{@#9^53y-hg#Sv)PzI|=VS@-G9m<=1WZ>;|sn8l?zea@Wq z^t$69B_$>9C2Jb@vgXZ$O@sl%G`ZqWpYqwEpFX}gV*mYXai5+&|KLho1~%(BIHDUGVw=>p$cou(oS-S0-HK!Lv zyAX0(q@NtuVD0-SV^@7=TDOn26@-^v?Wwrh8%$)KpeqN8<4yZN`bHPQ1MeeA*o zHN6kd!wWNKE$Y>~x7*O=k4jhy2U1zb;Wo+l21V;RIcYlHHV;!!RGb7#Tb6xu)S?Zg z_0G);54?QY=jkP@OAdwlo}QjdGeg_9?xP=~IA?}~Nio2*EU^Ebb#e*E~+=fHu%%OCaUFOqd?Dh=j_+f38bYied@wj%rH zu@K{+i|fDI=&^nB?hnt7%ghwKAsLkC*{D&YQ>RWDQksxh?%usCpaE!*9_{M-acg+^ z@Ehwso3m-FeiXX~@kp|)sWjvfo;}zn)JvFeqH*`n?k<$$!3?SvMlCWy(=4?XtukKAlFaR%tQn zlLCjD1MxA7k7(4q`5p5x!#(LmJ;9lr4!iRj5j(C>v2yClK&0l^oXdMRXx{l%Sb|aj zPX&~$2Ut0(<9fV#ml38N)y@AHJ$kg|@y_+~P&soUyvzO84EBT_&X-ALU$h z`k;!6$}9H@c8~gg0`K9GjsxZ7kiyT-x#ULfD$U(7D0lUU%5MGJH3%XiJ@H=^O%w?A!>qdWnuR*a9FIgJgr#NzLe@jbC6CZF4XH1c*U{&;w zVe#?tWalQaYHAz-BGIz+z-9oe{_`VtlNZ?~F)hr(X4{T9mi6}G>8W~$hivB{U0nHm z7=_%ut&Lh&e0z6ZPR~Dk>n4v$Gtw?vPPKk?_HK}$i)Rrip|hs#UkOUh?sYpX^Y&((hs<-Cv0WpU|g!^Vwo7p*Q! z8ChJy1AoX0%2}%@&C^={rT?KrhpG%)XqWsp+$O6l1wiWP?_OD1^Y3^o8@#x-rcvX@ z=J|7@1D$D{`VMNQzlB>r zxzLS0dB-H$W#h-_8W(|g$0F8#=;-?WdG?b?hd!)pRuc6nTbcwMJm*sHRPFMn)U&<8 z%u?r^awtskmFxWRH9M7Byk*M})w47EQ7Bu;LQMX}37ztJ0KN4t#b4NVkpo%_Qd+>F7xkI(ya&B+_o+e2;kZ zlf*QWdIPfxo`tV6u(uyfD*N&ME4gDmCye;Hfo<2cv*zxN-@iz<(6dT88eG)Yq+fmnpC#>gwv?5QWa2^(IYf*lx$RVh0M4(LX*JQxT1y z@HN|2C)<)E&z%|>QP&VeEYNvI9}mbQ>mOJA+tCS=ylg7 z+<~tJERh&;W^y$rXPsa8{%1secy8YCXIEEFWj`H1e%yqz)8NlPe=FcdsE17Q-@ThU zK~jZ}Pssu*xp8dZw()Us3awkmp5rxs8_F8FR+szTy?_7o*|SZJ1+l;>h9trS?%msp zK)#o!Mv3l~UbMKT`p4x}*-AU&$C9Juopl>DU(EBAU7h~379qsA%{!*$;C9I>b?=@% zW8~{H$;(ua`OmH__v);*H|Y2}p?qwD2;OjsVFVR_e}BPc-a6Hq-Mg2?>I{U~@~3 zILTI>fSkrtC;?O)w1VqVKfXLCeq4mJnm&CxC^!ljWRkyngnH90p4?K+&Re(s)b&!_beDK^ zd6}^U%@1c6MIV>kxqJ7Y#0X;C>!((J6!g{S|KHv`kzjSv!)+3T7Bugy`6rKX4(EuS zN^R@Vk4H(GuY_&&@bao%yu(8p0mALLGIpp1IMw&~`j1+&_S<3>q=4L>XICE>=ia=u z;NT*OpL)cCJLJ7-M~2x^^mF&_eW}X*{kz|+eBDW^Z(~ElKeevENU5#m4GsSiN)49M zObW)+2N#-u`&6`{B&I=CpU-bI^N4mPtJ&*QrcSLK2eCw{Szwyf@B~4K3|=bC3zVlU;!Ok4=dxwXw10d`kBE$H302Auq%JOiDCw)Ba%**E zndRT}BgX>Fin611z!SNjiqbcLlI6(UqhJnJ>C?x(#*N%UK#yZTFb=Mk$tppNzeYt5{)BGfsSE1q56&KZ9o3s$F2 z9k_{7Fqz@s5fQ$dH~+3j9O=Wid6M-eaiIlp@KT95SCu9lQZxIV@btVWEucYz7D|hM zhQ?NurW8jB@bA>19Of+qHC6S92At31Yu-H)cDL%skG}1JuH^4!KuoT}_xHMWo!^{v zpQNXk58$KF5}-g9RVjS?b_#J20=W-B2`me|riL>mr}Uq5k+N$O=NBSYqTakpD0_j_ zpo`o?R>#dim>Vi`+(D!ERTXyin|Dqep1mRVSVv9Ut`Z<~Q&mWCk_5*wT_@ z{4~O@2TL!IYorl84+KI*o^s73@U2s2!9jHnVA+FlE%pEo$&F#pKP1C{)N9htbY0%g z;X?C8L@1_js@p&f*l%RS6VY-i>B<7f*@Txrnzzc1qQa#wdxDcUeeT>TtSQJH`ndP} zn;SZ?zoQBKsUZL0dEo=AtE+vQG-+Z{^zbyLU1OLAJtC*%4~P}}FYo6NcfoMxU_D>S z@*K=VIol~23YR4clT0g1B1safpV%94QLiBrzOPfE2Z6{)b75}*lk0_%_&S}Q6hvIt8_ z`i@CzLTZoUwZeuP85u=YmEA+5;cF8((hZw5>7k|7!O_w2ra`pJk6@L-gZB=9>9hqx z$#~$2tYgq^RHR0805wWf1f&*;kgt9&6czrJu(ZVT&PN{v{0 zr_(A0Wn}|E$r~cEn_0=!H&q*j zw}VZniOaDq36K7<6S$;?N&-eedEs3hhb+Ct%PQIV9xrTyK$~b2>7g_F$t(8x`YPHx zI8+K0prZ5w%(%wZ+v7J!Rxk5RdoEfhgU10vs|@*HRlH1ExtVe0_QMA^-I8=$O=uIB zMs8-d!o|#Auz=5s>=b$J+VnXQ*RIK`Or<6-u(2?lJp0^Csh6AnWOvLI(M&9^%nj)e z)B|0hDsp+LF=|bD5qK|aB~&?oHSZ-1Ez z?wVt9t+tvt=>E1T`BXIh=Uw%JymlzdpA4tSpR8{ERY#t<@jsNfs@eT!{e8;7Z!}5B z?hJceeMz!n5_rbw{K8QZOHPd0qSkcF$UPKi#El{pHJwM4J&H(neB#9X#}96-cO>V> ze?S0HXYaU7L8>`H{`Dy@DY-@IL6T8l`+m0es8Nx||M;>}i>S)iM|f!P=vxzC1X6yA z(&h>A{RZMi$`(@j@_SVNRh8wd-)3xoUi9+D$RPb=xohD+6)B}F)u=pH#&rElMpr1UDq)2C1C9T~P0`G@oz(FG1k%27S?N@3!j z9?3_w_5u2&m=NT1_dmSTkRrS*xB7>Ky>LZ0UjNC2j zEB2q>81V%Yz{lMk_rc+T+dV^g2b8lKlol$K@9F>~?Lz^~j9#Bb8u6a`$K0d#w4=g?*Sp(v}ehVc%-WUid?mg}B_!TSqXD9Gv(O@=H zGokBh0k4OOiU%xFyFm-RmQj-m@}R;NwQ{2J#<=L} z&x2554#7H-dzL;>PxOfds#;C6~YJsIr-Sg_Okz1MU~cfZ{Ecp^5WC` zr~9B{EW)2JOY^VyA8vBhjnD1KetAb$-8{)7^XfEw7o~iw@}tMI zAR%snLGuKwwx$fCWaxVkhMq64gw>EzntVo)2A3a4GEraoZ{?t)nbrlBg?>Ri5&}TW4jt|iF@$^y zBwPsB_%JuPi7S9?fhJ;wcu%`%*}Gl-q=)0 zTQMm8?m2d)I1i{tPfFT~kB7P3KFM;iVtr__oK)9pjWe^(2ZB_*Iu4bCL0u^TzFW6$ zBE5jzF0L+`?xM0I{x-}16r!O(m<)oPI5h&Fn4(I}xg8?-_$y_l%R996>RUoAJPmN4HG9uyvEP8K);}Q-4AbCP{7Eq?# z<`qS-+GOrx+mo#(>**~IfARLM+Biv=yEJ4&qiHgX02|r9ho?W8Kgl?FMvL zQE6z*Mmc%%r10Ue@2VG{e-Qd5{N=hGJp58HX&NNNc$a42E<|j*Gsy7>W}8AtJ6wXY z@zSL#v;Ll+!?8Z9X}6i3F_=6U6&3a7*_D25zHq!7c*)}b_twoS$e(%so{#q+B>`A=GuvjYXi%bc;j zre9yXQeZdQ8$sHF`$1{{9gfknZNH_D&UOe_RZ$TMU!L8)gM%!}SWtf|pE6@x2M6k} zHpc7~p|UA3j*eP?z@8MI^_H+l4BSH8uvr7Zp^gbogxes|<$U;XAO5$btZZ!l<5vHc znNjj}wJ6Gy;JYoZfq<#Y#E@1{Fd>pGZ(mVj=Awdnq__5ZmvoFY@dW+5!r+i#cJ!sT zc&_E}x~ZIL*UEc~f`frPS^CIVSiZ90N5Ruw?T5p=6UDcCl2qbh0EI+GGjyi(jGVD> zp%UeuZ^xn5F9|xwhtw!K*>43B`!2)>N96J;-}Zv z^aDnKM?a#_js+A8?=o<~H4#}>uO0$6TTD8TgVkZkQUz3?C8*?5p?Ht}=J9yp`kkJj zWSwo2nDB@Emj2KD6p>vpH!LGRh+AwVk7DQD=g&LsS!4{N$;rv7noUV%T=DkId6Cjs zLpg0aKZ*>nMI46K7qmucrRDgsvsgDe=(uR3e&^~#W7MXO^z_zyt{ZW&2HK^61agSm z^`Cu^((lkf})W27pV+gad zaj?(|N=hk?!eq!QRf5Hy65;WSB_Q+shr1~@zcRP4RoLt|SluxBye6m!6R&q{1SLdd zxZ=Mukz|G9l7K_uR7@a8!K&dy-i=Rj1e|*R=eR}lRQf$vt z%L8YMr%Rk6w~AJGw?7|h9Ml{g5U$j4Aasnf046DV;h}SRF>q5KB;k~^t-bID;tRVu zm6c!Q`eSHYHlxwpxt@tPz={7Qo|IQXUl2m_3JVj&J4N_%76tAF>KMgEDY}_a8eo^` zvf&```%7_lDsf$q8r(X?*^T%UVzCpN$t>0_Y~y!%idrsJny5Z2UR>KR7LJQgR|px+ zRy7RJZKemU5_=i98C58f%t;pGIYvcaP*=q2qExwX{b zKa4XiiB1Ow%oA@5L2a>>6^zAwSV)BsRnWo&U@GpK_%_h>kZOV$@NmG1wQAk^5LG~1 ztQlUSvaGsU>E`3pX2ja}lZdYH&ADuNv3rmW?BHG~B9hR=|L3|5fkOi@y}C|~MPLVcf6qmH4h=H=!JpE7ycwA0utkxcgN-#>w(q;CDDU3mq2 zTT+M~WdJpb8fHMLkf8KJRIqEZ2D=X*o&x4#sYJUF5sMIrdssMFlJq^o?2{|Y+mreQ z|E_#CM8pVi!))%7y#-+Or4+J72@wzJ+_@c5BlQjquE*QQtDb4wZ{`IU9oR1}uouKq zMurLhM{7fc8l03QTC%A^t5%ys*nXI#2AkgcjoZV$C&aoGl&)2I$~gJF1s?F1Hfw%- zTXUfQoZFy#`ABXNUCUaLZwKdDff1H3R@)gLvHy%`bRxblf2mDewd=jD+ zCJR%Rt7o4+m(XN|=n?a(o!v=XF*qy5r9r5K!xCqr!)v`-D-?&0t4<)93Um z2cY>hq3+9ybV&Bo@#9z~B_;V%FCt$0KKgsXRP0v`Ih5Vu@7d#AmXvh0;Uu?exR5WZ zzl=<>$W-mSL&5l)us?%Ow?Lk)ujP9}H7V*w7DvSbJe*47QET_C-`51t+I_}+7)T5V z-PG0h@TB3UzV_Zxp8d<%6PeI~g_M8(H>})E_D`BKrvrdPY;0B0O=E9mX0|<(nKbAm zLf7>dyTo5qz388qn|Ax{g5bJ#jf}*FUf=hh%uSJ_D3btN?Bc2{77OYFXK~l=;f1!E zLW3YPCi(L(#4}7wW$E^soh6^loQbPC>sV9OMtrkJRtMHI^}bDbkM53lY{HG_5O(ql zEyVy;`+Ye$toDq=XH^lY)w%ij{1k{;)h66WRaC7L%HDCXtWb#mOPB8}#c)I9kno^U z`_s+xQ>hv<&&-+=Y2OQbr=-x@r8H4z+nyj05E(Q!RM_G_k%Rj4C5}H|(oIS?Zh@D; z@j>S`RUX}$qOX>0+_U~*lkR1gB0$)PCf$h-v0!J$~^QE$;=B zj5U@d--?ahQfv%#gK`u3o)U5Fc$ak$2LS*aO8L5wOg9Yxv7m+}PcK?Z!5JA2`mi6# z2ScFbe~}UaCP<6AIa><#sIsJf;ub)Cv>QqNu^3u+#mlG;d=h-<ACroPqD+ z2Ga>ycw+?R>T4pgN8+(a5Hj(qC!EBfL4$5i9Y6jLq0#v!WTc1lBix1AMum|z*|DQZ zfjE5NmDSjEdk!4XojJ1|d=BMb8ud?-rInS2Wl|gQY)~)G6N83@_bA;+Z1xcT9uzqk z?#M7wr`e%a0fQ7N-9@)EnLRrZFt54plL~+pEurk$^7Cd_=BoeGFJdbaL&au{E%*f5 zc$EUJC9>X>8}h{7AVKuz_#@K^z!Jyxap%_^ZVE;C%cDhc6=X zA<~K5KM-#Uf#p?RUMwCKZ-lKZvbZ8(mEufHdGkI)QX%_MTuVf~sM@bz9tQuDsz(q| zmOnb%tw)c#?c29c>Vn@(umY#F`+xyEL4j~Dl@DNDfPf{;bC`}E=YL6HjV zF^`B%9pFN_A>vJd_vl=rGFDPG>@~Mz1@Q7HUa%Qsadei#>TAe?CesD4u z=~S?P*6!j1M~>Wskht)4g;3d^7cXAqc6;>e*92`5LH-T0Xm@ch?xfm*JId4PfOkl8 zq+C1sfvq}ye#FGiBiDLK@SnHf#=8CKK?bcmcTQ&KcNo05A;pC`ZpOun7ptv#Yrb3y>8$ov`m44pQVjq%{R-eFvw)vd4dSX$w9Uyn|4-zVhAL5j*k3%v=r*}hCDz~lzI&#jQE*B zNI(mVq{PIoRIKTQF0Hli6)~V!R933Pb;GKrU_tXBaLevhYbsu79CcJrOK5?qLeR?R zO-(xt-inzXHpzr%<2z!F_zwBG`@6^IH8>BHlshowxId%(1NuWBq> zEPQ1@x+0+_`tLLQeBSgo@=y%vr{V&1@j0QU@!Ag`CG35T{Ij5a8ECtI3Qt5aSXj_bmQCGGeTnk?we=wxW$Ag6a|IvoLhTZg`6oO6vle!cpm8Ur=?{tVRWgwOdLsH*nPq-Uq1D-_X_gSi;P1wmWK=; zG@+#=2JW3FXli9e`9De%seRhvAu;rS8B>Qe+JEd=7tXy@9+Da9eAtVeg?yFv?z033 z1bi_u;VKp0mTNYdF~bN_1X7ShaVI{08^Q+}cpSAsD7Ex{b&ER^%L3AtI?b-XWz+fS z>W<3F%AwCup@gm@Y7bfQWH+1~+Q#-BJ7R-@#_zKtThCzUNXS8ld-C+DI;BkKE?u7T zu29MtHJrUvCOZNGdPt20|32XxSt9BR9=HHD9)DGKYoYLEJ_p8=4a&xWVcNL$+-p=^6*>#iXQA<*u_Wc{K*O zvpJ2UD@}8%BS(%5H1N|W@(4D-2tt|Q4t(){{7w!j)+vlcZC9;YwQ&81p**~h&`|$> z^?0JIzx9(akNs|9Kw8O#ruFLzAAxJtq_C*yE^*J!*7n3TB#T#tg%d#zq3B-Hw1tQF z!lg?VP^6k8Mu=0`WZu;kW*Eyw!<;yA;>(R+7w{mZ(W)j1x&be3;HvDK!a%;2yJ5@f zR9Ex}L^Oj}n5f<1KYa77fAM&8Qy-&*(Bxt`W5$fyzL(HYRrmzMUVZwcBaihTFhDY4 z^XAQYp8I}vPDqqW1HN$|rkMMF)jFfAO2&m=r|4x5^;T7FOgV`%m6(`#f|I3qABhK% zK^*-egt73ohE=f~kue%}i&LI_ueB)-C*LDSTDNQGHYFg<)MxMBv9LL+$Mh2r71d5Z zezy$%G?ao=`~nb;jhZ%H45#!yJ6bt_3g_>IH$3%&#?b>bM8x4e3(qG!d)5(xMHmmx zkm%w?t4BaR-o1BkTu{0?QlDPY=XIzmZlT~36sFSk%{mPJgYEE9SSd1|c@iQfrMB4+ z{HD}tMhmX3-Y!26g~>b>6ePKyrc!MCaqzKigUB^1dn4RPA*)4EZQ9zD|3(z2s}34|dXnv;Uk_uxZ> zlpS$w7nFn9l=F|%X>&0FboNHF%wA41-G0rQctQ~htG$ls2~@4%{J~2fbcODc5+G1jRaFsRD<@ZR#>|;y zlSI}-!N86DNc2kh@#a6>q=M^B$T1ML+gmz+UVMpsw2K8hILvNpgX zIkg0tP~sxl5X;;tRzWIw@CvfI;j$qehjeTP6)47E7=Eyj*IURbf_e_U*>5QrV3p0S ztlZC?8vwTrMYfH6Z4P(PPj-#M*s49rAq8S5gamkkNlMq#-;_o!b;{}3AGkyI9XfQ^ zSKY#p-qyW`4<|v+&WW(?_B?!*6~%*m98pYU?q5Ou8kGoG&WR?~u&Y;l4;s{h&8A0t zaYJFuQ&LiVJ-xlf@+C1hf(uWhzf=C+1AOfTFxzT`Lzga)TRt~#j1t*;`0(~K*hXrZ z7;o9yk$!}ebzk0ZC$8?=wM#sBY)-XxpO(trnn8@G&RGm^@#M)9TT<=&_wSd2gH(6w zZV7h&KXji~V#<@$gCcQ|P-vR;^5t<3#l9m)c7y_Ue8m-wfRJUtvxd`;OG|4>K&01F zcs|8Z>xRhXtJ1xN-Dj{>O6L_TR%pVcu3ftpy0rOz-GDI}T|ip6i$v#&^E(gCLPgnN zOUx}K|560uw6s02e^S2T9lT3Q_au6ls)^hkn*Q$do6qZrreOV`5jPfk`>UvU-lp(T z8$R5M_$-G|+Hk!jT2k?F@Ox2o2}zCn$=G1jwmn<6)SWP4f{N#6E~R0&>V~f~>_yh4 zj3=o8N8LhDRBX#%Pvam5wwYjt&?Z_Wjw5cxaR0%B=`=P`CmPrqcIicn@%_V}wv(*g#HmY5QE?ri4z#{{EbeL3PCce)YnL({FV zEFIF(#M9sKm~Ozy5v&PXq!6yU5@f*F(!*(tn1d>DX;t=UY0Jj1h|zG2Q5)XY)%rL- z05JuCC`h5P83Yw!KSvyEZtUrQ0k6)mmCwf02s3QhuwXiF#W{(Z7QE28pzY0?>h)`j zUrys|B+~-$O&p=U9UWVehNM*o)cswCsEVJdyr&79n-FNt~Cs734oRtcugocYt zO7cXs;R_Q;?rPK9)H4P`ivLeOkBtmF6a%hp)TGHcc18c!8Ri5^cBwdeKGIOxfh5YN zQYUdh#BCPt}Dg2D2D|F@yanzpB^GwS%hA=pa5+8n85$XE3DVHO`BKm-wX5%<;~zW zb>2(k=eDF~YkJ;fiUD#oYTAG?5?49Ccp(Zz?ok{$8dUQnWl8S{! z-ZI>zW)uSBX)+B&F)`8_IWpjXSf8OgFJ02$#Q7q&-g^2}0HFy&62Qvbg#KdgDpPvV z-~^?glu)4l8Fp8QFge?s-?F)d00jq&YY1%=HocL*P4IvJ9QuMIi@i^u z?j`-{ScRoKk1dHp2ie0T%_ZHCrhIa9&4se~S3ggB^ymO;kw_l27;=KFtgJ*s1>5S< zi$olfRz8Yz%1KR4&D|K%*~_6-RT~K850(xQBo%*j?t5&lS=ZL=5D`iAFAgZ=ocOE) z&CSgLWegW+*Qrw{y?THAQSu=?+Z;R)kX|HKNrWPjvX@Qv&HG|tC3pw{;6rso1fC!5 za*PuDc8`R;{c}=++NH ztnGwKbuzt3?b^og!zgA(0I#}JlN-aKh;;?MLLlK=3N9JP(x5>D6C@!>69wj25J86; zv9~8pnGWok81M@Tvx z5y6bwY(sqD)+D7vLc!WSh_JJe9vgoZ`n((NkBrosd+q?}>jFBW?0pdc-i8E4I2J2G z1f2jr34LL8+*ukZrBf2Jm?BDy*a2u*(sHv^A=mrV>2~wDdOBZnI6b25gECHV4`u{h z&b+jyd!_j4qzX$6K}qO08P3=dv5P_8;rJJ@Fa8Fuh3;~h?r`A10mY5f>>?iFY6*3) zxA%7}e%XIvlrIrVdbY7pIDL#PG(1K-Aoc7eI6NM((`;hyimZq|*#Xo;icRaY#Z?9l ze9akI?>~jAQ^ETN3B(=aVAAuSTDb!jK>%R^R#Bnl-Ly1rexZnCLE;+d=d34KQ#iqW8 z4jCO8u;7{x@zRz)3XoSUpv6!^8x2N)Td6>GF=Seiuf*HWu?+2`?W9Kc%wnD};@1Tf ztCZuT?(Ob2jz;)9j~}<6I(4eo=!#c$sU{~v+Gi5y(`d(qrA!8-a1&P2a4*~BKR*NQ zvz$6iXo&#__V14u{hVDF%D9k=Bz6hxV0O_XqN0vMkOg$a=z{jp8_kX^BXlV@399r> zN=_C(wU8aZR^tJ*hB(Ek$!Q08#gv&^)JB*RM-z|Jx|4>61|X_MlBt^Mk|l0`L3v!l zU4=BbnM39OT3|u@K?~!!y&k}RF5CcHr}|u6Pwm>Z6MHA&I5|0)1a@mFyu<9-vn4rD z=&NgJ$T|2f#G_@h4i<~$%yx#{Y{lrCrj zUe-@nx!;{z!4lZgQAbmq)IXej_iPtyod!+)*y{&yGylye=ji- zvQe(CczS#4pc`>N$Rt}xR9;n8RfZq%>Jh()G#%0EIBIo?hH}d3WAVCKk=sO693*OS z^RvEvaMMKp_^?X4x)}chlrXx%BP0BY^B)aNmnu#~*UXJLTIGyWQ-wBZ-kbv7Q^+v~ z2M4`vTesqK&=ISb^*)aCC2YoSO*;tRP@_+D0J4btrB5cXk3MY*Ycn4pfU~m}Y>dpZ zFc;nsf=F6FNkq(Z5#tIWRW6GzQvj^mHHX6HF#Wn$_;5WEw>mW>VJnfyLgzy)3=j`r zNLtnZ;n_&*3Z!Mso6nCIO$3UI`9RD|uqQdf-?~WWJ=NkRtOc#F|l2c5jd{ z3WB+;tYkjY@r_^RtXR3S=)Y+7j{NJ@yXFs*M_Mx_0l8a?P~E%t^o0xcsn?i16ZHf( z_sTR-CWru3(RYFo(m*U^?z2F=qNFBMYsyWW-p!2J5NBtHZFY^v9)|90t0N2?+fni9 z^XDRtd5QDp=8rG)1hHH57s6qGznheVuF-k}p2b=+CZMYI&_5B`a&x@8j648X>}DN^ zsfY1cdh6DW0EtwMT(V?|NNbqJT0+$-jVGQvAEiyKWecHTWn_?%1}IV-l$c^e&YsQB z=AZ^pi9}%rdh+~vc~`n*45k_4(y90=CBlRW^(4$vr|zd}Sro0r_LB~tRUwO_N9Vfs z>(?)UK2Z@z05heLT2qBUGjibm zHJr;9Z^c$^#kERUViWjFe35o9ZSBsb-@(-7boQ0f@_T_{0EG3#A5v~r(XvZq@48jN zb;!;#gN)zsuQcqYH2>f4d8~E>vDmn^*k)Xg_^U|c8brxSsa!FFQDD_BP|L9mjlM7C z-`%zbTfj{4S1g3Zs#ONeCg8riZB;NB<^b)`u-n_NJ9T4`gZQ(Nd56tQ!)< z&z?Q2rq~qHxZBo>=*x2l@PTBx(uhNc4w+e6Zi_KJ5gOXKTU^cQOzW@<7j7jddmZ*K zHr8L!u`u?T^5Ds7?e{HM@n==x{15#bmR!ioJpS?1vUfZ|k7sv}c9hJ?S8P=ny5-QJ z4s0>L_F(mgV{fuwHj=xpS|#^Ud)FQ#{@n5Fj}46){I9Igzb%%+n!nopT*9pi{>>kB z|F=)fsPkX?;jc4n@hgr8X+M4k6_3_YuEIP8_P{20_Xgk@nH5JJcx7eKrODT;`y~u) zZ=dt1i_3uX`9{`;sa`=@E8cv}Yu(Qphbzd z6S3$t1oJLDUr6C4!!|@S;0Y<@x>n6y7^9IEl3%sXJ9+bU?Sat;X4#ibQSWoUP2S5y zPv5$apOyydd>(NB=K|;In6;}k$WRlMLf4(R7o)2R20;iQBut^zz)2dP+!;OthlcVg z)SiqxAn@DS+vnOjzdl4w-V~)P%rxeAh&dQM6S z>s;Jj<$}j$Q*7G3D7f@v-H7m|lbZBd{_`b=mlAbGX!0=4wxKTb>-rd`)p;4!eE{3TMuDiq- zhLmV(K00H*cK3kl0i8>&A1P)Qyqj}s;a!WgoK|H?S4>R$dd=NBFG=PP1v| z%cr%$x2&Y(1pVKlF;bJ2SlvrZd<;a!#t11#aMw0*S!7EUF+iNO$I7NUsTUk><#eoHxK`$mQAS;i0SxE88;H=ps_0 zOjj^5DR~@Sy&uMpkWJVDHQF-a?d-X8MRan)S;oUwk>Ul!qfv?xo;@88#`xJhCKbyC zr&9BQ^CSM^pi|FESB@h7TTfbM9B`8YP+`LBb1h`@Fd(W4#VtyjMd-zgdl4NW7zDAB zE`nv0A|}56(2+iqq{h);_&}TI!RwITqx|=R<+Zo-K38dXCI{QE@rR6 z#5o&s2znsaO}vlGiRM^V%4s&%R4HVstIOc-TGOXe9EOKOEVzUzF@_`43-=zt?nPFJ zhuinqxw9AEDQamGJf{6AI42sl@sg5=12wklKt=jfpR9AQ>})TFE-spS%*oIwr;g^l zStpbFsbA0-;65?NRLyYCobCQ9!M*j5dcgOJjj6J%0F6j|68;aZuLMisg)Qd^W1qxG zLMa%`oESxRKOODT4}g;)jAjbhA0v^F0o0;c(`&Nq>BU}9ho?eAJvo1}sqXCRG8Mz( zSnYu*vgo0ZZ$oLf>D;;V6GFo;w<$9Y752|OGvSKV7z5_rLGF+dj+7T;_9F@Nv;fz6 z(g;X5H|8{2Ts_|61(0GIq>d|d622}`0Fej9+v)P-n>07FvqAuxGViI}4a5ggrzpQ889SnZvV^LgN-C&R51w_IG6vHS6e%yIh{Z16VualR@D z1w|ZsI8d_(W0*?ChuFY(FL;!igDyo_B(J z)6f!*9y{jz?p%0cYHA@jHO50{ET$sjowTHap~Oq}&-AUpJ6;{e@g!uj@cF2+#;}p- zWA2=B&K!6)Atq)MkwDtgF&TxjrDeaOt=01!|mEk}zV0TkfCt5CFz9W=9BqawIFAcYR@*5gm_4W06 zKKk?f`X?L4=P5k6ecZk6gWF1bFZR_iDa{+SP5UhShuEf8P+Xi!foFtn`wvCN0Hwl+ zDN?O^K$jw|&Jmsxo|yq$JNu%^ngG|ux{SNcCM#kSGU-=^Tssd>&+Z7-#`v6Y`zY`K zPl^u!N?`^|u5Q0}tuU|g)Cib#19_OfP}AdP%$=Jgj%FS`DMpe03GZxkHATa|p0|HM zFoZhL`IkuUg-58}_Q@gL5N1JU!I0L@vmv9kn-j{!o8vC?as5^3p*0u!mmokmh>3;G z%|dFD`ip#dkq0V;VE8KK;u~L;bO%M1{Lc2v1-c8N#WMu@S0vnTrF8JifEP})Kg_#U z=V`D@QvV#Yo%pOEU`(L#q%vfvi{h+VvrukKe<>G;*jr&`Y;`>S9}rq(;OdX4n(FVw zE}__H=NFbtz-eiOn701E`7mt{VUk5YfI~lZjZ+}B5caUzZ2w?-U6wL-dYf&BUlF#% zWev?LWQjykmV6G90qkI{2fiuyLnKurh4`a4%s`PR!-*kX22h@xDf&#H@WeP{vR%Fp zAd#BBy0xicsnw;+YK3NV=K7X%SWCL9sqMy>E+!8Y3K=G2*rwk8f2ZorO_*GPVI$C` zy3&f-MHdZmTM}}{P!R|6^|+14$TT8K)@jh$*nJ2_UE}idc?ps|Gc2OMJXkDZ^2UnykWX2z!)x;GsYSG zjirQh=oVvoi|5-H%c8XRQi}Fq*J(E$FqHn-2E^O_P;4#kA(t0L!fMy zZ(obOQNhM)dkovT(rLcS&ExlDzg4aqrfU%Sw9JqBnBJ%lru0(&2LcDZj(YlZp<=Gu#F zoJ2$<@yMtfVAoh}YZ>W`Od+(ye*K^TIxPhNLG=?wm`1f2qq6T@2JsNv3b^n7Ft+q( z8b!Noq-#ePK41EZF>!#-Wk55dd;SuY8r*d9;k(Z=x(!ZNG%F-5+wWgiVxkGgC3LOD z=!(BEW0m8xE~T{w7e*?e7Vpk${)1%OiFli9c4$I1e9Mw0y$Mt@!v>y4!h|C7qqtIn zvEx{9SZNh@Qh?VB0+|U*{+4`F2{qAyv3Sxq%w17q+2tp;#JCnKbH&!+J3=&KOszyK zXF8?CD2_(LHuO(hS|NjmcI^tJmjmak9h+B3H*q#=Xv6|Fp=0)fq-1#9Rwsp`r;d|u zPEXEz5Pzj{_RNpkUR#0&?en#3k?Bz9Z)*5kTb@D1k*E96ncoBF2&$n_vJg}{lE9()H1Q+;MuqfT|I~9 zabcPn`WZwv-cVgx2)o*O1|C7_{FW($_>3}{c_Y1I*m8sdQaf!_y}jcrbV%{gF#y{Z z>yL;5u}&ll8CPZW9UI`%7uSaJ=rd+scPti9DbooW@&I_U&!=Bz6xK zwT7H&FzoZY@~%v@d{`J8Fkf{@z{x8e?oHH*S6I}(dJ+UJM#Jq4AAohl&T|dLm=Q_i z=}M*n9f!kKr&dcty2;ce@K=Q>#9Raac|8U;`4z-`z*@YK;1tpQuFN1j%NeA!!~WGH zZcF2G$J2J>`YE|j-L@q8nbYP5LmhtD4QzY(q_y=T?`}5-@&ynRr57$|bj8)z4e}!s z)GBsp0+H*4fHaX-WK5QlJL71i2YKZc1_>{8%Be?u65k+auFKK1Mj8XW3DEdSHB~8fEbt2+1C1%}MH$x^iXI|G3+fQ{TXR+L zEOu&X-~`EN*9HqL4jknk;}=}5*`O5g_-H_szh^>B*uu7#wyY>!mE$q%(w*Rei&DFP zo}#p)`N7?@{+?iI5n`FXwfRpvOztt-UAMB2wJ-iEcDbK;w#mg6J&qxpabHrJV!0UG z@QLGS?>%Qy4CloAjXkqzRiE!^;pck%y7Gl`<(ohW6DeW|C!n%i2q%&n!*BA9s7=L8 zPlzBBMXY((jw~OamDL&gPUZTnyXk(%diS{Qv-kS`s+JvRA4&@hYqourW8A~}znHh0 zMh@001U@Voy39W!EEUkGEuaRSTZw{dBy&(?*2nYbN2mViz!OI=JnH{hN5fhCBn?;RahZw|02Rygv2I<<8atVDad;H?N>l_nLYm~u>7ADS{L0wdw}0od zbG=Q?%*Lz?s3n&Tn*Ms_MDS?Fuv&t&G_KZZz$>dS|2&Gk>wlM1)%IZu?L~$~TJIp5 zrQ!RHt0~6HZ%Q=qxR%gaHi3t=*b$)G1a6a^MQ_5Gp+=Vtr_Q+*LvUJQwZv)_&t?u8 zh>>IBYrNRRK%PlvD`7j9fbn3Zjk@XOj`L?P@9# zbeJ<3FigT`h0Kqi)mzW^Psj%6=^vhiZ6PPx=}2Kk_&Is);KFs=VY!Ts;Qn)`(v#L& zneNepkuvQ1vaaA#8KZ#!)_u*P+HInciGQp<)rz#`VM;)IVcf3Ex zRSPx{I{*cqq;9zyMw+-x<=~6f1_yg;pa$~MR)yQ+figNZRT@7k977^%5eP?uP~bjN?2$MnWx9^E{H;%L_*p^>Ddwo0?z|1ozasAw}dSnMKiKu z7af<*n0f$7>Q`vrsAd%H5hx*|%^`X%sKyutcINzG90$^{0k?+eN|Wn0z^kz_vQ_;6 z0i8BB`T%oX04^f#1tjpp!&mLHrkDf*hoS$7uS)C(Bqt`WC!xkD4!7w%bOJ4swLW)v zE!>nPU_0p%(cRT~`&)LWn13l*0>ll$fW7$dC~h$mgHfN`z^dJT11KUL%24WGtstmP7CdQ=>_vz;HkB{*m@cEZUxO@9 zLm_0WMlqp|wAXR`m^B86Gkqn(`#=SYwTGGr{@AdSNCD6V<*bl-28Ir45T=$?dj>Hj zCj@p(CP;!tryN1cHhuOD}--vQLPzK&GBBcw(=VjPv5Z-u@jV{BcOc~Z8Pl%^1XPIa8 z;N9n7xJsE4NmjDt?=egsg=RRZ(%8V0r!A}q?x%^nI-B7O6xx)j+}55nB8ZWd1`IA@20s_8jbbz;uvq;5U$h&FE}(S3cb_x zf5Baa^d+9U!)CI^WA?-1gT;TE{an5k^)W%SKF$A7H{oJS%gcKpqGFc?$z$UVk-tV(UUp$z-TMZvy^>2 zbNMYmTP|F^dgsxjb~M)Y!-5gAj4dYf1<@7=0#Z@JsoC1v-ZCME5l9kDh`^E9S#>eK zD9)KX*Z&&Qg@LE|laC&iY3}OsdyS^GYSShTzV()PHn5Omni~_4_JDaMkT<$w7-LvU z_wK)E{&zeQ%{tR?@aTe*xvB%t0!iu&AyMqX^F>T|ZpCkANTa_!6ia978)lBF^5m@h zk<(?Slr$FO44O(`9xd^?^qlk|_d%0V+iB9WFXJHCRwgrN`qL7jliV368Rmj zLH;MkD%$Gr@huW$nC$Hks)ozLlc>so#N@&TDzX>gh z$j3&{(Wx=Eu`way#h!*kOJ?7(m88vt^%a6f43V(%xvuH8(ydvpoJ(EZ=?ieaTp;NY zxnkS$^${ z33WgA&5WK%oYF&%NJXX^%Z4!ej4Oxph!J5Mt|B;y;Q#!dUqs)g~5l2 zsN&Ii)J*#c#2e8mU7G`uS!4hrVNMg~2A_}+gsY2Rb|G7HMOp|bp~zxTcz>>JM`I`~ z^kilrUATDB{~F-2ghWz`*++(JN-HG4u&yD$0cElo9TMaxk+0X_Qb&JN!y6&?;wqgl zul_juc0^9i*Y6urw7Tx-^m}BCQInN_wv5lnvL7;_X^(?b`mEHQdd&WAQvadb%8Zil zsE6MPQ|fXqBQ8WYesIE)q&^4jPWMhvte0h5XTHL=x<|8*E+1I!I&jd`m7$x;X$>Si zuF1Jwj|`3t%ZvoLPjw$#02)Z23V8<6!Q^lFPkMHku#R8B7?i+?!of{q?ZAg&X-WfL0TN zjRCE5VNpy4#1Foz@6e$$s3zHoKB%WV!3>n{$gnfA&_&5xD!QaVLGS{s#YIIT76|T4QH&G;DG=!* z2`sM&Tg40KH&^X5&N#cy`Sv*HJ7;`jd<{zzSZlrS`~T1R%;$OL{C`;Zq%8oN{Hz9> z%wjquSstHF?7IyL-~jBMK0STT{adpg9o-SWj*(gE2b+5ORbFxl6ODVmxge@Q#y1^I zNg4Xa8}>X847j_Q4Bg7qAd4YGX0Y)OLrbT@nFY}HbkrjLnvdMn^-KwvS9JfB+D~|#M#_~7 zguHrbJzF0g-C173dHgulS=x@gNk5GAIwGppaGyd?(6h`;t^lk*-or9J&Znpr3|Oy-r(9L#(}jF+=P#nnfBH$#lRk%cTnRCHuW;Jq@i>{?M_^?>>2rkdO=8Foj~cfe>40;7MzhbCMKENhwki-b$bsT5LX!wXdX7PFQ0rU3myp`ZCXXsZ&!+%nmQ`L3%oY3M`VAX&c)*)#^K(Hv`;6%LIgGvw zX6&<`WzOK6?et8y($1^*uGGC|FTIo;1Ww(padFvE zz+3LS^-}NN>5Tr+f@;b!>4n$;8!Ig%AIw$?ekcenuGtV&ze!QP?9q4I z^fB=c+`?MgJO_xk{N9^dJ+&stdxhrSb)`(sRttlql?8!F z$w7K9c2q->u_~~`(B2V12xwz$Tx+rI6BnM&XApBTy&w0_95xmwmuicD-jM|)(F6u& zrX#V=V&iT%Ly0mHB#(Z`ZjcPw2{|_yxINEq_3AItQ(p7o$d!e;HT5gTsWLpQ=}bx0 ztxSzU7dQkGObg-~WOD`>{G~^wbj!2G~MID>Nva!Oo zTuTkXBsGsOS0phvAQ?b3bijbOxr!JDV=|ccM9t*$t`$XQFUxXj| zHDRyLe`!MGiWV><-mM(P@LzHJF&>lVa>A=Ou^%aVur6Q+_Iz8Z>OLT^&q}a zNqk5C!fpJot7aJcqkid_cwNtEqNfwX;4Btpe@|k3QriFW_BA*2rppGEFr=t=zG(XW zh}+Tl};#S&fza5E=lOh4YwI5%$`TYi_*Eo9;0EmilOm#YUzQah+yd=X0iS`Te(* zPvu#hf2&XrE7(bi(tXokQGRek97&@y+33L>l`JCO*;uc_we$L|z5M}X*APXq2qI+N zm-BiX3LoAquY_T#H^QVHWJ0b6Uaz~Nm$q^?0elfzw`AVG4Z|_uKH}MlvVd(E zHHJ6hqXG^(OTrIEu+vjD$SN^S%-Izer-NV^KJVx>0Hkwp@G&XD=u&)US70Ti&Shy(93BjD_c_Z3J+&jrySVVO_iTHk-eF#y+QUJe_y& zBs#I5Wx2P|126=PN0s2pIS*ElWnRPIdTTyC-XPCHIh~dW(8w^5e58gX{1gtKy*Z_8 z^i)Elh60d5eX>28C?3nHdJhnj(+(V%26(8)NFfJv|X3ZCpQ_(_AIUJc* zbaETi;BfAcH8d`}eKC^{48Wj};y$ZVIZ;5uA>>u}o;@uTrNs2~zC{BUK;pFw1`dTa zM)Qv;tP+@}N0x2G$E_yPhww0rJDn!URG(Ha9Mhu^2Tvc5!K;O71Zcqw3yB9 zHD>7rLPZMW99_L-NIcenKiMCXOcA78j~;2@Mq~7-(+z&iF;fd>!aBy}gK2fAZiE^=!0o>! zRI9wA#ZV^4a@@I)P_`f85mk5^%SS;O~Is*0R-qvYK-ax zw?rSo0r&+oV9N?4%O(q{pQFgs= z3N)}H{xJ83YEotzF{1Gyy1PK;a88etLyLJBiy5h4N?0n$ZYw+k@>ZDms4({+N$TVw zUZ$l>Qubodojf;cRW-RU48mdtD4SZ#b;gWOumbPHYj)PiDK{?R;Rbq-Wba`VO5@5= z6_R0DS^(<-;06C$Lk?XonUqS@A(j+Ms^^$-AhFcq%{QIDTnR9{^mnLE`u5ynio}N% z?lu1mJHb+oO8g$)4~%ral*{Fx&TpE)?1`uT{Wt$V@a4HXeHJLnfXOqbO;P=GSFwNA zSFdtcbd(B;GP!<{YUa4Tj*`U4gukUhPWzRrYb2XN)$#PJ4<0@|7nsX^S4DJH4*-1f z%X9-DefM9xbG`ZGlk@;t!FgD1pbdvxvX_AL<|9YCIHtIf!`Dw$loNxO)f&{oix8nJ zm>OVbZ(jn{IUAbfBKnIp;VNf&oj2e9fqeTlsh}|&tVi5Q)q~?p^gwfTkOZPxr4*^o z*z_R>t{uaB1?+XJ7u~x{?{UsP>sqxGs?T#}QBJsO^^D-KVg!}fdEk5w18f9pwoBrd zVvT#^XNo@@FLXenBSMeCh3QsuzDDKbXkck8N-0s1BHNnSh z$m=Y^%427V?}COM5+=?AmQ{^{KnEBvroizyyx;>6>pntK7_IG#X*kp^rUVv%Sb%jk z6HuDrmG4f(zJOzrx3#d$ug!#cL21)aW4L0Uep)$^BXB2iB^(0?)M>09?w7s3J>t(4 zD_Q8hv*@qIdvh*0hfQlSdbArcfsUdiMt&Y7+nNs_?jT^b4UsaK86#nRCa!iyLsP+n z;9Qoe?~<9oON@}!5^qvqEVbvzt0<)hDaROzMO+A2DKTve#&p(7lOH7t5VSG+_Ueh? zP(if<9i$%a-+zi3py=Ff=Z|+0!IpyY-AMzH4p#|9-*OM z6o5eBkO?XGs{Vwc;dX8XA!M=f~%g9C% z{%p*$I41WFRg}ODrp1UB!R{+B6+pqWj2MQ#{dUiU1PX?R8!hLdxpvDmfp3L5F+zDs*k)EjYlz~*GL$|T5OK|FxmFD zFG1`?3R8Ey!H^t!nwiP+8_xk&dj$vqp7)vp1|9uV2x~%Xk?1+a$%dOtt;2nn8w9qw zh{2|U$#NZ(1szRW-jorGi-+3S2u1Je?!KF%#dAa~-KxpV^M(oJTg^=0O7%xo_qw9I z)`PwA9~3D6N&WKQ`(-Yio9MA*Ng8~J)I4)HjlWbIf|ME|v`5ou(t-0Z@eoqRp9}c1GJa^c@H>$1ws05RO#r>U?Y2G!T9rT*_ zN=yBbr@~H+dEPxh6Jk@7edN(ze(<-Te>{KSbhj(*?&qS5{ijv^xw30;$2ktWA2f+g-hdd3b)k;YA67t^c4VFc;=S}uSig8{`S(& z2`dX{oUg5!Q8(E7@%En4&n%vtAKvDK6Tul1`X*s~1(1DF6X?dOv*H}D+HhmWQ)?Yy zO`>#Sx^RP|kQyc`N?Df(hLV_whERbkA!HziQ?=F<0Gn@q+Pi*FQS!B$%U;iVp=hE$ zbM&e+)=x&~osK-j9~Yn0W48dHT~ z&+U$}z3=`oB_yUQpjY;;qrdF4s9w{O+}HcFq_h_{wni7q4t;9q4f=q?QvPAkXdHA1sh5yM&t&`sE7H*MWo3B-eu83pU^2<2BMg%c!A z2ltf#Wl83YgchcFfeLGAqf&9O0(OC=dQj`sNTHcuT9m%rbYIw_RJpZ*ZAP$(}o@#p;Lt;#){AkhEg-z-~eDI0Pb3Z zlG?!7D#ktTXL=6J2$Lx@tEAv#Oj`$c-uxN(Y$vYl5?>F_krEF)!!zAkCFviNfv|0L z*Xa3l~%8qRyBIL+ZP3Km0d1=JMfj@Y^b^cSsY5+ z;6a4%Pm&Y%@p4u~>re{gGuT5Wd?9aPYP-QZ0KM?fBxt7hIOeR@o{1ZC6)hLJS9HjlK|Fz{S6p58S^RNFP?D=@Xl>eUFZOcrdJubA*X_D$&f^7-A5TswbYiPDmkb}`e(sYd zgOsk?bM+UI^aNF>l&1-l5kN010`;84^xTP6^vHe201SltakVr>KEIC6e~)axt(lHbOu^)*5DRxz~is&Dr9Fa^QGg>!@r2JI50Gzxd9{36d zWe2_VZ*8aQF&zOMJr5)D0_O6=e{oa~sP2u*dR-GL>^xo0xFLlOf zd@VYLfn@;x8)X%Hdnd@;T@bb?Npa&=CM%wGqKfqDHB^?1)6AJ0VSyzm3Q^@DJ02|~ zH5m(=EA72%Y!_A>00wIrhAv_OrEMm0*BhsJGt73`X3N4fK({Kt zoOd^FE6Bgg_?e|EUnH1Z)L~YRe`w>(Rqpsmdj|L!}$-v0%^OQ(i>$l~1ac z1LKd=M=Xj0JVD9c@$cJn_{+x_uuRmE8H>vTp@SMtJ#E^@1#-Ip_M$d>(-@$E#h@*e zLAI|6tA2%}K1sM)HePo8&uYl`jTne0;u6?w3vMmjg$^WeRVk?r>)(aMsb-x?p{BXN`9vcZo<_JX@!RQPuhR6=bm=qa#<2V&&nZ9T%TEbY zdVj2F59gcTf7K@O!d!TgQU3(Va=AOyihlIzRNYAVsTFP%H;Vp!QAtdE$>r|(wIe_) zJ>GkI?$(j^sDm7Jrt_Crt*j^qyYNd<_4xw;{oh*y2+UWMf6z}%(LoKT0dx}NNh;bc zbtDx&V{nF~l$$F``d6kKi=9wMnig9}Q`!D#5h*0VvnNb02qY(wCK9XBms)XqNlhmb zd`Qi*+~?rr;{VV1niM(vwn3;uiol3_`E_Z@!iAzyFeNBo#hE5T)Dlo-?@{>YnK1a# z5Tm;&j@U5_3DBdWLR1&7%YWiVLFWpSEjC@*D9KDiE~yVnW7{=L!gzA4{fQGi;-2f~ z?E_do-B8pdl*ynWgA1U^qz%AqoPBkFzn=tzB9x1z1i*%LnnuOiEZXFiwRat;-vh1` zgiQ!*K0wWU2$a#3k$dGLcU9DJpr0dCLN5s+0%a0%{W}-L2!ssRIdis<`mJgDAk;(V z&Qg@i!%WL^F1o!S{P;?MgxE{W&1c$vjk~0RajBwO3;&SguN4_7i)>c{vn0G0%`?NY zD3xGD{27d6aw0&xiW5OXG96tS0z1j)>WXn!Tj^}^Cj#L>LTIx6*i^%V7u>Op1!qGF zrN|zS7M=rk$udi76i6<{`9=p1{6nHfEkrxl-g-m0Z1`O zm2H#Yy)felgOVvKx;IgmM?Khtl}^?NnFAi7sxOqDDJh8obCg1{yF*Y*!eh>z&XWW! zbQn|`Gqqgmidi@N_D!Y=5FB+?4HE;jOU1sz1s1<6DA`{24Vp&02)PK;)5aRH32ZKi zfYjGP)%e#H9+zFhrJCGG&?Gq=1<^q81$1eaE=|YY0O^qqvxs^bAi)?agLOVq2!%vW zFem<5)u!{GK_E>(I73)9&d!Q3R3lG|o1C;iOS6VablM#|lK60b@-hp$Nd_KtRHDqr$<5-Rs2hMh;VZ?AfY(u!<~&c~rv#r7 zHkBx~>05Ur7ZDE#)eHGae*4b^;Qx`}`M(*s|NndcZa(|JdRt_n$58JB zSZNu~J4aq>@IZN~`_CQ!V&v??>p5HJ84^$@L2ap^Xl6m|RP)v}9?ZsmC-5^O&~$rl zcWZm&TFlz-$BvH;wxRTp!2e`8>KcD;%QF#|C!89-(z-r4+F3Iz#0Daq`0`Z|FGe_i zeEFZ!f+C`bkwb9N2nC>f%5?GjV!n^RIAv>-YNuxA=hIV0bT`KDnH|^s*W9+|)gPoE zpm1Ma_~4LCh?L@z5H1xRX|xhI;g6@K3Q!d71%1ChWye~kc52Sn=jbDKm785h-ywS^IMCC8v ztX=l)H&u_Omss8Xt6z0XNWuuSSY6}r55ilM{QUdOn`$@6xB8JoVM5rdqUO%CD~d{o z&nj$pFRj^?QJAsZW!enu$3I^P+dA(~&IoUFZB@CAXIn_|GrIXFoxrsIr`t|?#ILm1 zo}yfDVUmqn zNB*2urH`T`avD0te_*bieUUS<~K>;9*5Gvd8pxIbF87=jEhAi_M@CF)M`M zEV%0^g&pI1Ie+A{gzzSFDFW#iv8dv*?WRpTqle8PuZ!PVk}-iWvVq1GXWjNJ(hJ(D&$?y+?B{V_B@WFU40u|Y3GFD22t<>CGnJEPlpRz#Rk zSEOH^SN<1R22`1NiB0I3kOOQC&f$_JjHrbd!y9Zjt@fqVxDH)?6Go^`R#&!oO>Axm zUmD}LcJP9YW(4sz+={sO7EGuo{R%EC#<(o8ehwOBx2iTIwm^zfA%DE#`DQse#U>^u(jKEXGC%1c{wX=eO5i(9J93;a zo>DlL-^Gi%0l&uCm%?vev6p`>?%im7yGz8~&dY3ry}kQxYdO=)r{UfUb(tAEs~cTi z(#Aw+^)qkzHrb~?n*M3ir4|Wavu;$We0t}nJ{S4KzDMy0-Ka2*eQ4!Gw?;;8UqTNs zF|L5xa0VFQuN{~LH}20MFVX!_R;31lH85@*oNxi7Ve2{=HIeBVxW(*EaM<3`Vz?lOWKoWbKrsh_4zQ`Rn*y$~2NZ#60;ZM8MFU5^|e(Iz|ig0DY#w)j0u_a4>zQZ-+#Z-os-C6z3-3N0X2xFR8 zcMAX(H7G6Tm$j2pcEwz@a`+|e+lV5kx_h5r8_##&wvE3weqG(7+#276YgP_BZ5_%F zEUQ^tRM)#}v}ab;(%hP0uh>i@RfaGy?S?9&c4hC;pT4)@oijH=XHx>zjBzNx`pV3a XFWoE{>9maRQD)jXPRo3I!H53>Zt3PM diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/form-after-change-allday-and-reccurence-options (fluent.blue.light).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/form-after-change-allday-and-reccurence-options (fluent.blue.light).png deleted file mode 100644 index 8e52179e474ead0167989c59d0028ce1074f62cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27959 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 diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/form-before-change-allday-and-reccurence-options (fluent.blue.light).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/form-before-change-allday-and-reccurence-options (fluent.blue.light).png deleted file mode 100644 index 18b8b77d083583b7add945587cc9dfd40e3aff00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19072 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 diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/new-appointment-form-after-click-all-day (fluent.blue.light).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/new-appointment-form-after-click-all-day (fluent.blue.light).png deleted file mode 100644 index 1dade82263d2865682097f5519f14af8401956d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67224 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%0A}QEi>P3bN=Ou05{3$?IpL&2eN38xfC)K}V4k@Q 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 G_WuQdRtFmZ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/new-appointment-form-after-render-on-table (fluent.blue.light).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/new-appointment-form-after-render-on-table (fluent.blue.light).png deleted file mode 100644 index db0c01a962ba64a2a74656abba99fd9700f405df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65709 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 Zxj|D~M#lfB5%vv!_ diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/new-appointment-form-before-click-all-day (fluent.blue.light).png b/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/etalons/new-appointment-form-before-click-all-day (fluent.blue.light).png deleted file mode 100644 index aba169a6775440bb5c2675640d2b711868f6cd18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69412 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�ts^JDf8**HvU*o)5V~_(zHconcB{ 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 { - const scheduler = new Scheduler('#container'); - const { legacyAppointmentPopup: appointmentPopup } = scheduler; - - const { takeScreenshot, compareResults } = createScreenshotsComparer(t); - - await t - .doubleClick(scheduler.getAppointment('Website Re-Design Plan').element); - - await t - .typeText(appointmentPopup.repeatEveryElement, '.,2', { speed: 0.5 }); - - await testScreenshot(t, takeScreenshot, 'dx-number-boxes-not-integer-chars.png', { - element: appointmentPopup.content, - }); - - await t - .expect(compareResults.isValid()) - .ok(compareResults.errorMessages()); -}).before(async () => createWidget('dxScheduler', { - dataSource: [{ - text: 'Website Re-Design Plan', - startDate: new Date(2021, 3, 26, 10), - endDate: new Date(2021, 3, 26, 11), - recurrenceRule: 'FREQ=WEEKLY;BYDAY=MO,TH;UNTIL=20220114T205959Z', - }], - editing: { legacyForm: true }, - views: ['day', 'week', 'workWeek', 'month'], - currentView: 'week', - currentDate: new Date(2021, 3, 29), - startDayHour: 9, - height: 600, - recurrenceEditMode: 'series', -})); diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/mobileEnvironment.ts b/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/mobileEnvironment.ts deleted file mode 100644 index 80a938bffb87..000000000000 --- a/e2e/testcafe-devextreme/tests/scheduler/common/layout/legacyAppointmentForm/mobileEnvironment.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { createScreenshotsComparer } from 'devextreme-screenshot-comparer'; -import Scheduler from 'devextreme-testcafe-models/scheduler'; -import { createWidget } from '../../../../../helpers/createWidget'; -import url from '../../../../../helpers/getPageUrl'; -import { testScreenshot } from '../../../../../helpers/themeUtils'; - -fixture.disablePageReloads`Layout:AppointmentForm:MobileEnvironment` - .page(url(__dirname, '../../../../container.html')); - -test.meta({ browserSize: [350, 600] })('Appointment form should be display valid layout', async (t) => { - const scheduler = new Scheduler('#container'); - const { takeScreenshot, compareResults } = createScreenshotsComparer(t); - - await t.doubleClick(scheduler.getAppointment('Text').element); - - await testScreenshot(t, takeScreenshot, 'appointment-form-in-mobile-environment.png'); - - await t.expect(compareResults.isValid()) - .ok(compareResults.errorMessages()); -}).before(async () => { - await createWidget('dxScheduler', { - dataSource: [{ - text: 'Text', - startDate: new Date(2021, 3, 28, 10), - endDate: new Date(2021, 3, 28, 12), - }], - views: ['week'], - currentView: 'week', - currentDate: new Date(2021, 3, 29), - startDayHour: 9, - height: 600, - editing: { legacyForm: true }, - }); -}); diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm.ts b/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm.ts deleted file mode 100644 index c171a7769c3b..000000000000 --- a/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm.ts +++ /dev/null @@ -1,204 +0,0 @@ -import { Selector } from 'testcafe'; -import Scheduler from 'devextreme-testcafe-models/scheduler'; -import { createWidget } from '../../../helpers/createWidget'; -import url from '../../../helpers/getPageUrl'; -import { Themes } from '../../../helpers/themes'; - -fixture.disablePageReloads`Legacy appointment popup form` - .page(url(__dirname, '../../container.html')); - -test('Subject and description fields should be empty after showing popup on empty cell', async (t) => { - const APPOINTMENT_TEXT = 'Website Re-Design Plan'; - - const scheduler = new Scheduler('#container'); - const { legacyAppointmentPopup: appointmentPopup } = scheduler; - - await t.doubleClick(scheduler.getAppointment(APPOINTMENT_TEXT).element) - .expect(appointmentPopup.subjectElement.value) - .eql(APPOINTMENT_TEXT) - - .typeText(appointmentPopup.descriptionElement, 'temp') - - .click(appointmentPopup.doneButton) - .doubleClick(scheduler.getDateTableCell(0, 5)) - - .expect(appointmentPopup.subjectElement.value) - .eql('') - - .expect(appointmentPopup.descriptionElement.value) - .eql(''); -}).before(async () => createWidget('dxScheduler', { - views: ['month'], - currentView: 'month', - currentDate: new Date(2017, 4, 22), - height: 600, - width: 600, - editing: { legacyForm: true }, - dataSource: [ - { - text: 'Website Re-Design Plan', - startDate: new Date(2017, 4, 22, 9, 30), - endDate: new Date(2017, 4, 22, 11, 30), - }, - ], -})); - -test('Custom form shouldn\'t throw exception, after second show appointment form(T812654)', async (t) => { - const APPOINTMENT_TEXT = 'Website Re-Design Plan'; - const TEXT_EDITOR_CLASS = '.dx-texteditor-input'; - const CHECKBOX_CLASS = '.dx-checkbox.dx-widget'; - - const scheduler = new Scheduler('#container'); - - await t - .doubleClick(scheduler.getAppointment(APPOINTMENT_TEXT).element, { - speed: 0.5, - }) - .click(CHECKBOX_CLASS) - - .expect(Selector(TEXT_EDITOR_CLASS).value) - .eql(APPOINTMENT_TEXT) - - .click(scheduler.legacyAppointmentPopup.cancelButton) - - .click(scheduler.getAppointment(APPOINTMENT_TEXT).element) - .click(scheduler.appointmentTooltip.getListItem(APPOINTMENT_TEXT).element) - - .expect(Selector(TEXT_EDITOR_CLASS).exists) - .eql(false); -}).before(async () => createWidget('dxScheduler', { - views: ['month'], - currentView: 'month', - currentDate: new Date(2017, 4, 22), - height: 600, - width: 600, - editing: { legacyForm: true }, - onAppointmentFormOpening: (e) => { - const items = [{ - name: 'show1', - dataField: 'show1', - editorType: 'dxCheckBox', - editorOptions: { - type: 'boolean', - onValueChanged: (args): boolean => e.form.itemOption('text1', 'visible', args.value), - }, - }, { - name: 'text1', - dataField: 'text', - editorType: 'dxTextArea', - colSpan: 6, - visible: false, - }]; - e.form.option('items', items); - }, - dataSource: [ - { - show1: false, - text: 'Website Re-Design Plan', - startDate: new Date(2017, 4, 22, 9, 30), - endDate: new Date(2017, 4, 22, 11, 30), - }, - ], -})); - -test.meta({ runInTheme: Themes.genericLight })('Appointment should have correct form data on consecutive shows (T832711)', async (t) => { - const APPOINTMENT_TEXT = 'Google AdWords Strategy'; - - const scheduler = new Scheduler('#container'); - const { legacyAppointmentPopup: appointmentPopup } = scheduler; - - await t - .doubleClick(scheduler.getAppointment(APPOINTMENT_TEXT).element) - .expect(appointmentPopup.element.exists) - .ok() - .expect(appointmentPopup.isVisible()) - .ok() - .expect(appointmentPopup.subjectElement.value) - .eql(APPOINTMENT_TEXT) - - .click(appointmentPopup.allDayElement) - .click(appointmentPopup.cancelButton) - .expect(appointmentPopup.isVisible()) - .notOk(); - - await t - .doubleClick(scheduler.getAppointment(APPOINTMENT_TEXT).element) - .expect(appointmentPopup.isVisible()) - .ok() - - .expect(appointmentPopup.endDateElement.value) - .eql('5/5/2017'); -}).before(async () => createWidget('dxScheduler', { - views: ['month'], - currentView: 'month', - currentDate: new Date(2017, 4, 25), - endDayHour: 20, - editing: { legacyForm: true }, - dataSource: [{ - text: 'Google AdWords Strategy', - startDate: new Date(2017, 4, 1), - endDate: new Date(2017, 4, 5), - allDay: true, - }], - height: 580, -})); - -test('From elements for disabled appointments should be read only (T835731)', async (t) => { - const APPOINTMENT_TEXT = 'Install New Router in Dev Room'; - const scheduler = new Scheduler('#container'); - const { legacyAppointmentPopup: appointmentPopup } = scheduler; - - await t.doubleClick(scheduler.getAppointment(APPOINTMENT_TEXT).element) - .expect(appointmentPopup.freqElement.hasClass('dx-state-readonly')).ok() - - .expect(appointmentPopup.subjectElement.value) - .eql(APPOINTMENT_TEXT) - - .typeText(appointmentPopup.subjectElement, 'New Title') - .expect(appointmentPopup.subjectElement.value) - .eql(APPOINTMENT_TEXT) - - .typeText(appointmentPopup.descriptionElement, 'description') - .expect(appointmentPopup.descriptionElement.value) - .eql('') - - .click(appointmentPopup.allDayElement) - .expect(appointmentPopup.startDateElement.value) - .eql('5/22/2017, 2:30 PM'); -}).before(async () => createWidget('dxScheduler', { - dataSource: [{ - text: 'Install New Router in Dev Room', - startDate: new Date(2017, 4, 22, 14, 30), - endDate: new Date(2017, 4, 25, 15, 30), - disabled: true, - recurrenceRule: 'FREQ=DAILY', - }], - editing: { legacyForm: true }, - currentView: 'week', - recurrenceEditMode: 'series', - currentDate: new Date(2017, 4, 25), - startDayHour: 9, - height: 600, -})); - -test('AppointmentForm should display correct dates in work-week when firstDayOfWeek is used', async (t) => { - const scheduler = new Scheduler('#container'); - const { legacyAppointmentPopup: appointmentPopup } = scheduler; - - await t - .doubleClick(scheduler.getDateTableCell(2, 4)) - - .expect(appointmentPopup.startDateElement.value) - .eql('6/28/2021, 6:00 AM') - - .expect(appointmentPopup.endDateElement.value) - .eql('6/28/2021, 6:30 AM'); -}).before(async () => createWidget('dxScheduler', { - views: ['workWeek'], - currentView: 'workWeek', - editing: { legacyForm: true }, - currentDate: new Date(2021, 5, 28), - startDayHour: 5, - height: 600, - firstDayOfWeek: 2, -})); diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/appointmentPopupErrors.ts b/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/appointmentPopupErrors.ts deleted file mode 100644 index 4096577f7ce2..000000000000 --- a/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/appointmentPopupErrors.ts +++ /dev/null @@ -1,35 +0,0 @@ -import Scheduler from 'devextreme-testcafe-models/scheduler'; -import { createWidget } from '../../../../helpers/createWidget'; -import url from '../../../../helpers/getPageUrl'; - -fixture`Appointment Popup errors check` - .page(url(__dirname, '../../../container.html')); - -// NOTE: This test case requires page reloading, -// without page reloads the getBrowserConsoleMessages will return undefined. -test('Appointment popup shouldn\'t raise error if appointment is recursive', async (t) => { - const scheduler = new Scheduler('#container'); - await t.doubleClick(scheduler.getAppointment('Meeting of Instructors').element); - await t.click(Scheduler.getEditRecurrenceDialog().series); - - const consoleMessages = await t.getBrowserConsoleMessages(); - await t.expect(consoleMessages.error.length).eql(0); -}).before(async () => { - const data = [{ - text: 'Meeting of Instructors', - startDate: new Date('2020-11-01T17:00:00.000Z'), - endDate: new Date('2020-11-01T17:15:00.000Z'), - recurrenceRule: 'FREQ=DAILY;BYDAY=TU;UNTIL=20201203', - }]; - - return createWidget('dxScheduler', { - timeZone: 'America/Los_Angeles', - dataSource: data, - currentView: 'month', - currentDate: new Date(2020, 10, 25), - height: 600, - editing: { - legacyForm: true, - }, - }); -}); diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/dataEditors.ts b/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/dataEditors.ts deleted file mode 100644 index 56eb1ac4553d..000000000000 --- a/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/dataEditors.ts +++ /dev/null @@ -1,171 +0,0 @@ -import Scheduler from 'devextreme-testcafe-models/scheduler'; -import { createWidget } from '../../../../helpers/createWidget'; -import url from '../../../../helpers/getPageUrl'; - -fixture.disablePageReloads`Appointment popup form:date editors` - .page(url(__dirname, '../../../container.html')); - -test('Form date editors should be pass numeric chars according by date mask', async (t) => { - const scheduler = new Scheduler('#container'); - const { legacyAppointmentPopup: appointmentPopup } = scheduler; - - await t - .doubleClick(scheduler.getAppointment('Website Re-Design Plan').element); - - await t - .click(appointmentPopup.subjectElement); - - await t - .pressKey('tab') - .typeText(appointmentPopup.startDateElement, '111111111111') - .expect(appointmentPopup.startDateElement.value) - .eql('11/11/1111, 11:11 AM'); - - await t - .pressKey('tab') - .typeText(appointmentPopup.endDateElement, '111111111111') - .expect(appointmentPopup.endDateElement.value) - .eql('11/11/1111, 11:11 PM'); - - await t - .pressKey('tab') - .pressKey('tab') - .pressKey('tab') - .pressKey('tab') - .pressKey('tab') - .pressKey('tab') - .pressKey('tab') - .typeText(appointmentPopup.endRepeatDateElement, '11111111') - .expect(appointmentPopup.endRepeatDateElement.value) - .eql('11/11/1111'); -}).before(async () => createWidget('dxScheduler', { - dataSource: [{ - text: 'Website Re-Design Plan', - startDate: new Date(2021, 2, 30, 11), - endDate: new Date(2021, 2, 30, 12), - recurrenceRule: 'FREQ=DAILY;UNTIL=20211029T205959Z', - }], - recurrenceEditMode: 'series', - views: ['week'], - currentView: 'week', - currentDate: new Date(2021, 2, 28), - startDayHour: 9, - height: 600, - editing: { - legacyForm: true, - }, -})); - -test('Form date editors should not be pass chars according by date mask', async (t) => { - const scheduler = new Scheduler('#container'); - const { legacyAppointmentPopup: appointmentPopup } = scheduler; - - await t - .doubleClick(scheduler.getAppointment('Website Re-Design Plan').element); - - await t - .click(appointmentPopup.subjectElement); - - await t - .pressKey('tab') - .typeText(appointmentPopup.startDateElement, 'TEXT') - .expect(appointmentPopup.startDateElement.value) - .eql('3/30/2021, 11:00 AM'); - - await t - .pressKey('tab') - .typeText(appointmentPopup.endDateElement, 'TEXT') - .expect(appointmentPopup.endDateElement.value) - .eql('3/30/2021, 12:00 PM'); - - await t - .pressKey('tab') - .pressKey('tab') - .pressKey('tab') - .pressKey('tab') - .pressKey('tab') - .pressKey('tab') - .pressKey('tab') - .typeText(appointmentPopup.endRepeatDateElement, 'TEXT') - .expect(appointmentPopup.endRepeatDateElement.value) - .eql('10/29/2021'); -}).before(async () => createWidget('dxScheduler', { - dataSource: [{ - text: 'Website Re-Design Plan', - startDate: new Date(2021, 2, 30, 11), - endDate: new Date(2021, 2, 30, 12), - recurrenceRule: 'FREQ=DAILY;UNTIL=20211029T205959Z', - }], - recurrenceEditMode: 'series', - views: ['week'], - currentView: 'week', - currentDate: new Date(2021, 2, 28), - startDayHour: 9, - height: 600, - editing: { - legacyForm: true, - }, -})); - -test('Form date editors should not be pass chars after remove all characters according by date mask', async (t) => { - const scheduler = new Scheduler('#container'); - const { legacyAppointmentPopup: appointmentPopup } = scheduler; - - await t - .doubleClick(scheduler.getAppointment('Website Re-Design Plan').element); - - await t - .click(appointmentPopup.startDateElement) - .selectText(appointmentPopup.startDateElement) - .pressKey('backspace') - - .typeText(appointmentPopup.startDateElement, 'TEXT') - .expect(appointmentPopup.startDateElement.value) - .eql('') - - .typeText(appointmentPopup.startDateElement, '1') - .expect(appointmentPopup.startDateElement.value) - .eql('1/30/2021, 11:00 AM'); - - await t - .click(appointmentPopup.endDateElement) - .selectText(appointmentPopup.endDateElement) - .pressKey('backspace') - - .typeText(appointmentPopup.endDateElement, 'TEXT') - .expect(appointmentPopup.endDateElement.value) - .eql('') - - .typeText(appointmentPopup.endDateElement, '1') - .expect(appointmentPopup.endDateElement.value) - .eql('1/30/2021, 12:00 PM'); - - await t - .click(appointmentPopup.endRepeatDateElement) - .selectText(appointmentPopup.endRepeatDateElement) - .pressKey('backspace') - - .typeText(appointmentPopup.endRepeatDateElement, 'TEXT') - .expect(appointmentPopup.endRepeatDateElement.value) - .eql('') - - .typeText(appointmentPopup.endRepeatDateElement, '1') - .expect(appointmentPopup.endRepeatDateElement.value) - .eql('1/29/2021'); -}).before(async () => createWidget('dxScheduler', { - dataSource: [{ - text: 'Website Re-Design Plan', - startDate: new Date(2021, 2, 30, 11), - endDate: new Date(2021, 2, 30, 12), - recurrenceRule: 'FREQ=DAILY;UNTIL=20211029T205959Z', - }], - recurrenceEditMode: 'series', - views: ['week'], - currentView: 'week', - currentDate: new Date(2021, 2, 28), - startDayHour: 9, - height: 600, - editing: { - legacyForm: true, - }, -})); diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/etalons/form_recurrence-editor-first-opening_nested-expr (fluent.blue.light).png b/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/etalons/form_recurrence-editor-first-opening_nested-expr (fluent.blue.light).png deleted file mode 100644 index 35e6dcc14cebb26630c4a0d9eeafe30e67d6be4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31808 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 E-)B7tN&o-= diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/etalons/recurrence-editor_after-hide (fluent.blue.light).png b/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/etalons/recurrence-editor_after-hide (fluent.blue.light).png deleted file mode 100644 index ca0758f048a33d8022c556883f9c3a5b95bab47d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39139 zcmce<30Tf+yZ*n{vdmHDWJqS2N+d+4GN*VlOM^%H)gjN=ycs(|H9*~S%oWd zR}9uZnC`i0QW|shHa=&$#j2P&7wsQ6?c2BSk2f7% z)a}``XYwVk_%YY};)TWE-x(7hAFp40z1IF(wQ6YxO!WEjCwu$EuFd%P_;>H$`~CRR zt;*YJX$_q!zkP1<<4;Ub*4cUL7t$Au`g!SY)2^&qa{K2yJosh7&yTSCMd#&7;+F#7SjV|BDT{dnD!TKj)~MEI}&o40dPchGBlap}_onW2-N1~&Hg z;6XTj`?Toi=Pihw;y35=ip_p)2JYIsH>of)G<;s%Fg{tosw_`QRcpQb^rx3s&b+d! zclv<=dCx!J8S&yqa^_dp2^QLdB-TwYJ6E`<2{PT31n3$MTbFb_TpBj4qk0rBbU9!6w zmtc3PY3tT0aVIZc+*4NO;-%DjW6iQ2yS&-Y&!(cRM0Nax3FXBJ%8^gr-wx36&d;Ck zw&=sP?|r&->9XR(vvy6I>&wOeGKwuRNjlINn5*#ySsba#&ubSch9aK)Lrt| z@`BVBEql$lUXqs_IqUR_*LOGY+RS6)nkmix!(KyMd*_WCBL}a1leo3Dj?3$#-t`(c zPEu*vGD*FMb5m4Q*qo_Foq)oa(TrrA%Q#yA!RMft}??BR!J=XLAXZ`Z(QE*>^%do3@`3ZHvL*Xh-r<5NS8RgDknjhHf} z>CBlk``g}K9~RdAWk%5Ug9qF2)(gr@3)&8I-JhL3XXL0+0ovAexb@CmyPmhp(o`C< z>RpGSLu=N_Bf#$1%C~>o|8;S5MTM*8{)t_U{L~CDEJ!aqs=Msj?Xi()E;SsrU_n>wq^%=HkIpx@xbRpjU?QKObno6h7Z;Zud-obSI`*qwyY}tFL)&;{ z+1)&6nNVldyGQZY)_u2q@<(r{m$&10?Aw>jqO{g`(duS=$l}jaGu!IB?C|e7-HNAM zcZhRQ;?gLm()@9Qor`XN%rM9Z9OCTb=XZQz#$o-h*-pnoLpepIPTEubVynKrUzf+ssZgCfth}?OrDa)pxwb>@=&CPKai$8zXq$k5fJ1|vyr!G4 zu6;6VeDbz-n>TOP7%;#;H`l6hyTPN!j;$v@*hsB^2VLF0i!x7`nwxL)@ws*N#E~QG zWlMfOIgitE>-Oz@Hfd~WYEOBxtKN;BI8iA)JiK|UR#Pp@igUOo3zu(&p(%InyiD?I z!=m}Jb~>(Q%d@kyWuJB$vn{_kCqdP#QJbX8E8p5aKHtUbUdR}yyrf2b=0vaO6Z_sA zKcMt_E#)1%c8z2gbF@#-jw-!Bp>NLn_vwFKT3o+DgIw==4H^XB@K7G+lauP-Q?^Tk z$B!TH*}M1tnYlwEQq$7%-kyy+Vd&dZac)L0HgBC#=H~4QKv^@btU7Yz3Lf33w-2|! zer>Dt?>`ta!lRDrZ?$TL-wiYEq*PvBPIQ+?`}WV%;kO??Y?Z*ndUVdR7ST9|g-~?w z-P@4uu+QrF0V1q^MR9`an$K@GCFEGJ8nGYm3`x9svt-mGdtKR#MM(=T3q0s#1IYf(5${9lHIgFmusg7kkt>nC`WGyE2QL?U#^q-J)MW z*bB!Pt^Mf>>~-4^sjUm|AJ0zbV3ikL`QY;Qbd>FbuqK-}ZCdf}5eIzdyj=ly9S08F zx6gdd=HTFtnjcF`gO@z{L$7UPrIx;%&Y$n6Ip^vc|A;>3v12#I#_B8isSOA|zkdBM zguA4ylheaZ=FFMMqIr@29CB{d)|?$_Rhy;af)&oc{`%`^BO{{PIL?rUhDKsyqFmbV zzyH4c{a*vlm|q>giEUL{S{nB5;IeB+Z$v$J^NoN0JZM4s0SDrfW?Du@=(%$$qgJib z^{A_S!ZgH4_0Hj;zVh(XCl1JY^(vV#6rj6At+24LdCQiLZyxk`=JtKbm!hX>J2XaV z^~MKQ%AzaKs-=pN?O&sD~G!IP>)Efp7jiJ;8<(aB=a&ZPC$s4H`D= z(X(eK4UG+hoL*YIejaDQak6=MW-jks8fs9vnID^a)_f=dUOWHQtEqG5kiN#Q+_z^> z;^PYoXI@=1!0X&OEjHemIdj^wzI*)rckbA6ox>DnPt;}8P2qfT^!Z4(zt;R)DlF=) zEiHO39~_t+?chhls#V(F-ZOf&WU0O4pFBBua{AdRQ>JXp zEF`Dozp@CZR#w#F8EvRl*Rk+^7rrI2o(&js>eSXpk7mgJ(&*gT^Xs#<%2%G=d6RXr z^^jG)KEzcI<8l%T97|pqR0s5!dZPHs^U7@x=ef5d>YK0oY{m=6fLeM^KQll7*3PoB zvf{G5?M|=nYUJkS&AjG1=<}PbPQ!+^pFDZ8{?MWI>(|eTtNtE0GuB0$waUBn&^%=B zl~vrJGyf|YLhpDOQ?{(`E z?A6|_8X`+!71@Ds8MMH$vep34gdF~{ap>AFD$SdF%CQUl@s+1noHI{MYQxeO)m>n> zLyp4X!-szYm~^Y-UM^psI?G;M_x;OphrFbJe1~`a8>J2UUx1)ficSRu1#GIE6@xjq z;YHxcrAwExJtB6OmO7@Urm~Ir(258D_(suy1reM1-uUt3e|#^y;UVL0z=b{g_D!8D z|M|ymGKeo+!3G++di9{MYC2h?XU=TRMSl(E{73lmA3-sVZES3^7vEMi1N9O(*6z$K zJa+l#hqmR7`N5wz`ai{Z6}MaVo|SlUQD*eP#Kh4+63Hx+(*-6zuyIRM`nMahYAe{vp`y$|bHaoP zo!EDrPhR7AHc~Eiz^tgHPiI`RYq5Iu>i$c!RTCnulU+(vx;?(ScA)?96DLYPWlpxf zm65S9=fV;%lm+#Yjvxts#J$neww%^WvtmfB?flHb_|hlZ_F8?|(4pXYAhd$XNY zyG}kl5u7?`#cP!bdwb=4aIYQ$uDUKq(0ol{7l7XNot?()XLoW`tJ65);cuuQtoWJE z-MUSUb6cnBvU+vNBkS#vYrihl%#K~Xo51<)>xb=ZD7|@ZiP5MK^DK)u6-|jYPTs=&Tt zT+|j+Wcm2Kjegk+4@Fj-yL;pI`eRK^n|LL7D`y59HvH?4C8UK4y$~b68^tdVE}LR* zZp>a@cCEZ?*WH^*9Hz}?NVZe!tEsu=q50ZI`_gXmuzj{}O`PAaD8UU5RkZ!PrZoCz*PR32O{(I@|qGrwym=-%@8QKyXz#YyGKS)z&Q*g zKqMz5c*vI280EFR_{E5CpWk|OQ7&8opLL$t{>=5`Bqeim^Q~$F8c?xKvH%l|wu_b0 zVc9c%)^F^jNd*Jr${Tszx;2*Q#93wEZCw5FrR8!bC&3(T2e0tC68YHv)B7j;I3w3G zcxTn2Yx;8>7D}}K{(Y+dO{<)Taa9BAHg0>w`NK1StMZAlsPtosG14zO#^w!E%o zl~|ARZonp~#==WnU0nsZ>pA59-fi;XV+2(JHzmcz7SFG(Yu=(olh&;_ADww&!JIg^ zz{L;Gm>%W1ksvH=0U)Hw*;^bazd$SMCj%2Y*jY@M=`@^=s%z7QOsqQ1wJM3YT(SrD@ZV zPySf4`g7Lw9=&=UBg^q5{c1OCY2lK)xmy{JUEs~nY&vdt*T~f$7ia>hl(eXXPji^z2wx2|eQswRXrS)3%H9tn3q4+b#X`uufg`&Ctqi~yrS^N@d^9(4{`2OXWqPdV4j;f3EqX-F*;mwUVL5k`R^V@D$GKS+cj<4 zbOyOHbaK$krBY|HSFf)9N|~EK&xVYUHQd2Ln@{~3LD^)|4p{7DFpCu0s?Qt?A_a&4 zvnlUV)TO3?j_47ZnL?bK5$86vS=Wifd6(ywvUQFfP-77(CT|}aw0qV2zvOm4oRiQt zWzv%DXxZ^WTmHNCc6e7Zhg?&~3y&wRwA4MwkCzVuM@k;4&&ibBXGqRbwBkRKYT5$U zqaW@M@7k+n!=j=hUMerCz2HJ?XJ===mbK}oRs7SZ?I1e{c&z$V}>a-YR4yKTyA3 zy$)n7I0@?ukIOXv?Pp#ExgQ3)-KC5f?N)!?w@*0${On2g_Pxk2uR`|(1!YJQ+{EsB z@!>zVsc<8yu_7y#=Dqa~_N6v65ig~3H^N>66{`e|m>dfK8 ze*whVl;)?ntX=zY!jQFJdhP2w@5I`#McI>rhON_cuhMsJ)}~Dw5m7ctB;driRo|{X zd-`r}*6lvn+R@2LNE6ES;~cn)c3E4TpRe0T)qmOf!=1R`f2BC`mfAf$lg^i4*5%MVP5l_K#Sz zX7HK4U6SU(6F4}SU z@Es7#*s)_@yomRp+S|Bs zO$jseLC5xPhr=$p^}l?0KH1VzgEAyQXW{)zi>E75i`@<~2>L<65X%}GC}j6<-P)PW z+@zDyIg9w;_V${&G3VCKPC~#uc%T5rr(NGri<>)2P=}aQqDHDH+3r4Ho*Azhu=vm7 z&kyH)eBq&73jLvHD}kUtk{xWUcXTz8z?St!LI%LZ$+4$)FK0TeEPJa zs4JWxZ(g+EUa+AnREI=^2JYXVJXbYv({J6nHH_SD>ce=Cx-gW0Che7P6y%qUmM^Yv zP->&QRqmPlb^P?&RA9rJPp?O8f&t0Awr;IdI8-L;w-ue>JQffzq#y+>Y1=*Meqg|2 zBjNz4DnI7c;Z87K3B;lpmy(Vg-vUl-_T`nnHHgC5Ir*IP2lK{l^{&6Z7xMVh;#OX_ zZ%^cI5|j(5t=Ior>ydno-Ez+9l`(KcpaI!Yzq;aMc8rs^)R=%Zr;MRv*u-APj&&YZ zp5N?`WzX+`0_rO%&CgBT40bRz%Q!qVp#P$#93QO_BSs`9CFSPiY#6&T|K-ah$e)?# z=hp{TTPON70Tug6!7^dO>XMtS3LiywQgv zSvTWjVPW+=(id1$@yCAoYjH(Jb%ip;wiT#J5xx3j*W~T$3)xEqqsj!RvTtwC>cCI8 zU!C9NuZxRDU0L|wr>e|d`2kWZ2 zqCpTPgp4x+5wYUQT5CSpa%Pe?HEd;@716@~Df@x+66shlp3u48lBKNpeAd0o(4m0< z`8|}Usrz*nHs)G8_2{u#d05$c-n~=l1bD&DRCN*kbacXJNA>XG)YNLB>+4F0z z6mtUV6_?y9*CcIgH-R|mwJ>Pi-dc4VFNe_p?S#EyGc5S@`koX$kOew|m5Wxw&r%tE zq%x4a44+FRv}9HO$!3O(*?s~P+ zA~)nX#^^17@e9QBOMh)~h*SXu;4jRd}uEW02T>R&$)&`eA{X$stjT=P# zFq2uc#+y+-bIv9BL|k?)?`H-ejkHN?DLNIovbeN#Wd6Q>aJv+glg%#KWd+|rB^zEF z;!@&0R0`#XTxSdF@pNKbx$`=i*<6w+2*P zU9_}R68=L{cc+wxs?XMb7)k|KuE9gtew0ebr()M{zx_tRo4;?>%iFDqkwPBB_9H_a zl#2Mu(`}FKUrLnBz3H3nM_`HHSbJ;RLA%t0`Ek`#(|SVL{a>)qJJmb=NR`(n$GKGs z|5C$LS66-o`YKabNC}5((SE~*4X*0cCbg*`Bss;o8%Q)LgPxpu&f-^S9e3@ilgKKf z0@R2Zl-d`UJZb5jFv1LqUcxuXf#vkj=+@1<+Vkzhvlrkyyc)OLqA_I1K@vr#u=y-+ z!S}Ln->iV$9Nn;9Lx!~3m$vCvWdyvQWLhb7IUsJmD9d{~Jy`ZSrXX4q8qL=R?wtV9t1S2tYFYl%Wme3*61M z49+ebgAIoR(&8SGmRhpP>coNKk00~cPLhBDFL2?5R=#PzEUr=)&|q_GhlVP&cg&j4 znlKU%P<#_)=UbB3VX6fJ0|A}$kcl-641%Eat6IaaaFAO=IKThvk~JKODsVRC_U*(S zh@gZ?O20W*RyFc~IAi}GKX&YQegZ@&1oJ%i$^l;R#5!;kOP^o!yH%+P2qv%#Py^Dr zuo?8$eClps#M$26ZSqSv;RVzx@)0p^m4gXCuujy*Zz~TzfFeMpI*aoA6ac}ZUWl+-(UibPfLf7f2Uln9IH zv^Pi_Gm$-vLwA$7wJdM^j>zoI>hA+iDWOwBOv|3VwD_SG^^_APfFG1>#YrM!2B1-r zhVVy-H^Pb_9lzq9k|f_7ZB>nDEy{ty_kf+0}}EdtrK8Lv)OcfSqzYprELff&MLy$>kAk&qDn z0;uRwrx8`v5zvR!&i|Qo!UmWT>Te zdiCpDzPud(zoMpVe`{Bl2{WLIg4TU$4K#Yi1_vHCY0<(E5tt{f`Bxd3b>^yJ9YgPfPRdGGT9VVzbG2Lno_iqSWm=cyIy&NyAosI&+Sx5t^u~ z`UvWg0=~F-xn@sI&0JPE_S>72Qh_&V5)-$7PBrze&)6;qu#lw!PjL){^`O=q1aB)0 zEP=VYhMAv|FeuPip2GO?4TJ!eh<%>_cAS#XsNLW_d~Wgc>dNP+Gca;ryX}6f4ksjk zVlo1L{H4kN#0_#>tw-O!p{GtM;e7F_i2H{=;@0?|iptLFeXvvM>5bs{R|hIBNX!sOdH&A3RD}BfQ%)(m^A9m4%Mcctn5h?NoF7`S zVlXuN(b(9w+|j^*@UDPjm7VG*z(Ca(MP$kMMu7~u+`VVdQB@b@o2V?i1MF@TuISj& zU~6V!zCrrmf2~noZn^KR5d(`R)zE}?VV~bVya3HSrw_&;$7&tnHK)`%jrMtP;4;Uz zfA)U1`c=Ch-*o@+%>-O1k{;1#u_vH(o~M5L`QtUT=oAmBTdB!{LqZ~F^nxAXF9_0n zRi2CcOgK9q-u*n7P>3#Wx4IQ;$R1GDw)$OJzxbDqrI}YKM_`>_z+xafeRSuYPXusjaB^dk&6Fsb>8 zi2)mZDn5~eY%xonz4lF$*;$6NHF6r zO0KWss99ZJu@=ph65_8Yndx$dF}{5VwrJ9Nyb{2QAZN;yw#`g9eDb6gtN#H?cl= z&OeY+lVhz!!t6Eo@*WbuT~>r4npj!o2lwryW-sVVAszk2~t zgt#bqcOm2cg@u!qq(q{?bNzI0Oa*Tc%Dqk8ueAX_$1M!{OWV0(Ulpk^?^p`Lp_Ez(TTPe}V`1EPuhuu4O#`91_vL~e}S`sw>Sn^~BrPa_ipN^bIuef)`c^Pcr*m2`>_9@KG z@9-SLH#<5y%HF^ghs1317`P(jSg3K}4J-(V>ZPOri%YY#g)bpAfeO5^Yp?;^4s!G) z@`@Zxb{+v}4KtxYg##!j+z)~`ns(AZRcuNwE_z-NVW@=TVMwI%fk>;U`Wlz~*ARNb<;&xRg^w?E^WtXDt$aIe*tgf6s(6D; zB(|;-_YWuL8$4i335`J|y72z7af($?Mj}n%E-U`}RX70skGFNGTq6ck(r^U@Xn(mP z60(q1H$3YTaIK?P6gH&*CH0vgJX~J&K9&1%fIR!om$XPIQoM~E`J4aEn>QmNS4m4o z+uIKf!@9HhQ_<6d2=5%WvM$6y4um5Ad%?f&-T!bW`6$ZL=2c;P{GD@Ip@W>(5puDW zxyuHwUjqwMq~rD{!2DHL0#SxprbM^u%#B z<0qwracaez2b)<=GGj05AD~EApuhO;j*hB(Z8F9oe)0(1t`OI;tDUBuHBX1%5Q3KS zhf~p<14XP7jSW?-0Jl{){A&QbW-VIW#Iq!T6>Jm=A0g~Aq@(WA>{}4-iBM$WW+z+v zw(K2jeszto2{#({71n`#Qnt|Cy>ca_hv-}p@7~#?;NJFW(rGM2709A<=gt2EAhf%Qj4^`*AXa?z=_a8P2EnsIM23d(4fKoK~7zT=4J=D27wqePfqVE z;fksR@$5)HoS?|lqvV;{BkH-VSu_nC_o%dOJJHy< zvC#h&^Zc4f`d;{H9jsFYX>4g%V$qA;^jvB^Qp| z?7!GL5eGOwoKGvr+6O16Z%2ACcgd+uo$raWP}nd)nNW-yH~t3ungU+j52N{fA^hK` zH(9>KVqpd;_QP<<`U1M{63jJWDb;a_C|U`kPj-RR4DSJBzWwRaP)ujkqb31_6zI6E z?S~#fSS&4n71XR*vr$A*810d6Gk5OXDP%gS?4hdL*DKFU-bXzzrM9=!qdXhsrIf>d zd{co#mu>!bso_?d~4qYVussQ}oiTYYY2+`K*X48R4%(Ts;}#^WOj0s1^p z$1A^o4TTeN<$e`Hqvz!0s6y>bB77iK#V03wVNIWAB%X{hXmx34FJx3q1?iskn?Wo|JXKQb@57O`Mr@uK&~FpI zAG~u3eBTzr3d%aM_;twkrt0dGu^qsIbsjwU08g>cylc0W?{VUZTE$*UEAmDhbd=LxJIehkF#eS_cXCh*aBUWm?urO2&uvQ>4UZzssuTD7y=D zhiSIB;$y}IXfUiX&UwrAa4snC*K_E|2@_FWk%h!83Js;R|NF-mywM8s_f4HPEeSwh zzj5RL{DL%vA(pf)rvtkhl<5m@7<^Ll<;zPTmg>^%=y<9GRq8WmCtx3r$>A`cJR?r) zh2=RTVTJ%i7OlA6Rz}Hu#Ue7;&xg%WSzS zNJtEi;yNJzQ_hXtgj#~rEe&E(3P1cZ;z?}40dG5Gm6E{BfVJ7MTE(9}#3O)S|zd-m+1INFetboY!0&!4vVXn@TB{1iO zFE7d-1Sz8J3cw{1*2i(x_%yN{UcRqhJd5vzpL?uHWBB$vFl)?{5J2&bzGd8&|Q5 zt#bd=Or46#%5W|g?dR9$t{)pYU*J(l7^3Ru9N7><6$RWTKB4blKZK6tBw_07*uQ`C z@&d83!~7I=MLa}NF`dabF-R(I-MWQO@3#beo?<_0!NwNTA}~U=y<3^(tUv5izQP=I zz;Oc2eD-W#w#kjm%-v$-Nf3YTzIkrrz=8||VtkJ** zE$TN;^k}Zo&CRVsMa)7pZe&ja;9(>TK7Z&?TUlpFWgl#u&;T1O5x)qb7T8gQus?F7 zLq$b}9svv{BmscgfJ-F-6sHe-zI-4g+i~+%rc>&&ZS-ak2PkWFPYnD)+ItDa-PAPu3DT0|WSufPfSV z0G9&)=>To)zdHdd*tB}|>C;t5XEy+|IJM_l5U=QNBv_nKlu@*$@EH!@zbvVG8&~C9 z{q1aZZjD2Ui(Z&hHqLY#V#a~R~dxiQKGLjWzY4M62I`yCf#`Szq5xkE| z0@*H_A_}2b(Gn*C0arZ!QoxCz=PmpmX(M|Q&s#(z4UJz%;h|ym6)y`5H)E<>+Op4_ zvFsp3jpOH&+ppaU_x6JQirDMm_&o(B#0}~w6cI*rud9+4`#X%8%#nA z8a0Ld6i~e8M<}Zo@~%jf+8Ah+q=LgnN2z)kz+}PhSFO{y?JYD&RfH)oILJ&kAl#AT zGPs@_B(hZE2ma(vQ94{_=cAwOR4H|pb0+fnFOAsxIOPE=qi>X+|yDg=e=*P2WZIMnGEYHX5kmOIz ziP^Q9Qg;oP)Ut1)KY%IXV1 z6yzI0$4c~J;p4M`%ONn@P;O$vcOYL@eF`<8i6QKr-@s=_!oqx{en3t8^X$CI!as-; z5?MC|+nx)7Pjr;$$pwz40hxuE*)S|}k&2hJc46g@_?GM2SL`L5yB)p`4PHwss}qwB z3R?HC{Pr-eE9xhj+TC-Oqhxn2K6^EZ>SV{8^a4kD=q%n%)Xho6W9_yEZigtd$VdJ| z$%VoyP*qhGdmEfX-W0WGp=>b73$u1K!N^Vm^_(@os>Ovs>iEOHL4o+UXxWn0NUlz9 zAA9|?>uco-_jPAC^))Ted7e5*lGtsW$ z<8%8bw9#nm6sR=HY3?z#rgOt~p1uG6dwEbsb#>V=ScYW@jb|5Dx|&~E1hfz zKd%Ug4?{2k7;*%eaWsb?zS9ytNAZPPT`~;B@|`<(ge%6xFFj79(@)&9HEF&n6~05w zuTIHBorCFom;=o-BI3zmKA29qg)D(t?I=NwYT-Vrx0Ft2MFioLy@a2rIKWzq6F)Gp z9ofl>q(#?N;PZZt`C}!ogQ3dF#V*hoK7bg)VLgq+d4?Ia&cwzZ0?)dAE9|zn?>scN zq?b^rfJYNV-_s(Vi>a5=m0c;7v)g2RH>g!WG1JG`@}+en0P6_};ZcA4M>|MPnmv2< zO0?It-i^(R4P(R-1Duj<`%m$Qw22@ffyr-+IZ6y>r(y5JGep~$SP~ap2$+}m`nAs+ zB8#4$o`nD=qRc(p{*u8{G0AUBwbz}RMSNo2xZ^1SP;yk2s!Da58;&q--nMPq*R-%f zwQv(h9=?@yfzQ!MF%KdX!lr~A8cDeZ&#Egr3vfCD7q%gHD?Uxh+<5%iMy?F*wgeqk?E4bMW&)4#6COk-FkkzAz=46wjNvMcLUu-gUjKWXll~DcHO#lSpp+!mSMw&z5cug=h-dll_mpb6Jf-EdY&i2JqE9VWO;?IQ~~(| zXX4FIK~lw&(Zv14ro#+LuM2r;I(sb)^$5rX3Dy+{kZ3_vX*eT|kSj)Wvy%?=A7Rrk z07~701SB?bVk95axN&0?m39ZWY-vD>UrnJV)(zm(apJFpL<-cSn%%n};h(C0MxH9U z8Nmg=wgQ>sgy)?Sc&0PyK9OxC)h3(Ibf%$UZN&9#5p(1z8ih1D$U9>8O$j#iE&lxZ z_<0Jl-3Jbgw*jw$D}$#r-xT$1jjzzPfX{ojiCqykar^L^Eq=k>!?yVP#?{V-vum(nFy%d4)OvyKIZc0UM7ao@F*a>G0h?#~p zafQ(WLJT%B!%P7~A`Ta&wt6b2m4;)+@X4v?ZPHj-#oj}Qwu1C@iS`R{*D0o%nvMW7 zM2S_4r{}}vE&w?rbO=5MuZ5qY2~c3pOxB2n32SbcgV89MwLzq}=&u%;lAeAXaK>w_ zLb^AIK-w(YL^BwuNt_!TrRSoVu=lv(n?|P16|iH%Y=Z}(WX=s*_pLtyc64;K$xO%( z#3ySG83w4PZQ4vg&Ie_I(EM;Sq62;uc4hoakd%NS4bL*2 zMXT2XKDW@P+Obn7hvmzUoJS8A%v@S}L&_1Mld*2>j{;UvfhK^3Sn0#-zRW}p4%4KXXlr5#Sxmih>sj`l;m7NS|2@gm67A!@Lq zKym;omEsuuvLyXp!olN$9S-CZcO3G*qTArWZLCa@0#$8rVB=r^vs?0cqrtj@Z|ULm zn?!jAV}F!?KI&y2yPvz+=;2Wa(MUxhJNkl4i50cFkR_70DSFzszjIa!XIP*4H@CEq zHcS0acSpJ6B?+TNBn_gnEZLxHgSU6xT6L6$huka16=!_`m=1bsGSbIjw^6xr#0L5x zt9&T5F{OuLF1k!BV22CG&?a{?W&4{9)3UNR|op{>8lt81qR67!hJ@pQG^Qa=k#*i?0uel!m$t@N zz^#OkcL+Jf*o}A7KSIF8W-bgQmw)s!CQ-`3eBcf#L{QD19#hXE z(84a7l8~}gA@AP3bHPz=lFoh;j{uagLQokgN7&`K`y_OSl`AFGgn-{F4iiJU!j#n1 z8c(P3gVVG3eGdm@8w7J8*<%qrs5TJU9s2ay79n-K(Bcy(=EHO*Cs{>`eOO9y0y~8c zjWk=JagH8!A285hFdy0%3;Nd`H)a@Fi^S<9XcevFny7s zBLLN+U7EpFcY)E8`if8CX-RuF{t00#-@f&=qX}OS7@uL1#S#m@W`;_?m4&2&5$l%O zC5|^qMOw~`wzW+`hmx5LBrI`Lu_x-D%-RAZK_X0sg~-A=0#fZttIl=X{!;sko(aPA z_rrL_4>yGtGm{o@%(1Zcfna*8g$t809eLOh{^$cc0C#$177dW}*I43RsPLC|_>(7l zW(@t>7G*N$D{AR(Y;mBTj<p}hKP?5>y&JK@H7W0hK5MQKCAQAe^OD9CNQaj4LOQU)Q6ICPU{(3Mh7m#t&_907KV;nKFhnqo`v zIq>MGHACfTM@@ybNUXM@Z;hZE61v?!ZqrZdNYZIF&_pG?W z1bup%Q2sTf?=*2;uMu2-hvc{#X2qm8kqQJTcE?0@8m`1RM0661iuAkA z`$(^%7_>+tDg>N^e+L{-73VWNne53dS3QlQIlMl+F_}swDztk83dDSJUl`C^b(pIj zk79^$FP1k<|C;tBHgq8AD1pAX*<>>Td z#}8HPiIBbWKA&-XM7Ew(}Mg8Ne@y8-K@NVIj|av$oZPrJ{MyxRV-Eh=>4?p!*zC8N&!5!(u?j`Chh{10HG`}c zN`;>AdkiJP{RwD$VSX96+|SRWVxdJxrcOliK?7DX8vPnWPq=z(Wh^=8-7Pdbto2I;RMD@qqQ+}!u$*rn)gmc~)ZXRfaL0zi$05TzC;J$b0Od$sFP z{(JRXt$kkda&b*vtPq5ID>AedoP1} zoHU76KlJXj=deXLzFT&irMq~eW}a2!F&PCqZ-+E2kAeqnVLrokqw=>u=4Ve$kDiSK z;RTeZ;w2M(;46@hu9NuVW&yF0BgN^I=zbFI_|OpNZK*sKX`28&=nWoRI$c_pv89TC zB27wK-e(+Nf~>~`EB<}*t}U>g^-p|yf2tpWzFE6=>4NF(;EP~2ggkkQuN~)JDemIC zG|tM%nyX*vl`O^D+O$QBP4{f`w@YKbV6x}cRRckK&_$kMF4`E1^tbM_C1JR{&dBD|5$TFcZuJ+`(R($b8===r*@?Qq45`xH*P$_^@5+WzIv zCt(I*mWoFA?mlpwId9&iBKQjA;;Gq?8bm*mW9~d^@&I(GbT+W50A8vNx9!2*p`F@G z*%w;UO^o_O7EihEtC@$ru5gj8qXQLYfMeDG0 zn)*>M#;m$lsaM?ya*V<;2J4Q9;y7Rless8qAxRp!*IYdeLnW>gk~w@3onAUL2{VRg zz4=+7@!*L;!vf*GmCUH>dB7aK+TFT!6O%*3h6xs0%ONtU#HE*=BQ7=wdQZeQf|A6r z7(;1^K!4n-@^#le+hY{D;&Xu{M-LSQf+tASVET>gT{WMKlpyb#mE{i+gPapEa9Mjg z%!i+SNN#H8DDZ2&7 z!y!-$2hW1=gPA=M0j9c7bmFQbSJR;=sZJPO=q>1gmcBPPf}Cgs*T8^5HG%SALp!g`1c}{YFdhe84OV;X^fBLZ8r)H#m(TE{B^ow->F3?WK~t>d)%^ zzQ>Op`hGNWZf&PAWsad8y}nzVu{QKy*26k8QopEn$UPsUkP$GNc-h+0b3+vc5FSO8 zXG?{FPA~#blWJM!lmMz^n1ocYLac*Z$KhTR&FS$mjb_+y24#Z139k4}f z`S85Z!!E5t`*+p(Y19$z$@%Ycm4eVB24MJEbF+PrCQ^Gl*CRr4Y_o8ohNw_V`M?X7BF`OB!!JqOk=O_|s+2^HKsbN( z%9{X9JUzrnG0sQu!?z;UBm1<~TfUw`)t+(@87GV;2Jx8j2KJB6{R*ohUsqK^;`b0g z6#*)QoU0;8a_5-#BL?8DhoO>A-YEQY8zKm&6$gkagy9i90l9}qPo9Ki+2K%n#a+r7 zGb;@53i&8)%Mr+3%cIb`u2;S&D!N0F8q6DZ*o`tG;LZp@PHR zZu289Y}>Z&5#jC}rx4RUM2_&CCWG|!q}56GzjWD)>$zUNBZT~V4nqtMT`_hD@c$nF zD#s|hcaV3R5mWlyw3*hp!qx9e3s`^rW4fSQm``ntY6@%^{}}OvRGpGi-;4tsNkKdU zf_My`ue!?Z6PeYJ3a=W$l|ca+l4dAgZX#GU*C=9aLp`?SIY@DF_izS50%<_XHim4~1f+l9O&^ip zt*ra2u}MdUIVowo$j$35AGumMVIXwen$8=GDHGBB~<5_mv zYJRdR7*^aSVJm_16sHd)CwvK38X`^?#ttEfgh;nG9A|9hmnXt65CjBq5nPKGi_S1U zeN&}VAF&FIbc(cd<4aTLlm=Nk}H=p z$&1y!6ZjV+%%tlHldfDEV{ZhK6EK<06w`(pRUBjzny@eqt17c5)M}0yGe!ZTHN1qk z2D6C~6eS%Z{_z&lCnrWV0-ua`@{De_3+2C5KlWyp;*;xGdXvl~HIW?4!1Eozn% z(OQ8k37#S(voM-^K&}$uWh55|tEN$ONpK4jAgK{dc|`XZtbhpzCYGv18`BFZ(Z~kk zRRnE_VKKVFiEtc$tyM=LB*mF0{o{C-@Phdh(t}Z##MwiuPXnAJ)T(GeTT%i4Y%CKn z7O##V%&gX)W_q;0hF2_MT~$YB-+V@Dab}KTv8cdt07;O>bsV}i-S)EdWrX5Pi+xUKFD;!BU*vqnKPt-WKOnPW00IkfMvRHt@<e~y@j!iQG*bVygn7tnE}tT>4*NNG z#F66%kQTczEQH!Y7y{zX&A>O@B=Ga4`49}Fl*S^EPpw2!buEss8;gq<ob%jX7*Cq%w&TLX6=B(Gk3Y^Cv+xHS5j}fW#7Xo6cFvboB*jY&u%S@(HMEU{_W!RSvV!mhe>?>Wr2WL9Yb6q{&@?GeavVy->x~27f zct+<-=G;>gbE=PLT`x-6-l^uJ64j5I!h3XvljQ14sjGwkYr5fk4wHP35(ybftEORh z0a7DYb?vU%1=EV^c3a!?=;Q;%ZjUzaO+RoXHF|%-J*V>9-|md8>fJkHjZyEONvmEI z{$VU}dnB9Ic2D(@10weXxt7*n7F$vW!sAuO3Yt5l&c(gW6&cn0^~u!I`ZHG?YS7cY z{^>f`+)g)}`($v{Bc|aTn=^MV=Q8@rl}vyKOk?yu9^M@oXQq-RT1D;% z3`}pcEOvwW*)gy~TPE~;-J-nHq8P&&<2B249z9cdIX?UixyVa+7*St6h7i zdmcZwac#={(1e8JeYOu+c0F^6TFIPle?RF~pA=3A^lX<7o?-33xeUroPHX++_UzRD zpHX-J4PH?8i%;Dx!QCHq-?C9)%UJ@feSft^1N_>{_3CS3Q6U!@n&OZ8mzNOD@DKoz zP<*@I`|&PDv{|)i(L(g<5uce8A%lkPeBmhQ7zt|x>Xf;sx=7_6p-ui02S5J9zhA&0 zS-N9sY*F)j(7A^3ExF#kZ{IPd&4G99t>}56p8-2-o}#`M7byHvP`rhfNoEZ#npkU; zX>++50}rE+qbKhDC;ajMj7=>X4@)NW&j}H{&~!&vxJwoi(JO4-4=P*XfKbXzt`v$) zX(=WR(vf-S)#0_<$N;4sZh`554>G10L~NS%{X?8I+0LNLfEIH7dcfLb3YPNTG8st5 zP7at!yBhUuFtFtj9dR<(HWK?Fd|YG=9fJ*s9R6TF?`ngBUa=P^lf>%w3NCd%-k6F5 zd_~Kx!X-kgIN<(+=KM!gaDuJ_CsIKh0M%Uyo#{~3(Sf3ZHEk-UyGsEzkKboJk6*gn z8Af7-rHQ`vz0#c8tXTpORBY#UJT}xd1gC*fWsLVhC=i4jBM4%b9b(#-`Z`QzpK`B~ z9e^yl4_0g+`bAY_Sh+Py#$VR1T`L_396R0T?$tx_QXM_97SobAx=jIG+KcXYmgI-6 z)dUVm#*%p4w(T#S2~+*)g{T>q`=GPCilMW5I`KSLt2eL5~gQ?j^4Y3$boHQc{{KkW1mnMGlx zdvFnmO$`3*{YQF3hRBd8sVCl(yI};PQ5(d|%L66zm*9Lhd0O#)nR_S9y+pmo(GHzt z_RN-G3u&964oGJzaEio{pc`p(FP_!W};ytA1`VSea6PKm! z3%o(@If8qzKlK5C@*{zhc~GYBpI&K2H2~*7oWh>U>o^6Jv}-Zm>pW4QWnc5Hb`Tk2 za+eWa$e7EiieXQ}7SUfIGm@(5$YV--0X&Vg@6`>2K#ic+M4UY`G-nbsgyJcP2hoY+ zKa_zqnEQ@?<4CQ>nb4ZG6vG0{ymYp)tq!kw(*voUhV#zwDSu6@38kaEeEISPy3~;l zGAt=Bg~#`awg~C+VyP4-N$+lk%|G3jx=7Se(W4lu3FiJ+yCI>yE1KjV|8&ZVMg%*qjSeC;q+VGt{&)rM*q zdU|9{UOGOZ6$yl3aUJhHGP_cpTB3;1p=AO09meUpgM(ihJP5fm#E_t7cYxq1&IxIv zlhGRBM{48;E#a_aY8SNB)J&9vy_8;Bn3^$#lm}Ipt4pnimqo^T3%AdH4qk)b(Dv!& z0aA`u^c^Zfm5P}}R+@y#k}}ItCVa@G2N8iNG=_*dRVIY^QLob9^v399mdslqx_MIo zQ~D*L+fyKDrlqDzzEHemiWTp3PLx+&9CT)QT$H!avB8K^AB-k4vL#}-)M@oDgme z8Jq=i8=}c{^1s(74!b{Y9&bB34WzOs$x6S5*yRd^|LNXSs0-#fePY z{`z4c5E&V3wwgKdaFF4JGT=3W^efeXba^2YNhrb>B@LLUdq-K_Fuvqn7WXqAoo7j_ zm_cP~Mxc<$LxPyXEoD2)=fH{S%s+nnb ziL)m5G2xMfkpYV+IOz1w{aWI_s7AaFOQgAhoKb=u#u4I7&Oap)rSdB_v&3zH$VR8@a5f1Orz3TO?jd}mfSRmOBVPmk(qL&;xje?&=F=SDUQjuuw)Vf z7!5038wz}yZ1$;u6vl=G3|lvtQz9~|Kg@%WEu|^_M4i|j7&wWDNNY_Jfe+is zZ&0f3o6kDE7uHl5E?CJe!P4`1t^8#h1$2eX|A%* zyU;N0hqQq|_`x*D23f}%Ra=9DyVK6(kA+tNyPNq&t7 zH~9ApG$PdhtzfG-v3=M#ANK6WF`yf7IE|)13Oi4gERVx>$B4ej=8c6}BzuV2PmIkV z`;QCT{6OK^oBxTkMP1B&_in3Pp;Rw#Mobz8WreRly#aZwXKt6=n86PQcyUV zBs=_{FxF%xzcS$;SKxivF7??n(P*K~>aqiu(aTQ@G)68w!D*OhZ^0_uefwGJ5E=j^ zt@frMkR!=n5)*`&NtuYS?G0gA_!w+y80Bw@^NI#sJmw%ynTagF)BsD>Xe?Ynaz+wf z;E71j3|met{hWNUmBJ=UGpdO1#LXS_RtwbQvodHnFeSZjC7V5`#{{vDLm!9Q7EM$xn!5R2 zMg3WhM8G9;#)Ld4n~UU#iOQg&xR%Tck_rb{oQ%6C3$)9%)|ELL{m_`{-9Uk{A(jZz znnUX(xBl-?2%+BOF+ax4a9vq$c0d8Y-9!9~(#XnAus}K#=8q@Z4?mf#8VuQwM~+RY zQSSlkFI>lrH4w#(%fM?ETSa z$W%=$I8yP>@EsV1n09!@0;e>u&Hud@JHfn=hi@er6&;6;wp_MsJMZrh_cYp}R^7UF z?V9!;aGeA$LnerPVsV0CcVqycJ-#>51&RK>DHpd=tm4M$h6iB!^y%yY2;jOubQF7- zMj099e8VbodF8j2_H5JD3^I=vw^T7(f9gyQ4OZnbLTu~}~zP;(mWZD~yHGwFUR_GrpfTSKwQR1DKY7*EkzdV9%m_(YY`84tu?6r7n z<*@UeeoT>+`H2E>g??ZLW?~>TI{3X5Jhq!wOxSuMc14JAD=%n;5GBKb&SM7e$DWcI zA9q~nQc$pCgqfqeHeT%J2QG8kQcIE&_BO&D7gC% zimc@MecS%r4)%#PSKCvCPYN-us^u`7C}K@P)pnSxD!V%P^7&b(8GzE#gbHP5hsAMjKD{l9S?4$T@%-~y|1*){3P_+*xqmMVKl-Z}VN=9Eba zh2n>hB?Jw3`;oI|8h9xGy&r&_P%Q=+Ho6GQ#lpx2IRtSyDTGk>LnmpM8I6bT~4{ zXhi;ApQiO3H#^jN98>Z1WY22LNX7MO%8#Fa*RLBE5ixRC=XT$J+ty_B=-?&UfF{xySK2sLImG*SGZTyy_ZIm5OweEcuLIDX^n+p@nJZaZ^%TgTeOAUDet< z_0FBHS*Nk;%R2!%HOAeK4<5Vg*d766RGa1fAiHubhijgH0ixz0~-BJiZ}8>4U(7KDc$4hG_I2HcoW;K(l| z*v-_CzEY8hRiAMLz|)F%3k_uQVdo_nw@I7Qu-eSeNajxq$pEz9naHnvwwYq&92#;S_(x#<@+DHS5xVqR7y||(AgXEWJK%us^gRK*L z{V{gIe!};T2apkBe!?I~-7RC%o-DoMN7ZtlwU#L{1nTmB|6hC80#$RqwvUl94H^>- zkz4JUm@=qSVbG}T9n*2OKAZc;9} zl#)8nvpMsfb=J)KzO%k>ed}A_I@TJ4cJ2TE|9`*V`@YZfyw8ga(*+a{ghrvS&;|ND zJf`ax9Oi;w=dBoO9ADgBal8aonULF_^UMn$CVcH3mq;&YCsWZ~WNuhLm_0Z^Oae{g z2rB|}ib_h!`gQ$ub7UkW(#TIFAb>@C<*R1DeR{U8z8-5UGEiM2SQevKBC{p6$bi6N zLKzG-J@S@L5|jfKaLggckfB4vBOM)KUuZxG(W)U!jKa4?|5YCd<+MdK2Hg^Go>2EDKq`?|w0 z1sN=*^A0qtofAiA2~^x_$KZ5~EApT(Zz;@ymjP0aUQ?)rc$fx=42VL4N=N|$*cf-D zbIdTXRl{+WY{0{lHvd^9kr^Sqaf3@6P2te-P(9JVqaW67gBzOpLWv@H@Jl*NYKfs z-|%aj!Ynk{8o5pf@C5l`fEe$FZXl$Eny^ZAsCxULedy$6p8#oyLuUXs=Qbq1;jfT6 z(5A9@X3r*|?%yLxp#O+uW_N1{dwL-~WYR!D16dY#D-9k){9b7gf~Uk6$UIPjS%Or0 zYVWz)p#wt-aPcXHSFX&O^OQ#!KpMx*ugk>3tCfm4MsaQ`eDvXz#UU!GN*&_7>2ryY zyOIxB5N(}>2Z2A08918%v;0Is%zq#J(f_|Mt7!xvz(}*c`~){dc5-6%P;eQ+B8iU$ zGHOB8bbE;B&K<_;bbA_&2$Z1nNx;vjX%WP59}9B7EC>~gz7;7O@%~8t(|;#s{o~F4 zPrl56<}w0`J&xH!I*RFW^DL23qnx988qRba?LmB%Cc5({!&V5fWDXV_1|*JUcNF&O z6x1^*nGM4*LIWRT$v_i96d%nk15o27aMv|Q!F~y)aN?s_#l}VjgqV(V1>C*BR&2D( z@Eik{Y5ia-I(OGbViLjx$J%zyX|i+-wCd79I{C?&Vk<7rm24ul|cA?wA-G9F1p{7&B1 z2`L!?ahwgsHu8!xyp7+B@EA|LxfRZjA*$%sVrL9sj_J@_et^sciVr|X8Qew#PbL^N z$*|vl9gc29ntHTtvbPw9sGnk2iLsl^R2iI5{;DM-RFfde4aT`EtjcaR#koi!vq32e z1^f552BU}VlEL|DRc^;}9LRwMwUpAK2!9FOKI{}Uk+6>wBUIbN$pd(xE1Cfij5+9& zHw(`Ru|WzCEY8D&=#X@gAle)zUtsL?LU~_Oc=aj~nB#GW4{yT*q?`sw0o&c6OL@2$ zaQwm8*Z`;&m2BYMj0gW=#+jq{bv|2qNxy|7};>~0Vtf8sqPiCDs3K<1|4pgLoH|m1evcL`3 zS+-Ey4k9Hcm5WC)6iZMX%#%iL8VvrWR+)U<6HYIs4rp{_gn{IH99&r4RcK9R47x zSS7)B2!df64CcPAe75GI;%m0%TCsMPWVe!buP@c|-eCf%N*u_L%H?*rwbF0mZnj~|w8>+~1GWHm1X z&~2>10s5-od!6L5uh_6rO+D-r_VR-7Vsj9*<{lm%UydIi3oIH{wRfdYMG3@^IGVP| zk0ylXU5HcMU)VBup*rX(d>270REQa+R-51(tT6B83@-C9;wCSGFYvPlsXXu=bhzH0QQV#K9!?xd3cU46K6#c_DbKPP$y{wFm=^ zuz&KAyv+>;H2txUWLeAmC7D)a_GVeTpP$cFcTrCE@^M>SvkUfn>%XYJsNRr!c1y#! z(j%`Ws?oltgBp?_Ty0DJ^o6Kh&CEAUg6U`dzp{^&Rp`9LD2DhP>oRMC#MvH;woT zBbaZH32P?c;6@*h-2NC1@!m01E9c0ZE1oUKE$Nv2!-1+<+pUIs8QnYF zRiXDJD)q#Ug&X$gm)uTu=?BS69V)(>`8eidV3l-#-My79_s)bMi4hk0b+}MwfoO?F zd3uo|n;xOnpTol;urPRX>K0rmYUiU@n;qgfSHstW0#Ad}5i7CWE5HNkMDo6hIf-)} zCbQpRMOq!6w*;I9IVC*Zmk>T++~5_A5jhW4#Wj}c;H(&Hj~+c*jXVSl?e-pw#94;I zf1ZECus47D(@=q!$X?w*B=;P)q|}BgnKI0qSS!~0O#9=!E)CERO_awXI}1nC=J4Ud z+MWPywc=AId7|`{<)QTp3k@7_2Sn@|+!V%!2^$*|Aad#O(GsHuR1BcLIc-(tROtz^ zNSV&Nr&d=Tn3#$VWXR!Bh-+x!+Mp)A2@Pv5=l>$XADw_QfX(b!_90jUYl^hboPgOT zrB67MiFa2x`Hn!npaH8kkc-rrAaoP}USqoxngaA;G%yvsQB7h}%2E(qYApyN4X_Z4 zLl>ji$3mW}tT_GGa39B=(%qvr=htMnOAICB^im2Eu>ss{Y;3|1Tk{v7$1u(o%O*i3 zC=Z`NyoBz_^xux;kOTZGW&e}Wz~?ULdo~9tCGIRc?q`BO9A#%!!03bcES$VU)ofbv z)F6j(``0R?NadM>z3hd|lU2|)xdcn&c zXxNWZ!!E@J4~5;)q4E@`xdRp89W%P=IrzV8c&ZxpjHf-MAgU*%t*YcS9e1I%yF#J)GQ`|i5|eUnmB z#v;US$$|d${^s_|`#u#;j%!OyM7tsQfF7C-&{%U8m0@^4OO)E6IggYN(7!)xXdfb9 zt*h_s(t3~{B6V)N*5J9#f8us&?Dy>@nvDjz!FWhC7)!}%bD-ph5e3HM8A$)^p|R4h zTsufmS`8NT!v%(sXu`u+`w?r)apRM8#|=&K^nq~GHM7Jmlym|DHn0Qt5fv3xN_U*i77RU z!$$9_>N==5u-{(vfs(mJ(c_zI~d-~=iOI`Xh?n)B-Cg&X(hM{He~k>IMM@3`l>=94K=xkvXb zsPHq>ReoMMW$)Kr8}FQ&p|wRSnYennV@$bmfNpLI%6s~n=Taz6#lE2(*y1J_Ith!R zG$I73aT2lwP9nq+pMb~i>jl)R1blq%6_o{!7kEE$v=}1(P(Q>{kJ1lhqu@)Ks}j06 z#0*}kjWZRppI_{Ux~=z!d&v2)dZ=U|Sm=Oav@yuq)>b*tSZu=>X{LHJUN!Bnt7;!a z>U+&SZp&-$+jsxfA(@Tw-|;WGJ?kb5xj*qONt}a`7$oU=?cBp@NM?}Pr}JDQhT%cF zlfoAsXiw5BWYEAPFi5EEAbTf4YVmL}HtEB+RXsD{_p=1}h@)4Y3V>}-q^F!QCeT{} zSQ70^5H;%-gGQSQkkQ1)3I&3H_sbZfpYr5{F$iT?7*c{nv!sq`EGRmjsod*$?cE%u zC)G$!o$Mz28VOa*xZ8Ha8n=g}EG-PVD{HSZHDeKa#bNR)X_|tBwz}g0%Vt?RgcceXR4*6q)RxRZ;CD;ntpAzAhR#q$mmD@c6i{0r~-KMoAB;z*_N2^AZih3PrU zFbD)4rP6nDL}sfAUnQU_W}ZZyCTJDpP~lh(m$?KWmaTB~9ssJfao=e$;7_w(n&Z`+ z-rx?A7s}v!^3(byGRl)1UVDt({K`V942w?S^f06!OqDTeuRi8Apj2<*D(tkUGts-qvP-Z?vKGf(&Kn(J@H9#I;_@Kt1 zF3_`fm%b(XuRwv2Zjk^U8X0IDfFE@Navzv>F~3?*D7Mb#Si494oT z?XC`<_O#j)a;I4!-as#_C87+L^AK=R!UJ^uN7Tc)0E_{+))s6x34JG@XxYD5g8FYbnH)DdF-gH2vy~oLp*b>O za$GPxMz6@Vnjl>an?Um%FAgoAptOEKt%4#ZTrAoHe{zVAO#yhu|1OT9mW-dlxQb7? zo&ChX@0WuMP@`Iq%o22f7WVd6{|LY6-YxU!Rw6<|q8+|{L($_uhkEzu&24u+;1l*- z4_Z`Ipq-Arlb50}nHG(PaZo;pg^0)UUG9wtF)+}0C^%#K&11vSP!O0D(jcH!RA@J+ zoDF`Di41*zY6AlSCPEi{JXcysL05|Jx{1V-WBufS@rm~ZyY8@fIW;08bcFl-8?63M z<^8|EOd{cTIo*HXwg2vI0qQ0ZUJZC#)bn&%;YIcGm2abS-i}Xb4qiR5{#wI;%mi1Z z$Wu4!#K_+`vugUtabeYLeR@m+5M^`ruRgngF##NMM8 zULWR7MMWgy7byc9WNz>mgoWoI)LK^(h~ztW3O6J!&2wiodOmD5Kr!}c6p-s3 z1+|;*$uYC0;nt_m{c3HC-!6g9!;gCP89swZS@B<_t(<40{6JN?1OcM750Y6VM?=%r zv>4VMu#1rz+YHcj>3ciXdsIly$=yFC%~cG?VN17oq7#5+=Rx#{TAbQRl>&CWk`ui`}j(Kui zy=hy&w2r3CBc2}NotsXrn0Z5ILQQU;g$B02%>_oL9gD-%frl!xXZAP+>16Go0paG( zwVXu*=T=&>5Sc=qBYKSz1U??okkAr=0<(;yDjs?}5n{}*7^_F`oSSIgBqN2^>sc~p zXfQV6%t(+ysD-}<@#%2N&FFoWD)G4-vDHL(X70!#n;VT~vg)WYBNSx^8{ZYV`xf*J zRFtjvyy+`WJbLVqeeDKa_dVtp-h5kp&R2E6!^i@ks+AJi&pP9#ybv5si|xPPJ`H1f ze^NZtzRKiA_8>#~$Hch~$CmSlu=p;6!IE^M%k>(yBFOvfV2_9J@dF+#c8U;zo+fmX zuLrTs+>z-$z^a3gPXJ?tn6nA9rP%3(my^f^b04k?r7OMZfV!_oyEC0sA$TY?k%QaT zbAG&&8B*D5W?tlRzR${ivQBCL6#os{&1N%P{bToztGZj*;i`K`Vj3ZJ3(e1&xN@xf zy$8LCzErtC2$jY}-wQbMh5yCo=5-dG_I<*;Q?~+T%8+gzTktD7zVDt{eWQky8bJ#V z;*(OHfa;VsMIKHN$-tB~K#HO9CstJGfN`REDyZY7byva|>M1A#Q~>6N=J0<+DP@fX z>>`NDj54DJeEIHJK*+jhN6NR2@Cwj1cqi>Iv@Nhrb9L5CSKh5>tkFx7JbC!dxYvsP zdlvnH%Lc<%(7xu&WG<&H83`HDjmA2 z`_8NeoHMow`h+?$g&s62#*RrwLPGqOZL^Rh;~b5*oj&piQpzmQ`S_s0UfTOg8;Lom zH>NMX7NbAks`v5Z_wvds`)0hB-4Yk>=+nRBX~OiLVx@;FWopHvKAl<9Qx|jjv#Bx0 zmS=1WUcQ*v?@{?#`9v8BnzWLY!e)ysL zHZ*uj-p*4RH*6Pr8aR~_a~wn;vIT0V@Q*m;?-80q$-9JUh0qrDi@ol!`dCxriQ2XqmEGd+vWvFDzxDpX6r9sG) z=1FD^s7Sq^E1tcdz5mbJRgDJ!oTFOVwV^4Gez2@BH#x{m|Bmx=RlGw(?G1<@@x^oV?ZH##fE|rP~g6b#)zJ zm)TxLMWv%tc5UquBbxpA3VF9<$By!ses))v=hd4tXO8iWHA)R81d%GX}yF4eJkEwN-mGpt=f?G{_a9v_4wR; zKRuOoEqS{!KfXS!>h87u&t++k{uo)ONk{E%DX*j7t-fya;&M+N9i44IzS0fftsXwf zZ%|BugXx#j(k?xEH2Cp$p5LZUnbK5IyQtPntE5AJcN;3c2HofWxpaG~ZCDr8nlA_4 z(&FOV#@AOb``a5^Us>|(?$S%Cf4lX78KDb0X#MzW)fwyC{CtaEw|4!wi}6Ye$NhNi ziQm+JUUgbspC5nLEaaEOpLaXGw$;zKI92PvbGdZA!;{te&b^$S=&O~!J>~U@u{&EG z9=f95k2egNduF=o!G812qTCy|AL_7K%liHl9_~(5)a%R}!#zDcE5jB)J#&wFuz7s4 zS@qe0OP&_xdl{P5Ja34>nz9c`TN<_Q(Z5rt_4oaUYuP;N${0spUQu{|c}0okwbk!; zY}*!>9HZau;-ZJDnwpwE>ZZTUzqYdT@Zo+>PS4V^jBh#j%Hpx5FOw?lW}ltOsFm9( zwQk*_b?ewaMs7Nvx|G3~K1f4DV^@datwt|juA$;mRJ+O6O{tfxFD*^gbhWXI{61*x z*s&|$zffw{%rju;e*OGc504uh9^x4nH(p^`+MkxUH`d*}d2{yb*V~Uee$3p}M$7%^ z=&fc$R=iZ;=}rU&PJNkTsB8J+vW@Xo`wb5sOljV{`AL&VoyoyoMMd_j-#s76`U`g` z_^toVa@E*99ikRrdGzP9d1mJ3HV^)&?VjW}*lX|J-$#zD{XQ+s`s=6H+Lc97vX&b( zZd~BuR@r6h)T#0eGY9$YUT|a0^0!a>9y@-#XRls&Qc}En&pKC>yR*N;yXP8bX7=W0 zyA2w2pkCv)_TRs*Vkn$GKbbY>+RC0YPw!{^nVI%4!t6Y9%8T>5cJIE=({rT%uvM=f zhqSnG;ewNslRcN-w{PDN`|Mh&si{1&`ns_v1yb)|KtTlG4HOV-IRC*So@@i=&} zwceigrl}V#^9u{LmOSmF5a3od^paJQYWME$9y(vQ{qaYqaULC$&dv*SdV4lZ{X}qZ z3nis3O#O{pR+rdN>b?fb|M)^PPb)=z{rood&t>hdJAMqBae8LrkrC}iPoCVwJa&&| z_N@)=bzKkpYFS^j%hK8B<)yJS?a$o|b)Nl@An?IasAL>%B zKG-hvMB;hVsG^dRJL)T6P0`fSx|fiUcQ!2Z7@=;MMc?G+nRNexpeP5+Wq|M z_j3;oTDHUV@yV(A1qI8CbH@@ITzk&!G3fsF%lib@oW{R;;jmS27A|^vrj6yBr)PI|9z6Kq znKOO%v>!T(h1DZDIax7kfA3kdBV9+-SL~SoF7=Xk&wl-gd-(^=0{5}tv`gZ;D6jeQ zj(}wG{JiOzIhWj>OJ6P@ymU}IOM~t$90@Q*pFbBAdg(aO^R?X?a`yhA16+1E-!boN?Vs;|!?C5$hAa%xM4ZR}n@zXZY`PZ#p8d5ac99Y3@WjjS5x{ufu9R9?S+ ztxV2%9^tITL@arB&h&iRdl|B0$5f5`wXO+e6W{4hZ8*D6tFL7rlLIFn96w=#DG{G5 z9AM(i%**OIW0abBRS&pKd>kQonG@d+8_;NYO{w07-J3^QZr{$9E7 z!?LX2JP!HvI%Vsc&u`dV@-<^8SN(}<(hL6^_~!hy?cN6tOq(`sV?x2GF=I|#)bdLr z^DVqE`=o*X#ECt7_Pkx-AUoRppMG)mnNLVp`5hUz=64SL?Zb^*Dk)8!J6GRQ{$Y;$ z9c&~I&sC3|Jh|=BqiG)oTJ_q_`eD94jP2H~+w@la!xL1t*Vostx#W-KSEhO}VXS42 zLpb2CVkk(M7xEhU`mchvie|(e()N(GU;0#3RFKE*Kco-kg1s8`W-O-_G*(t$&zzbS z6&3vfq8MPC?sM{Fk6|lc-O4yQ=TdjV{0Y-2_w<|V+DRP0OK#d0r#s14b4zf5>!EpJ zwx0X<$L#4a+-JygRsOc?fC1iaF^jL1NZK0h>Z-$g?B6Y*)zjhBjML-%1}$^S+0t5h z*vcOLBZ_{BiHT8e(qUNi;}E0QM2~e}KbaC+d2j_*$lkq8?;ja4(YcG>9*g4K81FEb z3WssKls7PLE;<$YEhrO|!ZU2;+f%>PK-w(xPp=*lQtd0tm-AatW8l=|<0`*@bhA!6 zG%%v{{_r#N!uF^%Z`0-;=#n+>of_$;>oMYsGLu|7bk&=d%sG2Fp8v5dhVX+K8)|O; zV@_e=)(qRi)1f!-SZH2Y{G?Y^nOk-1oiQ7UDH?KJQ(ZQMNi%M z+RE*`fAMp34_1(F06#OEebZ%VU|=9??jnyuTH?u0^g1tV+TkF%?#}H^^@lp-H`uae zi*mod?)F+H9!%-J9(yFhrsWdwKiz?JfYq%H9IXi#^;7@gUnhJUO)s0q6P6b;J3uZkn3= zGz*ghVy!L}hpv44w6R~(-MhQnRaBNHzkYbUK4Y5zU?c2pJQcT#ON_7kEY!rBdp>dE zggWStk+^yDCP<{X;GhX$BC(_(fr;qczrTlDOjOh+opoQ&GhhU>$xI__sUmz1|2C@# zCO}>wgTzbvml!?s>|9fUu%@P_W5$g$yD;0Ss-nw}&m9Cw!yY0Y}3bvUM6D(I1Wsf9pB{8k+j^Ek5>jo}^9eRGv=f&<#I>dv!WH$%SuDRoefU?~- zDM2+jLF+$SuI=BPx>Uf<0*gU@A$^!UR*Y`_OR0%B?izH<$;n|$#NCKvq~a;G>PYO_ zv~_F!vbI|LH^-RWPDyD&iChDomk!FKaEUQHdhz`1KGei!gZyM1djf5!u`kT-lfH!d zjo{6~W}+$!`?P9Q6Uv)aRR4$XR@O6L{|jnWo?sU)D7@-Yp*jEh>H^)*FbkSwe@WMI{iQ;bGH^JX⋙# z3za?&D^^r|4t1O4+jijMDIkN6uH~j6d7J0wJ3B66acfuPdvVdK7H;3tvX~?7(nPIo z=}Z3ox;Wnd(}xVdMy>nVtNko*Sq5$g_v>4btSu}o)J^aFdTr(FQL9%EIz21YD&D*2 z<;72SyiD>d{gP&9G=2J*XXoZu7`FWTS~-2f=QmF(KBX9H2#Az~KWl;WmUr)#0=L}n zS>&2He|sNBB0NR}s=U6Z;|P7g>6244qO2}mSX*XG!rt;^@!0&rK}(;jQ#CkJ?@0n z=~8k}jY-(LetoSmAG-aA%J}^swf^qyWlgKG!u32lTINP?ml&}q?a#iATJ`DFwd=2j zhK5w@v%?*_xl=rQ9y$~cek)JQs=7;H?g^A7-6b9x*hp7bx1_YRVWUP-Iri$yUJRh# z88d3sFM?F7pp}{{Da9y;Q1gF&`%H~|NcgyD8dc9-QRO}b?Rb6t+*=#!P$0Bu-uw>8 zreVW|ovDr}Z_J)kwT6U*kZk>c%oL$pQ(kwa;_7J>^x%TIUawv~dMtz!U^?xoDJ334 zwNUwu$}eoyv?&4V*DUK>>uYOQmFH0+Z3Sbqf3>U<{~!}7Q^juIy}KJs35j*s>UVJ& zr{-TD#ID%9Ws8POx%~o{;<2szFW8lneS6c=^sAl}sYaKqCIN&ESFRiYVEI=xg!~PF zuQ;Z)NzsGRip9`4Jo(tM{SNMYX5!`#Dki$TCKwZU_3{^3T}plR@`IYH>c&|n>-Gb}&92N1S#V?6ikFE;slJr=sOSpjY}2NVtcA(`!)5f3gr29<~if-rfGjJI}sG*pvE#JO53Y3>)Bq0I-r}z z-W9KodngZI-N(kphOpRNMJ1V8qXho7UOi1nC5CI;QMc+Ug*KX-<(YZj<*y!eKG5G} zGVj_$Yw_bAM1v^Upr*|{zisl>7gkILC_UX+YTj{s+E1VW+qQlCQI?);YVO2r_CNd^WABi4M%_O(9JdEh{$(Tr6!%kufPRlSF=e)q?mOI8Lx z>Qb5ZdP8DIB4~u@|6VDD<3P2Ob=<@>SEwZy6uUO9QHj zbnDu+>t3kHu}s$EGjm#uCW+QilpyC8?b;C;N8gaqE?{M@sb zmpt3^>eV6{0Uo`lg#L(#2z7-H!@PxA1)I;ayD^p`L>cDCJ@dxe(u%@>71_6HyH7j42Rv3jpqH!Tq8wjOGE^H&N;fZ`G270XYa+lK;IdD;PY;D72*v zcAFhCMg$LvkMR>HM!jAME7hv1XshnRu(UZh)(m8mPWSfoye(*ioCKM0n;kpW8O)j+ zySgA=>1n7*vQ!aNdzNh08cL3xF7apV!Tu&es<45B>@p3w6Wi00el&bFS?Y$QkDm1jekU9qNaI#CQ&wA)q`9xNK|L9U#9NV&0D>L}< z`i}dk0=KHT#<2aJcVq$9^oSmn5JfQljO&CSNvUY! zaAxkvks||^KHtmAMm~z^9U8GQD(BYHL8Xr-_LmCDfs5>JZQ|nDtjjq2!Hb`r+kJcS z6$uY%aWr%>dqf~AS8BQ`$tsFT5!zX8a&U`H_biU>66tG@--XnrG8^3{ z9*YKz$nH>c0r5TwynWU!>pU@oEfX~57$3BeY{cjD&zWK?i94D z@bTuiet_4!Z`2X-kY^xiCP+~VYZbRj4LD)y0S7mYzv4xE#U~|ogYSlTSp4|phR(fv z?+myDdP==uUVl@4#k+e!fncT(h*Ebcs@GLkRwCxOP~3SR^!44I_I_NxD>~T-;I-g1 zgK^{PRrfoX5JOm!HNjH~uqSG2u=}W=+##25{u3o?X>H9~+7}Y3`b)S_iZ&rO>qQH#?Lo*4|I!W#9B5t3Xe_eUNqNeq(XWSVYuUmt|LbHvtFTbueP|Ju}4^S zGD%4&30k5wJJ%-T+Q2&X6mDe~7V5EP+;{C#AUy1fG0S1@mC@d2g)Rs@d9ndfjzU(j z>(2f+Z=GNDcIHnw+cew+x+3TO`y{9lA-`lTY;DpZw+6bOnBY~;D}2aq^+3(S7E*w~ z`V48`gzyyZ`h6I;{?-Rf@WNsCprnsRor*=d~k0I^Ez737s(-}lf#L%+K z)aJQ*KojWb9AUK?WfI1E^y?RN{`_75L9@1Pcd)%T)oYxa&_B{5W``22Qb|dP@?hKc z)GIOn-UG9E+)lw)pD_;K7ZIT?%HwSdO%1c?28d$vOzKNBuI*>CR-lvJG(`Sr*q}kD zp+kLt=5>|-2$3w)1}kPiq`h`o`UbZqP;^VlZ5nE)%Qq=n>u35*i7 z{v`_>KOA14*^bV!&$b`J#o7 zIn4EsE3z&{tgECrF1TG^CHesjli)35kWx#Y}cFD`fP(`T0^U{UG?3M)#eO&PYqV61mp zkpWbjjPl7Dr&}#wzMShwG3?-=Nf}|mANDc6+LXnQmVq=9Ogvus?zxmb8mvD_r091P zSQ4GHHz{6pDmEiq!3C;q+r7Jhq8EkmQHYV+#*G_iL#PAQHO%kAFZZycpnaDf-lAp{ zZ~blJkdHOUD+;7#nXp(Dx5HoyqwbVKl-*!uUtKpHBv!$I;w*T6*`@`!MvccS`K?i- zp-x4e5I;1j!O?R*^oQ3H%6!@$sz`0^!ySgNesIxp;;9`JME3)9lVRE52)=pL5S+d4 z7dTvSF0}%A2$d`0`Xc|TPK#;WQQHTCxI_dARtq##m4!of3;88qWkYM2SHAl%@I6%G z!iRc$qt!I^tUj2!^e+6>&X_yNM`0r&%!L*&sn+~Qw7hOdNG+xuREDtxH-U|A^!X})z z8fZc!{-W$4wuleW7MjgE zcD(<6A^5p6tNObN_@bk(JM@b~&YijvadpJ00RR(a`%XeaBeaOPT}6=9_P8Bf71+y` z1h8$Qm!fb_xv^$d)qXfOb*G|*{fw`!ztzG}`}PI%*m4cQ?QFtM0`1ASqvW<{fjVwO zdq|E|osq%c$n?X@K|ZE5O4Ay6&=F))8vNW-VJrXS@I@!>O2p8MUh`OaJ;&rcK2uBYFWB zY1y)6)3$BnVLBFJ;BlXLu%9PIA|*S_xX?^YLLJKdn}+gc6jXj)JyfZMve69J}E9aIXEIQ(SYJL8Xv_30|T)}F}dc0 z{I>7dacA#=1LMes)Fv@ITVH|z77pm!m-k}D!EDqOY)$%*`PH=i4Su!Yo1{BTMM5fJ zIm~z1s$Q@FW+;O$3_O@T<=EIpRO->-zzO>LW>h(- zPP>Ieruc_$z7?gY3oEhWvS*bnt*kV0 zn#rFAJM45m+Ssq|f<(N;y3mrrJy1lnd?>ofcOdeG)26hNu)14+X&ca@bc zR*62hcPRB1#i>Gvs1eB4lVAgU%8?qKq)x{7;u=#kKV)1l{_-X0q5$eFjpeyxKCFT} zyPaeI;KYO$aLYaWW6zl2)m?a5@j|Tm)T6k#nCj}-v195C8}qs=$;up6R9G(TOpk7^ zTMHj}7gL_#P_%d^ni(HONT|?()iemu@yD})HR*R^tTTju1(6?GBOCtKf}uqw4w~#A z&pH!YGQjm~&xa2mUS9NYBLwRO@IFCU{4s3ayrjWdUEy$vK1D@Qiee-qMBUw3w~>G- zp=QDhkC<0ieMd_#3I#w(B`X$`vA({(28RZ02Q_;^H9b78x81`dcIhCzU1P@zy9@sy zRlg?T4XQq&!IS|1Xa8sU66*;N(T{iI7)uH>9FM8ohYw67+<~tlnXe44JOq zmg#(Zr`2)ItIi_z9;{ubo;^fS_sNIj$PXfoiw8z_JbTWW$T-2!&^qVN7Vipxpws&+ z&&mnG%!LF+39q8Ig{27}4pg^zbYg-y5v@Kf2V;mR&DQAUFw9>8u*Dj7S-0->vrrW% zzT8X6I>!@%03tU$VBP2D<-MlzMlcl*BLxJrua0(l0qj{%v16kDzle+{&>Is2bOTtX zl3H$b`5}{_+8$?5R62A;iH~y_DuLY-1nKI>fXDN48Rez}{ z08XBVQzU$zjC;LO699m~R{Z&MAgSonnLVKD$I@9*+$z*-O(ZMZsUFnBF01DK`7y9RClX#fms;mH!p@C^47|vDZZji%XeA&>XPrg*Qt@@?Js0!F%!Xs;uqS3!G}> z>%n(?kF}IQXa}W=b62=W>pPnpia#LZx}(ul%672`)~#FDJ8VVaWH9~S_)zRyNc;eX z&FS<0G5zm7)U8U}?Q2Sa2qeY`CrA;iW$grr-6A(-!$-;&} zt4!&R>k)n59;qFIS{#j((#H*uvWUZD$DGjAT;Z{E*RJTaG{50&0rQuMzTOA-@81F+ zXh{xipr{zDPRWEoGu~Gog5r&7ao6kUEW=upCmS?ra@Xn-298)lR1sk}v7)rFxU@9N z{>|f_Vu6JYGk^z-i;KIZ&dNu%*Y~B2h09^t#E5c=;;T*pAzCsPCT=}_ch>h0js)Zn zT`9iUg3}hvoY@LWM;ZHK0vG^QE*H9@J01qP7frEF!SNj)wrYo{HB`3}5q$x_Onb$f z)1gN>nX+;m+CdL57*-f*CViyqP&^w{sw>p+ISBh+LRKv* zEj=#M33dQw)YCC|xOz$!#xE~}R20|6)JY zlnqDgZS(A02P8IS;iMiM9o>@>`L}=Lj{HCtgL|R#n-dGH-Q56 z7d>&sON01?`1m^*H%F5)B$7~n|KnHwx5uMbBzzk3g6G;~R{y=^WNTIl@u=h4cN!ht zDwoG=e|j)l5+!NZ92%t#G`dL1FqN`R!CO5`(R7NziRKq(i%SwHrY`)ssMJDBgO4cI zE|Lbt4;&A`#xK2L+jvWhz~55Q;4r^fS5;Ohi?;yu)39;lzz827Wg&=xrp{n;8=|CR z9s|kfELVfs7P|^ugaYhY`L}OIM{xcTU4~1A50!eHtl?eemsRNw`2_nn0j&yuhe{eZ zE8DHKFgbP#geOz6K8FOPOa(L2`O4xaICoUw_-p=?nN`ND?^r^n*Tn0m0MoY+pOsh= zKyeGjMJ+x@sI@leNA5xp1RJWL89UgCviN`VseT_D2}O^AGm5p9pKpP}C}vWW9q+>T z?|0vRz0yI=?q)@I!hf_#DhK+_7qwopdOfdun?_ECV$^q6SlS&LKc0IyW$%`eS zrl`Wg5)o2FS|rHaWln@g1zH9Zy1g%?y+;?p#{@(hO$5_0s!J9S6EC!qcxlCBEM+Uj z56rZ88J>}ShYu$LswMTs#mDE`wjZ`~8?m9+Fye9Yh_d!jQ=&z{+~Zv~I)a7SLUZZ@ z+5|8`7~^1#L_1_l$FKeTWL8CjN!2KltFW%(P}Xe)fdw)}?|iv?aONM#A1*3kX_K5G zDj2GNz9dHHlds4TT>zhOPwhveD85P$*J?M|_QbI)jIH7Up&ZLzeLXdNg&NPR*Gu>R zxVAEGz@LRci73*9b>SPt?#HrE-#vP36QIcCvGtp@&ju)V>DO-$@y(3I$SB3bqo9|^ z_wLc76PW?hvE*4~l@bPc=g^y9d%5v!i=fg00J*3rd9k^xug|$)Ru>^GqWEq*w2r+h zB?QwFQCuZc1M6>o`!F1b8OWvt_J_qWW^BN^FKxi0+V~`tv6qg9*G#2(LFqf*-2&J< z<8X(%JQw@obylP<_BH(p6NJ*Bp0oe@$%dcnk)?X3TwApStQy0eBp~r^hEqg~brBgu zG%9nC5#x}xBEP@4OAWJAfh+r^cUib-%gColv3QGbCntMog3bvFQ>Vgi*kncwr3axC z0tmc|xNcqJFhRs1G1SBq1m*L>G4@|zK$f#a`Fh}uDP|4pA*En_9!)^i=_mTsfjE%I^$Pvp__XD- z{`IKv-=$cMryarVFT%iB$~U+=F@?pKmXw&WMyO?2_RwpB?;uvtDTGLXQ@{+48nb&_ zyW0(Gn&rMFSNKOgTt7gmyCG;mwniRWQ4rZ-oFfW``()f-?ek++6<^3u#iHUr^?MiNi3kfcr4k-gjbyHrS zzU^aV^$|Kk_WJmYhwclXOEZngl;l4nkhT-N=uoO+gcaDV6qpnq4kf)aOS=CV z`QY$?ZOdCMJU)p=9g$mFz;I(x{58WaM0TIWFFQ~_<^cVJ_}*KM0D=GF+$;CO&FA zV9_mf0-J}&>aM=t!2_>Ys}wTdy`&`J1|v%1dyClWBg~ah#oCn6>Nmc=IW5HpASbsN z>TEBC97>JIHi7GKPfibA;4joAQ=-8Gh!g>0t%y>oT5p3*N01;$X3C58wd)9?V=&C9 zE23j!P@_hH0;IU6vh)$&b3|FX&;jvJMBe8GMS^{+5tTz`g?5zffY*`vq>rh`S#(<| zf<(@M&k#*CGEx_lj6@xVYbzBnc`+7tqu58oyq?%di3|k6HJ@JH#*GpFB7T2wA)Ddq zPk;WH6@cUniPuK|(%iE`DM^5l20<@uv0y*}4vrbCT1R#x(&H!+6~X@;SLA-Qr77A5 zUQ)CxT3|3R1`cF5a7Ced;bc0(+VlxxuDtyGCQ?v37wn(qRCK$(22Z>~G!G|qwuNgz zzo`&I?4am82`u0!Dnc#D75#5$_9t)s12yaM=!&M z337xqi-DVmr8y1@0vykDF6~{-z7^2teHy&BjTdBdr6yGs$!^kTP7q?G z+tC_?r*g_%TnOdZV?p+2REZ33eF&Mqyn2$4#wJ9e2P{LLoK(G#wpHV0G~G&Xg*ZK= zXk!`HsCskG&cxR(ts~;@E0_RF1saw(e*MF>omtY40;53taLhc!AA;Ey>44W*hB;L@ z$9i}T=#fOAb^N#h>s@%tH^ZLXYUv5+`rq(DqHl zzD}yV)2M&M`VdGo@t~XRqc4IyT7hxeU3S#+>Rk?<1`lo>?o4HHSNbej#w7vLcKTC; zA<KAZniOr+ehIh<*n+g&ir90+O>u9R)_kjy3>8qk>{ zf*`eg1f^Y1MTi^EtS@M4ut7E5$5gc436CUkTti|PFy4u+O=(L)fovtI#0e%jZ{JR| zfrU54)hh0j=^@j$WQq9~WnK94X3ctfEFHh)6EaDQHf^?77EV7sb2pB~w#`xs1KcKC zSadB3FgiPT;1SoaHe+C5qIo+BTWqQ5%L{M+B7`bdoy>f6cRCJ?SSHXEo4Ao#*Q=|f z56~P-x-=a z8RTAeHq&{vBY%rr>>rCUd`xtLupRJ1a0DWYuq5wDL9D9e*H~I3`diQ}gH?)eKbrDm z`O2-Uz$@h|Vm&P;HD9gOd#EWy{XXWLhpBS(`TP9)7E>kz zlI0gv6Z4W{W9v5yhi2CCZp}Y&XAAQ3Hf`IM?yC^rkSPz;->DE_5h%`>a2F1RJ*#aDDA<)07jRGX%nny>yf4UB&|Hvid+ z9Y35#A&n(3I0Zshx_13S^!NArVTr*4R$~jTSaomh#pi2F)c)*nJ^J>pgvynHK7Ox1 z#LujnlIF3x@rR@P^K92_c}52#qi=P7>SREs2B{Omox+WN^S0ne!9Bh#5IhB-H`$0% zS863|k7fq&UgQP$9{Xwh*8^I*O7>sPbi(2dXYEM!JrH&Oa{G-RL!uA&Rjc@vYVY!X zro77-SH&fj$vv#8L2hCDiWhMmo3=P-LxAGoyO&m{jl(rrYvM@854o$?j8k%e05b6y zsKYRQywyGW^f>{?A3=URGyB3u@TJ2DvanE#Z0V8ttDn1MYj-foig`V;LY_ITAh>r- zrH{X1u9e!d4`<_V)OHkmi>kx%rQTYw2@5e331IONtJvC)H)7G`g-{19>O!>$2|=Dr zH=tTFM~}vUTz%{P>J?BV%a5=AkbaL7BBZ-l5`?PbF-Kj;lCUeWJ^QR)(fjd9<2xtn ze{UEWRJMD%DfgIo|PUz)~6 z>O+I4uqe=d&uJD?Ua(?n_D7ieZU-UwrH8>s(i|Y5qA%o%^snr|^kmfzSsG2h#!@f? z*O%DwS$(4MU{P#=6>N@Dt5(ut0i}AC`D%j~8*@rvF&wNE9$+tF%Si^R)G62`q@f1H zRQ%I^C`}t9^XFcxGFKei&DM5{&hCsp?K8G#O?!XjRG;?W8$^^2?cHSL^6h>fE|r}x z*fOZHBM1di?VNG=9hiC1u?a7Nd+6O^;yf%nk9L*@m_AAj?UwOx%?- z>0VoUM{b+f`HyKDm+FPRT+>ZqN2j85%?%3YZ#k2>*4^(mR)`C;@ge$9Pj3MjLgZLW zEuEh)$jAU2bIQJM6Xm{{-$FPx^OF2~KAb+$hJ}P~X~sy&u_?k>k^Bs#H<;(cz$bj% zi$9ko&|QjO)eHeje27@-_aT7PZ0IoekwbG<4ikyyGCDBS!LtN19N*g31vtUcj-1nX z{xxsc?_W&;`6{}VMRgGLg3rilBf`3oi!p47R{|n7S3Cyvbs;IzpehDn26lG{^3q{l zw<8!4OtBKQ1W!cYy{qcbcdfs!r|y@jbKW6&hA9 zpaK>L9-;&I4Cj#?DdY(p5x2?N1>NbUb zkDc(aEARvff)8P~qyiCdzEmULW1$}q2Au@zLQmx_N5accIK%XkOJHu%p#op1a z9nAokVh;lKN%aiQZ5n={gH0;I!oK&I^m)54?zkG(c4?Ao==sgwc?Wx(#+V|*$|4bV z5eKyCFnkKIUm|f_!6`y1vmpd9;>2+UjZ#?KLqKvYBymf7w^CN#))Rb=$3yJIO;mJt z>A`3J{o~>?CC2eiRJqH0vs*Z)WAdCnCO6x|USrM(toZg#3-bi@V~(nTvEO@^66Dk`i zYJ#BqH7UmyIOWup6G`sbhP9x@PRul2hYxS(MPDtvgt?|do$DEs>75ii%t5A9dQ2eW z`-4V-m#W&@?FBc4uUqOpnjm@6fu8gF43S_?Txd-Jl6sh?!H5>D8$s=FnU20J@eO*+ zj}UV!si}b6(%}Q3^C1wAvyp}^f*M#@npeR88{^y#WyFq~le%tcWk+nLP|yY(6;%1L zx~e}HHiz^A|B;diJJK77f@LPAdk_azfVSv#IKw*G-=)E6NHf$6mBrDE1l;g7uIA;W(XsHB+c^3cD@*(YwL!qA@T(XuE!)EOS>BGX2fR^82 zqZ=?3PVX+niXi|_r!mo=W&rs7Sdr_gtbT{A5I-WkDJ_@}DGM>at20tNak0?^x+m`Q z;(3w1!s2gxweER(lUo1WW-}stMb6?3GSNw(9K@*Q)2h$x-&tyie1f`!{0AQy%_U-q z+6lj?3TnYtV0H>^Ol94tW@5>fycivAj~!DJE0RI7cBulIOb{D5;?tvv(!eFoD`*8_ zHXcN}xj{kc@o+@;pQ&!=H*4=YSuUlG5v0vAD+;iAwqWht`ZLqg7sI9_t=v1mu94rMe!7vEf&_YIv!#cME>@692ag%{p?%g`mwF0FZI)j__1D zi3vYt%^i^Sqxi!%*zT!Uwi$;m$hp$s)ZFd!a*De3ZlU|)_UA+A7Y*Oqe~!kJvon1^ z^j%zoi>A%2R}crBj>2}Pj$Grx;w6KY4}@ak+Z5UdZMTs9$VpNDivfMo+(5^a4+>?c zX)^;n>~=rNK2Tn?c5s)>io-h(UaT0{y1%7Xu7C0zm-W?KO*izv8#Yp)cmBB9>AJ_; zPna~x5;{^mKq+vz(vTxZ_0Z#W7rt8$0R{`N8lJm(IVc-JY#yFkxtZOc6}Oy^%r5UR zYlr?-rNz_xnLgT7wK;3vrh1<@s&^RfdoRqU(6?g$&eB;52Cl0&dFTx&%=xysrhszj z(&t0K)ce9mg=M+=5xt~Y%Ql$wz{@U!viOD~~iu~GH)HavKlZ!6pD{K4oT=sFT&}uya=v}OLBDgAX13j{^=GzyQc_U0x0iPM ziMAQ@p31n_lvelQ(}{c=ws|XFIJ>xc+9|C0d^xuLAF2=k6P4?;^WdXljvwTp2meIK z;%(D={47OGG!X?kIc4P71857-)Tqh)-WzqAb6^e=*B+gnH~8F3gp^lcqa-LAXc&HZ zVn92dZdwlYD8|F`f$(ZwIZ{q?t3x>LmJ$QxK#~-86E>>Y*DD`kzm*0?*Ce>nyRhK* z;g4z#o&$p7RuLPf_*|KpQKLsY6ZRyp1>u#DW5Jjm4lg^7%pq`)#tZ|b5d%)l;6XUS zYZ2-wSex^R%;)~}C}z1;kDyK#KQ;Vn3B0%_Ejk9c*3AAn0C)+*Q9O*@+y~T%l7oFR z5qFm}ERVQTp`WCjL4zrMsHY-4o;WADMtL`qEUQwwt*ArP6*d89i|)3wE231H%JB`- zXe9?eHEY#s9Lf}GekC2u`6v`Y;2v6@cSsE<1|T>s4Rjk4Vl*MLLVD=%2nrL11ud7& zBXCWedh*A_XfdwKA4~T$T~vbLq4oZ5)_$O`t1k#H0+b(zudt@b)euV@wh}ow2Qv^z z6%gKx0vO6yxL`ta-ZRb~&|;Jzq%^*N%c_1UZMMY!JD)@~M+%UpSkbmAA66aXIedtd zcL|9?t>T8s0qzP2`zN?-UX*H>9%&ARp7#++jO}%$h8OZ~ zj)@*n3(4yw_25MTO_UMdFINr&UfdGR!3imf1Cr!WE^w0cAmSL$^@PI)+y!w&g0$^J z&$@@O=GhYr(YY9jl_$JWdk9;1q+c0{pR>*uG9=zHz*D?HRxCCjIQ}sxYD2Mzbi|_3 zwM&;efZ*XDBSue{&`@~nzW_kyzbPo>Lmy-1m$RT`tpksT;3^8DL|6eW%a~n-IAQO1 z{4r}2ezZTI9#M3wj&uQ3it&_8CyrqD*>P}-oLnNmG7bfyVN0qZhJX_?Dgc;c+>DbH zdSFKfdL{_{qV7t-5$f~ZAL*tlQ9}<)lkPhu)?%sU_7{R;7F*b4U&Hh0gm6+g}wiFn}E7NWN zr`SK&Cm3f2i)+kw3@yPbuH`i)E>TtIc@I6}wRrZrbMP!)jwIGu0=>pgv|wM&5NJq2 z^sEbd2?i)?7IjeuSS>uFd=+fk?O;VwBL^!1)}=4xr`JZ%8%m;Xm=S8gvn7<`5_ct@ zB5D3)H{%uC6-=k(6UzyEK6ddHvA;_5C%pmGWlZS>OrY#Ceyc{00r}bhAyo(b_mX%e zq#j`#N_n#l%@&dh+K*V{4NsxTF_dy@2;LXQ7|E^}eV~ZLpjP0wMD_R4vTlNKR{&zP z;An|Hb1!d$ctTqHofdI1EYT-;i-NU_&`W}Uv672FEeKXQ!Y1ldtfh3Lk1oM?Rz?g_j%>f}h?Og$}agPZ)hJmR z%rWnNRm68nLOHQZI?oAW((3t>DN&nz_z#dfhR8f2s(NB(G$J;Y5B%X4&YsGFG;-R* z6)9gJPmJc0ONN4bI}#$Iq9CnkEak4`%eF~7$MsZd%jqDK#l`zV|6;5zTEeWz@uoEJ z%2|=rIK{7n1E@IeTv2wv{h1n_|GR<-Y>UZ{gNYe-&otK2dCnT6z$3QOsv)tHd)XyQDe1An* zWc4H)>4KtRtK*0@`1bYW$Cw7kvNURTjLcnbRU3y%BuNXp%-+4Y!ugEyMPc~kQMUcP z!ZZ3DeA9e6&GhFAw$}U+OPc-XMWUtNT|k#&2c>ls@ZoH&T#t=|I>i*9sDv=UWemvy z=Rm3IIea9k8~+_Vm7EP%5HND+)Y-GS$2k9!=g-Ss^sH8h|JzZLV{k+8yYUs){~*8p zvtajMzj?X%mi_alB8$Rd zXSCxZ_5REbK?q5DRzD>sebl4-FCDTHOuQb1YJ8tppX8U@SX9Lmcjg@4x1qFBX`1!w zPO6uG8(8V0-e=+LKimTp&yGI5@5@}hJyr!5SL)S^)Pu4TqYZuOkEBj#dSx8?|9IDn zysK~OEamFpwHjxuIWjiXu*-YnjzMedd@wT$`?}I*?xyV-Z%SWW8&I{@vDLaRi!c2(WJ!fB(K!^tNWWRHubISTZQC+Xc>rsNWo3 zpju=*Jm`j+Tkc%f@`qbOtoG}_8(z_3Ft%x=wGc!}Y3mhjN&Gx=XdM`f!qm7gt|;MMl7>FA|HyHR%?>SR$RTs5MW}I5bkzX&cmV!K}wX^j%yXX{`t2^z|o7Zuo@lu3LKqg zdikW|;MVcy4b!h?YFr8Lp~{@T#zpUGb*#&93Urm(x`NB|taWqIWB-|jbZ_PIN5_|*d%{-e|b z1Co!gipxk>fXdbW{Md*Tl=G0GA%pwqtQ$tZJgzn|Q;9u@epi9_5tStgB0i+ANFL!s zWhaa>W;OU*VptsNm@nvx=d!Hv7bx8=^&hQ#^HqHV#epIBPv2-~Hn5Lz(&E`Zslm7kWabAkhzbugWJ7jM-ge?HBR14rfA80Ek5&J)>||%BuVxz6@QZ(C!<}{KKE3YuwDXK1 zU&?eDDX#3)sD_*|OgI9Z`}uvFAsNz_Ae zWmz9_c3)yc06IPM?49Wx)NU&c&*CA1@%n_}j)D#nO-@=851^dNPpD#KDud_bxz#X$ z4Zsp|o|ClWy?w&xOrVF2L#@(K*mQ9Xr>ICT1@+5uII+#{?#*e-Kn6)gYxq|7F&M=M zB9;#d(1$x^M-`xe7jpbhHcsDQfEn+UzW7I=k`7k7_@>MRiJ4D*>HP#oPF*x{ z6JZy@OEAPv3hjsNMRPY-t_LcFljfsWJkxI1BuE9!G*LN!oRJT!FfEqU=7B=VoE8pn=kl6ZOyBZU6`NoTQ1<7#-AL6h4X4hyxH0?IC3@)@yYW?e3C;uX}6RQ=a`GN zT^1Y^3@@I(@(1}Noq&j5oHq6#)I?W$P8b)&O!z8t&77MqLk&lKZu#RiPIYR6Qs*n! z2Vt;8#Um9m4Y7P4MDymOSRdk97vI=F0Y^(t2E}*7E&X5dVExZv=l@_Ft=Xls*`>0B zE?*vi$REVuD?#O4{-2Qk)&g;gO`oje4 z&2c;@Ic(P5l;dkt3@g6A4VB&Jf2LTsMuON(t+!z9`+@Rd1fLhP0Kw+Rp@=BMcgKPC z@I_K8UgS(vG#(+V2GCzhMLdGx;sL0li*mNAT*SL7J5UZg#P-mlyTL*lcPihSRGUHF zuq&h!0#qxXGJ=E=#L;HytDen=8KKsiHuGtD4SA?^2NG0{;iPHdk3M9QXsos2v~{3p%Ep& zJ#)aZg3!!K*Ll(kAgaqLxLj^Ba;w0U;x$-`IIC&*Y$5>R0Ly`XX<3;ylZE}WXdYAb zlW&xo89(vJIRS~KChSmVr{a1(uy{N&(;GrZUA>#O^6XiR5K&E_5;Jtp!Vbe8Od z$e4d3TqYt31c7szNq{FAINwU+AH`XtnUXhYx9@>=1>vvCG1COtrtR8&bF&^cwvx{~ zJ0_oN7FNG{^~{zrE>h zcx`WzmE)!4?(-ZEC$92&`e3q`RoS;SHy&{qqgyotCs$mu{=91Hv1LNJ4z!Go}D*)r!FZ9{5HTk8}2Uu$SnyNQ$+^D_Y z_gu$X3-3C|4$t(Qd-i~$Ytg3gs;_S^Exf&v1I&haVf%+`y>;vNn0%nu2U;<_UAPt z;GLV)+Uw1y(*0id|Nr;@3nReH*RtQZuC)3?a)#lj!kB;#@f#j)H*mE6^I7TBx|d4y zX7#=QB%`!s9LwAS9}66y4Ihwj?CH~|9Mj(0-`_vv$>O1@EVf!hHgt45=UJxn$;E14 zo#QPkGP63webgy3uFBoi+VV-v{0htNoYc2yz@yB}BOv&|vuFFxc)WDb3JUcBZFjF+ zwJLDt=>m&hHCOuJd`wp>bp&_hd?G-^UAmI z2tdf=ax?v)l< zbgA&0ANta6^^HSa^wd^Ve>CwqvU{GUrt5&# zho5*3cPo5WqSDIWvv~XQ)T)x(E|sAR5|2cxBz*jG#6N9j-+NJhZilKLUGHRlcxHmu zb(4f^kuII<$L_I+?>nncyh_#Gc_qD9OioDHWL|OFy1v7+pbq*dD>aBcD&=dy#U%ctz4cN+KiX+UWEX z2UMb$7Zds=cq7v1Kb>cn#Gw)^FcK85`?%J`_G*s1fka^)7?(n{b=Nna*Yvyg>KKhp z(vF(A(ugIYJ}LeC7`Il3D}s!jbNo^s?W-(!vD0YozSC8)e@47FNl7eqLekYABmcJrWAW?li67N~`XdqP327&d(PC48eU zIgL!>C}(www;NgvlilLe{mVO*q|;qmR6IHNr83yW&#$!5F@LmTN49$->= zzjt`$#-Y9`QF{;~RCPu=16Lv$-&+xIh8?`>4|)~-)tb$Vrr_V?U{ZR^LD z7P2yzt#x-;RTgo$*Vq52wrh=Pvy8(0Fz^Gz5{;QK7)AzI*(kOMbmKB*Qf`AtWz7nM zB`als6KT13Qgw0049dnzq1+l*SDj#+!8$Crx*#j%RtZB!q~M?zCKN*p%&ukld|v+h z$EN+$d}-hBZO?h1bIx;~<8;m#4DBmbdj8^dG6Vw99h4+rs9dS@2FnAa5bngWCC3yB z9bt^n{`KzXy}abp=Z&D{kE1?=9GVpLDRbYNVjQ}K5`{wX{?bqknA&3~ICoSJcA%OV z?(cl41t~^ciz;B>Ee|)hvpz>Fa`?nrY@O$5oF_xqL}KHB!%sqqC<#~Ar5T&eKeB&Q zHIP!wDoeLLKi?q85ed3VK8&6r)WYo$V=-b?Y1sS5bN97c9=M4-E@Ap|m^~;B!QdgL z!!Cttb4wA$bX$9H9IOt6QsTJ-pcO(*kJ3)K$FP%!Tlg$<=>z++-phm)I4rg4zLT4^ z{*sByd)pZsj<{V~W;<_+1}$Z}FdxCAx1Zl+)6mwfm*ZqRuyfntA}Eu$31;_ z@f*T@A-ha0=MB`*DuJo$qJaj-2a@h-nYg(Ye$fY^_n#H|VPrFXJ zF=b@iwys>NGR+RFx6f!=NPZUriv(*-n@VG7y0$5!b!Z;iW?VagcAoX7otih&K(*J^ z@32Q2=4qK*J3AbtEF3?59xFo2TnO^BI^pfypWquXFa$2PtX z=rxpQ$z|2p*tECSl(CV-ixCuj{lad%+T0^(Jwo;y6`8N;T=(`%_3e?_SLZhRUv+v3 zExP^gc5S_N?7-&g6A$i=q@=b|E!i2MbGtU-$G-WinY6SXUGjC%-L> zXa#fTcmkcyLyLul-3hb)^*L5q3G?9K<7L7@=eXv-^nJN~w6uc5k10MA79uE}UCuVd zkhKiu+|2B3BcM7mesPl=YUTr+{6eAdU!d^!hxPaIa}*mLO|N&(twC+S9J8eSo_+K` zA~)PTcK3(W2qc97W^mNFQBTXJ6AQw9uwfrdx~9*61yvj>hOYv6xJ{hE(uo0|3^a0G zMHJwUH#s*DmF0ssVzSsS`MX|01GOh{?V-Aa0MIKhCX+}&=@RJGpwmJOB19etg}5NB z{Umrv;3yGc3UYfa7AvE;pdjhHQ{y04fL^CJ!qbewje=Ic0OEC|)oLYH#V~*{ ($(SCHEDULER_SELECTOR) as any) - .dxScheduler('instance') - .option('dataSource'), { dependencies: { SCHEDULER_SELECTOR } }); - -// tests config -// common -const TEXT_TEST_CASES = { - editor: 'text', - errorMessage: 'appointment\'s text incorrect', - getValue: async (scheduler: Scheduler) => scheduler.legacyAppointmentPopup.subjectElement().value, - setValue: async (t: TestController, scheduler: Scheduler, value: string) => t - .typeText(scheduler.legacyAppointmentPopup.subjectElement, value, { replace: true }), - setTestValue: '???', - expectedValue: TEST_TITLE, - cases: [ - { - name: 'expression should work', - options: { - dataSource: [{ - textCustom: TEST_TITLE, - startDate: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - }], - textExpr: 'textCustom', - }, - }, - { - name: 'nested expression should work', - options: { - dataSource: [{ - nested: { - textCustom: TEST_TITLE, - }, - startDate: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - }], - textExpr: 'nested.textCustom', - }, - }, - { - name: 'deep nested expression should work', - options: { - dataSource: [{ - nestedA: { - nestedB: { - nestedC: { - textCustom: TEST_TITLE, - }, - }, - }, - startDate: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - }], - textExpr: 'nestedA.nestedB.nestedC.textCustom', - }, - }, - ], -}; -const DESCRIPTION_TEST_CASES = { - editor: 'description', - errorMessage: 'appointment\'s description incorrect', - getValue: async (scheduler: Scheduler) => scheduler - .legacyAppointmentPopup.descriptionElement().value, - setValue: async (t: TestController, scheduler: Scheduler, value: string) => t - .typeText(scheduler.legacyAppointmentPopup.descriptionElement, value, { replace: true }), - setTestValue: '???', - expectedValue: TEST_DESCRIPTION, - cases: [ - { - name: 'expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - startDate: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - descriptionCustom: TEST_DESCRIPTION, - }], - descriptionExpr: 'descriptionCustom', - }, - }, - { - name: 'nested expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - startDate: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - nested: { - descriptionCustom: TEST_DESCRIPTION, - }, - }], - descriptionExpr: 'nested.descriptionCustom', - }, - }, - { - name: 'deep nested expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - startDate: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - nestedA: { - nestedB: { - nestedC: { - descriptionCustom: TEST_DESCRIPTION, - }, - }, - }, - }], - descriptionExpr: 'nestedA.nestedB.nestedC.descriptionCustom', - }, - }, - ], -}; -const START_DATE_TEST_CASES = { - editor: 'startDate', - errorMessage: 'appointment\'s startDate incorrect', - getValue: async (scheduler: Scheduler) => scheduler - .legacyAppointmentPopup.startDateElement().value, - setValue: async (t: TestController, scheduler: Scheduler, value: string) => t - .typeText(scheduler.legacyAppointmentPopup.startDateElement, value, { replace: true }), - setTestValue: '10/10/2020, 01:00 AM', - expectedValue: '12/10/2023, 10:00 AM', - cases: [ - { - name: 'expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - startDateCustom: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - }], - startDateExpr: 'startDateCustom', - }, - }, - { - name: 'nested expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - endDate: '2023-12-10T14:00:00', - nested: { - startDateCustom: '2023-12-10T10:00:00', - }, - }], - startDateExpr: 'nested.startDateCustom', - }, - }, - { - name: 'deep nested expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - endDate: '2023-12-10T14:00:00', - nestedA: { - nestedB: { - nestedC: { - startDateCustom: '2023-12-10T10:00:00', - }, - }, - }, - }], - startDateExpr: 'nestedA.nestedB.nestedC.startDateCustom', - }, - }, - ], -}; -const END_DATE_TEST_CASES = { - editor: 'endDate', - errorMessage: 'appointment\'s endDate incorrect', - getValue: async (scheduler: Scheduler) => scheduler.legacyAppointmentPopup.endDateElement().value, - setValue: async (t: TestController, scheduler: Scheduler, value: string) => t - .typeText(scheduler.legacyAppointmentPopup.endDateElement, value, { replace: true }), - setTestValue: '10/10/2020, 01:00 AM', - expectedValue: '12/10/2023, 2:00 PM', - cases: [ - { - name: 'expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - startDate: '2023-12-10T10:00:00', - endDateCustom: '2023-12-10T14:00:00', - }], - endDateExpr: 'endDateCustom', - }, - }, - { - name: 'nested expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - startDate: '2023-12-10T10:00:00', - nested: { - endDateCustom: '2023-12-10T14:00:00', - }, - }], - endDateExpr: 'nested.endDateCustom', - }, - }, - { - name: 'deep nested expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - startDate: '2023-12-10T10:00:00', - nestedA: { - nestedB: { - nestedC: { - endDateCustom: '2023-12-10T14:00:00', - }, - }, - }, - }], - endDateExpr: 'nestedA.nestedB.nestedC.endDateCustom', - }, - }, - ], -}; -const ALL_DAY_TEST_CASES = { - editor: 'allDay', - errorMessage: 'appointment\'s allDay incorrect', - getValue: async (scheduler: Scheduler) => scheduler - .legacyAppointmentPopup.getAllDaySwitchValue(), - setValue: async (t: TestController, scheduler: Scheduler, value: string) => { - const currentValue = await scheduler.legacyAppointmentPopup.getAllDaySwitchValue(); - - if (currentValue !== value) { - await t.click(scheduler.legacyAppointmentPopup.allDayElement); - } - }, - setTestValue: 'false', - expectedValue: 'true', - cases: [ - { - name: 'expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - startDate: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - allDayCustom: true, - }], - allDayExpr: 'allDayCustom', - }, - }, - { - name: 'nested expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - startDate: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - nested: { - allDayCustom: true, - }, - }], - allDayExpr: 'nested.allDayCustom', - }, - }, - { - name: 'deep nested expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - startDate: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - nestedA: { - nestedB: { - nestedC: { - allDayCustom: true, - }, - }, - }, - }], - allDayExpr: 'nestedA.nestedB.nestedC.allDayCustom', - }, - }, - ], -}; - -// additional -const START_DATE_TIME_ZONE_TEST_CASES = { - editor: 'startDateTimeZone', - errorMessage: 'appointment\'s startDateTimeZone incorrect', - // eslint-disable-next-line @stylistic/max-len - getValue: async (scheduler: Scheduler) => scheduler.legacyAppointmentPopup.startDateTimeZoneElement().value, - expectedValue: '(GMT -01:00) Etc - GMT+1', - cases: [ - { - name: 'expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - startDate: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - startDateTimeZoneCustom: 'Etc/GMT+1', - }], - editing: { - allowTimeZoneEditing: true, - }, - startDateTimeZoneExpr: 'startDateTimeZoneCustom', - }, - }, - { - name: 'nested expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - startDate: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - nested: { - startDateTimeZoneCustom: 'Etc/GMT+1', - }, - }], - editing: { - allowTimeZoneEditing: true, - }, - startDateTimeZoneExpr: 'nested.startDateTimeZoneCustom', - }, - }, - { - name: 'deep nested expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - startDate: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - nestedA: { - nestedB: { - nestedC: { - startDateTimeZoneCustom: 'Etc/GMT+1', - }, - }, - }, - }], - editing: { - allowTimeZoneEditing: true, - }, - startDateTimeZoneExpr: 'nestedA.nestedB.nestedC.startDateTimeZoneCustom', - }, - }, - ], -}; -const END_DATE_TIME_ZONE_TEST_CASES = { - editor: 'endDateTimeZone', - errorMessage: 'appointment\'s endDateTimeZone incorrect', - getValue: async (scheduler: Scheduler) => scheduler - .legacyAppointmentPopup.endDateTimeZoneElement().value, - expectedValue: '(GMT -02:00) Etc - GMT+2', - cases: [ - { - name: 'expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - startDate: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - endDateTimeZoneCustom: 'Etc/GMT+2', - }], - editing: { - allowTimeZoneEditing: true, - }, - endDateTimeZoneExpr: 'endDateTimeZoneCustom', - }, - }, - { - name: 'nested expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - startDate: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - nested: { - endDateTimeZoneCustom: 'Etc/GMT+2', - }, - }], - editing: { - allowTimeZoneEditing: true, - }, - endDateTimeZoneExpr: 'nested.endDateTimeZoneCustom', - }, - }, - { - name: 'deep nested expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - startDate: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - nestedA: { - nestedB: { - nestedC: { - endDateTimeZoneCustom: 'Etc/GMT+2', - }, - }, - }, - }], - editing: { - allowTimeZoneEditing: true, - }, - endDateTimeZoneExpr: 'nestedA.nestedB.nestedC.endDateTimeZoneCustom', - }, - }, - ], -}; -const RECURRENCE_RULE_TEST_CASES = { - editor: 'recurrenceRule', - errorMessage: 'appointment\'s recurrenceRule incorrect', - getValue: async (scheduler: Scheduler) => scheduler - .legacyAppointmentPopup.getRecurrenceRuleSwitchValue(), - expectedValue: 'true', - cases: [ - { - name: 'expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - startDate: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - recurrenceRuleCustom: 'FREQ=DAILY', - }], - recurrenceEditMode: 'series', - recurrenceRuleExpr: 'recurrenceRuleCustom', - }, - }, - { - name: 'nested expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - startDate: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - nested: { - recurrenceRuleCustom: 'FREQ=DAILY', - }, - }], - recurrenceEditMode: 'series', - recurrenceRuleExpr: 'nested.recurrenceRuleCustom', - }, - }, - { - name: 'deep nested expression should work', - options: { - dataSource: [{ - text: TEST_TITLE, - startDate: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - nestedA: { - nestedB: { - nestedC: { - recurrenceRuleCustom: 'FREQ=DAILY', - }, - }, - }, - }], - recurrenceEditMode: 'series', - recurrenceRuleExpr: 'nestedA.nestedB.nestedC.recurrenceRuleCustom', - }, - }, - ], -}; - -[ - TEXT_TEST_CASES, - DESCRIPTION_TEST_CASES, - START_DATE_TEST_CASES, - END_DATE_TEST_CASES, - ALL_DAY_TEST_CASES, - START_DATE_TIME_ZONE_TEST_CASES, - END_DATE_TIME_ZONE_TEST_CASES, - RECURRENCE_RULE_TEST_CASES, -].forEach(({ - editor, - errorMessage, - getValue, - expectedValue, - cases, -}) => { - cases.forEach(({ - name, - options, - }) => { - test(`${editor}: ${name}`, async (t) => { - const scheduler = new Scheduler(SCHEDULER_SELECTOR); - const appointment = scheduler.getAppointment(TEST_TITLE); - - await t.expect(appointment).ok(`appointment with title: ${TEST_TITLE} not found.`); - - await t.doubleClick(appointment.element); - - const value = await getValue(scheduler); - - await t.expect(value).eql(expectedValue, errorMessage); - }).before(async () => { - await createWidget('dxScheduler', { - currentDate: '2023-12-10', - cellDuration: 240, - ...options, - editing: { - legacyForm: true, - ...options.editing, - }, - }); - }); - }); -}); - -// test cases -[ - TEXT_TEST_CASES, - DESCRIPTION_TEST_CASES, - START_DATE_TEST_CASES, - END_DATE_TEST_CASES, - ALL_DAY_TEST_CASES, -].forEach(({ - editor, - setValue, - setTestValue, - cases, -}) => { - cases.forEach(({ - name, - options, - }) => { - test(`${editor}: ${name} should not mutate DataSource data directly`, async (t) => { - const scheduler = new Scheduler(SCHEDULER_SELECTOR); - const appointment = scheduler.getAppointment(TEST_TITLE); - const expectedDataSource = options.dataSource; - - await t.expect(appointment).ok(`appointment with title: ${TEST_TITLE} not found.`); - - await t.doubleClick(appointment.element); - await setValue(t, scheduler, setTestValue); - await t.click(scheduler.legacyAppointmentPopup.cancelButton); - - const dataSource = await getDataSourceValues(); - - await t.expect(dataSource).eql(expectedDataSource); - }).before(async () => { - await createWidget('dxScheduler', { - currentDate: '2023-12-10', - cellDuration: 240, - ...options, - editing: { - legacyForm: true, - ...options.editing, - }, - }); - }); - }); -}); - -test( - 'Appointment popup should has correct width when the nested "recurrenceRuleExpr" option is set', - async (t) => { - const { takeScreenshot, compareResults } = createScreenshotsComparer(t); - const scheduler = new Scheduler(SCHEDULER_SELECTOR); - const appointment = scheduler.getAppointment(TEST_TITLE); - - await t.doubleClick(appointment.element); - await t.expect(scheduler.legacyAppointmentPopup.form.exists).ok(); - - await testScreenshot( - t, - takeScreenshot, - 'form_recurrence-editor-first-opening_nested-expr.png', - { element: scheduler.legacyAppointmentPopup.content }, - ); - - await t.expect(compareResults.isValid()) - .ok(compareResults.errorMessages()); - }, -).before(async () => { - await createWidget('dxScheduler', { - dataSource: [ - { - startDate: '2023-12-10T10:00:00', - endDate: '2023-12-10T14:00:00', - text: TEST_TITLE, - nestedA: { - nestedB: { - nestedC: { - recurrenceRuleCustom: 'FREQ=DAILY', - }, - }, - }, - }, - ], - currentDate: '2023-12-10', - cellDuration: 240, - recurrenceEditMode: 'series', - recurrenceRuleExpr: 'nestedA.nestedB.nestedC.recurrenceRuleCustom', - editing: { - legacyForm: true, - }, - }); -}); diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/recurrenceEditor.ts b/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/recurrenceEditor.ts deleted file mode 100644 index d3c0accf5b7a..000000000000 --- a/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/recurrenceEditor.ts +++ /dev/null @@ -1,148 +0,0 @@ -import Scheduler from 'devextreme-testcafe-models/scheduler'; -import { createScreenshotsComparer } from 'devextreme-screenshot-comparer'; -import LegacyAppointmentPopup from 'devextreme-testcafe-models/scheduler/appointment/legacyPopup'; -import { createWidget } from '../../../../helpers/createWidget'; -import url from '../../../../helpers/getPageUrl'; -import { testScreenshot } from '../../../../helpers/themeUtils'; - -fixture.disablePageReloads`Appointment Form: recurrence editor` - .page(url(__dirname, '../../../container.html')); - -const SCHEDULER_SELECTOR = '#container'; - -const fillRecurrenceForm = async ( - t: TestController, - popup: LegacyAppointmentPopup, -): Promise => { - await t.click(popup.recurrenceTypeElement); - await t.click(popup.getRecurrenceTypeSelectItem(2)); - await t.typeText(popup.repeatEveryElement, '10', { replace: true }); - await t.click(popup.getEndRepeatRadioButton(1)); - await t.typeText(popup.endRepeatDateElement, '01/01/2024', { replace: true }); -}; - -test('Should not reset the recurrence editor value after the repeat toggling', async (t) => { - const { takeScreenshot, compareResults } = createScreenshotsComparer(t); - const scheduler = new Scheduler(SCHEDULER_SELECTOR); - const popup = scheduler.legacyAppointmentPopup; - const cell = scheduler.getDateTableCell(0, 0); - - await t.doubleClick(cell); - await t.click(popup.recurrenceElement); - await fillRecurrenceForm(t, popup); - await t.click(popup.recurrenceElement); - await t.click(popup.recurrenceElement); - - await testScreenshot(t, takeScreenshot, 'recurrence-editor_after-hide.png', { element: popup.content }); - - await t.expect(compareResults.isValid()) - .ok(compareResults.errorMessages()); -}).before(async () => { - await createWidget('dxScheduler', { - dataSource: [], - views: ['week'], - currentView: 'week', - currentDate: '2024-01-01T10:00:00', - editing: { - legacyForm: true, - }, - }); -}); - -test('Should reset the recurrence editor value after the popup reopening', async (t) => { - const { takeScreenshot, compareResults } = createScreenshotsComparer(t); - const scheduler = new Scheduler(SCHEDULER_SELECTOR); - const popup = scheduler.legacyAppointmentPopup; - const cell = scheduler.getDateTableCell(0, 0); - - await t.doubleClick(cell); - await t.click(popup.recurrenceElement); - await fillRecurrenceForm(t, popup); - await t.click(popup.cancelButton); - await t.doubleClick(cell); - await t.click(popup.recurrenceElement); - - await testScreenshot(t, takeScreenshot, 'recurrence-editor_after-popup-reopen.png', { element: popup.content }); - - await t.expect(compareResults.isValid()) - .ok(compareResults.errorMessages()); -}).before(async () => { - await createWidget('dxScheduler', { - dataSource: [], - views: ['week'], - currentView: 'week', - currentDate: '2024-01-01T10:00:00', - editing: { - legacyForm: true, - }, - }); -}); - -test('Should correctly create usual appointment after repeat toggling', async (t) => { - const scheduler = new Scheduler(SCHEDULER_SELECTOR); - const popup = scheduler.legacyAppointmentPopup; - const cell = scheduler.getDateTableCell(0, 0); - - await t.doubleClick(cell); - await t.click(popup.recurrenceElement); - await t.click(popup.recurrenceElement); - await t.click(popup.doneButton); - - await t.expect(scheduler.getAppointmentCount()).eql(1); -}).before(async () => { - await createWidget('dxScheduler', { - dataSource: [], - views: ['week'], - currentView: 'week', - currentDate: '2024-01-01T10:00:00', - editing: { - legacyForm: true, - }, - }); -}); - -test('Should correctly create recurrent appointment', async (t) => { - const scheduler = new Scheduler(SCHEDULER_SELECTOR); - const popup = scheduler.legacyAppointmentPopup; - const cell = scheduler.getDateTableCell(0, 0); - - await t.doubleClick(cell); - await t.click(popup.recurrenceElement); - await t.click(popup.doneButton); - - await t.expect(scheduler.getAppointmentCount()).eql(7); -}).before(async () => { - await createWidget('dxScheduler', { - dataSource: [], - views: ['week'], - currentView: 'week', - currentDate: '2024-01-01T10:00:00', - editing: { - legacyForm: true, - }, - }); -}); - -test('Should correctly create recurrent appointment after repeat toggle', async (t) => { - const scheduler = new Scheduler(SCHEDULER_SELECTOR); - const popup = scheduler.legacyAppointmentPopup; - const cell = scheduler.getDateTableCell(0, 0); - - await t.doubleClick(cell); - await t.click(popup.recurrenceElement); - await t.click(popup.recurrenceElement); - await t.click(popup.recurrenceElement); - await t.click(popup.doneButton); - - await t.expect(scheduler.getAppointmentCount()).eql(7); -}).before(async () => { - await createWidget('dxScheduler', { - dataSource: [], - views: ['week'], - currentView: 'week', - currentDate: '2024-01-01T10:00:00', - editing: { - legacyForm: true, - }, - }); -}); diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/showAppointmentPopup.ts b/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/showAppointmentPopup.ts deleted file mode 100644 index 68fb3c8cd2b5..000000000000 --- a/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/showAppointmentPopup.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { ClientFunction } from 'testcafe'; -import Scheduler from 'devextreme-testcafe-models/scheduler'; -import { createWidget } from '../../../../helpers/createWidget'; -import url from '../../../../helpers/getPageUrl'; - -fixture.disablePageReloads`Appointment Form` - .page(url(__dirname, '../../../container.html')); - -const showAppointmentPopup = ClientFunction(() => { - const instance = ($('#container') as any).dxScheduler('instance'); - instance.showAppointmentPopup(); -}); - -test('Invoke showAppointmentPopup method shouldn\'t raise error if value of currentDate property as a string', async (t) => { - const scheduler = new Scheduler('#container'); - - await showAppointmentPopup(); - - await t.expect(scheduler.legacyAppointmentPopup.startDateElement.value) - .eql('3/25/2021, 12:00 AM'); - - await t.expect(scheduler.legacyAppointmentPopup.endDateElement.value) - .eql('3/25/2021, 12:30 AM'); -}).before(async () => createWidget('dxScheduler', { - dataSource: [], - views: ['week'], - currentView: 'week', - currentDate: new Date(2021, 2, 25).toISOString(), - height: 600, - editing: { - legacyForm: true, - }, -})); - -test('Show appointment popup if deffereRendering is false (T1069753)', async (t) => { - const scheduler = new Scheduler('#container'); - const appointment = scheduler.getAppointmentByIndex(0); - - await t - .doubleClick(appointment.element) - .expect(scheduler.legacyAppointmentPopup.isVisible) - .ok(); -}).before(async () => { - await ClientFunction(() => { - (window as any).DevExpress.ui.dxPopup.defaultOptions({ - options: { - deferRendering: false, - }, - }); - })(); - - await createWidget('dxScheduler', { - dataSource: [{ - text: 'Test', - startDate: new Date(2021, 2, 29, 10), - endDate: new Date(2021, 2, 29, 11), - }], - views: ['day'], - currentView: 'day', - currentDate: new Date(2021, 2, 29), - startDayHour: 9, - endDayHour: 12, - width: 400, - editing: { - legacyForm: true, - }, - }); -}); diff --git a/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/timezoneEditors.ts b/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/timezoneEditors.ts deleted file mode 100644 index e7c1b719b870..000000000000 --- a/e2e/testcafe-devextreme/tests/scheduler/common/legacyAppointmentForm/timezoneEditors.ts +++ /dev/null @@ -1,79 +0,0 @@ -import Scheduler from 'devextreme-testcafe-models/scheduler'; -import { createWidget } from '../../../../helpers/createWidget'; -import url from '../../../../helpers/getPageUrl'; - -fixture.disablePageReloads`Layout:AppointmentForm:TimezoneEditors(T1080932)` - .page(url(__dirname, '../../../container.html')); - -const dataSource = [{ - text: 'Watercolor Landscape', - startDate: new Date('2020-06-01T17:30:00.000Z'), - endDate: new Date('2020-06-01T19:00:00.000Z'), - recurrenceRule: 'FREQ=WEEKLY', - startDateTimeZone: 'Etc/GMT+10', - endDateTimeZone: 'US/Alaska', -}]; - -const inputClassName = '.dx-texteditor-input'; -const startDateTimeZoneValue = '(GMT -10:00) Etc - GMT+10'; -const endDateTimeZoneValue = '(GMT -08:00) US - Alaska'; - -test.skip('TimeZone editors should be have data after hide forms data(T1080932)', async (t) => { - const scheduler = new Scheduler('#container'); - const { legacyAppointmentPopup: appointmentPopup } = scheduler; - - await t.doubleClick(scheduler.getAppointmentByIndex(0).element); - - const startDateTimeZone = appointmentPopup.wrapper.find(inputClassName).nth(1); - await t.expect(startDateTimeZone.value).eql(startDateTimeZoneValue); - - const endDateTimeZone = appointmentPopup.wrapper.find(inputClassName).nth(3); - await t.expect(endDateTimeZone.value).eql(endDateTimeZoneValue); -}).before(async () => { - await createWidget('dxScheduler', { - dataSource, - onAppointmentFormOpening: (e) => { - e.form.itemOption('mainGroup.text', 'visible', false); - }, - editing: { - allowTimeZoneEditing: true, - legacyForm: true, - }, - recurrenceEditMode: 'series', - views: ['month'], - currentView: 'month', - currentDate: new Date(2020, 6, 25), - startDayHour: 9, - height: 600, - }); -}); - -test.skip('TimeZone editors should be have data in default case(T1080932)', async (t) => { - const scheduler = new Scheduler('#container'); - - await t.doubleClick(scheduler.getAppointmentByIndex(0).element); - - const { legacyAppointmentPopup: appointmentPopup } = scheduler; - - await t.doubleClick(scheduler.getAppointmentByIndex(0).element); - - const startDateTimeZone = appointmentPopup.wrapper.find(inputClassName).nth(2); - await t.expect(startDateTimeZone.value).eql(startDateTimeZoneValue); - - const endDateTimeZone = appointmentPopup.wrapper.find(inputClassName).nth(4); - await t.expect(endDateTimeZone.value).eql(endDateTimeZoneValue); -}).before(async () => { - await createWidget('dxScheduler', { - dataSource, - editing: { - allowTimeZoneEditing: true, - legacyForm: true, - }, - recurrenceEditMode: 'series', - views: ['month'], - currentView: 'month', - currentDate: new Date(2020, 6, 25), - startDayHour: 9, - height: 600, - }); -}); diff --git a/packages/devextreme/js/__internal/scheduler/__tests__/__mock__/create_appointment_popup.ts b/packages/devextreme/js/__internal/scheduler/__tests__/__mock__/create_appointment_popup.ts index 0ca0948beaee..983cf4ee4762 100644 --- a/packages/devextreme/js/__internal/scheduler/__tests__/__mock__/create_appointment_popup.ts +++ b/packages/devextreme/js/__internal/scheduler/__tests__/__mock__/create_appointment_popup.ts @@ -39,7 +39,6 @@ const DEFAULT_EDITING = { allowDeleting: true, allowResizing: true, allowDragging: true, - legacyForm: false, }; const DEFAULT_APPOINTMENT = { diff --git a/packages/devextreme/js/__internal/scheduler/__tests__/legacy_form.test.ts b/packages/devextreme/js/__internal/scheduler/__tests__/legacy_form.test.ts deleted file mode 100644 index 571226bd7a50..000000000000 --- a/packages/devextreme/js/__internal/scheduler/__tests__/legacy_form.test.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { - beforeEach, describe, expect, it, -} from '@jest/globals'; - -import { createScheduler } from './__mock__/create_scheduler'; -import { setupSchedulerTestEnvironment } from './__mock__/m_mock_scheduler'; - -describe('LegacyForm', () => { - beforeEach(() => { - setupSchedulerTestEnvironment(); - }); - - it('should be false by default', async () => { - const { scheduler } = await createScheduler({ }); - - // @ts-expect-error private option - expect(scheduler.option('editing').legacyForm).toBe(false); - }); - - it('should be true when explicitly set', async () => { - const { scheduler } = await createScheduler({ editing: { legacyForm: true } }); - - // @ts-expect-error private option - expect(scheduler.option('editing').legacyForm).toBe(true); - }); - - it('should be changed by option()', async () => { - const { scheduler } = await createScheduler({}); - - scheduler.option('editing', { legacyForm: true }); - - // @ts-expect-error private option - expect(scheduler.option('editing').legacyForm).toBe(true); - }); -}); diff --git a/packages/devextreme/js/__internal/scheduler/appointment_popup/m_legacy_form.ts b/packages/devextreme/js/__internal/scheduler/appointment_popup/m_legacy_form.ts deleted file mode 100644 index ab4d026edc26..000000000000 --- a/packages/devextreme/js/__internal/scheduler/appointment_popup/m_legacy_form.ts +++ /dev/null @@ -1,477 +0,0 @@ -import '../m_recurrence_editor'; -import '@js/ui/text_area'; -import '@js/ui/tag_box'; -import '@js/ui/switch'; -import '@js/ui/select_box'; - -import messageLocalization from '@js/common/core/localization/message'; -import DataSource from '@js/common/data/data_source'; -import devices from '@js/core/devices'; -import $ from '@js/core/renderer'; -import dateUtils from '@js/core/utils/date'; -import dateSerialization from '@js/core/utils/date_serialization'; -import { extend } from '@js/core/utils/extend'; -import Form from '@js/ui/form'; -import { current, isFluent } from '@js/ui/themes'; - -import timeZoneUtils from '../m_utils_time_zone'; - -const SCREEN_SIZE_OF_SINGLE_COLUMN = 600; - -export const APPOINTMENT_FORM_GROUP_NAMES = { - Main: 'mainGroup', - Recurrence: 'recurrenceGroup', -}; - -// TODO: Remove duplication in the scheduler's popup testing model. -// NOTE: These CSS classes allow access the editors -// from e2e testcafe tests. -const E2E_TEST_CLASSES = { - form: 'e2e-dx-scheduler-form', - textEditor: 'e2e-dx-scheduler-form-text', - descriptionEditor: 'e2e-dx-scheduler-form-description', - startDateEditor: 'e2e-dx-scheduler-form-start-date', - endDateEditor: 'e2e-dx-scheduler-form-end-date', - startDateTimeZoneEditor: 'e2e-dx-scheduler-form-start-date-timezone', - endDateTimeZoneEditor: 'e2e-dx-scheduler-form-end-date-timezone', - allDaySwitch: 'e2e-dx-scheduler-form-all-day-switch', - recurrenceSwitch: 'e2e-dx-scheduler-form-recurrence-switch', -}; - -const createTimeZoneDataSource = () => new DataSource({ - store: timeZoneUtils.getTimeZonesCache(), - paginate: true, - pageSize: 10, -}); - -const getStylingModeFunc = (): string | undefined => (isFluent(current()) ? 'filled' : undefined); - -const getStartDateWithStartHour = (startDate, startDayHour) => new Date(new Date(startDate).setHours(startDayHour)); - -const validateAppointmentFormDate = (editor, value, previousValue) => { - const isCurrentDateCorrect = value === null || Boolean(value); - const isPreviousDateCorrect = previousValue === null || Boolean(previousValue); - if (!isCurrentDateCorrect && isPreviousDateCorrect) { - editor.option('value', previousValue); - } -}; - -const updateRecurrenceItemVisibility = (recurrenceRuleExpr, value, form) => { - form.itemOption(APPOINTMENT_FORM_GROUP_NAMES.Recurrence, 'visible', value); - form.getEditor(recurrenceRuleExpr)?.changeValueByVisibility(value); -}; - -export class AppointmentForm { - scheduler: any; - - form: any; - - // NOTE: flag to prevent double value set during form updating - private isFormUpdating = false; - - constructor(scheduler) { - this.scheduler = scheduler; - this.form = null; - } - - get dxForm() { - return this.form; - } - - set readOnly(value) { - this.form.option('readOnly', value); - const { recurrenceRuleExpr } = this.scheduler.getDataAccessors().expr; - - const recurrenceEditor = this.form.getEditor(recurrenceRuleExpr); - recurrenceEditor?.option('readOnly', value); - } - - get formData() { - return this.form.option('formData'); - } - - set formData(value) { - this.form.option('formData', value); - } - - create(triggerResize, changeSize, formData) { - const { allowTimeZoneEditing } = this.scheduler.getEditingConfig(); - const dataAccessors = this.scheduler.getDataAccessors(); - const { expr } = dataAccessors; - - const isRecurrence = Boolean(dataAccessors.get('recurrenceRule', formData)); - const colSpan = isRecurrence ? 1 : 2; - - const mainItems = [ - ...this.createMainItems(expr, triggerResize, changeSize, allowTimeZoneEditing), - ...this.scheduler.createResourceEditorModel(), - ]; - - changeSize(isRecurrence); - - const items = [ - { - itemType: 'group', - name: APPOINTMENT_FORM_GROUP_NAMES.Main, - colCountByScreen: { - lg: 2, - xs: 1, - }, - colSpan, - items: mainItems, - }, { - itemType: 'group', - name: APPOINTMENT_FORM_GROUP_NAMES.Recurrence, - visible: isRecurrence, - colSpan, - items: this.createRecurrenceEditor(expr), - }, - ]; - - const element = $('